Skip to main content

What is a Deposit?

A deposit is money received into Daya through an NGN virtual account or a crypto address. It is the main object you use to reconcile inbound NGN and crypto funds. For new receive-money integrations, a funding account is the payment detail your customer uses. The deposit is the money movement that is created after the customer pays into it. USD bank-account activity is tracked separately as a USD virtual account deposit. Use USD virtual account deposits for payments into USD virtual accounts.
TypeDescription
NGN_DEPOSITNaira received into an NGN virtual account
CRYPTO_DEPOSITStablecoins received into a crypto address

Deposit Properties

Each deposit is recorded with the following core attributes:
PropertyDescription
typeNGN_DEPOSIT or CRYPTO_DEPOSIT
idUnique identifier
funding_account_idFunding account that received the funds
onramp_idLegacy NGN receive-flow ID, when present
offramp_idLegacy crypto receive-flow ID, when present
customer_idAssociated customer
amountAmount received into Daya
currencyNGN, USDC, or USDT
settled_amountAmount delivered to the settlement destination
settled_currencySettlement destination currency, such as USD for internal balance, NGN for NGN payout, or USDC/USDT for onchain settlement
fee_amountFee deducted
fee_currencyFee currency
rateExchange rate applied
rate_idFX rate used (if applicable)
statusCurrent deposit state
settlement_statusSettlement progress: PENDING, PROCESSING, REQUIRES_REVIEW, COMPLETED, FAILED, REVERSED
settlement_modeONCHAIN, INTERNAL_BALANCE, or NGN_PAYOUT
assetStablecoin symbol (for crypto deposits)
chainBlockchain network (for crypto deposits)
tx_hashOn-chain transaction hash (for crypto deposits)
flag_codeFlag code (if flagged)
flag_messageFlag description (if flagged)
created_atWhen deposit was received
updated_atLast status update

Deposit Statuses

Deposits progress through these states:
StatusMeaningTerminal
RECEIVEDDeposit received, processing not yet startedNo
PROCESSINGSettlement is in progressNo
REQUIRES_REVIEWDeposit needs review before it can continueNo
COMPLETEDDeposit reached its settlement destinationYes
FAILEDPermanent failureYes
REVERSEDBank reversed the transferYes
Older integrations may still send or filter by PENDING or FLAGGED. Treat FLAGGED as REQUIRES_REVIEW in new UI and webhook handling.

In-Progress vs Terminal States

In-progress
  • RECEIVED
  • PROCESSING
  • REQUIRES_REVIEW
Terminal
  • COMPLETED
  • FAILED
  • REVERSED
Once a deposit reaches a terminal state, it does not transition further.

Deposit Lifecycle

At a high level, deposits move through the following stages:
  1. Received Transfer detected (NGN bank transfer or crypto deposit) -> RECEIVED
  2. Processing Daya starts settlement, conversion, or delivery work -> PROCESSING
  3. Completed Funds are delivered to a wallet, merchant balance, or bank account -> COMPLETED
  4. Reviewed (if needed) Late, invalid, mismatched, or risky deposits are held -> REQUIRES_REVIEW or FAILED

Common Flagging Conditions

A deposit may require review when:
  • It arrives after a temporary funding account or rate expiry
  • A merchant or system limit is exceeded
  • Risk checks require manual review
  • A temporary NGN deposit does not match the expected amount
Deposits in REQUIRES_REVIEW do not settle automatically and require operations review. Deposits include funding_account_id in API responses and webhook payloads. Use this ID to tie the incoming money back to the funding account shown to the customer. Instruction IDs are internal and are not included in public deposit responses.
If a deposit settles through background delivery work, continue tracking the customer-facing status from the deposit. Daya sends deposit.* events for this flow, not separate payout webhooks.

USD Virtual Account Deposits

USD virtual accounts are a separate receive rail for customers who need US dollar bank details. Payments into those accounts are returned by the USD virtual account deposits API with type: USD_DEPOSIT. Use /v1/deposits for NGN and crypto deposits. Use /v1/virtual-account-deposits for USD virtual account deposits.

Handling Underpayments and Overpayments (Temporary VAs Only)

For temporary NGN funding accounts, merchants specify an expected deposit amount upfront. When customers send more or less than this amount, Daya handles it automatically through refunds or partial processing.
See the full guide: Handling Underpayments and OverpaymentsThis covers underpayments, overpayments, Fidelity Bank exceptions, and API behavior in detail.

Bank Reversals

Banks may occasionally reverse a transfer after it is received. In such cases:
  • The deposit transitions to REVERSED

Withdrawals

If a funding account settles to merchant balance, withdrawals happen in a separate lifecycle after the deposit is already complete.

Crypto Deposits

For crypto deposits, additional fields are present:
  • typeCRYPTO_DEPOSIT
  • offramp_id — Legacy crypto receive-flow ID, when present
  • settlement_mode — How settlement is handled (INTERNAL_BALANCE or NGN_PAYOUT)
  • asset — Stablecoin symbol (USDC or USDT)
  • chain — Blockchain network
  • tx_hash — On-chain transaction hash

What Deposits Do Not Represent

  • They do not guarantee settlement

Next Steps

Funding Accounts

Learn how customers send funds into Daya

Rates & Settlement

Understand FX and delivery semantics

Withdrawals API

Track merchant balance withdrawals

Deposits API

View the API reference