API reference

Base URL https://api.bank-core.org. Every call carries Authorization: Bearer <your key>. Generated from the service itself; the same document is at /openapi.json. Guides are in Docs.

Your key

GET /v1/whoami

The tenant this key belongs to, the key's prefix, label and scopes, and your payout wallets by network. Any valid key; no scope.

Response 200

WhoAmIOut

FieldTypeNotes
tenantWhoAmITenantrequired
keyWhoAmIKeyrequired
payout_walletsmap of stringrequired

GET /v1/limits

Every limit applied to this key: request rates after any tenant ceiling, and the rolling withdrawal limit with what is left of it.

Scope
quotes:read

Response 200

Limits

FieldTypeNotes
requestsRequestLimitsrequired
moneyMoneyLimitsrequired

GET /v1/fees

Your own fee schedule, ordered the way it is applied. percent is a percentage: 2 means 2%. Indicative; a quote is the price charged.

Scope
quotes:read

Response 200

Fees

FieldTypeNotes
feesFeeSchedule[]required

GET /v1/currencies

Per currency: whether we deal in it, whether the custodian lists it now, whether we can price it, and whether you have a verified address for it. custodian_lists is null, not false, when the custodian could not be reached.

Scope
quotes:read

Response 200

Currencies

FieldTypeNotes
currenciesCurrencyOut[]required
custodian_readbooleanrequired
as_ofstring (date-time)required

GET /v1/operations/by-key/{key}

What one of your own idempotency keys produced. 404 no_operation_for_key means no committed record under the key, which a request still in flight also reads as.

Parameters

NameInTypeNotes
keypathstringrequired

Response 200

OperationByKey

FieldTypeNotes
keystringrequired
endpointstringrequired
claimed_atstring (date-time)required
completed_atstring (date-time) | nulloptional
statestringrequired
response_statusinteger | nulloptional
operationobject | nulloptional

Deposits

POST /v1/deposit-addresses

Register up to 500 addresses you control. Each item is registered, existing or refused on its own; read every status.

Scope
deposits:write
Idempotency-Key
required: Idempotency

Parameters

NameInTypeNotes
Idempotency-Keyheaderstring | nulloptional

Request body

RegisterAddresses

FieldTypeNotes
addressesAddressIn[]required

Response 200

RegistrationPage

FieldTypeNotes
resultsRegistrationResult[]required

GET /v1/deposit-addresses

Your registered addresses, filtered by network, reference or address. Page with after until next_after is null.

Scope
deposits:read

Parameters

NameInTypeNotes
networkquerystring | nulloptional
referencequerystring | nulloptional
addressquerystring | nulloptional
include_retiredquerybooleanoptional
afterquerystring (uuid) | nulloptional
limitqueryintegeroptional

Response 200

DepositAddressPage

FieldTypeNotes
addressesDepositAddressOut[]required
next_afterstring (uuid) | nulloptional

POST /v1/deposit-addresses/derive

Register the next count (1–100) addresses derived from your live xpub on network, all under one reference. All or none.

Scope
deposits:write
Idempotency-Key
required: Idempotency

Parameters

NameInTypeNotes
Idempotency-Keyheaderstring | nulloptional

Request body

DeriveIn

FieldTypeNotes
networkstringrequired
referencestringrequired
countintegerrequired

Response 200

DerivedOut

FieldTypeNotes
xpub_idstring (uuid)required
networkstringrequired
next_indexintegerrequired
addressesDepositAddressOut[]required

POST /v1/deposit-addresses/issue

Issue addresses whose keys we hold. Makes us the custodian of what arrives on them. Needs deposits:issue, granted only by agreement.

Scope
deposits:issue
Idempotency-Key
required: Idempotency

Parameters

NameInTypeNotes
Idempotency-Keyheaderstring | nulloptional

Request body

IssueIn

FieldTypeNotes
networkstringrequired
referencestringrequired
countintegerrequired

Response 200

IssuedOut

FieldTypeNotes
seed_idstring (uuid)required
networkstringrequired
next_indexintegerrequired
addressesDepositAddressOut[]required

POST /v1/deposit-addresses/{address_id}/retire

Stop watching an address. Repeating it changes nothing.

Scope
deposits:write

Parameters

NameInTypeNotes
address_idpathstring (uuid)required

Response 200

DepositAddressOut

FieldTypeNotes
idstring (uuid)required
networkstringrequired
addressstringrequired
referencestringrequired
sourcestringoptionalREGISTERED, DERIVED, CORE_ISSUED or CORE_IMPORTED
xpub_idstring (uuid) | nulloptional
seed_idstring (uuid) | nulloptional
derivation_indexinteger | nulloptional
watch_fromstring (date-time)required
watch_from_blockinteger | nulloptional
sweep_held_atstring (date-time) | nulloptional
sweep_hold_reasonstring | nulloptional
sweep_hold_kindstring | nulloptionalWhy sweeping is held: ISSUANCE, IMPORT, ARRIVAL, OWNER (set by you) or OPERATOR (set by us). null when not held.
retired_atstring (date-time) | nulloptional
created_atstring (date-time)required
watch_now_untilstring (date-time) | nulloptional
sweeps_enabledboolean | nulloptionalWhether we sweep it. null when we hold no key for it.
watched_networksstring[] | nulloptionalThe networks this address is read on. Empty when retired; null on older records.
sibling_ofstring (uuid) | nulloptionalThe issued address this one shares a key with, registered on this network when an arrival was found here.

POST /v1/deposit-addresses/{address_id}/sweep-hold

Stop or resume sweeping one address whose key we hold. Detection and crediting are not affected. A hold set by our operators cannot be released here (409).

Scope
deposits:write

Parameters

NameInTypeNotes
address_idpathstring (uuid)required

Request body

SweepHold

FieldTypeNotes
heldbooleanrequired
reasonstringrequired
seen_throughinteger | nulloptionalWith held: false only. The change_seq of GET /v1/deposits you have read through; a release is refused while a newer arrival on the address exists.

Response 200

DepositAddressOut

