Skip to main content

Overview

A funding account is the API resource that powers onramps and offramps. It gives a customer either an NGN virtual account or a crypto address, and lets you control where the money settles after it arrives. Funding accounts are scoped to one customer and one rail:
RailWhat the customer receivesRequired fields
NGN_VIRTUAL_ACCOUNTBank account details for NGN transferscurrency: NGN
CRYPTO_ADDRESSStablecoin address on a supported chainasset, chain

What You Can Build

Use funding accounts to create the receive flow you need:
FlowFunding account shapeSettlement
Temporary onrampNGN_VIRTUAL_ACCOUNT + TEMPORARYINTERNAL_BALANCE or ONCHAIN
Permanent onrampNGN_VIRTUAL_ACCOUNT + PERMANENTINTERNAL_BALANCE or ONCHAIN
Temporary offrampCRYPTO_ADDRESS + TEMPORARYNGN_PAYOUT
Permanent offrampCRYPTO_ADDRESS + PERMANENTINTERNAL_BALANCE or NGN_PAYOUT
For example, if you want to give a customer a reusable wallet address to collect USDC and keep the funds in your Daya balance, create a PERMANENT crypto funding account with settlement_destination.type: INTERNAL_BALANCE.
Reusable crypto address to Daya balance
{
  "type": "PERMANENT",
  "rail": "CRYPTO_ADDRESS",
  "customer": {
    "customer_id": "650e8400-e29b-41d4-a716-446655440000"
  },
  "asset": "USDC",
  "chain": "BASE",
  "settlement_destination": {
    "type": "INTERNAL_BALANCE"
  }
}
The account or address the customer should pay into is returned in instructions. For NGN, instructions contains the bank account details:
{
  "currency": "NGN",
  "instructions": [
    {
      "type": "NGN_VIRTUAL_ACCOUNT",
      "status": "ACTIVE",
      "bank_name": "Wema Bank",
      "bank_code": "035",
      "account_number": "1234567890",
      "account_name": "Daya - Ada Lovelace",
      "currency": "NGN"
    }
  ]
}
For crypto, asset identifies the stablecoin, chain identifies the network, and instructions contains the wallet address:
{
  "asset": "USDC",
  "chain": "BASE",
  "instructions": [
    {
      "type": "CRYPTO_ADDRESS",
      "status": "ACTIVE",
      "address": "0x742d35cc6634c0532925a3b844bc9e7595f2bd18",
      "chain": "BASE"
    }
  ]
}
The product concepts are still onramps and offramps. New integrations create both with /v1/funding-accounts. The Legacy API section lists older /v1/onramps and /v1/offramps routes for existing integrations.

Account Types

TypeUse caseAmountLifetime
TEMPORARYOne-time payment detailsRequired integer amount for NGN virtual accountsMay expire
PERMANENTReusable payment detailsNot allowedReusable until disabled
Permanent NGN virtual accounts require the customer to have completed Tier 1 KYC.

Settlement Destinations

Settlement destination controls where received funds are delivered after the funding account receives money.
RailTypeSupported destinations
NGN_VIRTUAL_ACCOUNTTEMPORARYINTERNAL_BALANCE, ONCHAIN
NGN_VIRTUAL_ACCOUNTPERMANENTINTERNAL_BALANCE, ONCHAIN
CRYPTO_ADDRESSTEMPORARYNGN_PAYOUT
CRYPTO_ADDRESSPERMANENTINTERNAL_BALANCE, NGN_PAYOUT
For NGN_PAYOUT, fetch supported banks with GET /v1/banks, verify the account with POST /v1/banks/resolve, then send the verified destination_bank.account_number and destination_bank.bank_code.

Lifecycle

Funding accounts move through these statuses:
StatusMeaning
PENDINGFunding account setup is in progress
ACTIVEPayment details are ready and can be shown to the customer
FAILEDFunding account setup failed
DISABLEDFunding account and active payment details are disabled
Permanent active funding accounts can rotate settlement destination with PATCH /v1/funding-accounts/{id}/settlement-destination. Rotation does not create new payment details.

Webhooks

Funding account setup emits:
EventWhen sent
funding_account.createdFunding account record is created in PENDING state
funding_account.activePayment details are ready
funding_account.failedSetup fails
funding_account.disabledAn active funding account is disabled
The webhook data object is the same public funding account response returned by the API.

Deposits from Funding Accounts

When money arrives through a funding account, Daya creates a deposit. Deposit API responses and deposit webhook payloads include funding_account_id so you can connect the incoming money back to the funding account the customer paid into. Funding-account instruction IDs stay internal. Your integration should store the public funding_account_id and the deposit id.
EventWhen sent
deposit.receivedIncoming funds are recorded
deposit.processingSettlement has started
deposit.requires_reviewThe deposit needs review before it can continue
deposit.completedFunds reached the configured settlement destination
deposit.failedThe deposit failed
deposit.reversedA completed deposit was reversed
If settlement requires background delivery work, track the merchant-facing lifecycle with deposit.* events. Funding-account settlement does not emit separate payout webhooks.

Next Steps

Create Funding Account

Create NGN or crypto payment details.

Onramps

Collect NGN from customers.

Offramps

Collect stablecoins from customers.

Webhook Events

Track funding account and deposit state changes in real time.