public.funding-accounts

Create Funding Account

Creates a funding account and sets up payment details. settlement_destination.type=CUSTOMER_NGN_BALANCE is generally available for permanent funding accounts: permanent NGN virtual-account deposits are retained for that customer, while supported USDC/USDT deposits on any deposit-enabled chain are automatically converted into that customer's NGN balance. NGN_BALANCE retains NGN at merchant level, and INTERNAL_BALANCE preserves the existing automatic settlement into the merchant balance. Read customer balances with GET /v1/customers/{id}/balances and create an NGN bank transfer with debit_scope=CUSTOMER, debit_currency=NGN, and on_behalf_of.customer_id to pay from that balance. Provider-backed instructions include provider_availability, which reports each provider's current funding-account service state. Permanent NGN creation can continue through Paystack when Flutterwave is UNAVAILABLE and the customer has verified bank details; the response still includes the Flutterwave instruction with provider_availability.status set to UNAVAILABLE. The endpoint returns 503 PROVIDER_UNAVAILABLE only when no configured permanent NGN provider can accept the request, or when the single provider required for another rail is unavailable. Include developer_fee.percentage to keep 0% to 50% of each received deposit; deposit responses and webhooks show the developer fee and customer amount separately from Daya fees. Native SOL uses a PERMANENT CRYPTO_ADDRESS account on SOLANA with INTERNAL_BALANCE settlement and no developer fee. Requires an idempotency key in the X-Idempotency-Key header.

post/v1/funding-accounts

Headers

X-Idempotency-Keystring required

Idempotency key for request deduplication

Request body

amountinteger

Required for TEMPORARY NGN_VIRTUAL_ACCOUNT accounts. Accepted only for TEMPORARY accounts.

asset'USDC' | 'USDT' | 'SOL' | 'BNB'

Required when rail is CRYPTO_ADDRESS. Supported values are USDC, USDT, SOL, and BNB.

chain'APTOS' | 'BASE' | 'BSC' | 'CELO' | 'ETHEREUM' | 'POLYGON' | 'SOLANA' | 'SUI' | 'TEMPO' | 'TRON'
currency'NGN'
rail'NGN_VIRTUAL_ACCOUNT' | 'CRYPTO_ADDRESS' required
type'TEMPORARY' | 'PERMANENT' required

Example request

{
  "amount": 50000,
  "asset": "USDC",
  "chain": "BASE",
  "currency": "NGN",
  "customer": {
    "customer_id": "650e8400-e29b-41d4-a716-446655440000"
  },
  "developer_fee": {
    "percentage": "1.5"
  },
  "rail": "NGN_VIRTUAL_ACCOUNT",
  "settlement_destination": {
    "destination_address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
    "destination_asset": "USDC",
    "destination_bank": {
      "account_number": "0123456789",
      "bank_code": "058"
    },
    "destination_chain": "BASE",
    "rate_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "INTERNAL_BALANCE"
  },
  "type": "TEMPORARY"
}

Response

Returned when an existing permanent funding account is reused

amountstring
asset'USDC' | 'USDT' | 'SOL' | 'BNB'
chain'APTOS' | 'BASE' | 'BSC' | 'CELO' | 'ETHEREUM' | 'POLYGON' | 'SOLANA' | 'SUI' | 'TEMPO' | 'TRON'
created_atstring
currencystring
customer_idstring
disabled_atstring
expires_atstring
failure_codestring
failure_messagestring
idstring
objectstring
rail'NGN_VIRTUAL_ACCOUNT' | 'CRYPTO_ADDRESS'
status'PENDING' | 'ACTIVE' | 'FAILED' | 'DISABLED'
type'TEMPORARY' | 'PERMANENT'
updated_atstring

Example response

{
  "amount": "50000.75",
  "asset": "USDC",
  "chain": "BASE",
  "created_at": "2026-01-05T15:04:05Z",
  "currency": "NGN",
  "customer_id": "650e8400-e29b-41d4-a716-446655440000",
  "developer_fee": {
    "percentage": "1.5"
  },
  "disabled_at": "2026-01-05T16:04:05Z",
  "expires_at": "2026-01-05T16:04:05Z",
  "failure_code": "PROVISIONING_FAILED",
  "failure_message": "virtual account provisioning failed",
  "id": "750e8400-e29b-41d4-a716-446655440000",
  "instructions": [
    {
      "account_name": "Daya-John Doe",
      "account_number": "1234567890",
      "address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
      "bank_code": "035",
      "bank_name": "Wema Bank",
      "chain": "BASE",
      "currency": "NGN",
      "expires_at": "2026-01-05T16:04:05Z",
      "failure": {
        "code": "ACCOUNT_NAME_MISMATCH",
        "message": "The bank account name does not match the customer's verified identity."
      },
      "provider": "FLUTTERWAVE",
      "provider_availability": {
        "message": "This provider is experiencing funding-account delays.",
        "status": "DEGRADED"
      },
      "status": "ACTIVE",
      "type": "NGN_VIRTUAL_ACCOUNT"
    }
  ],
  "object": "funding_account",
  "rail": "NGN_VIRTUAL_ACCOUNT",
  "settlement_destination": {
    "destination_address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
    "destination_asset": "USDC",
    "destination_bank": {
      "account_name": "Jane Doe",
      "account_number": "0123456789",
      "bank_code": "058"
    },
    "destination_chain": "BASE",
    "destination_currency": "NGN",
    "expires_at": "2026-01-05T16:04:05Z",
    "rate_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "INTERNAL_BALANCE"
  },
  "status": "ACTIVE",
  "type": "TEMPORARY",
  "updated_at": "2026-01-05T15:04:05Z"
}

Changes

No recorded changes to this endpoint across all 1 revision of this API.