FieldTypeNotes
idstring (uuid)required
networkstringrequired
addressstringrequired
referencestringrequired
sourcestringoptionalREGISTERED, DERIVED, CORE_ISSUED or CORE_IMPORTED
xpub_idstring (uuid) | nulloptional
seed_idstring (uuid) | nulloptional
derivation_indexinteger | nulloptional
watch_fromstring (date-time)required
watch_from_blockinteger | nulloptional
sweep_held_atstring (date-time) | nulloptional
sweep_hold_reasonstring | nulloptional
sweep_hold_kindstring | nulloptionalWhy sweeping is held: ISSUANCE, IMPORT, ARRIVAL, OWNER (set by you) or OPERATOR (set by us). null when not held.
retired_atstring (date-time) | nulloptional
created_atstring (date-time)required
watch_now_untilstring (date-time) | nulloptional
sweeps_enabledboolean | nulloptionalWhether we sweep it. null when we hold no key for it.
watched_networksstring[] | nulloptionalThe networks this address is read on. Empty when retired; null on older records.
sibling_ofstring (uuid) | nulloptionalThe issued address this one shares a key with, registered on this network when an arrival was found here.

POST /v1/deposit-addresses/{address_id}/watch-now

Read this address in the next pass and every minute for 60 minutes. A repeat restarts the window from now. No body and no idempotency key.

Scope
deposits:write

Parameters

NameInTypeNotes
address_idpathstring (uuid)required

Response 200

DepositAddressOut

FieldTypeNotes
idstring (uuid)required
networkstringrequired
addressstringrequired
referencestringrequired
sourcestringoptionalREGISTERED, DERIVED, CORE_ISSUED or CORE_IMPORTED
xpub_idstring (uuid) | nulloptional
seed_idstring (uuid) | nulloptional
derivation_indexinteger | nulloptional
watch_fromstring (date-time)required
watch_from_blockinteger | nulloptional
sweep_held_atstring (date-time) | nulloptional
sweep_hold_reasonstring | nulloptional
sweep_hold_kindstring | nulloptionalWhy sweeping is held: ISSUANCE, IMPORT, ARRIVAL, OWNER (set by you) or OPERATOR (set by us). null when not held.
retired_atstring (date-time) | nulloptional
created_atstring (date-time)required
watch_now_untilstring (date-time) | nulloptional
sweeps_enabledboolean | nulloptionalWhether we sweep it. null when we hold no key for it.
watched_networksstring[] | nulloptionalThe networks this address is read on. Empty when retired; null on older records.
sibling_ofstring (uuid) | nulloptionalThe issued address this one shares a key with, registered on this network when an arrival was found here.

POST /v1/deposit-xpubs

Store an account-level (depth 3) extended public key to derive deposit addresses from. One live key per network.

Scope
deposits:write
Idempotency-Key
required: Idempotency

Parameters

NameInTypeNotes
Idempotency-Keyheaderstring | nulloptional

Request body

XpubIn

FieldTypeNotes
networkstringrequired
xpubstringrequired
index_fromintegerrequired
index_tointegerrequired

Response 200

XpubOut

FieldTypeNotes
idstring (uuid)required
networkstringrequired
xpubstringrequired
index_fromintegerrequired
index_tointegerrequired
next_indexintegerrequired
retired_atstring (date-time) | nulloptional
created_atstring (date-time)required

GET /v1/deposit-xpubs

Your xpubs.

Scope
deposits:read

Parameters

NameInTypeNotes
networkquerystring | nulloptional
include_retiredquerybooleanoptional

Response 200

XpubPage

FieldTypeNotes
xpubsXpubOut[]required

POST /v1/deposit-xpubs/{xpub_id}/retire

Stop deriving from a key. Addresses already derived stay watched.

Scope
deposits:write

Parameters

NameInTypeNotes
xpub_idpathstring (uuid)required

Response 200

XpubOut

FieldTypeNotes
idstring (uuid)required
networkstringrequired
xpubstringrequired
index_fromintegerrequired
index_tointegerrequired
next_indexintegerrequired
retired_atstring (date-time) | nulloptional
created_atstring (date-time)required

POST /v1/deposit-keys

Hand us a wrapped private key for an address you registered, making us its custodian. Signed as well as keyed.

Scope
deposits:write
Idempotency-Key
required: Idempotency
Signature
required: Signed requests

Parameters

NameInTypeNotes
Idempotency-Keyheaderstring | nulloptional

Request body

DepositKeyIn

FieldTypeNotes
networkstringrequired
addressstringrequired
wrapped_b64stringrequired
algorithmstringoptional
source_systemstring | nulloptional
source_referencestring | nulloptional

Response 200

DepositKeyOut

FieldTypeNotes
networkstringrequired
addressstringrequired
originstringrequired
address_matchesbooleanrequired
sweeps_enabledbooleanrequired
checked_bystring | nulloptional
wrapped_key_idstringrequired
algorithmstringrequired
source_systemstring | nulloptional
source_referencestring | nulloptional
imported_atstring (date-time)required

GET /v1/deposits

Arrivals on your addresses in change_seq order. A status change gives a row a higher change_seq. Stop paging when deposits is empty.

Scope
deposits:read

Parameters

NameInTypeNotes
afterqueryintegeroptional
limitqueryintegeroptional
referencequerystring | nulloptional

Response 200

DepositPage

FieldTypeNotes
depositsDepositOut[]required
next_afterintegerrequired

Chain payouts

POST /v1/chain-payouts

Pay an address from your payout wallet on network. Signed. 201 means accepted, not sent: follow the status or the chain_payout.* events.

Scope
chain_payouts:write
Idempotency-Key
required: Idempotency
Signature
required: Signed requests

Request body

CreateChainPayout

FieldTypeNotes
amountChainPayoutAmountrequired
networkstringrequired
destinationChainPayoutDestinationInrequired
referencestringrequired
tenantstring | nulloptional

Response 201

ChainPayoutOut

FieldTypeNotes
idstring (uuid)required
statusstringrequired
reviewstring | nulloptional
amountMoneyrequired
networkstring | nulloptional
destinationChainPayoutDestinationOutrequired
from_addressstring | nulloptional
tx_hashstring | nulloptional
failure_reasonstring | nulloptional
referencestring | nulloptional
created_atstring (date-time)required
settled_atstring (date-time) | nulloptional
unresolvedbooleanoptional

