Overview
Daya sends merchant webhooks for deposit, withdrawal, payout, and onramp lifecycle changes. All merchant webhook payloads share the same envelope:Common Payload Fields
Event type for the lifecycle transition that occurred.
RFC3339 timestamp for when the event was emitted.
Resource payload for the event. The shape depends on the event type.
Deposit Events
| Event | Terminal? | When Sent |
|---|---|---|
deposit.received | No | Deposit received (NGN or crypto) |
deposit.flagged | Yes | Deposit is flagged for review |
deposit.pending_withdrawal | No | Deposit pending on-chain withdrawal |
deposit.settled | Yes | Deposit is fully settled |
deposit.failed | Yes | Deposit permanently fails |
Withdrawal Events
| Event | Terminal? | When Sent |
|---|---|---|
withdrawal.submitted | No | Withdrawal submitted to chain |
withdrawal.settled | Yes | Withdrawal confirmed on-chain |
withdrawal.failed | Yes | Withdrawal failed |
Payout Events
| Event | Terminal? | When Sent |
|---|---|---|
payout.created | No | A payout has been created and is being processed |
payout.settled | Yes | A payout has been successfully settled |
payout.failed | Yes | A payout has failed |
Onramp Events
| Event | Terminal? | When Sent |
|---|---|---|
onramp.created | No | Onramp created |
onramp.completed | Yes | Onramp completed |
onramp.failed | Yes | Onramp failed |
Withdrawal Payload Shape
Withdrawal events send the public withdrawal response shape indata.
Unique withdrawal identifier.
Withdrawal amount in USD.
Destination chain.
Token sent on-chain.
Recipient on-chain address.
Current withdrawal status.
Failure code for unsuccessful withdrawals, when present.
Human-readable failure detail for unsuccessful withdrawals, when present.
Provider-side transfer identifier, when present.
On-chain transaction hash, when present.
When the withdrawal record was created.
Last update time for the withdrawal record.
When the withdrawal was submitted to the provider, when present.
When the withdrawal was settled, when present.
Deposit Webhook Payload Shape
Deposit webhooks now include fields for both NGN and crypto deposits:Deposit type:
NGN_DEPOSIT or CRYPTO_DEPOSIT.Unique deposit identifier.
Associated onramp ID (nullable, for NGN deposits).
Associated offramp ID (nullable, for crypto deposits).
Associated customer ID.
Amount received.
Deposit currency:
NGN, USDC, or USDT.Amount after conversion.
Settlement currency.
Fee deducted.
Fee currency.
Exchange rate applied.
FX rate identifier used.
Current deposit status.
Settlement progress.
Settlement mode:
ONCHAIN, INTERNAL_BALANCE, or NGN_PAYOUT.Stablecoin symbol (for crypto deposits).
Blockchain network (for crypto deposits).
On-chain transaction hash (for crypto deposits).
Flag code, when present.
Flag description, when present.
Example Deposit Event
Payout Webhook Payload Shape
Payout type:
NGN_PAYOUT or CRYPTO_PAYOUT.Unique payout identifier.
Merchant reference string.
Payout status:
PROCESSING, SETTLED, or FAILED.Delivery rail:
NGN_BANK or CRYPTO.Source currency.
Destination currency.
Amount debited from source.
Amount delivered to destination.
Fee charged.
Exchange rate object with
side, value, and captured_at.Sender object with
type (MERCHANT or CUSTOMER) and id.On-chain transaction hash (nullable, for crypto payouts).
When the payout was created.
When the payout was settled, when present.
Example Payout Event
Example Withdrawal Events
- withdrawal.submitted
- withdrawal.settled
- withdrawal.failed
Next Steps
Webhook Overview
Delivery guarantees, retries, and handler guidance
Webhook Verification
Verify the HMAC signature on incoming requests