672b1916ba61
Create transfer batch
Executes a custody-signed outbound transfer batch to counterparty crypto-wallet accounts, chunks recipients into Solana transactions, and returns the batch, recipient, and transfer records. Supply an Idempotency-Key to retry safely: an identical resolved request returns the original batch without another on-chain submission, while reusing the key for a different request returns 409.
Headers
Selects the active project for this request. Required for session/dashboard callers. Ignored when authenticating with an API key, whose scope is fixed to the key's project.
Selects the active project for this request. Required for session/dashboard callers. Ignored when authenticating with an API key, whose scope is fixed to the key's project.
Idempotency key for safely retrying mutating requests. 1-255 printable ASCII characters; echoed back on the response.
Idempotency key for safely retrying mutating requests. 1-255 printable ASCII characters; echoed back on the response.
Request body
Example request
{
"projectId": "prj_example",
"externalId": "payroll_2026_06_30",
"source": "privy_wallet_123",
"token": "SOL",
"recipients": [
{
"externalId": "payroll_row_001",
"counterpartyId": "cp_example",
"counterpartyAccountId": "cpa_example",
"amount": "25.00"
}
],
"options": {
"maxRecipientsPerTransaction": 20,
"priorityFee": "auto",
"preflight": true
}
}Response
Transfer batch created
Example response
{
"data": {
"batch": {
"id": "xbatch_example",
"organizationId": "org_example",
"projectId": "prj_example",
"externalId": "payroll_2026_06_30",
"sourceWalletId": "privy_wallet_123",
"sourceAddress": "So11111111111111111111111111111111111111112",
"token": "SOL",
"status": "processing",
"totalAmount": "1000.00",
"recipientCount": 20,
"transactionCount": 1,
"createdAt": "2025-01-01T00:00:00.000Z",
"updatedAt": "2025-01-01T00:00:00.000Z"
},
"recipients": [
{
"transferId": "xfr_example",
"externalId": "payroll_row_001",
"counterpartyId": "cp_example",
"counterpartyAccountId": "cpa_example",
"destination": "So11111111111111111111111111111111111111112",
"amount": "100.00",
"status": "pending",
"createdAt": "2025-01-01T00:00:00.000Z",
"updatedAt": "2025-01-01T00:00:00.000Z"
}
],
"transfers": [
{
"id": "xfr_example",
"organizationId": "org_example",
"walletId": "privy_wallet_123",
"projectId": "prj_example",
"type": "transfer",
"direction": "outbound",
"status": "confirmed",
"signature": "sig_example",
"serializedTx": "base64_tx_example",
"slot": 123456,
"blockTime": "2025-01-01T00:00:00.000Z",
"fee": 5000,
"error": "Signature failed",
"initiatedBy": {
"type": "api_key"
},
"source": "So11111111111111111111111111111111111111112",
"destination": "So11111111111111111111111111111111111111112",
"rampsMemo": {
"invoice": "INV-123",
"po": "PO-9"
},
"amount": "100.00",
"provider": "moonpay",
"counterpartyId": "counterparty_example",
"counterpartyDisplayName": "Acme Studio",
"providerReference": "ramp_quote_example",
"deliveryMode": "session_widget",
"fiatCurrency": "USD",
"fiatAmount": "100.00",
"risk": {
"provider": "trm",
"score": "0.12",
"level": "low",
"evaluatedAt": "2025-01-01T00:00:00.000Z"
},
"moneygram": {
"transactionId": "mgi_tx_example",
"referenceNumber": "12345678",
"payoutAmount": 25,
"payoutStatus": "completed",
"cryptoTransferId": "xfr_moneygram_crypto_leg_example",
"solanaTxSignature": "sig_moneygram_usdc_transfer_example",
"lastWidgetError": "Transaction cancelled by user"
},
"createdAt": "2025-01-01T00:00:00.000Z",
"updatedAt": "2025-01-02T00:00:00.000Z"
}
]
},
"meta": {
"requestId": "req_example",
"timestamp": "2025-01-01T00:00:00.000Z"
}
}