GET /v1/chain-payouts/estimate

What a chain payout would cost and which limits apply, before you send it. Reserves nothing and writes nothing. Unknown values are null with a reason, never 0.

Scope
chain_payouts:read

Parameters

NameInTypeNotes
networkquerystring | nulloptional
currencyquerystring | nulloptional
amountquerystring | nulloptional
addressquerystring | nulloptional

Response 200

ChainPayoutEstimate

FieldTypeNotes
networkstringrequired
currencystringrequired
amountMoneyrequired
feeMoneyrequired
fee_usdstring | nulloptional
network_feeMoney | nulloptional
network_fee_usdstring | nulloptional
network_fee_charged_to_youbooleanrequired
recipient_holds_assetboolean | nulloptional
assumed_worst_casebooleanrequired
total_usdstring | nulloptional
usd_unavailablestring[]required
payouts_enabledbooleanrequired
payouts_disabled_reasonstring | nulloptional
limitsChainPayoutLimitsrequired
estimated_atstring (date-time)required

GET /v1/chain-payouts/{payout_id}

One chain payout. Another tenant's id, or an id that is not a chain payout, is 404.

Scope
chain_payouts:read

Parameters

NameInTypeNotes
payout_idpathstring (uuid)required

Response 200

ChainPayoutOut

FieldTypeNotes
idstring (uuid)required
statusstringrequired
reviewstring | nulloptional
amountMoneyrequired
networkstring | nulloptional
destinationChainPayoutDestinationOutrequired
from_addressstring | nulloptional
tx_hashstring | nulloptional
failure_reasonstring | nulloptional
referencestring | nulloptional
created_atstring (date-time)required
settled_atstring (date-time) | nulloptional
unresolvedbooleanoptional

Withdrawals

POST /v1/withdrawals

Send your balance to your verified address for the currency. The destination is not a request field.

Scope
withdrawals:write
Idempotency-Key
required: Idempotency

Parameters

NameInTypeNotes
Idempotency-Keyheaderstring | nulloptional

Request body

CreateWithdrawal

FieldTypeNotes
amountMoneyInrequired
partner_referencestring | nulloptional

Response 201

WithdrawalOut

FieldTypeNotes
idstring (uuid)required
statusstringrequired
amountMoneyrequired
customer_feeMoneyrequired
destinationstring | nulloptional
destination_memostring | nulloptional
partner_referencestring | nulloptional
provider_referencestring | nulloptional
network_feeMoney | nulloptional
tx_hashstring | nulloptional
created_atstring (date-time)required
settled_atstring (date-time) | nulloptional
unresolvedbooleanoptional

GET /v1/withdrawals

Your withdrawals, newest first.

Scope
withdrawals:read

Parameters

NameInTypeNotes
statusquerystring | nulloptional
limitqueryintegeroptional

Response 200

WithdrawalOut[]

FieldTypeNotes
idstring (uuid)required
statusstringrequired
amountMoneyrequired
customer_feeMoneyrequired
destinationstring | nulloptional
destination_memostring | nulloptional
partner_referencestring | nulloptional
provider_referencestring | nulloptional
network_feeMoney | nulloptional
tx_hashstring | nulloptional
created_atstring (date-time)required
settled_atstring (date-time) | nulloptional
unresolvedbooleanoptional

GET /v1/withdrawals/estimate

What a withdrawal would cost and what would arrive. Reserves nothing and writes nothing. network_fee and amount_received are null when the network cost is unknown.

Scope
withdrawals:read

Parameters

NameInTypeNotes
currencyquerystring | nulloptional
amountquerystring | nulloptional

Response 200

WithdrawalEstimate

FieldTypeNotes
amountMoneyrequired
feeMoneyrequired
fee_usdstring | nulloptional
network_feeMoney | nulloptional
network_fee_usdstring | nulloptional
amount_receivedMoney | nulloptional
usd_unavailablestring[]required
estimated_atstring (date-time)required

GET /v1/withdrawals/limit

Your rolling 24-hour withdrawal limit: limit_usd, spent_usd, remaining_usd.

Scope
withdrawals:read

Response 200

DailyLimit

FieldTypeNotes
limit_usdstringrequired
spent_usdstringrequired
remaining_usdstringrequired

GET /v1/withdrawals/{withdrawal_id}

One withdrawal. On settlement: network_fee as reported (null is not zero) and tx_hash.

Scope
withdrawals:read

Parameters

NameInTypeNotes
withdrawal_idpathstring (uuid)required

Response 200

WithdrawalOut

FieldTypeNotes
idstring (uuid)required
statusstringrequired
amountMoneyrequired
customer_feeMoneyrequired
destinationstring | nulloptional
destination_memostring | nulloptional
partner_referencestring | nulloptional
provider_referencestring | nulloptional
network_feeMoney | nulloptional
tx_hashstring | nulloptional
created_atstring (date-time)required
settled_atstring (date-time) | nulloptional
unresolvedbooleanoptional

GET /v1/destinations

Where your withdrawals may go: one address per currency, with whether it is verified or why it was refused. Addresses are added by us, not through the API.

Scope
withdrawals:read

Response 200

DestinationOut[]

FieldTypeNotes
currencystringrequired
addressstringrequired
memostring | nulloptional
labelstringrequired
verifiedbooleanrequired
verified_atstring (date-time) | nulloptional
rejected_atstring (date-time) | nulloptional
rejected_reasonstring | nulloptional

POST /v1/payments/proof

Whether one transaction paid an amount to a destination. PROVEN, NOT_PROVEN or UNREADABLE; only PROVEN is grounds to act. Reads the chain, writes nothing.

Scope
withdrawals:read

Request body

ProveIn

FieldTypeNotes
railRailInrequired
tx_hashstringrequired
destinationstringrequired
amountMoneyInrequired
sendersstring[]required
memostring | nulloptional

Response 200

ProofOut

FieldTypeNotes
verdictstringrequiredPROVEN, NOT_PROVEN or UNREADABLE. Only PROVEN is grounds to act.
detailstring | nulloptionalWith PROVEN: what the chain carries.
reasonstring | nulloptionalWith NOT_PROVEN or UNREADABLE: why.

