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