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.
Request Body
| Parameter | Type | Description |
|---|---|---|
amountrequired | number | Amount in source currency (must be positive). |
currencyrequired | string | Source currency code: "USD", "GBP", or "EUR". |
bank_account_idrequired | string | Linked bank account ID. |
wallet_id | string | Destination wallet ID. Uses primary wallet if omitted. |
memo | string | Optional memo for the transaction (max 500 characters). |
Scope required
funding:write scope and a verified business.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"
}'{
"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.
| Parameter | Type | Description |
|---|---|---|
limit | number | Results per page (default 20, max 100). |
starting_after | string | Cursor for pagination — funding ID to start after. |
status | string | Filter 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.
| Parameter | Type | Description |
|---|---|---|
amountrequired | number | Amount to send (must be positive). |
currencyrequired | string | Currency code: "USD", "GBP", "EUR", or "USDC". |
payee_idrequired | string | Registered payee ID. |
payout_typerequired | string | "fiat" for bank payouts or "usdc" for on-chain transfers. |
wallet_id | string | Source wallet ID. Uses primary wallet if omitted. |
reference | string | Payment reference (max 500 characters). |
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"
}'{
"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"
}{
"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.
| Parameter | Type | Description |
|---|---|---|
limit | number | Results per page (default 20, max 100). |
starting_after | string | Cursor for pagination. |
status | string | Filter by status. |
Register Payee
Register recipients before sending payouts. Payees undergo risk screening and can receive funds via bank transfer or USDC wallet address.
| Parameter | Type | Description |
|---|---|---|
namerequired | string | Payee display name (max 200 characters). |
typerequired | string | "individual" or "business". |
countryrequired | string | ISO 3166-1 alpha-2 country code (e.g. "US", "GB"). |
preferred_currency | string | Preferred payout currency: "USD", "GBP", or "EUR". |
bank_details | object | Bank account information for fiat payouts. |
bank_details.account_holder_name | string | Name on the bank account. |
bank_details.account_number | string | Bank account number. |
bank_details.iban | string | IBAN for European accounts. |
bank_details.sort_code | string | Sort code (UK accounts). |
bank_details.routing_number | string | Routing number (US accounts). |
bank_details.swift_code | string | SWIFT/BIC for international transfers. |
wallet_address | string | Crypto wallet address for USDC payouts. |
wallet_blockchain | string | Blockchain network (default: "ethereum"). |
{
"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.
| Parameter | Type | Description |
|---|---|---|
limit | number | Results per page (default 20, max 100). |
starting_after | string | Cursor for pagination. |
status | string | Filter 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.
Creates a Plaid link token to begin the bank account linking flow. No request body required.
{
"link_token": "link-sandbox-abc123...",
"expiration": "2026-01-15T14:30:00Z"
}| Parameter | Type | Description |
|---|---|---|
limit | number | Results per page (default 20, max 100). |
starting_after | string | Cursor for pagination. |
Payment Statuses
Status lifecycle
| Status | Description |
|---|---|
pending | Payment created, awaiting processing. |
processing | Payment is being processed by the banking network. |
completed | Funds have been delivered successfully. |
failed | Payment failed — check the error field for details. |
cancelled | Payment was cancelled before completion. |