Conversions

GET /v1/pairs

What can be converted right now, at the market rate, with the custodian's minimum or null.

Scope
quotes:read

Response 200

Pairs

FieldTypeNotes
pairsPair[]required

POST /v1/quotes

Price an operation for a short window. Nothing is reserved. Pass the id as quote_id to be charged that price.

Scope
quotes:read

Request body

CreateQuote

FieldTypeNotes
productstringrequiredON_RAMP, OFF_RAMP, BANK_TRANSFER, SWAP, ...
amountMoneyInrequired
customer_idstring (uuid) | nulloptional
railstring | nulloptional
countrystring | nulloptional
to_currencystring | nulloptional

Response 200

QuoteOut

FieldTypeNotes
idstring (uuid)required
expires_atstring (date-time)required
amountMoneyrequired
customer_feeMoneyrequired
amount_receivedMoneyrequired
exchange_ratestringrequired
providerstringrequired
binding_floorstringrequired
rule_idstring | nulloptional
to_currencystring | nulloptional
rate_sourcestring | nulloptional
rate_observed_atstring (date-time) | nulloptional

POST /v1/swaps

Convert part of your balance. The source amount, fee included, leaves your balance at once; to_amount is set when the custodian reports what arrived.

Scope
swaps:write (also customers:read where it applies)
Idempotency-Key
required: Idempotency

Parameters

NameInTypeNotes
Idempotency-Keyheaderstring | nulloptional

Request body

CreateSwap

FieldTypeNotes
customer_idstring (uuid) | nulloptional
amountMoneyInrequired
to_currencystringrequired
quote_idstring (uuid) | nulloptional
partner_referencestring | nulloptional

Response 201

SwapOut

FieldTypeNotes
idstring (uuid)required
statusstringrequired
amountMoneyrequired
customer_feeMoneyrequired
to_amount_quotedMoney | nulloptional
to_amountMoney | nulloptional
partner_referencestring | nulloptional
provider_referencestring | nulloptional
created_atstring (date-time)required
settled_atstring (date-time) | nulloptional
unresolvedbooleanoptional

GET /v1/swaps

Your conversions, newest first. status filters; an unknown status is refused.

Scope
swaps:read

Parameters

NameInTypeNotes
statusquerystring | nulloptional
limitqueryintegeroptional

Response 200

SwapOut[]

FieldTypeNotes
idstring (uuid)required
statusstringrequired
amountMoneyrequired
customer_feeMoneyrequired
to_amount_quotedMoney | nulloptional
to_amountMoney | nulloptional
partner_referencestring | nulloptional
provider_referencestring | nulloptional
created_atstring (date-time)required
settled_atstring (date-time) | nulloptional
unresolvedbooleanoptional

GET /v1/swaps/{swap_id}

One conversion.

Scope
swaps:read

Parameters

NameInTypeNotes
swap_idpathstring (uuid)required

Response 200

SwapOut

FieldTypeNotes
idstring (uuid)required
statusstringrequired
amountMoneyrequired
customer_feeMoneyrequired
to_amount_quotedMoney | nulloptional
to_amountMoney | nulloptional
partner_referencestring | nulloptional
provider_referencestring | nulloptional
created_atstring (date-time)required
settled_atstring (date-time) | nulloptional
unresolvedbooleanoptional

Balance and register

GET /v1/float

Your balance per currency: available, held by operations in flight, and total.

Scope
register:read

Response 200

FloatOut

FieldTypeNotes
currenciesFloatBalance[]required

GET /v1/float/statement

Every movement on one currency of your balance, oldest first, with a running balance. When truncated is true, narrow the dates.

Scope
register:read

Parameters

NameInTypeNotes
currencyquerystringrequiredWhich currency of your balance to state.
sincequerystring (date-time) | nulloptional
untilquerystring (date-time) | nulloptional
limitqueryintegeroptional

Response 200

FloatStatement

FieldTypeNotes
currencystringrequired
opening_balanceMoneyrequired
closing_balanceMoneyrequired
movementsFloatMovement[]required
truncatedbooleanoptional

GET /v1/register

Every operation, newest first, with fee and transaction hash. Pages on an opaque cursor.

Scope
register:read

Parameters

NameInTypeNotes
kindquerystring | nulloptional
statusquerystring | nulloptional
currencyquerystring | nulloptional
customer_idquerystring (uuid) | nulloptional
acts_forquerystring | nulloptional
sincequerystring (date-time) | nulloptional
untilquerystring (date-time) | nulloptional
cursorquerystring | nulloptional
limitqueryintegeroptional

Response 200

RegisterPage

FieldTypeNotes
entriesRegisterEntry[]required
next_cursorstring | nulloptional

GET /v1/register/summary

Totals by kind, currency and status, for a period.

Scope
register:read

Parameters

NameInTypeNotes
sincequerystring (date-time) | nulloptional
untilquerystring (date-time) | nulloptional

Response 200

RegisterSummary

FieldTypeNotes
sincestring (date-time) | nulloptional
untilstring (date-time) | nulloptional
totalsCategoryTotal[]required

GET /v1/register/{operation_id}/movements

Every ledger line behind one operation, oldest first.

Scope
register:read

Parameters

NameInTypeNotes
operation_idpathstring (uuid)required

Response 200

Movement

FieldTypeNotes
operation_idstring (uuid)required
kindstringrequired
statusstringrequired
legsMovementLeg[]required

GET /v1/custody/intake-cost

What funding your balance through the custodian has cost, from our own measurements of what arrived and what was credited. Says so when the measurements cannot answer.

Scope
transfers:read

Parameters

NameInTypeNotes
limitqueryintegeroptional

Response 200

object

Events

GET /v1/events

Outcomes in order, with monotonic ids. Store the last id you processed and pass it as after. Webhooks deliver the same rows.

Scope
events:read

Parameters

NameInTypeNotes
afterqueryintegeroptional
limitqueryintegeroptional

Response 200

EventPage

FieldTypeNotes
eventsEventOut[]required
next_afterinteger | nullrequired

