CNGN / USDC / USDT, withdraw crypto, or pay out to a Nigerian bank.
These are not the same as:
Prerequisite: Enable cNGN for the customer with BVN onboard (dashboard Customers → cNGN, or API below). That creates the Smart Wallet and deposit account.
Enable cNGN (onboard)
Poll until linked:
strails.userId / virtual account appear. You can still attach an existing wallet user with POST /v1/customers/{id}/strails/link.
Required scopes: transfers:read, transfers:write
Permanent vs temporary virtual accounts
Permanent credits create local
cngn_deposit rows (email + cngn.deposit.* webhooks). List with GET /v1/cngn/deposits.
Temporary payin (NGN → Smart Wallet)
If auto-sweep stalls, funds can remain on the temporary wallet. Check
GET /v1/cngn/payins/{id} → sweep, then:
Until a bank
accountNumber exists, status stays requested. RemitFlex sets va_created only when an account number is present.
Payins appear in Transactions as cngn_payin.
Convert (cNGN ↔ USDC/USDT)
List:
GET /v1/cngn/converts. Get: GET /v1/cngn/converts/{id}.
Withdrawal
Send tokens from the customer’s Smart Wallet to an external address:Banks & account resolution
List banks and verify account names before payout:422 when the account cannot be verified or the bank is not supported. bankCode on payouts must come from GET /v1/cngn/banks.
Payout (cNGN → NGN bank)
amount is in Naira. Minimum payout is ₦151.
Status, email, and webhooks
Money events are stored locally. On create/update RemitFlex:- Emails the linked customer (and org owner when applicable)
- Emits merchant webhooks:
cngn.deposit.*,cngn.payin.*,cngn.convert.*,cngn.withdrawal.*,cngn.payout.*
GET .../:id) and via background sync.
All of the above appear in Transactions (cngn_deposit, cngn_payin, cngn_convert, cngn_withdrawal, cngn_payout).
Balances vs transactions
Do not treat provider ledger passthrough as the merchant ledger — RemitFlex transactions are local.