Skip to main content
POST
/
v1
/
transfers
Execute a transfer
curl --request POST \
  --url https://api.paystack.com/v1/transfers \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "wallet_id": "<string>",
  "beneficiary_id": "<string>",
  "amount": "<string>",
  "reference": "<string>",
  "source_currency": "<string>",
  "destination_currency": "<string>",
  "retry_on_failure": true,
  "metadata": {}
}
'
{
  "status": true,
  "message": "Transfer executed successfully",
  "code": "ok",
  "data": {
    "id": "tfr_01EXAMPLE",
    "reference": "INV-2026-001",
    "status": "processing",
    "retry_on_failure": true,
    "customer": {
      "id": "cust_seed_alice",
      "type": "individual",
      "name": "Alice Johnson",
      "email": "alice.seed@globalstack.mock",
      "tier": "tier_2",
      "created_at": "2026-04-16T16:14:08.000Z",
      "updated_at": "2026-04-16T16:14:08.000Z"
    },
    "wallet": {
      "id": "wal_seed_alice_usdc",
      "currency": "USDC",
      "label": "USDC Wallet"
    },
    "beneficiary": {
      "id": "ben_01KPBAP7WTDKQKW5B3R31VPNX4",
      "customer_id": "cust_01HXYZABC1234567890ABCDEFG",
      "name": "Alice Bank Beneficiary",
      "type": "fiat",
      "currency": "NGN",
      "details": {
        "country_code": "NG",
        "network": "bank",
        "account_number": "0039415616",
        "provider": {
          "id": "prov_01KPBAP7WTDKQKW5B3R31VPNX4",
          "name": "Access Bank",
          "code": "000014"
        },
        "account_name": "ALICE JOHNSON"
      },
      "metadata": {},
      "status": "pending",
      "created_at": "2026-04-16T16:14:08.000Z",
      "updated_at": "2026-04-16T16:14:08.000Z",
      "label": "Alice's salary account",
      "merchant_reference": "ref_01HXYZ4K5ABCDEFGHJKLMNPQRS"
    },
    "amount": "5.000000",
    "currency": "USDC",
    "network": "base",
    "metadata": {
      "payout_batch": "batch_001"
    },
    "created_at": "2026-04-22T02:00:00.000Z",
    "updated_at": "2026-04-22T02:00:00.000Z",
    "transaction_hash": null,
    "failure_reason": null
  },
  "meta": {
    "request_id": "req_01HXYZ4K5ABCDEFGHJKLMNPQRS",
    "timestamp": "2026-05-14T15:43:55.732Z",
    "version": "1"
  }
}

Authorizations

Authorization
string
header
required

API key issued during merchant onboarding.

Headers

Idempotency-Key
string

Optional client-supplied key. Identical key + identical body within 24h replays the original response. Identical key + different body returns 409 idempotency_conflict. The hash is over raw bytes — clients retrying must send the byte-identical body; a re-serialised JSON payload will produce a different hash and a 409. Strongly recommended for retry-safe clients.

Pattern: ^[A-Za-z0-9_\-]{8,255}$

Body

application/json

ExecuteTransferDto

wallet_id
string
required
Maximum string length: 64
beneficiary_id
string
required
Maximum string length: 64
amount
string
required
Pattern: ^\d+(\.\d+)?$
reference
string
required
Maximum string length: 128
source_currency
string
Pattern: ^[A-Z0-9]{2,8}$
destination_currency
string
Pattern: ^[A-Z0-9]{2,8}$
retry_on_failure
boolean
metadata
object

Response

Transfer executed successfully

status
enum<boolean>
required
Available options:
true
Example:

true

message
string
required

Human-readable summary

Example:

"Transfer executed successfully"

code
enum<string>
required
Available options:
ok
Example:

"ok"

data
object
required
meta
object
required