Skip to main content
POST
/
v1
/
transfers
Create transfer
curl --request POST \
  --url https://api.daya.co/v1/transfers \
  --header 'Content-Type: application/json' \
  --header 'Idempotency-Key: <idempotency-key>' \
  --header 'X-Api-Key: <x-api-key>' \
  --data '
{
  "currency": "<string>",
  "amount": "<string>",
  "reference": "<string>",
  "recipient_id": "<string>",
  "destination": {
    "destination.type": "<string>",
    "destination.bank_account": {
      "destination.bank_account.account_number": "<string>",
      "destination.bank_account.bank_code": "<string>",
      "destination.bank_account.account_name": "<string>"
    },
    "destination.us_bank_account": {
      "destination.us_bank_account.account_owner_name": "<string>",
      "destination.us_bank_account.account_number": "<string>",
      "destination.us_bank_account.routing_number": "<string>",
      "destination.us_bank_account.bank_name": "<string>",
      "destination.us_bank_account.account_type": "<string>",
      "destination.us_bank_account.payout_scheme": "<string>",
      "destination.us_bank_account.address": {}
    },
    "destination.swift_bank_account": {
      "destination.swift_bank_account.account_owner_name": "<string>",
      "destination.swift_bank_account.iban": "<string>",
      "destination.swift_bank_account.bic": "<string>",
      "destination.swift_bank_account.bank_name": "<string>",
      "destination.swift_bank_account.address": {}
    }
  },
  "on_behalf_of": {
    "on_behalf_of.customer_id": "<string>"
  }
}
'
{
  "id": "850e8400-e29b-41d4-a716-446655440000",
  "reference": "txn_ngn_001",
  "status": "PROCESSING",
  "currency": "NGN",
  "amount": "50000.00",
  "debit_currency": "USD",
  "debit_amount": "32.26",
  "fee": "0.81",
  "rate": {
    "side": "SELL",
    "value": "1550.00",
    "captured_at": "2026-01-05T15:04:05Z"
  },
  "recipient": {
    "id": "750e8400-e29b-41d4-a716-446655440000",
    "type": "BANK_ACCOUNT",
    "bank_account": {
      "account_name": "John Doe",
      "account_number_last4": "7890",
      "bank_code": "044",
      "bank_name": "Access Bank"
    }
  },
  "on_behalf_of": null,
  "created_at": "2026-01-05T15:04:05Z",
  "settled_at": null
}

Overview

Create a transfer to send funds to a saved recipient or an inline destination. Transfers support both NGN bank transfers and USD ACH/wire/SWIFT transfers. Transfers are funded from your merchant balance. Before creating a transfer, ensure your balance has sufficient funds. You can fund your balance in two ways:
  • Crypto deposits — send stablecoins to your merchant funding crypto wallet addresses.
  • NGN deposits — transfer Naira to your permanent merchant funding NGN bank account (converted to USD at the current rate).
All onramp settlements and offramp deposits are pooled into your collection balance. To use those funds for transfers or withdrawals, first move them to your withdrawal balance via the balance transfer endpoint. Merchant funding deposits go directly into your withdrawal balance. Exactly one of recipient_id or destination must be provided.
Saved vs inline recipients:
  • Saved recipients are created separately via POST /v1/recipients and referenced by recipient_id.
  • Inline recipients are created implicitly when destination is provided.
  • For inline USD destinations, on_behalf_of.customer_id is effectively required because the inline recipient-creation flow needs a customer context.
  • That customer must already be tier-2 verified; otherwise inline USD recipient creation fails.
Idempotency: This endpoint is idempotent. The canonical header is Idempotency-Key; X-Idempotency-Key is also accepted as a fallback.

Authentication

X-Api-Key
string
required
Your merchant API key
Idempotency-Key
string
required
Unique idempotency key for request deduplication. X-Idempotency-Key is also accepted.Example: 550e8400-e29b-41d4-a716-446655440000

Request Body

currency
string
required
Transfer currency.Allowed values: NGN | USD
  • NGN transfers: only BANK_ACCOUNT recipients.
  • USD transfers: only US_BANK_ACCOUNT or SWIFT_BANK_ACCOUNT recipients.
amount
string
required
Transfer amount as a decimal string in the target currency.Example: 50000.00
reference
string
required
Merchant-provided unique reference for the transfer.Example: txn_abc123
recipient_id
string
ID of a previously saved recipient (UUID). Mutually exclusive with destination.Example: 750e8400-e29b-41d4-a716-446655440000
destination
object
Inline destination details. Mutually exclusive with recipient_id.
on_behalf_of
object
Optional metadata linking the transfer to a customer. Effectively required for inline USD destinations.

Request Examples

curl --request POST \
  --url https://api.daya.co/v1/transfers \
  --header 'X-Api-Key: YOUR_API_KEY' \
  --header 'Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000' \
  --header 'Content-Type: application/json' \
  --data '{
    "currency": "NGN",
    "amount": "50000.00",
    "reference": "txn_ngn_001",
    "recipient_id": "750e8400-e29b-41d4-a716-446655440000"
  }'

Response

id
string
required
Transfer ID (UUID)
reference
string
required
Merchant-provided reference
status
string
required
External status: PROCESSING, SETTLED, or FAILED
currency
string
required
Transfer currency (NGN or USD)
amount
string
required
Transfer amount in the target currency
debit_currency
string
required
Currency debited from the merchant balance (USD)
debit_amount
string
required
Amount debited from the merchant balance
fee
string
required
Fee amount.
rate
object
Captured exchange rate snapshot. Present for NGN transfers.
recipient
object
Resolved recipient details
on_behalf_of
object
Customer metadata if provided
created_at
string
required
When the transfer was created (ISO 8601)
settled_at
string
When the transfer settled (ISO 8601). Null if not yet settled.

Success Response

{
  "id": "850e8400-e29b-41d4-a716-446655440000",
  "reference": "txn_ngn_001",
  "status": "PROCESSING",
  "currency": "NGN",
  "amount": "50000.00",
  "debit_currency": "USD",
  "debit_amount": "32.26",
  "fee": "0.81",
  "rate": {
    "side": "SELL",
    "value": "1550.00",
    "captured_at": "2026-01-05T15:04:05Z"
  },
  "recipient": {
    "id": "750e8400-e29b-41d4-a716-446655440000",
    "type": "BANK_ACCOUNT",
    "bank_account": {
      "account_name": "John Doe",
      "account_number_last4": "7890",
      "bank_code": "044",
      "bank_name": "Access Bank"
    }
  },
  "on_behalf_of": null,
  "created_at": "2026-01-05T15:04:05Z",
  "settled_at": null
}

Notes

  • A minimum effective USD debit of $1.00 is enforced.
  • For NGN transfers, debit_amount is USD derived from the live USD→NGN sell rate at creation time.
  • Saved USD recipients can be reused later without resending full destination details.