GET /v1/statuses.
Ask with our id
Every call that creates something answers an id of ours, and you ask about it with that id, the same way for every product. A crypto deposit is an order:GET /v1/orders/{id} answers
it, and the status calls of the other products take the id their create call
returned. Keep that id; it is the thread through everything below.
Crypto deposits
Track a deposit by polling/v1/deposit/status with the source-chain
receipt.
How the routing layer’s reporting maps to these:
Card payments
Track a card purchase by polling/v1/card/status.
How the card partner’s states map to these:
A state we do not recognise is reported as
unknown and flagged, never quietly
shown as “in progress”.
Bank transfers
Track a virtual account by polling/v1/fiat/status.
The banking partner reports many more states than these two - money received but
not yet settled, a transfer held for review, a refund on its way back - and every
one of them is reported here as
awaiting_deposit, because nothing has settled
to the wallet yet. A bank transfer that fails or is refunded on the partner side
never reaches funded. The account simply stays awaiting_deposit, because the account
itself is still open and can be paid again.
Virtual accounts
A virtual account has no status of its own - it is permanent, and it is the money arriving into it that has a state. Poll the same/v1/fiat/status and read the table above: the
account sits at awaiting_deposit between payments and reports funded each time a
transfer settles.
Because the account is reusable,
funded is not the end of its life. Treat each
settlement as its own event rather than closing the account after the first one.Payouts
Card payouts, bank payouts, and payouts from a virtual account share one status set. Poll card payout status, bank payout status, or take the webhook.When to credit the user
Credit only on the crediting state of each product -done for a crypto
deposit, completed for a card payment, funded for a bank transfer or virtual
account, settled for a payout. That is the single signal that funds actually
landed. Everything else is either still moving or means nothing was delivered.
Tracking
Poll the status endpoint of each product from your backend until the status is terminal. Keep polls a few seconds apart to stay under your rate limit.For anything your backend must trust (crediting a user, releasing an order), rely on
a terminal status you fetched yourself - not on client-side UI state.