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

# Get chain defaults

> Fetch the Payment Gateway's live chain defaults: contract addresses per CAIP-2 chain, and which chains you can actually pay on, instead of hardcoding them.

<Note>
  Fetch these addresses at startup rather than hardcoding them — they change when a chain's contracts are redeployed. With no `chain_id` you get every chain the gateway serves, which also makes this the simplest check that the gateway is reachable. A chain that isn't fully configured is left out of that listing, and an empty address is a chain you cannot pay on. See [Contract addresses](/get-started/reference/contract-addresses).
</Note>


## OpenAPI

````yaml GET /v1/defaults
openapi: 3.0.3
info:
  title: Atum Payment Gateway API
  description: >
    The Atum Payment Gateway API enables secure, cross-chain payments with
    built-in escrow protection 

    and settlement verification. This API facilitates decentralized payment
    routing across multiple blockchain 

    networks while ensuring transaction atomicity and settlement guarantees.


    ## Supported Blockchains

    - Ethereum and EVM-compatible chains (Arbitrum, Optimism, Base, etc.)

    - Solana

    - Tron


    ## Authentication


    No API key, token, or authorization header is required on any operation.

    A payment carries its own authorization: the `sender_auth` signed messages
    prove

    control of the funding account, and are verified on every submission.
  version: 1.0.0
servers:
  - url: https://payment-gw.production-mainnet.atum.xyz
    description: Mainnet
  - url: https://payment-gw.production-testnet.atum.xyz
    description: Testnet
security: []
tags:
  - name: Payments
    description: >-
      Submit a payment and follow it to settlement, by payment id, by your own
      request id, or step by step.
  - name: Authorizations
    description: Counterparty authorization requested while a payment is being accepted.
  - name: Quote Requests
    description: >-
      The two-phase quote flow - open a quote-request batch, poll it, then award
      one quote.
  - name: Chain Defaults
    description: >-
      The per-chain corridor addresses a client needs before it can build and
      sign a payment.
  - name: Health
    description: Liveness probe for the gateway.
