curl --request POST \
--url https://api.example.com/api/v1/balance/payout/quote \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"documentIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"documentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"contactId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"amountTo": 123,
"bankAccountId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"rail": "<string>",
"sourceToken": "USDC",
"providers": [],
"fundingMode": "balance"
}
'import requests
url = "https://api.example.com/api/v1/balance/payout/quote"
payload = {
"documentIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"documentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"contactId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"amountTo": 123,
"bankAccountId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"rail": "<string>",
"sourceToken": "USDC",
"providers": [],
"fundingMode": "balance"
}
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({
documentIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
documentId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
contactId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
amount: 123,
amountTo: 123,
bankAccountId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
rail: '<string>',
sourceToken: 'USDC',
providers: [],
fundingMode: 'balance'
})
};
fetch('https://api.example.com/api/v1/balance/payout/quote', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"quoteId": "<string>",
"paymentChannel": "<string>",
"fromAmount": 123,
"fromCurrency": "<string>",
"toAmount": 123,
"toCurrency": "<string>",
"provider": "<string>",
"documentIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"paymentReference": "<string>",
"minToAmount": 123,
"slippageBps": 123,
"depositMemo": "<string>",
"feeAmount": 123,
"fixedFee": 123,
"flatFee": 123,
"feeCurrency": "<string>",
"rate": 123,
"expiresAt": "2023-11-07T05:31:56Z",
"depositAddress": "<string>",
"recipientAddress": "<string>",
"originChainId": "<string>",
"destinationChainId": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Get payout quote
Get quote for payout to contact. Auto-detects payment channel (IBAN/onchain/internal).
curl --request POST \
--url https://api.example.com/api/v1/balance/payout/quote \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"documentIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"documentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"contactId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"amountTo": 123,
"bankAccountId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"rail": "<string>",
"sourceToken": "USDC",
"providers": [],
"fundingMode": "balance"
}
'import requests
url = "https://api.example.com/api/v1/balance/payout/quote"
payload = {
"documentIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"documentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"contactId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"amountTo": 123,
"bankAccountId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"rail": "<string>",
"sourceToken": "USDC",
"providers": [],
"fundingMode": "balance"
}
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({
documentIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
documentId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
contactId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
amount: 123,
amountTo: 123,
bankAccountId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
rail: '<string>',
sourceToken: 'USDC',
providers: [],
fundingMode: 'balance'
})
};
fetch('https://api.example.com/api/v1/balance/payout/quote', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"quoteId": "<string>",
"paymentChannel": "<string>",
"fromAmount": 123,
"fromCurrency": "<string>",
"toAmount": 123,
"toCurrency": "<string>",
"provider": "<string>",
"documentIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"paymentReference": "<string>",
"minToAmount": 123,
"slippageBps": 123,
"depositMemo": "<string>",
"feeAmount": 123,
"fixedFee": 123,
"flatFee": 123,
"feeCurrency": "<string>",
"rate": 123,
"expiresAt": "2023-11-07T05:31:56Z",
"depositAddress": "<string>",
"recipientAddress": "<string>",
"originChainId": "<string>",
"destinationChainId": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Body
Request for a payout to a contact.
Moving value between the user's own accounts is a different operation with
its own resource — POST /balance/swap/quote (docs/balance-swap.md).
10Stablecoin a payout (offramp) quote is funded with.
USDC is the default across all providers. EURC is Align-only: Align accepts an EURC deposit for EUR/SEPA offramps (and prices other destination currencies through its own FX).
USDC, EURC Cross-chain swap provider.
intents, lifi, align, cowswap, aerodrome balance, deposit Response
Successful Response
What a quote prices, and nothing else.
Rail rules — whether a reference is accepted, the floor on the amount, the
fee schedule behind it — belong to
POST /balance/payout/recipient/capabilities, which the client reads
before it prices anything. Repeating them here only gave two sources for
one fact.
What this price is, on the other hand, includes how far it can move:
minToAmount and slippageBps are not rail rules but this quote's own
worst case, and only the provider that priced it knows them.
Was this page helpful?