Skip to main content
POST

Authorizations

Authorization
string
header
required

Same flow; ledger:write is required for any mutation.

Body

application/json
id
string
required

Caller-chosen string. Stable; cannot be renamed. Unique within your tenant. Convention: <purpose>:<scope> (e.g. accounts_receivable:acme).

Pattern: ^[a-zA-Z0-9_:.\-]+$
Example:

"accounts_receivable:acme"

name
string
required
Example:

"Acme payable"

type
enum<string>
required
Available options:
asset,
liability,
revenue,
expense,
equity
Example:

"liability"

currency
string
required

ISO 4217 fiat ticker, crypto/token symbol, or any string of your own (POINTS, GIFT_CARD). Pinned per account; cannot be changed. Normalized to uppercase when ticker-shaped.

Example:

"USDC"

overdraft_policy
enum<string>
default:allowed

allowed lets the account go to any balance; none rejects postings that would drive available below -overdraft_limit. Default allowed for backward compatibility.

Available options:
allowed,
none
overdraft_limit
string

Maximum negative-balance allowance, in minor units. Stored as numeric(38, 0). Returned as a JSON string for amounts beyond JavaScript's safe-integer range.

Example:

"0"

fund_classification
enum<string>

Optional funds-segregation grouping. Defaults to neutral when omitted, or inherits the account's template value.

Available options:
client_held,
operator,
neutral
custody_provider
string

Optional custody-system identifier. Paired with custody_external_id: both or neither.

Example:

"fireblocks"

custody_external_id
string

Provider-specific identifier; paired with custody_provider.

Example:

"vault_42"

metadata
object
Example:

Response

Created

object
enum<string>
required

Discriminator naming the shape of this resource (e.g. account, transaction).

Available options:
account
Example:

"account"

id
string
required
Example:

"accounts_receivable:acme"

type
enum<string>
required
Available options:
asset,
liability,
revenue,
expense,
equity
Example:

"liability"

currency
string
required
Example:

"USDC"

name
string
Example:

"Acme payable"

currency_decimals
integer | null

6 for USDC, 8 for BTC, 18 for ETH; null for unknown.

Example:

6

currency_kind
enum<string> | null
Available options:
fiat,
crypto,
stablecoin,
null
Example:

"stablecoin"

unknown_currency
boolean

True if currency isn't in our metadata registry. The ledger still works.

Example:

false

overdraft_policy
enum<string>
Available options:
allowed,
none
Example:

"allowed"

overdraft_limit
string

Numeric string. Always nonneg.

Example:

"0"

account_kind
enum<string>
default:standard

restricted is set by the platform on accounts created via POST /v1/reserves. Customers can also pass it explicitly to model reserves they build by hand.

Available options:
standard,
restricted
counterparty_ref
string | null

Opaque, customer-defined identifier of the counterparty a reserve account is held against. Set automatically by POST /v1/reserves; ignored on non-reserve accounts.

Example:

"acme"

fund_classification
enum<string>
default:neutral

Customer-set grouping for funds segregation reporting. The platform does not interpret this beyond grouping accounts in GET /v1/reports/fund_segregation. Inherited from the account's template when omitted on create.

Available options:
client_held,
operator,
neutral
custody_provider
string | null

Opaque custody-system identifier (e.g. fireblocks, anchorage). Paired with custody_external_id: both set or both null.

Example:

"fireblocks"

custody_external_id
string | null

Provider-specific identifier (vault id, account id, etc.). Paired with custody_provider.

Example:

"vault_42"

metadata
object
created_at
string<date-time>
Example:

"2026-05-14T10:23:45.123456Z"