Skip to main content

Transfer API Reference

This reference documents the B2C (business-to-customer) transfer initiation API.

Base URL

The B2C API is a separate deployment from the C2B payment API — use the transfers base URL provided during onboarding. Because the host is part of the signed canonical string, signatures are bound to the exact host and environment you call.

Authentication

Requests are authenticated with a detached Ed25519 signature over the v1 canonical string, sent via the X-Public-Key, X-Signature, X-Timestamp, and X-Request-ID headers. Your API key must carry the b2c permission. See Authentication for the full scheme, signing helpers, and the replay/rate-limit rules that apply to every request.

Initiate Transfer

Creates a payout transaction and debits your merchant wallet. The payout itself settles asynchronously; the final result is delivered by webhook. Endpoint

Request Body

Validation failures are accumulated — the error message lists every failing field.

Payout Rails

Response

A 200 means the transaction was recorded and your wallet debited. Track txn_id — the settlement webhook references it.
Retrying transfers moves money — be careful. On UPSTREAM_TIMEOUT or UPSTREAM_UNAVAILABLE, check for a settlement webhook or contact support with the requestId before resubmitting, and always use a stable client_reference so duplicates can be detected during reconciliation. The wallet debit itself is idempotent per transaction, so a single accepted transfer can never double-charge.

Transfer Statuses

Delivered via webhook (see B2C Callbacks):