Send money to a payee, a wallet or an address
post/payouts
Send money to a payee, a wallet or an address. Needs an Idempotency-Key. amount is a decimal string in from.currency; amount_minor is the same amount as integer minor units, and either may be sent. A bank payout may name a rail or a speed (fastest, cheapest, standard); otherwise the rail is chosen and returned with the reason. quote_id executes exactly what was quoted. execute_at, schedule or release_on create a scheduled payout instead of sending now. An outside address is checked for its chain's format and for the coin being on that chain (Base when no chain is named). travel_rule carries originator and beneficiary details for an outside address; it is passed on and not kept. The answer carries amount_minor, fee_minor and authorisation.
Before you call
- Credential
Authorization: Bearer $KEY- Scope
payouts:write- Moves money
yes- Idempotency
required- Untrusted
reference, external_ref, remittance, hold.reason
Parameters
- Idempotency-KeystringrequiredHeader. A repeat with the same key and body returns the first answer instead of acting twice.
Request bodyapplication/json, required
- customer_idstringrequiredAt most 200 characters.
- amountstringThe amount as a decimal string in
from.currency. Send this oramount_minor. Pattern: ^\d{1,18}(.\d{1,10})?$. - amount_minorintegerThe same amount in integer minor units of
from.currency. At least 1. - fromobjectrequired
- currencystringrequiredA lowercase currency code or stablecoin ticker.
- wallet_idstringrequiredAt most 200 characters.
- currencystringrequired
- toobjectrequiredExactly one of
payee_id,wallet_idoraddress.- currencystringrequiredA lowercase currency code or stablecoin ticker.
- payee_idstringAt most 200 characters.
- wallet_idstringAt most 200 characters.
- addressstringAt most 200 characters.
- chainstringAt most 40 characters.
- currencystringrequired
- railstringAt most 40 characters.
- speedstringOne of: fastest, cheapest, standard.
- quote_idstringExecutes exactly what was quoted, once. At most 200 characters.
- execute_atstring (date-time)
- scheduleobject
- everyintegerrequiredAt least 1.
- unitstringrequiredOne of: day, week, month.
- end_atstring (date-time)
- countintegerAt least 1.
- everyintegerrequired
- release_onstring or object
- expires_atstring (date-time)
- travel_ruleobject
- originatorobject
- beneficiaryobject
- referencestringAt most 500 characters.
- external_refstringThe document this belongs to in your own system. At most 200 characters.
- external_kindstringOne of: invoice, bill, order, booking, other.
- remittanceobject
- invoice_numberstringAt most 200 characters.
- amountstringAt most 40 characters.
- datestringAt most 40 characters.
- invoice_numberstring
- dry_runbooleanCheck the request and report what would happen, without doing it.
Responses
- 200Success.
- 202requires_approval — Not an error: the operation is held for a person. The body names the approval.
- 400price_below_minimum — The price is below the smallest single payment for a method (
detail.method,detail.minimum), or has a part of a cent. Setcredit_only, raise the price, or drop the method. - 401dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used.
- 402payment_failed — The payer's bank or card refused.
detail.reasonsays why in plain terms. - 403agent_payment_over_max — The merchant asks for more than
max_amount. Nothing was signed.detail.asked_minoris the lowest price asked, in US cents. - 404not_found — No such object in this project — including one that belongs to somebody else.
- 409token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant.
- 429too_many_waiters — This key already has as many requests waiting (
?wait=) as it may. Let one finish, or read without wait. - 500internal_error — Ours. Quote the
request_idand we can find the call. - 502platform_error — A provider failed. Safe to retry with the same Idempotency-Key.
- 503oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work.