Create a Payout
Initiate a payout from your merchant balance to a beneficiary’s payment instrument. The payout goes through compliance screening, velocity evaluation, and engine risk scoring before being submitted to a rail — see How Anton Evaluates Payouts for the full lifecycle.
The initial status is created. The payout transitions to
pending_screening within moments and its subsequent state changes are
delivered via payout.* webhook events. Do not poll.
Both source_amount and dest_amount must be provided along with
fixed_side (fixed_source or fixed_dest) indicating which amount is
authoritative. The other amount is recomputed on the backend using the
current corridor pricing. An FX quote may be locked via POST /v1/fx/quote
if you need rate certainty before submission.
Requires an Idempotency-Key header.
Authorizations
Per-request DPoP proof JWT (RFC 9449). MUST accompany the Authorization: DPoP <access_token> header on every protected operation. The proof is signed by the merchant's private DPoP key and carries htm, htu, iat, jti, and ath claims.
Headers
Unique key identifying this operation. Sending the same key twice returns the original response instead of creating a duplicate. Keys are retained for 24 hours.
255Body
^ben_[a-zA-Z0-9]+$Must belong to the beneficiary named above and be in active status.
^ins_[a-zA-Z0-9]+$Amount debited from your merchant balance (before fees).
^-?\d{1,12}(\.\d+)?$"1234.56"
Amount the beneficiary receives.
^-?\d{1,12}(\.\d+)?$"1234.56"
ISO 4217 three-letter currency code.
^[A-Z]{3}$"USD"
How the payout will be delivered. Distinct from an Instrument's method
(which is the credential format) — this is the rail-family selection.
bank_transfer, wire, sepa, swift, ach, faster_payment, mobile_money, wallet, crypto, layer2, exchange, stablecoin Payment purpose code. Used for compliance reporting and corridor-specific
rail requirements. Examples — contractor_payment, supplier_payment,
salary, refund.
255"contractor_payment"
Your own reference. Surfaces to the beneficiary where the rail supports it.
100"INV-1042"
ISO 4217 three-letter currency code.
^[A-Z]{3}$"USD"
Hint for rail routing. Anton may override based on corridor availability.
fiat, crypto, stablecoin Which amount is authoritative — Anton recomputes the other using current corridor pricing.
fixed_source, fixed_dest Who absorbs the fee. beneficiary reduces the amount credited to them by the fee.
merchant, beneficiary IP of the merchant's end-user who initiated the payout. Used for
risk signals. Superseded by session.ip — when both are present,
session.ip wins; prefer sending the session object.
End-user session context for the action, as observed by YOUR edge — the person who initiated this payout in your product, not your server. Every field is optional, but richer context makes Anton's risk assessment of the payout materially better (IP geolocation and network type, timezone-vs-location consistency, device continuity).
Data-quality issues never fail the payout: only a syntactically
invalid ip is rejected (422). Everything else — a private
ip (usually a misconfigured proxy forwarding your own LB
address), an unrecognized timezone, a future started_at —
is accepted and reported back in the response's
session_quality array so you can fix your integration.
By sending session data you confirm you collected it lawfully from your end user (under your own privacy notice) and are authorized to share it with Anton for fraud prevention and AML transaction-monitoring purposes.
Optional bindable pricing quote id returned by POST /v1/pricing/quote.
When present, the payout fee is locked to the quoted value. The quote
must be unexpired, unbound, and match the payout's currencies + amount,
otherwise the create returns 422 quote_expired / 422 quote_already_used
/ 422 quote_mismatch.
^pq_[a-zA-Z0-9]+$Response
Payout created. Subsequent lifecycle is reported via webhooks.
A single payment from your merchant balance to a beneficiary's instrument. Moves through a 13-state machine — see the How Anton Evaluates Payouts guide.
Rail-specific fields (rail_provider, rail_reference, network,
wallet_address, tx_hash, etc.) populate as the payout moves through
approved -> processing -> sent -> completed.