Skip to main content
POST

Authorizations

Authorization
string
header
required

API token authentication using format <api token id>:<api client secret>

Headers

Idempotency-Key
string
required

A unique identifier for the request. Required, because creating the account mints an account number that cannot be reversed. Retries must carry the same key.

Example:

"550e8400-e29b-41d4-a716-446655440000"

Body

application/json

Request body for POST /internal-accounts. Only RULE_BASED accounts can be created today, and they are rejected without a sweepRule — the type and its rule are created together or not at all.

type
enum<string>
required

Must be RULE_BASED. INTERNAL_FIAT, INTERNAL_CRYPTO, and EMBEDDED_WALLET accounts are provisioned automatically when a customer is created or approved, so they cannot be created through this endpoint.

Available options:
INTERNAL_FIAT,
INTERNAL_CRYPTO,
EMBEDDED_WALLET,
RULE_BASED
Example:

"RULE_BASED"

currency
string
required

Currency code the account is denominated in (ISO 4217). Rule-based accounts are currently available in USD only.

Example:

"USD"

customerId
string

The customer the account is created for. Omit it to create a platform-owned account. The account holder must already have a verified account in the same currency, which is where funds land when a sweep cannot be completed. Platform-owned rule-based accounts are not available yet, so omitting this is currently rejected.

Example:

"Customer:019542f5-b3e7-1d02-0000-000000000001"

label
string

Your own name for the account, echoed back on reads. Useful for identifying which payer the account was issued for.

Maximum string length: 255
Example:

"invoice-4417"

sweepRule
Sweep Rule Request · object

The routing rule for the account. Required when type is RULE_BASED, which is the only type this endpoint creates today: a rule-based account with no rule has no meaning, so the two are written together.

Response

The Idempotency-Key was already used to create this account. The account created by the first request is returned unchanged.

id
string
required

The ID of the internal account

Example:

"InternalAccount:12dcbd6-dced-4ec4-b756-3c3a9ea3d123"

type
enum<string>
required

Classification of an internal account.

  • INTERNAL_FIAT: A Grid-managed fiat holding account (for example, the USD holding account used as the source for Payouts flows).
  • INTERNAL_CRYPTO: A Grid-managed crypto holding account denominated in a stablecoin such as USDC.
  • EMBEDDED_WALLET: A self-custodial Embedded Wallet provisioned for the customer. Outbound transfers require a session signature produced by the customer's device — see the Embedded Wallets guide.
  • RULE_BASED: An additional account number for an existing account holder, with a routing rule attached, so incoming payments can be attributed to a specific payer and swept automatically. Created with POST /internal-accounts.
Available options:
INTERNAL_FIAT,
INTERNAL_CRYPTO,
EMBEDDED_WALLET,
RULE_BASED
status
enum<string>
required

Status of a Grid internal account. The status determines whether the account can send or receive payments.

  • PENDING: The account is under review and is being provisioned. The account cannot send or receive payments until provisioning completes.
  • ACTIVE: The account is ready to send and receive payments.
  • CLOSED: The account cannot send or receive payments. A customer can initiate the closing of an internal account, after which the account transitions to this status.
  • FROZEN: The account cannot send or receive payments. Grid may freeze an account in response to compliance or fraud signals; payments are blocked while the account remains frozen.
  • FAILED: The account could not be provisioned. Grid was unable to create the underlying account, so it cannot send or receive payments and requires remediation.
Available options:
PENDING,
ACTIVE,
CLOSED,
FROZEN,
FAILED
Example:

"ACTIVE"

balance
object
required

The balance available to spend, excluding pending and held funds

totalBalance
object
required

The total balance, including pending and held funds

fundingPaymentInstructions
object[]
required

Payment instructions for funding the account

createdAt
string<date-time>
required

Timestamp when the internal account was created

Example:

"2025-10-03T12:30:00Z"

updatedAt
string<date-time>
required

Timestamp when the internal account was last updated

Example:

"2025-10-03T12:30:00Z"

customerId
string

The ID of the customer associated with the internal account. If this field is empty, the internal account belongs to the platform.

Example:

"Customer:019542f5-b3e7-1d02-0000-000000000001"

label
string

The platform-supplied label recorded when the account was created. Null for accounts that carry none.

Maximum string length: 255
Example:

"invoice-4417"

sweepRule
Sweep Rule · object

The routing rule attached to this account. Null for accounts that carry no rule, which is every account other than a RULE_BASED one.

privateEnabled
boolean

Whether wallet privacy is enabled for the Embedded Wallet. Only present for EMBEDDED_WALLET internal accounts.

Example:

true

cardCapabilities
object

Actions supported for a card issued now with this account as its funding source. They can change if the platform's card routing changes and do not describe cards already issued using the account. The funding source a create request supplies selects the issuer and therefore the resulting card's capabilities; read this field from that account. Absent when this account cannot fund a card.