> ## Documentation Index
> Fetch the complete documentation index at: https://docs.antonpayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List Payouts

> Cursor-paginated list of payouts for your merchant, sorted by `created_at`
descending.




## OpenAPI

````yaml GET /v1/payouts
openapi: 3.1.0
info:
  title: Anton Payments API
  version: 1.0.0
  summary: Cross-border payout infrastructure. Fiat, stablecoin, and crypto.
  description: >
    The Anton Payments merchant API. Versioned, idempotent, cursor-paginated.


    - **Authentication**: OAuth 2.0 client_credentials with DPoP
    proof-of-possession (RFC 6749 §4.4 + RFC 9449). Programmatic clients
    exchange `(client_id, client_secret)` for a short-lived access token at
    `POST /oauth/token`, then send each request with `Authorization: DPoP
    <access_token>` plus a per-request `DPoP: <proof>` header. Static API keys
    are not accepted on v1.

    - Base URLs: `https://api.antonpayments.com` (production),
    `https://api.antonpayments.dev` (sandbox).

    - Monetary amounts are decimal strings. Never floats.

    - Timestamps are RFC 3339 UTC.

    - All mutating endpoints support the `Idempotency-Key` header.

    - Anton's OAuth public signing key is published at `GET
    /.well-known/jwks.json` (5-minute cache; RFC 8615).


    See the Cross-Cutting section of the docs for idempotency, pagination, rate
    limits, errors, webhook events, and webhook signing.
  contact:
    name: Anton Payments Support
    url: https://help.antonpayments.com
  license:
    name: Proprietary
    url: https://www.antonpayments.com
servers:
  - url: https://api.antonpayments.com
    description: Production
  - url: https://api.antonpayments.dev
    description: Sandbox
security:
  - oauthDPoP: []
    dpopHeader: []
tags:
  - name: Authentication
    description: >-
      OAuth 2.0 token endpoint and JWKS publication. See the API description for
      the full DPoP-bound flow.
  - name: OAuth Clients
    description: >-
      Manage OAuth credentials (programmatic access). Portal-only — JWT auth
      required.
  - name: Reference Data
    description: Currencies, countries, and supported payment methods.
  - name: Beneficiaries
    description: Create and manage the people and businesses you pay.
  - name: Instruments
    description: >-
      Payment instruments attached to beneficiaries — bank accounts, wallets,
      cards.
  - name: Payouts
    description: Initiate and track payouts.
  - name: Batches
    description: CSV-driven bulk payout processing.
  - name: Balances
    description: Merchant balance by currency.
  - name: Accounts
    description: Virtual accounts for merchant funding.
  - name: Webhooks
    description: Subscribe to event notifications.
  - name: Documents
    description: Upload and manage KYB and supporting documents.
  - name: RFIs
    description: Respond to Requests for Information raised during review.
  - name: Pricing
    description: Read merchant pricing plans and quote fees.
  - name: FX
    description: Quote, lock, and execute currency exchanges between balances.
  - name: Corridors
    description: Active cross-border corridors for your merchant.
  - name: Balance Alerts
    description: >-
      Per-currency low-balance thresholds that drive the `balance.low` webhook
      event.
  - name: Sandbox
    description: Reset and seed your sandbox environment.
  - name: Merchant
    description: Merchant profile, branding, preferences, and security posture.
  - name: API Keys
    description: Issue, list, and revoke API keys.
  - name: Users
    description: Self-service profile, MFA, and team management.
  - name: Notifications
    description: Per-user notification channels and preferences.
  - name: Velocity
    description: Merchant-scoped risk rules and what-if simulation.
  - name: Engine
    description: Glass-box view of Anton's risk intelligence.
  - name: Onboarding
    description: Authenticated KYB onboarding draft and submission.
  - name: Public Onboarding
    description: >-
      Session-authenticated hosted onboarding flow. Not intended for SDK
      consumption.
paths:
  /v1/payouts:
    get:
      tags:
        - Payouts
      summary: List payouts
      description: >
        Cursor-paginated list of payouts for your merchant, sorted by
        `created_at`

        descending.
      operationId: listPayouts
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Cursor'
        - name: status
          in: query
          description: >-
            Filter by one or more statuses. Repeat the param to pass multiple
            values.
          required: false
          schema:
            type: array
            items:
              $ref: '#/components/schemas/PayoutStatus'
          style: form
          explode: true
        - name: beneficiary_id
          in: query
          schema:
            type: string
            pattern: ^ben_[a-zA-Z0-9]+$
        - name: instrument_id
          in: query
          schema:
            type: string
            pattern: ^ins_[a-zA-Z0-9]+$
        - name: batch_id
          in: query
          schema:
            type: string
            pattern: ^bat_[a-zA-Z0-9]+$
        - name: dest_currency
          in: query
          schema:
            $ref: '#/components/schemas/CurrencyCode'
        - name: reference
          in: query
          description: Exact-match filter on the merchant's `reference` field.
          schema:
            type: string
        - name: created_after
          in: query
          description: RFC 3339 timestamp. Returns payouts with `created_at >= this`.
          schema:
            $ref: '#/components/schemas/Timestamp'
        - name: created_before
          in: query
          description: >-
            RFC 3339 timestamp. Returns payouts with `created_at <= this`
            (inclusive upper bound — matches `/v1/batches`).
          schema:
            $ref: '#/components/schemas/Timestamp'
      responses:
        '200':
          description: Paginated list of payouts.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/CursorList'
                  - type: object
                    properties:
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/Payout'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  parameters:
    Limit:
      name: limit
      in: query
      description: Items per page. Maximum 100.
      required: false
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 20
    Cursor:
      name: cursor
      in: query
      description: >-
        Opaque cursor returned by a previous list response. Omit for the first
        page.
      required: false
      schema:
        type: string
  schemas:
    PayoutStatus:
      type: string
      description: |
        Payout lifecycle state. See the
        [How Anton Evaluates Payouts](/how-anton-evaluates-payouts) guide for
        the full state machine and integration guidance.
      enum:
        - created
        - pending_screening
        - screening_failed
        - pending_approval
        - approved
        - processing
        - sent
        - completed
        - failed
        - returned
        - cancelled
        - manual_review
        - velocity_blocked
        - pending_engine_review
    CurrencyCode:
      type: string
      description: ISO 4217 three-letter currency code.
      pattern: ^[A-Z]{3}$
      example: USD
    Timestamp:
      type: string
      format: date-time
      description: RFC 3339 / ISO 8601 timestamp in UTC.
      example: '2026-04-15T14:30:00Z'
    CursorList:
      type: object
      required:
        - data
        - has_more
      properties:
        data:
          type: array
          items: {}
          description: Array of results for this page. Element schema varies by endpoint.
        has_more:
          type: boolean
          description: Whether more results exist beyond this page.
        next_cursor:
          type: string
          description: Cursor for the next page. Present only when `has_more` is `true`.
    Payout:
      type: object
      description: >
        A single payment from your merchant balance to a beneficiary's
        instrument.

        Moves through a 13-state machine — see the

        [How Anton Evaluates Payouts](/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`.
      required:
        - id
        - merchant_id
        - beneficiary_id
        - instrument_id
        - status
        - method
        - source_amount
        - source_currency
        - dest_amount
        - dest_currency
        - rail_type
        - purpose
        - reference
        - created_at
        - updated_at
      properties:
        id:
          type: string
          pattern: ^pay_[a-zA-Z0-9]+$
          example: pay_01HX8Z9K0M2N3P4Q5R6S7T8UAB
        merchant_id:
          type: string
          pattern: ^mer_[a-zA-Z0-9]+$
        beneficiary_id:
          type: string
          pattern: ^ben_[a-zA-Z0-9]+$
        instrument_id:
          type: string
          pattern: ^ins_[a-zA-Z0-9]+$
        batch_id:
          type: string
          nullable: true
          pattern: ^bat_[a-zA-Z0-9]+$
          description: Set when the payout was created as part of a batch upload.
        status:
          $ref: '#/components/schemas/PayoutStatus'
        method:
          $ref: '#/components/schemas/PayoutMethod'
        source_amount:
          $ref: '#/components/schemas/Money'
        source_currency:
          $ref: '#/components/schemas/CurrencyCode'
        dest_amount:
          $ref: '#/components/schemas/Money'
        dest_currency:
          $ref: '#/components/schemas/CurrencyCode'
        exchange_rate:
          $ref: '#/components/schemas/Money'
          description: Source-to-dest rate. Present on cross-currency payouts.
        fee:
          $ref: '#/components/schemas/Money'
        fee_currency:
          $ref: '#/components/schemas/CurrencyCode'
        fee_bearer:
          type: string
          enum:
            - merchant
            - beneficiary
        fixed_side:
          type: string
          enum:
            - fixed_source
            - fixed_dest
        total_debited:
          $ref: '#/components/schemas/Money'
          description: >-
            Total drawn from your balance — `source_amount + fee + buffer`
            during processing. Buffer releases on finalization.
        total_debited_currency:
          $ref: '#/components/schemas/CurrencyCode'
        fee_finalized:
          type: boolean
          description: Whether `fee` reflects the final rate from the rail.
        buffer_amount:
          $ref: '#/components/schemas/Money'
          description: >-
            Cross-currency rate buffer held during processing, released on
            settlement.
        buffer_currency:
          $ref: '#/components/schemas/CurrencyCode'
        pricing_plan_id:
          type: string
          description: Which pricing plan was used for the quote.
        rail_type:
          $ref: '#/components/schemas/RailType'
        rail_provider:
          type: string
          description: External rail name. Populated at rail-submission time.
          example: openpayd
        rail_reference:
          type: string
          description: External provider reference. Useful for support tickets.
        network:
          $ref: '#/components/schemas/Network'
        wallet_address:
          type: string
          description: Destination wallet address. Present for crypto/stablecoin payouts.
        token_contract:
          type: string
          description: ERC-20 / TRC-20 contract address. Present for stablecoin payouts.
        token_symbol:
          type: string
          example: USDC
        tx_hash:
          type: string
          description: >-
            On-chain transaction hash. Present once `sent` for crypto/stablecoin
            payouts.
        block_confirmations:
          type: integer
          description: Number of confirmations observed so far.
        required_confirms:
          type: integer
          description: Confirmations required before the payout reaches `completed`.
        network_fee:
          $ref: '#/components/schemas/Money'
          description: >-
            Gas / network fee. Deducted from the settlement, not from your
            balance.
        network_fee_currency:
          $ref: '#/components/schemas/CurrencyCode'
        cancelled_reason:
          type: string
          description: >-
            Populated on `cancelled`, `failed`, `velocity_blocked`,
            `screening_failed`.
        engine_unavailable_at:
          $ref: '#/components/schemas/Timestamp'
          description: >-
            Present if the payout entered `pending_engine_review` because the
            Anton Engine was unreachable.
        purpose:
          type: string
        reference:
          type: string
        metadata:
          type: object
          additionalProperties:
            type: string
        created_at:
          $ref: '#/components/schemas/Timestamp'
        updated_at:
          $ref: '#/components/schemas/Timestamp'
        screened_at:
          $ref: '#/components/schemas/Timestamp'
        screening_failed_at:
          $ref: '#/components/schemas/Timestamp'
        approved_at:
          $ref: '#/components/schemas/Timestamp'
        processed_at:
          $ref: '#/components/schemas/Timestamp'
        completed_at:
          $ref: '#/components/schemas/Timestamp'
        failed_at:
          $ref: '#/components/schemas/Timestamp'
        cancelled_at:
          $ref: '#/components/schemas/Timestamp'
      example:
        id: pay_01HX8Z9K0M2N3P4Q5R6S7T8UAB
        merchant_id: mer_01HX8Z9K0M2N3P4Q5R6S7T8UZZ
        beneficiary_id: ben_01HX8Z9K0M2N3P4Q5R6S7T8UA1
        instrument_id: ins_01HX8Z9K0M2N3P4Q5R6S7T8UA2
        status: processing
        method: sepa
        source_amount: '550.00'
        source_currency: USD
        dest_amount: '500.00'
        dest_currency: EUR
        exchange_rate: '0.9091'
        fee: '5.00'
        fee_currency: USD
        fee_bearer: merchant
        fixed_side: fixed_dest
        total_debited: '557.50'
        total_debited_currency: USD
        fee_finalized: false
        buffer_amount: '2.50'
        buffer_currency: USD
        rail_type: fiat
        rail_provider: openpayd
        rail_reference: OP-2026-04-15-778812
        network: sepa
        purpose: supplier_payment
        reference: PO-8821
        created_at: '2026-04-15T14:30:00Z'
        updated_at: '2026-04-15T14:30:05Z'
        screened_at: '2026-04-15T14:30:02Z'
        approved_at: '2026-04-15T14:30:04Z'
        processed_at: '2026-04-15T14:30:05Z'
    PayoutMethod:
      type: string
      description: >
        How the payout will be delivered. Distinct from an `Instrument`'s
        `method`

        (which is the credential format) — this is the rail-family selection.
      enum:
        - bank_transfer
        - wire
        - sepa
        - swift
        - ach
        - faster_payment
        - mobile_money
        - wallet
        - crypto
        - layer2
        - exchange
        - stablecoin
    Money:
      type: string
      description: Decimal amount as a string, never a float. Up to 12 whole digits.
      pattern: ^-?\d{1,12}(\.\d+)?$
      example: '1234.56'
    RailType:
      type: string
      enum:
        - fiat
        - crypto
        - stablecoin
    Network:
      type: string
      description: >-
        Specific rail or chain. Populated by the rail adapter when the payout is
        submitted.
      enum:
        - swift
        - sepa
        - ach
        - fps
        - rtgs
        - ethereum
        - bitcoin
        - tron
        - solana
        - polygon
        - arbitrum
        - optimism
        - base
        - avalanche
        - bsc
        - lightning
        - stellar
        - ripple
    ErrorEnvelope:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - message
          properties:
            message:
              type: string
              description: Human-readable description of what went wrong.
            code:
              type: string
              description: Machine-readable error code. Branch on this, not on `message`.
              example: insufficient_balance
      example:
        error:
          message: insufficient funds for this payout
          code: insufficient_balance
  responses:
    Unauthorized:
      description: Missing or invalid API key, or key used against the wrong environment.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          examples:
            missing_key:
              summary: Missing bearer token
              value:
                error:
                  code: unauthorized
                  message: missing or invalid credentials
            wrong_environment:
              summary: Test key used against production
              value:
                error:
                  code: key_environment_mismatch
                  message: this API key is not valid for this environment
    RateLimited:
      description: Rate limit exceeded. See `Retry-After`.
      headers:
        Retry-After:
          $ref: '#/components/headers/Retry-After'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
  headers:
    Retry-After:
      description: Seconds to wait before retrying. Included on 429 responses.
      schema:
        type: integer
  securitySchemes:
    oauthDPoP:
      type: oauth2
      description: >
        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):


        1. Register a credential via the merchant portal. Anton issues a
        `client_id` (`ant_oc_<env>_<32hex>`) and a `client_secret`
        (`ant_ocs_<env>_<48hex>`, shown ONCE). The portal generates an ES256 or
        Ed25519 DPoP keypair in your browser; you store the private half.

        2. Mint an access token: `POST /oauth/token` with `Authorization: Basic
        <client_id:client_secret>` and `Content-Type:
        application/x-www-form-urlencoded`. Body:
        `grant_type=client_credentials`. A `DPoP` header carrying a proof signed
        for the token endpoint is required (no `ath` claim on this proof).

        3. Use the token: send `Authorization: DPoP <access_token>` plus a fresh
        `DPoP: <proof>` header on every `/v1` request. The proof JWT MUST carry
        `htm` (request method), `htu` (request URL, no query/fragment), `iat`
        (within ±60s), `jti` (unique within 5 min), and `ath` (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.
      flows:
        clientCredentials:
          tokenUrl: /oauth/token
          scopes: {}
    dpopHeader:
      type: apiKey
      in: header
      name: DPoP
      description: >
        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.

````