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.
Overview
Move NGN from your Daya Pro balance to a Nigerian bank account. The withdrawal is queued and dispatched through Daya’s payout provider; the response returns immediately with a transaction ID and the initial status.
Requires Trade scope.
Requests are idempotent on idempotency_key. Replaying the same key always returns the original transaction without re-running the withdrawal — safe to retry on network failures.
There are two ways to specify the destination:
- Saved beneficiary — pass
bank_account_id (UUID of a beneficiary previously stored on your account). All other bank fields are ignored.
- Inline details — pass
account_number, bank_code, account_name, bank_name directly.
Authentication
Your API key with Trade scope
Request Body
Caller-supplied unique key. Reuse on retry to avoid double-spend.Example: wd-2026-05-06-01
Withdrawal amount as a decimal string.Example: 1000000.00
Currency code.Example: NGN
UUID of a saved bank account on the user. When set, the inline bank fields below are ignored.
Destination NUBAN. Required when bank_account_id is omitted.Example: 0123456789
CBN bank code. Required when bank_account_id is omitted.Example: 058
Account holder name as registered with the destination bank. Required when bank_account_id is omitted. Must match — the provider rejects mismatched names.
Display name of the destination bank. Required when bank_account_id is omitted.Example: GTBank
Optional free-form narration shown on the recipient’s bank statement.
Request Example
curl --request POST \
--url https://api.pro.daya.co/public/v1/withdrawals/bank \
--header 'X-Api-Key: daya_sk_YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"idempotency_key": "wd-2026-05-06-01",
"account_number": "0123456789",
"bank_code": "058",
"account_name": "Jane Doe",
"bank_name": "GTBank",
"amount": "1000000.00",
"currency": "NGN",
"narration": "Payout for invoice 123"
}'
Response
Daya transaction UUID. Use this to track status.
Initial status. Most withdrawals return as processing and transition asynchronously.Values: pending, processing, completed, failed
Fee charged for the withdrawal.
Provider-side transfer reference (when available).
ISO 8601 timestamp when the withdrawal was accepted.
{
"success": true,
"message": "Withdrawal initiated successfully",
"data": {
"transaction_id": "22222222-2222-2222-2222-222222222222",
"status": "processing",
"amount": "1000000.00",
"currency": "NGN",
"fee": "100.00",
"transfer_id": "FLW-TRF-9001",
"created_at": "2026-05-06T12:00:00Z"
}
}
Error Responses
| Code | Meaning |
|---|
400 | Validation error or insufficient balance |
403 | Missing Trade scope, or account restricted |
409 | Same idempotency_key previously used with a different request body |
Notes on settlement
The response confirms the withdrawal was accepted, not that funds have arrived. Final settlement happens through the underlying payout provider and can take seconds to minutes depending on the destination bank.