Customers and verification

POST /v1/customers

Register one of your end users under your own external_id.

Scope
customers:write
Idempotency-Key
required: Idempotency

Parameters

NameInTypeNotes
Idempotency-Keyheaderstring | nulloptional

Request body

CreateCustomer

FieldTypeNotes
external_idstringrequiredYour identifier for this person.
is_businessbooleanoptional
display_namestring | nulloptional
countrystring | nulloptional

Response 201

CustomerOut

FieldTypeNotes
idstring (uuid)required
external_idstringrequired
is_businessbooleanrequired
countrystring | nullrequired

POST /v1/customers/{customer_id}/provider-registration

Make a verified customer known to the provider that will pay them. The identity sent is forwarded, not stored.

Scope
customers:write

Parameters

NameInTypeNotes
customer_idpathstring (uuid)required

Request body

IdentityIn

FieldTypeNotes
first_namestringrequired
last_namestringrequired
middle_namestring | nulloptional
date_of_birthstringrequired
document_kindstringrequired
document_numberstringrequired
document_countrystringrequired
document_issuedstring | nulloptional
document_expiresstring | nulloptional
residence_streetstring | nulloptional
residence_citystring | nulloptional
residence_postcodestring | nulloptional
residence_statestring | nulloptional
residence_countrystring | nulloptional
emailstring | nulloptional
phonestring | nulloptional

Response 201

RegisteredWithProvider

FieldTypeNotes
customer_idstring (uuid)required
providerstringrequired
provider_customer_idstringrequired
newly_registeredbooleanrequired

POST /v1/customers/{customer_id}/verification

Open an identity check for a customer, or get the current one. The person submits documents directly to the verification provider; we never hold them.

Scope
customers:write

Parameters

NameInTypeNotes
customer_idpathstring (uuid)required

Response 201

VerificationStarted

FieldTypeNotes
customer_idstring (uuid)required
applicant_idstringrequired
statusstringrequired
newly_createdbooleanrequired
verification_urlstring | nulloptional
verification_url_expires_atstring (date-time) | nulloptional

GET /v1/customers/{customer_id}/verification

A customer's verification: a status and the list of capabilities it grants, never a single boolean.

Scope
customers:read

Parameters

NameInTypeNotes
customer_idpathstring (uuid)required

Response 200

VerificationOut

FieldTypeNotes
statusstringrequired
capabilitiesstring[]required
expires_atstring (date-time) | nulloptional
environment"production" | "sandbox" | nulloptional

Fiat accounts and transfers

POST /v1/accounts

Ask for fiat account details for one customer. Created as PENDING until the provider issues them.

Scope
accounts:write
Idempotency-Key
required: Idempotency

Parameters

NameInTypeNotes
Idempotency-Keyheaderstring | nulloptional

Request body

CreateAccount

FieldTypeNotes
customer_idstring (uuid)required
currencystringrequired
countrystring | nulloptional

Response 201

AccountOut

FieldTypeNotes
idstring (uuid)required
statusstringrequired
currencystringrequired
account_holder_namestring | nulloptional
ibanstring | nulloptional
account_numberstring | nulloptional
sort_codestring | nulloptional
bicstring | nulloptional
bank_namestring | nulloptional
expires_atstring (date-time) | nulloptional

GET /v1/accounts/{account_id}

One fiat account.

Scope
accounts:read

Parameters

NameInTypeNotes
account_idpathstring (uuid)required

Response 200

AccountOut

FieldTypeNotes
idstring (uuid)required
statusstringrequired
currencystringrequired
account_holder_namestring | nulloptional
ibanstring | nulloptional
account_numberstring | nulloptional
sort_codestring | nulloptional
bicstring | nulloptional
bank_namestring | nulloptional
expires_atstring (date-time) | nulloptional

GET /v1/accounts/{account_id}/entries

The ledger lines of one account.

Scope
accounts:read

Parameters

NameInTypeNotes
account_idpathstring (uuid)required
limitqueryintegeroptional

Response 200

EntryOut[]

FieldTypeNotes
idintegerrequired
directionstringrequired
amountMoneyrequired
descriptionstringrequired
posted_atstring (date-time)required

POST /v1/transfers

Create a fiat transfer.

Scope
transfers:write
Idempotency-Key
required: Idempotency

Parameters

NameInTypeNotes
Idempotency-Keyheaderstring | nulloptional

Request body

CreateTransfer

FieldTypeNotes
kindstringrequiredON_RAMP, OFF_RAMP, BANK_TRANSFER, INTERNAL_TRANSFER, REFUND
customer_idstring (uuid) | nulloptional
acts_forstringoptional
amountMoneyInrequired
beneficiary_namestringrequired
beneficiary_accountstringrequired
beneficiary_countrystring | nulloptional
railstring | nulloptional
countrystring | nulloptional
quote_idstring (uuid) | nulloptional
beneficiaryBeneficiary | nulloptional
partner_referencestring | nulloptional

Response 201

TransferOut

FieldTypeNotes
idstring (uuid)required
kindstringrequired
statusstringrequired
amountMoneyrequired
customer_feeMoneyrequired
amount_receivedMoney | nulloptional
quote_idstring (uuid) | nulloptional
partner_referencestring | nulloptional
provider_referencestring | nulloptional
created_atstring (date-time)required
settled_atstring (date-time) | nulloptional
unresolvedbooleanoptional

GET /v1/transfers

Your transfers. Look one up by your own reference.

Scope
transfers:read

Parameters

NameInTypeNotes
partner_referencequerystring | nulloptional
statusquerystring | nulloptional
created_afterquerystring (date-time) | nulloptional
limitqueryintegeroptional

Response 200

TransferOut[]

FieldTypeNotes
idstring (uuid)required
kindstringrequired
statusstringrequired
amountMoneyrequired
customer_feeMoneyrequired
amount_receivedMoney | nulloptional
quote_idstring (uuid) | nulloptional
partner_referencestring | nulloptional
provider_referencestring | nulloptional
created_atstring (date-time)required
settled_atstring (date-time) | nulloptional
unresolvedbooleanoptional

GET /v1/transfers/{transfer_id}

One transfer.

Scope
transfers:read

