Overview
Customer NGN balances let you maintain a separate Naira balance for each customer. A customer can fund the balance through reusable NGN bank details or supported stablecoin addresses, and you can later create an NGN bank transfer from that customer’s balance. Customer balances are separate from your merchant balances:An NGN virtual account and a crypto address are payment instructions, not balances themselves. You create separate permanent funding accounts for the rails and chains you want to offer, and all accounts configured with
CUSTOMER_NGN_BALANCE credit the same NGN balance for that customer.Create Customer Funding Accounts
UseCUSTOMER_NGN_BALANCE only with permanent funding accounts.
Permanent NGN virtual account
Permanent stablecoin address
CUSTOMER_NGN_BALANCE supports permanent USDC and USDT funding accounts on deposit-enabled chains. Daya converts a confirmed stablecoin deposit to NGN using the applicable rate and credits the customer’s NGN balance after pricing, risk checks, and settlement complete.
Create a separate funding account for each asset and chain combination. Use GET /v1/supported-chains to discover currently enabled deposit combinations.
Read and Spend the Balance
Read the customer’s balance withGET /v1/customers/{id}/balances.
To pay an NGN bank recipient from that balance, create a transfer with currency: NGN, debit_currency: NGN, and debit_scope: CUSTOMER. Include the same customer in on_behalf_of.customer_id. The recipient must belong to that customer, and the customer must have completed Tier 1 KYC. If you use a saved recipient, create it with that same customer_id; see Create recipient.
amount; the applicable transfer fee is charged separately from the same customer NGN balance.
Track Deposits and Transfers
Store the public funding accountid. Deposit responses and deposit.* webhooks include funding_account_id, allowing you to associate each incoming payment with its customer funding account. Wait for deposit.completed before treating the customer balance credit as final.
For outgoing transfers, use transfer.* webhooks and the transfer read endpoints. The response includes debit_scope: CUSTOMER and debit_currency: NGN so you can reconcile which balance funded the transfer.