Payments API

Move money globally with Chain's Payments API. Fund accounts from bank transfers, send payouts to recipients, and manage payees — all with automatic fiat-to-stablecoin conversion.

Create Funding Request

Create a funding request to move money from a linked bank account into your Chain wallet. Funds are automatically converted to USDC.

POST/v1/funding

Request Body

ParameterTypeDescription
amountrequirednumberAmount in source currency (must be positive).
currencyrequiredstringSource currency code: "USD", "GBP", or "EUR".
bank_account_idrequiredstringLinked bank account ID.
wallet_idstringDestination wallet ID. Uses primary wallet if omitted.
memostringOptional memo for the transaction (max 500 characters).

Scope required

This endpoint requires the funding:write scope and a verified business.
Example request
curl -X POST https://api.chain.com/v1/funding \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 10000,
    "currency": "USD",
    "bank_account_id": "ba_abc123",
    "wallet_id": "wal_xyz789",
    "memo": "Monthly treasury funding"
  }'
Response
{
  "id": "fund_123abc",
  "status": "processing",
  "amount": 10000,
  "currency": "USD",
  "estimated_usdc": 9985.50,
  "exchange_rate": 0.99855,
  "spread_bps": 15,
  "bank_account_id": "ba_abc123",
  "wallet_id": "wal_xyz789",
  "initiated_at": "2026-01-15T10:30:00Z"
}

List Funding Transactions

Retrieve a list of all funding transactions for your business.

GET/v1/funding
ParameterTypeDescription
limitnumberResults per page (default 20, max 100).
starting_afterstringCursor for pagination — funding ID to start after.
statusstringFilter by status.

Create Payout

Send funds from your wallet to a registered payee. Supports both fiat payouts (USDC is automatically converted to the recipient's local currency) and direct USDC payouts.

POST/v1/payouts
ParameterTypeDescription
amountrequirednumberAmount to send (must be positive).
currencyrequiredstringCurrency code: "USD", "GBP", "EUR", or "USDC".
payee_idrequiredstringRegistered payee ID.
payout_typerequiredstring"fiat" for bank payouts or "usdc" for on-chain transfers.
wallet_idstringSource wallet ID. Uses primary wallet if omitted.
referencestringPayment reference (max 500 characters).
Example request
curl -X POST https://api.chain.com/v1/payouts \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 5000,
    "currency": "USD",
    "payee_id": "payee_abc",
    "payout_type": "fiat",
    "wallet_id": "wal_xyz789",
    "reference": "Invoice #1234"
  }'
Fiat payout response
{
  "id": "po_456def",
  "payout_type": "fiat",
  "status": "processing",
  "amount": 5000,
  "currency": "USD",
  "usdc_amount": 5012.30,
  "payee_id": "payee_abc",
  "deposit_address": "0x...",
  "instructions": "Funds will be delivered within 1-2 business days.",
  "created_at": "2026-01-15T11:00:00Z"
}
USDC payout response
{
  "id": "po_789ghi",
  "payout_type": "usdc",
  "status": "processing",
  "amount": 2500,
  "currency": "USDC",
  "usdc_amount": 2500,
  "payee_id": "payee_xyz",
  "on_chain_tx_hash": "0xabc...",
  "created_at": "2026-01-15T11:30:00Z"
}

List Payouts

Retrieve a list of all payout transactions for your business.

GET/v1/payouts
ParameterTypeDescription
limitnumberResults per page (default 20, max 100).
starting_afterstringCursor for pagination.
statusstringFilter by status.

Register Payee

Register recipients before sending payouts. Payees undergo risk screening and can receive funds via bank transfer or USDC wallet address.

POST/v1/payees
ParameterTypeDescription
namerequiredstringPayee display name (max 200 characters).
typerequiredstring"individual" or "business".
countryrequiredstringISO 3166-1 alpha-2 country code (e.g. "US", "GB").
preferred_currencystringPreferred payout currency: "USD", "GBP", or "EUR".
bank_detailsobjectBank account information for fiat payouts.
bank_details.account_holder_namestringName on the bank account.
bank_details.account_numberstringBank account number.
bank_details.ibanstringIBAN for European accounts.
bank_details.sort_codestringSort code (UK accounts).
bank_details.routing_numberstringRouting number (US accounts).
bank_details.swift_codestringSWIFT/BIC for international transfers.
wallet_addressstringCrypto wallet address for USDC payouts.
wallet_blockchainstringBlockchain network (default: "ethereum").
Example response
{
  "id": "payee_abc123",
  "name": "Acme Corp",
  "type": "business",
  "country": "US",
  "preferred_currency": "USD",
  "has_bank_details": true,
  "has_wallet_address": false,
  "status": "active",
  "created_at": "2026-01-15T10:00:00Z"
}

List Payees

Retrieve all registered payees for your business.

GET/v1/payees
ParameterTypeDescription
limitnumberResults per page (default 20, max 100).
starting_afterstringCursor for pagination.
statusstringFilter by status.

Bank Accounts

Link bank accounts via Plaid for secure funding. Create a link token to initiate the Plaid flow, or list your already linked accounts.

POST/v1/bank-accounts

Creates a Plaid link token to begin the bank account linking flow. No request body required.

Response
{
  "link_token": "link-sandbox-abc123...",
  "expiration": "2026-01-15T14:30:00Z"
}
GET/v1/bank-accounts
ParameterTypeDescription
limitnumberResults per page (default 20, max 100).
starting_afterstringCursor for pagination.

Payment Statuses

Status lifecycle

All payments progress through a lifecycle. Use webhooks to get real-time status updates.
StatusDescription
pendingPayment created, awaiting processing.
processingPayment is being processed by the banking network.
completedFunds have been delivered successfully.
failedPayment failed — check the error field for details.
cancelledPayment was cancelled before completion.
globe
icon

Pax Dollar

USDP

icon

Ripple USD

RLUSD

icon

Dollar

USD

icon

Tether

USDT

icon

Pounds

GBP

icon

Euro

Eur