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
OAuth 2.0 client_credentials grant (RFC 6749 §4.4) bound to a DPoP keypair (RFC 9449).
Flow (every authenticated /v1 call requires both an access token AND a fresh per-request DPoP proof):
- Register a credential via the merchant portal. Anton issues a
client_id(ant_oc_<env>_<32hex>) and aclient_secret(ant_ocs_<env>_<48hex>, shown ONCE). The portal generates an ES256 or Ed25519 DPoP keypair in your browser; you store the private half. - Mint an access token:
POST /oauth/tokenwithAuthorization: Basic <client_id:client_secret>andContent-Type: application/x-www-form-urlencoded. Body:grant_type=client_credentials. ADPoPheader carrying a proof signed for the token endpoint is required (noathclaim on this proof). - Use the token: send
Authorization: DPoP <access_token>plus a freshDPoP: <proof>header on every/v1request. The proof JWT MUST carryhtm(request method),htu(request URL, no query/fragment),iat(within ±60s),jti(unique within 5 min), andath(SHA-256 of the access token, base64url).
Tokens expire in 1 hour in production / staging and 8 hours in sandbox. There are no refresh tokens — call /oauth/token again with your secret. Anton's public signing key is published at /.well-known/jwks.json.
OpenAPI 3.0 has no native DPoP scheme; this declaration plus dpopHeader together convey both the access-token Authorization and the per-request proof header.
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.
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.
^pay_[a-zA-Z0-9]+$"pay_01HX8Z9K0M2N3P4Q5R6S7T8UAB"
^mer_[a-zA-Z0-9]+$^ben_[a-zA-Z0-9]+$^ins_[a-zA-Z0-9]+$Payout lifecycle state. See the How Anton Evaluates Payouts guide for the full state machine and integration guidance.
created, pending_screening, screening_failed, pending_approval, approved, processing, sent, completed, failed, returned, cancelled, manual_review, velocity_blocked, pending_engine_review 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 Decimal amount as a string, never a float. Up to 12 whole digits.
^-?\d{1,12}(\.\d+)?$"1234.56"
ISO 4217 three-letter currency code.
^[A-Z]{3}$"USD"
Decimal amount as a string, never a float. Up to 12 whole digits.
^-?\d{1,12}(\.\d+)?$"1234.56"
ISO 4217 three-letter currency code.
^[A-Z]{3}$"USD"
fiat, crypto, stablecoin RFC 3339 / ISO 8601 timestamp in UTC.
"2026-04-15T14:30:00Z"
RFC 3339 / ISO 8601 timestamp in UTC.
"2026-04-15T14:30:00Z"
Set when the payout was created as part of a batch upload.
^bat_[a-zA-Z0-9]+$Source-to-dest rate. Present on cross-currency payouts.
^-?\d{1,12}(\.\d+)?$"1234.56"
Decimal amount as a string, never a float. Up to 12 whole digits.
^-?\d{1,12}(\.\d+)?$"1234.56"
ISO 4217 three-letter currency code.
^[A-Z]{3}$"USD"
merchant, beneficiary fixed_source, fixed_dest Total drawn from your balance — source_amount + fee + buffer during processing. Buffer releases on finalization.
^-?\d{1,12}(\.\d+)?$"1234.56"
ISO 4217 three-letter currency code.
^[A-Z]{3}$"USD"
Whether fee reflects the final rate from the rail.
Cross-currency rate buffer held during processing, released on settlement.
^-?\d{1,12}(\.\d+)?$"1234.56"
ISO 4217 three-letter currency code.
^[A-Z]{3}$"USD"
Which pricing plan was used for the quote.
External rail name. Populated at rail-submission time.
"openpayd"
External provider reference. Useful for support tickets.
Specific rail or chain. Populated by the rail adapter when the payout is submitted.
swift, sepa, ach, fps, rtgs, ethereum, bitcoin, tron, solana, polygon, arbitrum, optimism, base, avalanche, bsc, lightning, stellar, ripple Destination wallet address. Present for crypto/stablecoin payouts.
ERC-20 / TRC-20 contract address. Present for stablecoin payouts.
"USDC"
On-chain transaction hash. Present once sent for crypto/stablecoin payouts.
Number of confirmations observed so far.
Confirmations required before the payout reaches completed.
Gas / network fee. Deducted from the settlement, not from your balance.
^-?\d{1,12}(\.\d+)?$"1234.56"
ISO 4217 three-letter currency code.
^[A-Z]{3}$"USD"
Populated on cancelled, failed, velocity_blocked, screening_failed.
Present if the payout entered pending_engine_review because the Anton Engine was unreachable.
"2026-04-15T14:30:00Z"
RFC 3339 / ISO 8601 timestamp in UTC.
"2026-04-15T14:30:00Z"
RFC 3339 / ISO 8601 timestamp in UTC.
"2026-04-15T14:30:00Z"
RFC 3339 / ISO 8601 timestamp in UTC.
"2026-04-15T14:30:00Z"
RFC 3339 / ISO 8601 timestamp in UTC.
"2026-04-15T14:30:00Z"
RFC 3339 / ISO 8601 timestamp in UTC.
"2026-04-15T14:30:00Z"
RFC 3339 / ISO 8601 timestamp in UTC.
"2026-04-15T14:30:00Z"
RFC 3339 / ISO 8601 timestamp in UTC.
"2026-04-15T14:30:00Z"