Create Payout
POST/payoutsDescription
Create a payout: a customer pays a beneficiary by sending crypto that is off-ramped to fiat. Returns the customer’s deposit_addresses for the customer to send to.
This is a signed request — the signature authorizes forwarding the funds to the chosen beneficiary, so a payout can never be redirected without your signing key.
⚠️
The customer must be active (KYC complete), and they may have only one open payout at a time.
Headers
| Header | Description | Required |
|---|---|---|
| Authorization | Bearer token with your API key | yes |
| Content-Type | application/json | yes |
Request Body
| Name | Type | Description | Required |
|---|---|---|---|
| customer_id | string | The customer sending the funds. Must be active. | yes |
| beneficiary_id | string | The beneficiary (bank account) that receives the fiat. | yes |
| amount | number | Payout amount in the smallest currency unit (e.g., cents for EUR). | yes |
| currency | string | Three-letter ISO currency code for the fiat payout (e.g., "EUR"). | yes |
| reference | string | A reference shown on the payout (e.g., "Invoice INV-1042"). | no |
| signatures | object | Signed authorization from the @exodus/checkout-signer SDK, keyed by chain family (e.g. { "evm": { ... } }). See Signed Requests. | yes |
Example Request
import { signPayout } from '@exodus/checkout-signer/evm'
const signatures = {
evm: signPayout({
privateKey: process.env.SIGNING_PRIVATE_KEY,
beneficiaryId: 'ben_1a2b3c',
amount: 150000,
}),
}
const response = await fetch('https://checkout-api.exodus-int.com/payouts', {
method: 'POST',
headers: {
Authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxx',
'Content-Type': 'application/json',
},
body: JSON.stringify({
customer_id: 'cus_9z8y7x',
beneficiary_id: 'ben_1a2b3c',
amount: 150000,
currency: 'EUR',
reference: 'Invoice INV-1042',
signatures,
}),
})Payout signing uses the same @exodus/checkout-signer
model as direct and two-step payments. The signer surface for payouts is being finalized during beta.
Response
SUCCESSFUL RESPONSE
{
"id": "pyt_5t6u7v",
"object": "payout",
"status": "deposit_pending",
"customer_id": "cus_9z8y7x",
"beneficiary_id": "ben_1a2b3c",
"amount": 150000,
"currency": "EUR",
"reference": "Invoice INV-1042",
"deposit_addresses": [
{ "address": "0x369aF2…9EDd", "chains": ["ethereum", "arbitrum", "base", "polygon"], "tokens": ["USDC", "USDT"] },
{ "address": "GEhVdAGr…vpJMq", "chains": ["solana"], "tokens": ["USDC", "USDT"] }
],
"expires_at": "2026-06-04T13:01:00Z",
"created_at": "2026-06-04T12:05:00Z"
}Error Responses
CUSTOMER NOT ACTIVE
{
"error": {
"type": "invalid_request",
"message": "Customer must be active before creating a payout",
"param": "customer_id"
}
}OPEN PAYOUT EXISTS
{
"error": {
"type": "invalid_request",
"message": "Customer already has an open payout",
"code": "open_payout_exists"
}
}