> ## Documentation Index
> Fetch the complete documentation index at: https://docs.daya.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Customer NGN Balances

> Let each customer receive NGN or stablecoins and retain the value in Naira

## 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:

| Balance owner | Funding account destination | Read endpoint                     | Transfer scope |
| ------------- | --------------------------- | --------------------------------- | -------------- |
| Merchant      | `NGN_BALANCE`               | `GET /v1/merchant/balance`        | `MERCHANT`     |
| Customer      | `CUSTOMER_NGN_BALANCE`      | `GET /v1/customers/{id}/balances` | `CUSTOMER`     |

<Note>
  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.
</Note>

## Create Customer Funding Accounts

Use `CUSTOMER_NGN_BALANCE` only with permanent funding accounts.

### Permanent NGN virtual account

```json theme={"dark"}
{
  "type": "PERMANENT",
  "rail": "NGN_VIRTUAL_ACCOUNT",
  "customer": {
    "customer_id": "650e8400-e29b-41d4-a716-446655440000"
  },
  "currency": "NGN",
  "settlement_destination": {
    "type": "CUSTOMER_NGN_BALANCE"
  }
}
```

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

### Permanent stablecoin address

```json theme={"dark"}
{
  "type": "PERMANENT",
  "rail": "CRYPTO_ADDRESS",
  "customer": {
    "customer_id": "650e8400-e29b-41d4-a716-446655440000"
  },
  "asset": "USDC",
  "chain": "BASE",
  "settlement_destination": {
    "type": "CUSTOMER_NGN_BALANCE"
  }
}
```

`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`](/api-reference/customers/get-customer-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](/api-reference/recipients/create-recipient).

```json theme={"dark"}
{
  "currency": "NGN",
  "debit_currency": "NGN",
  "debit_scope": "CUSTOMER",
  "amount": "5000.00",
  "reference": "customer-payout-001",
  "recipient_id": "750e8400-e29b-41d4-a716-446655440000",
  "on_behalf_of": {
    "customer_id": "650e8400-e29b-41d4-a716-446655440000"
  }
}
```

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.