paths:
  /v1/defaults:
    get:
      tags:
        - Chain Defaults
      summary: Get chain defaults
      description: >
        The addresses needed to build a payment on a chain: the escrow, the
        accounts named

        in the deposit authorization, and the fulfillment verifier. Fetch these
        rather than

        hardcoding them - they change when a chain's contracts are redeployed.


        With `chain_id`, returns that chain. Without it, or with an empty value,
        returns

        every chain the gateway serves, keyed by CAIP-2 chain id.


        A chain that is not fully configured is still returned when asked for by

        `chain_id`, with the missing address empty, but is left out of the full
        listing.

        Treat an empty address as a chain you cannot pay on.
      operationId: getDefaults
      parameters:
        - name: chain_id
          in: query
          required: false
          description: >-
            CAIP-2 chain identifier. Omit it, or send it empty, to receive every
            chain the gateway serves, keyed by chain id.
          schema:
            type: string
          example: eip155:84532
      responses:
        '200':
          description: >-
            Chain defaults. A single object when `chain_id` was supplied,
            otherwise an object keyed by CAIP-2 chain id.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetDefaultsResult'
        '400':
          description: The `chain_id` is not a valid CAIP-2 chain identifier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: >-
            The requested chain is not served by this gateway, or - when
            `chain_id` was omitted - no chain could be resolved at all
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: A dependency is temporarily unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    GetDefaultsResult:
      description: >-
        Either one chain's defaults or every chain keyed by CAIP-2 chain id,
        depending on whether `chain_id` was supplied. A top-level `chain_id`
        identifies the first.
      oneOf:
        - $ref: '#/components/schemas/ChainDefaults'
        - $ref: '#/components/schemas/ChainDefaultsByChain'
    ErrorResponse:
      type: object
      description: >-
        Safe, outward-facing error. Derived from an internal error through the
        shared error catalog. The public code identifies the category and the
        message is a curated, safe description.


        A panic is caught by shared middleware that responds `{"error":
        "Internal server error occurred"}` instead, so a 500 is not guaranteed
        to carry this shape.
      required:
        - code
        - message
      properties:
        code:
          type: string
          description: Public, machine-readable error category in SCREAMING_SNAKE_CASE.
          pattern: ^[A-Z][A-Z0-9_]*$
          example: INVALID_SOURCE_ASSET
        message:
          type: string
          description: Curated, safe, human-readable message.
          maxLength: 500
          example: The source asset identifier is not a valid CAIP-19 asset.
        request_id:
          type: string
          description: >-
            Correlation id to quote to support to locate the internal error
            record.
          example: req_123456789
        payment_id:
          type: string
          description: >-
            The payment this error was raised against. Absent when the error is
            not about a specific payment.
          example: '0xc7108e200d11580e7e75185991084b42a535af588ba8267cd0d1e7df089e5c9c'
        docs_url:
          type: string
          format: uri
          description: Link to the documentation page for this public code.
        domain:
          type: string
          description: Originating service domain.
          example: PAYMENT_GATEWAY
        retry_classification:
          type: string
          description: >-
            What the caller should do next. Absent means the condition has not
            been classified, which is not the same as safe to retry.

            Re-sending the same `request_id` is an idempotent replay and always
            safe. This value is about submitting a new one, which starts a new
            operation. See https://docs.atum.xyz/errors for the value set.
          example: RECONCILE_THEN_DECIDE
        request_id_reusable:
          type: boolean
          description: >-
            Whether the caller may re-send this same request_id. True means no
            payment was created for it, so the id is still free. False means a
            payment exists for it, so the id is spent and re-sending only
            replays this outcome. Absent means undetermined, which a caller
            should read as false. Separate from retry_classification, which
            answers what the caller must change rather than whether the id
            survived.
          example: false
    ChainDefaults:
      type: object
      description: >
        The addresses for one chain. Optional fields appear only where they
        apply to that

        chain; an absent optional field is not an error.
      required:
        - chain_id
        - quote_selector
        - escrow_contract
        - fulfillment_proxy
        - fulfillment_verifier
      properties:
        chain_id:
          type: string
          description: >-
            CAIP-2 identifier of the chain these defaults describe, normalised
            to lower case.
          example: eip155:84532
        quote_selector:
          type: string
          description: >-
            The account named as the reserver in the deposit authorization. Sign
            against this exact value; a deposit reserved by anyone else is
            rejected.
          example: '0xd0f080E23F95571D26eEb1FAD24a5F3d66835195'
        escrow_contract:
          type: string
          description: >-
            The escrow the deposit is made into, and the spender of the token
            approval. Empty when the chain is not fully configured.
          example: '0xa61a0C025943Aa79B73D8D07E3aDbEe1873738b4'
        fulfillment_proxy:
          type: string
          description: >-
            The contract that pays the receiver. Read this from the DESTINATION
            chain's defaults, not the source chain's. Empty when the chain is
            not fully configured.
          example: '0x09A5a0d6955E5394A661Cd9E7007076fa63B4158'
        fulfillment_verifier:
          type: object
          description: The service that attests settlement, and the account it signs with.
          required:
            - account
            - endpoint
          properties:
            account:
              type: string
              description: >-
                The account named as the releaser in the deposit authorization.
                Sign against this exact value.
              example: '0x27050EE47befC43F4dF7807a7AA8073039e5fa89'
            endpoint:
              type: string
              format: uri
              description: Base URL of the fulfillment verifier serving this chain.
              example: https://veri-fill.example.com
        permit2_contract:
          type: string
          minLength: 1
          description: >-
            The Permit2 this chain's escrow verifies against, sent only when it
            is not the canonical deployment. When absent, use the canonical
            Permit2 address for the chain. EVM and Tron only.
          example: '0x000000000022D473030F116dDEE9F6B43aC78BA3'
        deposit_witness_version:
          type: integer
          minimum: 3
          description: >-
            Which deposit witness this chain's escrow expects. `4` and above
            select the four-member witness, `3` the two-member one; absent means
            four. EVM and Tron only - on Solana this is carried by
            `svm_signature_domain_version`.
          example: 4
        tokens:
          type: array
          description: >-
            Tokens this chain's escrow accepts for deposit. Absent when the
            gateway has no listing for the chain, which does not mean no token
            is accepted.
          items:
            type: object
            required:
              - symbol
              - address
              - decimals
            properties:
              symbol:
                type: string
                example: USDC
              address:
                type: string
                description: Token contract address, in the chain's native address format.
                example: '0x036cbd53842c5426634e7929541ec2318f3dcf7e'
              decimals:
                type: integer
                description: Decimal places, for converting a human amount to base units.
                example: 6
        svm_signature_cluster_id:
          type: string
          description: >-
            Solana only. The cluster the escrow's signing domain is bound to,
            needed to build the deposit hash. Absent for EVM and Tron.
          example: devnet
        svm_signature_domain_version:
          type: integer
          minimum: 1
          description: >-
            Solana only. Version of the escrow's signing domain. Absent for EVM
            and Tron.
          example: 2
    ChainDefaultsByChain:
      type: object
      description: >-
        Defaults for every chain the gateway serves, keyed by CAIP-2 chain id.
        Each key repeats the `chain_id` of the value it maps to.
      additionalProperties:
        $ref: '#/components/schemas/ChainDefaults'
      example:
        eip155:84532:
          chain_id: eip155:84532
          quote_selector: '0xd0f080E23F95571D26eEb1FAD24a5F3d66835195'
          escrow_contract: '0xa61a0C025943Aa79B73D8D07E3aDbEe1873738b4'
          fulfillment_proxy: '0x09A5a0d6955E5394A661Cd9E7007076fa63B4158'
          fulfillment_verifier:
            account: '0x27050EE47befC43F4dF7807a7AA8073039e5fa89'
            endpoint: https://veri-fill.example.com

````