Parameters

NameInTypeNotes
transfer_idpathstring (uuid)required

Response 200

TransferOut

FieldTypeNotes
idstring (uuid)required
kindstringrequired
statusstringrequired
amountMoneyrequired
customer_feeMoneyrequired
amount_receivedMoney | nulloptional
quote_idstring (uuid) | nulloptional
partner_referencestring | nulloptional
provider_referencestring | nulloptional
created_atstring (date-time)required
settled_atstring (date-time) | nulloptional
unresolvedbooleanoptional

Schemas

AccountOut

FieldTypeNotes
idstring (uuid)required
statusstringrequired
currencystringrequired
account_holder_namestring | nulloptional
ibanstring | nulloptional
account_numberstring | nulloptional
sort_codestring | nulloptional
bicstring | nulloptional
bank_namestring | nulloptional
expires_atstring (date-time) | nulloptional

AddressIn

FieldTypeNotes
networkstringrequired
addressstringrequired
referencestringrequired
watch_fromstring (date-time) | nulloptional
watch_from_blockinteger | nulloptional

Beneficiary

FieldTypeNotes
ibanstring | nulloptional
account_numberstring | nulloptional
sort_codestring | nulloptional
routing_numberstring | nulloptional
bicstring | nulloptional
bank_namestring | nulloptional
holder_typestringoptional
purposestring | nulloptional

CategoryTotal

FieldTypeNotes
kindstringrequired
currencystringrequired
statusstringrequired
countintegerrequired
amountMoneyrequired
customer_feeMoneyrequired

ChainPayoutAmount

FieldTypeNotes
amountstringrequiredA decimal string, e.g. "100.00". Never a number.
currencystringrequired

ChainPayoutDestinationIn

FieldTypeNotes
addressstringrequired
memostring | nulloptional

ChainPayoutDestinationOut

FieldTypeNotes
addressstring | nulloptional
memostring | nulloptional

ChainPayoutEstimate

FieldTypeNotes
networkstringrequired
currencystringrequired
amountMoneyrequired
feeMoneyrequired
fee_usdstring | nulloptional
network_feeMoney | nulloptional
network_fee_usdstring | nulloptional
network_fee_charged_to_youbooleanrequired
recipient_holds_assetboolean | nulloptional
assumed_worst_casebooleanrequired
total_usdstring | nulloptional
usd_unavailablestring[]required
payouts_enabledbooleanrequired
payouts_disabled_reasonstring | nulloptional
limitsChainPayoutLimitsrequired
estimated_atstring (date-time)required

ChainPayoutLimits

FieldTypeNotes
per_payout_usdstring | nulloptional
daily_usdstring | nulloptional
daily_used_usdstring | nulloptional
new_address_daily_usdstring | nulloptional
review_at_or_above_usdstring | nulloptional

ChainPayoutOut

FieldTypeNotes
idstring (uuid)required
statusstringrequired
reviewstring | nulloptional
amountMoneyrequired
networkstring | nulloptional
destinationChainPayoutDestinationOutrequired
from_addressstring | nulloptional
tx_hashstring | nulloptional
failure_reasonstring | nulloptional
referencestring | nulloptional
created_atstring (date-time)required
settled_atstring (date-time) | nulloptional
unresolvedbooleanoptional

CreateAccount

FieldTypeNotes
customer_idstring (uuid)required
currencystringrequired
countrystring | nulloptional

CreateChainPayout

FieldTypeNotes
amountChainPayoutAmountrequired
networkstringrequired
destinationChainPayoutDestinationInrequired
referencestringrequired
tenantstring | nulloptional

CreateCustomer

FieldTypeNotes
external_idstringrequiredYour identifier for this person.
is_businessbooleanoptional
display_namestring | nulloptional
countrystring | nulloptional

CreateQuote

FieldTypeNotes
productstringrequiredON_RAMP, OFF_RAMP, BANK_TRANSFER, SWAP, ...
amountMoneyInrequired
customer_idstring (uuid) | nulloptional
railstring | nulloptional
countrystring | nulloptional
to_currencystring | nulloptional

CreateSwap

FieldTypeNotes
customer_idstring (uuid) | nulloptional
amountMoneyInrequired
to_currencystringrequired
quote_idstring (uuid) | nulloptional
partner_referencestring | nulloptional

CreateTransfer

FieldTypeNotes
kindstringrequiredON_RAMP, OFF_RAMP, BANK_TRANSFER, INTERNAL_TRANSFER, REFUND
customer_idstring (uuid) | nulloptional
acts_forstringoptional
amountMoneyInrequired
beneficiary_namestringrequired
beneficiary_accountstringrequired
beneficiary_countrystring | nulloptional
railstring | nulloptional
countrystring | nulloptional
quote_idstring (uuid) | nulloptional
beneficiaryBeneficiary | nulloptional
partner_referencestring | nulloptional

CreateWithdrawal

FieldTypeNotes
amountMoneyInrequired
partner_referencestring | nulloptional

Currencies

FieldTypeNotes
currenciesCurrencyOut[]required
custodian_readbooleanrequired
as_ofstring (date-time)required

CurrencyOut

FieldTypeNotes
codestringrequired
namestringrequired
kindstringrequired
networkstring | nulloptional
custodian_listsboolean | nulloptional
pricedbooleanrequired
payable_outbooleanrequired

CustomerOut

FieldTypeNotes
idstring (uuid)required
external_idstringrequired
is_businessbooleanrequired
countrystring | nullrequired

DailyLimit

FieldTypeNotes
limit_usdstringrequired
spent_usdstringrequired
remaining_usdstringrequired

DepositAddressOut

FieldTypeNotes
idstring (uuid)required
networkstringrequired
addressstringrequired
referencestringrequired
sourcestringoptionalREGISTERED, DERIVED, CORE_ISSUED or CORE_IMPORTED
xpub_idstring (uuid) | nulloptional
seed_idstring (uuid) | nulloptional
derivation_indexinteger | nulloptional
watch_fromstring (date-time)required
watch_from_blockinteger | nulloptional
sweep_held_atstring (date-time) | nulloptional
sweep_hold_reasonstring | nulloptional
sweep_hold_kindstring | nulloptionalWhy sweeping is held: ISSUANCE, IMPORT, ARRIVAL, OWNER (set by you) or OPERATOR (set by us). null when not held.
retired_atstring (date-time) | nulloptional
created_atstring (date-time)required
watch_now_untilstring (date-time) | nulloptional
sweeps_enabledboolean | nulloptionalWhether we sweep it. null when we hold no key for it.
watched_networksstring[] | nulloptionalThe networks this address is read on. Empty when retired; null on older records.
sibling_ofstring (uuid) | nulloptionalThe issued address this one shares a key with, registered on this network when an arrival was found here.

DepositAddressPage

FieldTypeNotes
addressesDepositAddressOut[]required
next_afterstring (uuid) | nulloptional

DepositKeyIn

FieldTypeNotes
networkstringrequired
addressstringrequired
wrapped_b64stringrequired
algorithmstringoptional
source_systemstring | nulloptional
source_referencestring | nulloptional

DepositKeyOut

FieldTypeNotes
networkstringrequired
addressstringrequired
originstringrequired
address_matchesbooleanrequired
sweeps_enabledbooleanrequired
checked_bystring | nulloptional
wrapped_key_idstringrequired
algorithmstringrequired
source_systemstring | nulloptional
source_referencestring | nulloptional
imported_atstring (date-time)required

DepositPage

FieldTypeNotes
depositsDepositOut[]required
next_afterintegerrequired

DeriveIn

FieldTypeNotes
networkstringrequired
referencestringrequired
countintegerrequired

DerivedOut

FieldTypeNotes
xpub_idstring (uuid)required
networkstringrequired
next_indexintegerrequired
addressesDepositAddressOut[]required

DestinationOut

FieldTypeNotes
currencystringrequired
addressstringrequired
memostring | nulloptional
labelstringrequired
verifiedbooleanrequired
verified_atstring (date-time) | nulloptional
rejected_atstring (date-time) | nulloptional
rejected_reasonstring | nulloptional

EntryOut

FieldTypeNotes
idintegerrequired
directionstringrequired
amountMoneyrequired
descriptionstringrequired
posted_atstring (date-time)required

Error

FieldTypeNotes
errorobjectrequired

EventOut

FieldTypeNotes
idintegerrequired
kindstringrequired
resource_idstring (uuid)required
occurred_atstring (date-time)required
dataobjectrequired

EventPage

FieldTypeNotes
eventsEventOut[]required
next_afterinteger | nullrequired

FeeSchedule

FieldTypeNotes
productstring | nulloptional
currencystring | nulloptional
railstring | nulloptional
percentstringrequired
minimum_feestringrequired
priorityintegerrequired
effective_fromstring (date-time)required

Fees

FieldTypeNotes
feesFeeSchedule[]required

FloatBalance

FieldTypeNotes
availableMoneyrequired
heldMoneyrequired
totalMoneyrequired

FloatMovement

FieldTypeNotes
posted_atstring (date-time)required
amountMoneyrequired
balanceMoneyrequired
descriptionstringrequired
operation_idstring (uuid) | nulloptional
kindstring | nulloptional
referencestring | nulloptional

FloatOut

FieldTypeNotes
currenciesFloatBalance[]required

FloatStatement

FieldTypeNotes
currencystringrequired
opening_balanceMoneyrequired
closing_balanceMoneyrequired
movementsFloatMovement[]required
truncatedbooleanoptional

IdentityIn

FieldTypeNotes
first_namestringrequired
last_namestringrequired
middle_namestring | nulloptional
date_of_birthstringrequired
document_kindstringrequired
document_numberstringrequired
document_countrystringrequired
document_issuedstring | nulloptional
document_expiresstring | nulloptional
residence_streetstring | nulloptional
residence_citystring | nulloptional
residence_postcodestring | nulloptional
residence_statestring | nulloptional
residence_countrystring | nulloptional
emailstring | nulloptional
phonestring | nulloptional

IssueIn

FieldTypeNotes
networkstringrequired
referencestringrequired
countintegerrequired

IssuedOut

FieldTypeNotes
seed_idstring (uuid)required
networkstringrequired
next_indexintegerrequired
addressesDepositAddressOut[]required

ItemError

FieldTypeNotes
codestringrequired
messagestringrequired

Limits

FieldTypeNotes
requestsRequestLimitsrequired
moneyMoneyLimitsrequired

Money

FieldTypeNotes
amountstringrequiredA decimal string, e.g. "100.00". Never a number.
currencystringrequired

MoneyIn

FieldTypeNotes
amountstringrequiredA decimal string, e.g. "100.00". Never a number.
currencystringrequired

MoneyLimits

FieldTypeNotes
withdrawal_limit_usdstringrequired
withdrawal_spent_usdstringrequired
withdrawal_remaining_usdstringrequired
withdrawal_window_hoursintegerrequired

Movement

FieldTypeNotes
operation_idstring (uuid)required
kindstringrequired
statusstringrequired
legsMovementLeg[]required

MovementLeg

FieldTypeNotes
accountstringrequired
directionstringrequired
amountMoneyrequired
whatstringrequired
posted_atstring (date-time)required

OperationByKey

FieldTypeNotes
keystringrequired
endpointstringrequired
claimed_atstring (date-time)required
completed_atstring (date-time) | nulloptional
statestringrequired
response_statusinteger | nulloptional
operationobject | nulloptional

Pair

FieldTypeNotes
from_currencystringrequired
to_currencystringrequired
ratestringrequired
rate_age_secondsintegerrequired
minimumstring | nulloptional

Pairs

FieldTypeNotes
pairsPair[]required

ProofOut

FieldTypeNotes
verdictstringrequiredPROVEN, NOT_PROVEN or UNREADABLE. Only PROVEN is grounds to act.
detailstring | nulloptionalWith PROVEN: what the chain carries.
reasonstring | nulloptionalWith NOT_PROVEN or UNREADABLE: why.

ProveIn

FieldTypeNotes
railRailInrequired
tx_hashstringrequired
destinationstringrequired
amountMoneyInrequired
sendersstring[]required
memostring | nulloptional

QuoteOut

