curl --request POST \
--url https://api.example.com/payouts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contactId": "ct_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41",
"publicKey": "<string>"
}
'import requests
url = "https://api.example.com/payouts"
payload = {
"contactId": "ct_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41",
"publicKey": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({contactId: 'ct_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41', publicKey: '<string>'})
};
fetch('https://api.example.com/payouts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "<string>",
"kind": "fiat",
"status": "awaitingSignature",
"idempotencyKey": "<string>",
"quote": {
"fromAmount": "500.00",
"fromCurrency": "<string>",
"toAmount": "500.00",
"toCurrency": "<string>",
"rate": "500.00",
"feeAmount": "500.00",
"feeCurrency": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"fromChainId": "<string>",
"toChainId": "<string>"
},
"approval": {
"id": "<string>",
"payload": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
},
"debit": {
"address": "<string>",
"amount": "500.00",
"amountAtomic": "<string>",
"token": "<string>",
"chainId": 123
},
"contact": {
"contactId": "ct_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41",
"name": "<string>",
"address": "<string>",
"chainId": "<string>",
"token": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}Create an outgoing transfer
Validate the contact, fix the transfer terms, reserve an idempotent outgoing transfer and return the approval payload to sign. Supplying amount fixes the debit side; amountTo fixes the contact side.
curl --request POST \
--url https://api.example.com/payouts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contactId": "ct_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41",
"publicKey": "<string>"
}
'import requests
url = "https://api.example.com/payouts"
payload = {
"contactId": "ct_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41",
"publicKey": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({contactId: 'ct_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41', publicKey: '<string>'})
};
fetch('https://api.example.com/payouts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "<string>",
"kind": "fiat",
"status": "awaitingSignature",
"idempotencyKey": "<string>",
"quote": {
"fromAmount": "500.00",
"fromCurrency": "<string>",
"toAmount": "500.00",
"toCurrency": "<string>",
"rate": "500.00",
"feeAmount": "500.00",
"feeCurrency": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"fromChainId": "<string>",
"toChainId": "<string>"
},
"approval": {
"id": "<string>",
"payload": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
},
"debit": {
"address": "<string>",
"amount": "500.00",
"amountAtomic": "<string>",
"token": "<string>",
"chainId": 123
},
"contact": {
"contactId": "ct_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41",
"name": "<string>",
"address": "<string>",
"chainId": "<string>",
"token": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
The client account to act for, as a cl_… id. Omit it to act as yourself.
"cl_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41"
Your own key for this write, ^[A-Za-z0-9._:-]{1,128}$. A retry with the same key replays the first answer; the same key with a different request is refused.
"po-inv-2026-114"
Body
Saved contact to receive this transfer.
^(?:ct_)?[A-Za-z0-9._:\-]{1,216}$"ct_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41"
Base64 DER SubjectPublicKeyInfo for the registered P-256 developer key.
1 - 512Exact amount to debit in the source currency.
^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$"500.00"
Exact amount the contact should receive.
^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$"500.00"
Reference or memo delivered with the transfer.
140Business purpose or reason for the transfer.
64Supporting document identifiers returned by POST /dapi/v1/documents.
10^(?:doc_)?[A-Za-z0-9._:\-]{1,216}$Optional receiving-account identifier used to select a specific funding route.
^(?:bnk_)?[A-Za-z0-9._:\-]{1,216}$"bnk_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41"
Settlement token this payout is funded with. The contact and the rail decide whether it can be used.
USDC, EURC Response
Successful Response
Stable public identifier for this outgoing transfer.
Whether the contact is account-based or on-chain.
fiat, onchain Current public lifecycle status of the transfer.
awaitingSignature, submitted, settled, failed, refunded Caller-supplied key that makes an identical retry return this result.
Price, fee and conversion terms fixed for this transfer.
Show child attributes
Show child attributes
Authorization to sign before execution.
Show child attributes
Show child attributes
Exact on-chain debit used to fund this transfer.
Show child attributes
Show child attributes
Contact snapshot fixed at creation.
Show child attributes
Show child attributes
Was this page helpful?