Skip to main content
This page opens one business account in sandbox and issues its funding destination. It does not move money.

Before you start

Start with NGN. Any fiat currency opens, but issuing details for any other currency needs approved verification and international access, and moving money in it needs tier 3. Those failures are 403s rather than anything you can fix in code.

1. Open the account

Three fields are required: name, type, and currency.
Note the error handling: it reads code or reason. Tier denials report reason and carry no code at all, which is the one place the error contract varies. A 201 returns the account:
Three things to notice:
  1. transferReady is false. The account exists and is active, but nothing outside Sakawave can pay it yet. That is the next step.
  2. tag was minted for you. Two letters and ten digits, the last a check digit. It is public and unique across Sakawave: another business can pay this account by tag alone.
  3. balance is the string "0", in minor units. Never do arithmetic on balanceFormatted.

2. Issue a funding destination

The body is empty for a fiat account — the account already determines everything. For a crypto account, name the chain: {"chain": "BASE_MAINNET"}. 201 returns the destination:
202 means the provider accepted the request and is still working. There is no body. Poll GET /v1/accounts/{accountId}/details until the detail appears, or wait for the account.detail.created webhook.
Re-issuing is safe — provisioning resumes rather than duplicating — but a tight retry loop just adds load. Wait for the event.

3. Confirm it is payable

GET on a single account is the only read that includes details. You are looking for two things: transferReady is now true, and details has at least one entry. Publish that entry’s accountNumber to whoever will be funding the account.

If it failed

Next