FieldTypeNotes
idstring (uuid)required
expires_atstring (date-time)required
amountMoneyrequired
customer_feeMoneyrequired
amount_receivedMoneyrequired
exchange_ratestringrequired
providerstringrequired
binding_floorstringrequired
rule_idstring | nulloptional
to_currencystring | nulloptional
rate_sourcestring | nulloptional
rate_observed_atstring (date-time) | nulloptional

RailIn

FieldTypeNotes
currencystringrequiredUSDT_TRC20, ETH, BTC, XLM, ...
networkstringrequiredtron, ethereum, bsc, base, bitcoin or stellar

RegisterAddresses

FieldTypeNotes
addressesAddressIn[]required

RegisterEntry

FieldTypeNotes
idstring (uuid)required
kindstringrequired
statusstringrequired
amountMoneyrequired
customer_feeMoneyrequired
to_amountMoney | nulloptional
to_amount_quotedMoney | nulloptional
customer_idstring (uuid) | nulloptional
acts_forstringoptional
providerstring | nulloptional
provider_referencestring | nulloptional
partner_referencestring | nulloptional
network_feeMoney | nulloptional
tx_hashstring | nulloptional
created_atstring (date-time)required
settled_atstring (date-time) | nulloptional
unresolvedbooleanoptional

RegisterPage

FieldTypeNotes
entriesRegisterEntry[]required
next_cursorstring | nulloptional

RegisterSummary

FieldTypeNotes
sincestring (date-time) | nulloptional
untilstring (date-time) | nulloptional
totalsCategoryTotal[]required

RegisteredWithProvider

FieldTypeNotes
customer_idstring (uuid)required
providerstringrequired
provider_customer_idstringrequired
newly_registeredbooleanrequired

RegistrationPage

FieldTypeNotes
resultsRegistrationResult[]required

RegistrationResult

FieldTypeNotes
indexintegerrequired
statusstringrequiredregistered, existing or refused
addressDepositAddressOut | nulloptional
errorItemError | nulloptional

RequestLimits

FieldTypeNotes
reads_per_minuteintegerrequired
writes_per_minuteintegerrequired
tenant_ceiling_per_minuteinteger | nulloptional
window_secondsintegerrequired
idempotency_key_max_lengthintegerrequired
quote_lifetime_secondsintegerrequired

SwapOut

FieldTypeNotes
idstring (uuid)required
statusstringrequired
amountMoneyrequired
customer_feeMoneyrequired
to_amount_quotedMoney | nulloptional
to_amountMoney | nulloptional
partner_referencestring | nulloptional
provider_referencestring | nulloptional
created_atstring (date-time)required
settled_atstring (date-time) | nulloptional
unresolvedbooleanoptional

SweepHold

FieldTypeNotes
heldbooleanrequired
reasonstringrequired
seen_throughinteger | nulloptionalWith held: false only. The change_seq of GET /v1/deposits you have read through; a release is refused while a newer arrival on the address exists.

TransferOut

FieldTypeNotes
idstring (uuid)required
kindstringrequired
statusstringrequired
amountMoneyrequired
customer_feeMoneyrequired
amount_receivedMoney | nulloptional
quote_idstring (uuid) | nulloptional
partner_referencestring | nulloptional
provider_referencestring | nulloptional
created_atstring (date-time)required
settled_atstring (date-time) | nulloptional
unresolvedbooleanoptional

VerificationOut

FieldTypeNotes
statusstringrequired
capabilitiesstring[]required
expires_atstring (date-time) | nulloptional
environment"production" | "sandbox" | nulloptional

VerificationStarted

FieldTypeNotes
customer_idstring (uuid)required
applicant_idstringrequired
statusstringrequired
newly_createdbooleanrequired
verification_urlstring | nulloptional
verification_url_expires_atstring (date-time) | nulloptional

WhoAmIKey

FieldTypeNotes
prefixstringrequired
labelstringrequired
scopesstring[]required

WhoAmIOut

FieldTypeNotes
tenantWhoAmITenantrequired
keyWhoAmIKeyrequired
payout_walletsmap of stringrequired

WhoAmITenant

FieldTypeNotes
idstring (uuid)required
slugstringrequired
kindstringrequired
statusstringrequired

WithdrawalEstimate

FieldTypeNotes
amountMoneyrequired
feeMoneyrequired
fee_usdstring | nulloptional
network_feeMoney | nulloptional
network_fee_usdstring | nulloptional
amount_receivedMoney | nulloptional
usd_unavailablestring[]required
estimated_atstring (date-time)required

WithdrawalOut

FieldTypeNotes
idstring (uuid)required
statusstringrequired
amountMoneyrequired
customer_feeMoneyrequired
destinationstring | nulloptional
destination_memostring | nulloptional
partner_referencestring | nulloptional
provider_referencestring | nulloptional
network_feeMoney | nulloptional
tx_hashstring | nulloptional
created_atstring (date-time)required
settled_atstring (date-time) | nulloptional
unresolvedbooleanoptional

XpubIn

FieldTypeNotes
networkstringrequired
xpubstringrequired
index_fromintegerrequired
index_tointegerrequired

XpubOut

FieldTypeNotes
idstring (uuid)required
networkstringrequired
xpubstringrequired
index_fromintegerrequired
index_tointegerrequired
next_indexintegerrequired
retired_atstring (date-time) | nulloptional
created_atstring (date-time)required

XpubPage

FieldTypeNotes
xpubsXpubOut[]required

DepositOut

FieldTypeNotes
idstring (uuid)required
networkstringrequired
addressstringrequired
referencestringrequired
amountMoneyrequired
amount_unitsstringrequired
tx_hashstringrequired
transfer_indexintegerrequired
legacy_keystringrequired
from_addressstring | nulloptional
block_numberinteger | nulloptional
block_timestring (date-time) | nulloptional
confirmationsintegerrequired
required_confirmationsintegerrequired
statusstringrequiredDETECTED, CONFIRMED or REORGED
historicalbooleanrequired
detected_atstring (date-time)required
confirmed_atstring (date-time) | nulloptional
reorged_atstring (date-time) | nulloptional
change_seqintegerrequired