Skip to main content
A buyer gets real bank details, sends a normal transfer, and stablecoins land in their wallet. Three calls, in order.
Not live yet. The flow is built and tested, but the commercial agreement with the banking partner is not signed, so there is no production account behind it. The contract below is what runs today on sandbox and is not expected to change.

The order

1

Onboard the buyer

POST /fiat/onboard - register them and link the wallet the stablecoins go to. Returns ids you hold for the rest of the flow.
2

Open a virtual account

POST /fiat/account - returns the bank details to display (IBAN or SWIFT), plus the fee that applies.
3

Wait for the money

POST /fiat/status - poll until funded. Bank transfers settle in hours or days, not seconds.

Identity checks

We do not run our own identity flow. The buyer verifies once with an identity provider, and that result is shared with the banking partner - so a returning buyer is not asked twice. /fiat/onboard takes the authorization code from that flow.

POST /fiat/onboard

string
required
One-time authorization code from the identity flow. Single use - a stale or reused code is rejected.
object
required
object
required
string
required
The EVM address the stablecoins are delivered to.
Returns accountId, walletId and kycStatus. Hold the first two.

POST /fiat/account

string
required
string
required
string
Virtual account id. Pass it to /fiat/status.
object
The bank details to show the buyer - IBAN or SWIFT coordinates, and the reference that ties their transfer to this account.
number
The fee applied to this account, in basis points (100 bps = 1%).
Show the reference prominently. A transfer that arrives without it takes manual work to attribute.

POST /fiat/status

string
required
string
required
string
awaiting_deposit or funded. Poll on the first; the second is terminal.
string
Once funded: what actually landed, as a decimal string in the currency’s major unit. Credit this, not the amount the buyer said they would send.

Errors