Skip to main content
The USD rail is deposit-only: the user gets real US bank account details (account number, ABA routing number), and USD arriving by ACH or wire is converted to USDB and credited to their smart wallet. Available to international users on the USD and rest-of-world paths, and to Nigerian users as their second stage.

1. Gate on USD readiness

USD has its own readiness check, separate from /kyc/readiness:
Only provision once ready is true. Render missing back into your KYC form rather than retrying blindly — the field names match the PATCH /kyc payload.

2. Provision the account

smartWalletId is the destination — the wallet credited with USDB when USD lands in the account. This one call both provisions the account and binds it, so there is no separate linking step. Idempotent: repeated calls do not create duplicate accounts, so a retry after a network failure is safe.

3. Poll for the account details

account is only populated on active. Treat rejected and failed differently: one is terminal, the other is a retry.
When depositMessage is non-null, the account requires that reference on incoming transfers. Show it alongside the account number — deposits without it can be delayed or returned.

Re-routing deposits later

Only needed if you want an already-issued account to credit a different smart wallet than the one passed to start-usa:
The account must belong to the calling user, who must be an active admin of the target wallet.

Withdrawing USD

There is no USD bank payout rail. To get value out, either swap USDB into a currency that has one, or use a crypto offramp: