---
title: "Create Transfer"
method: POST
path: "/v1/transfers"
tags: ["public.transfers"]
---

# Create Transfer

`POST /v1/transfers`

Creates a merchant-initiated transfer to a saved recipient or an inline destination. Transfers debit the merchant balance by default. To pay from one customer's retained NGN balance, set currency=NGN, debit_currency=NGN, debit_scope=CUSTOMER, and on_behalf_of.customer_id; the recipient must belong to that customer. Transfers support NGN bank recipients, USD ACH, wire, RTP, or SWIFT recipients, USDC/USDT crypto addresses funded from the merchant USD balance, and native SOL/BNB addresses funded from the matching merchant native-asset balance. NGN payouts continue to debit USD by default; set debit_currency=NGN to debit retained NGN with no FX conversion. Omit debit_currency for native SOL/BNB transfers. NGN bank recipients must receive at least 100 NGN. Recipient amounts below 1,000 NGN incur a flat 20 NGN fee; recipient amounts of 1,000 NGN or more use the configured percentage fee and cap. Use /v1/supported-chains to discover currently enabled asset and chain combinations. Transfer webhooks use public transfer events: transfer.created, transfer.processing, transfer.requires_review, transfer.submitted, transfer.completed, transfer.failed, and transfer.reversed.

## Headers

- `X-Idempotency-Key` string, required

## Request body

- CreateTransferRequest
  - `amount` string, required
  - `currency` 'NGN' | 'USD' | 'SOL' | 'BNB', required
  - `debit_currency` 'USD' | 'NGN' — Optional funding currency. NGN payouts default to USD for backwards compatibility; set NGN to spend retained NGN balance.
  - `debit_scope` 'MERCHANT' | 'CUSTOMER' — Optional balance owner. Defaults to MERCHANT. Set CUSTOMER with debit_currency=NGN and on_behalf_of.customer_id to spend that customer's retained NGN balance.
  - `destination` TransferDestinationReq
    - `bank_account` BankAccountInput
      - `account_name` string
      - `account_number` string, required
      - `bank_code` string, required
    - `crypto_address` CryptoAddressInput
      - `address` string, required
      - `asset` 'USDC' | 'USDT' | 'SOL' | 'BNB', required
      - `chain` string, required
    - `swift_bank_account` SWIFTBankAccountInput
      - `account_country` string, required
      - `account_owner_name` string, required
      - `account_owner_type` 'individual' | 'business', required
      - `address` RecipientAddressInput, required
        - `city` string, required
        - `country` string, required
        - `postal_code` string, required
        - `state` string
        - `street_line_1` string, required
        - `street_line_2` string
      - `bank_address` RecipientAddressInput, required
        - `city` string, required
        - `country` string, required
        - `postal_code` string, required
        - `state` string
        - `street_line_1` string, required
        - `street_line_2` string
      - `bank_name` string
      - `bic` string
      - `business_name` string
      - `category` 'client' | 'parent_company' | 'subsidiary' | 'supplier', required
      - `first_name` string
      - `iban` string, required
      - `last_name` string
      - `purpose_of_funds` string[], required
      - `short_business_description` string, required
    - `type` 'BANK_ACCOUNT' | 'CRYPTO_ADDRESS' | 'US_BANK_ACCOUNT' | 'SWIFT_BANK_ACCOUNT', required
    - `us_bank_account` USBankAccountInput
      - `account_number` string, required
      - `account_owner_name` string, required
      - `account_type` 'checking' | 'savings', required
      - `address` RecipientAddressInput, required
        - `city` string, required
        - `country` string, required
        - `postal_code` string, required
        - `state` string
        - `street_line_1` string, required
        - `street_line_2` string
      - `bank_name` string, required
      - `payout_scheme` 'ach' | 'wire' | 'rtp', required
      - `routing_number` string, required
  - `on_behalf_of` OnBehalfOfReq
    - `customer_id` string, required
  - `recipient_id` string
  - `reference` string, required

## Response `201`

Created

- TransferResponse
  - `amount` string
  - `created_at` string
  - `currency` string
  - `debit_amount` string
  - `debit_currency` string
  - `debit_scope` string
  - `fee` string
  - `flag_reason` string
  - `id` string
  - `on_behalf_of` OnBehalfOfReq
    - `customer_id` string, required
  - `rail` string
  - `rate` TransferRateResponse
    - `captured_at` string
    - `side` string
    - `value` string
  - `recipient` RecipientResponse
    - `bank_account` BankAccountResponse
      - `account_name` string
      - `account_number_last4` string
      - `bank_code` string
      - `bank_name` string
    - `created_at` string
    - `crypto_address` CryptoAddressResponse
      - `address` string
      - `asset` string
      - `chain` string
    - `first_name` string
    - `id` string
    - `last_name` string
    - `swift_bank_account` SWIFTBankAccountResponse
      - `account_country` string
      - `account_owner_name` string
      - `account_owner_type` string
      - `address` RecipientAddressInput
        - `city` string, required
        - `country` string, required
        - `postal_code` string, required
        - `state` string
        - `street_line_1` string, required
        - `street_line_2` string
      - `bank_address` RecipientAddressInput
        - `city` string, required
        - `country` string, required
        - `postal_code` string, required
        - `state` string
        - `street_line_1` string, required
        - `street_line_2` string
      - `bank_name` string
      - `bic` string
      - `business_name` string
      - `category` string
      - `first_name` string
      - `iban_last4` string
      - `last_name` string
      - `purpose_of_funds` string[]
      - `short_business_description` string
    - `type` string
    - `us_bank_account` USBankAccountResponse
      - `account_number_last4` string
      - `account_owner_name` string
      - `account_type` string
      - `address` RecipientAddressInput
        - `city` string, required
        - `country` string, required
        - `postal_code` string, required
        - `state` string
        - `street_line_1` string, required
        - `street_line_2` string
      - `bank_name` string
      - `payout_scheme` string
      - `routing_number` string
  - `reference` string
  - `settled_at` string
  - `status` string

## Other responses

- `400` — Invalid request
- `401` — Unauthorized
- `404` — Recipient not found
- `409` — Idempotency conflict
- `500` — Internal server error

---

[API](https://skmtc.dev/daya/apis/daya-external-api-public-api.md) · [All operations](https://skmtc.dev/daya/apis/daya-external-api-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/daya/daya-external-api-public-api/revisions/5fc72bf91a48/schema)
