Skip to main content

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

Use CUSTOMER_NGN_BALANCE only with permanent funding accounts.

Permanent NGN virtual account

NGN received through an active instruction is retained and credited to that customer’s NGN balance.

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 with GET /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.
The recipient receives amount; the applicable transfer fee is charged separately from the same customer NGN balance.

Track Deposits and Transfers

Store the public funding account id. 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.