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

# Get a checkout payment

> Read the browser-safe Payment and its checkout state with the client secret.

Returns the browser-safe canonical Payment and its sanitized checkout execution state. Send the Payment's `clientSecret` in the `Authorization` header as a Bearer token; the credential never belongs in the URL.


## OpenAPI

````yaml frontend-openapi.json GET /v2/public/payments/{paymentId}
openapi: 3.1.0
info:
  title: Stableyard Interfaces & SDK API
  version: 2.0.0-staging
  x-stableyard-api-version: '2026-09-09'
  x-stableyard-supported-api-versions:
    - '2026-09-09'
  summary: >-
    Advanced browser API used by Stableyard Checkout, Add Money, and
    account-bound interfaces.
  description: >

    These endpoints power Stableyard's official interface SDKs, hosted checkout,
    Add Money, and advanced custom browser integrations.


    Most partners should use `@stableyard/react` or `@stableyard/sdk` instead of
    calling these routes directly. A browser must never receive an app secret.
    Public checkout uses a Payment-scoped client secret, while account-bound
    experiences use a short-lived client bearer token created by the partner
    backend.
  x-stableyard-documentation-surface: frontend
servers:
  - url: https://prod-api.stableyard.fi
    description: Production
  - url: https://staging-api-v2.stableyard.fi
    description: Staging
  - url: http://localhost:3001
    description: Local
security: []
tags:
  - name: Authentication
    x-displayName: API authentication
    description: Verify your app ID and app secret before calling UPA APIs.
  - name: Client API
    description: >-
      Account-bound browser and mobile routes authenticated with a short-lived
      client bearer token. App secrets never enter client code.
  - name: Identity & KYC
    description: >-
      Verify the UPA email and run provider-neutral identity verification.
      Managed vaults and fiat payment rails use this same verified UPA identity.
  - name: Payments
    description: >-
      Create escrow-first payments, issue partner-authenticated send
      instructions or executions, power public checkout, and reconcile
      collection through final account settlement.
paths:
  /v2/public/payments/{paymentId}:
    get:
      tags:
        - Payments
      summary: Get checkout Payment
      description: >-
        Returns the browser-safe canonical Payment and its sanitized checkout
        execution state. Send the clientSecret in the Authorization header; the
        credential never belongs in the URL.
      operationId: getPublicPayment
      parameters:
        - name: paymentId
          in: path
          required: true
          schema:
            type: string
            pattern: ^payment_[A-Za-z0-9_-]+$
            example: payment_123
          description: >-
            Canonical `payment_*` identifier. Internal execution identifiers are
            never accepted by Partner Payment routes.
      responses:
        '200':
          description: Public Payment state
          headers:
            Stableyard-Version:
              description: >-
                Effective date-based Stableyard API contract version for this
                response.
              schema:
                type: string
                enum:
                  - '2026-09-09'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CanonicalPublicPaymentResponse'
              examples:
                example:
                  summary: Get checkout Payment 200 response
                  value:
                    payment:
                      id: payment_123
                      apiVersion: '2026-09-09'
                      intent: receive
                      amountMode: collect_exact
                      status: requires_payment_method
                      stage: null
                      operationalState: normal
                      operationalReasonCode: null
                      operationalUpdatedAt: null
                      statusVersion: 1
                      paymentAmount:
                        amount: '50.00'
                        amountAtomic: '50000000'
                        assetType: crypto
                        assetCode: USDC
                        decimals: 6
                        chainId: 8453
                        tokenAddress: '0x1111111111111111111111111111111111111111'
                      description: null
                      externalReference: null
                      expiresAt: null
                      createdAt: '2026-08-28T10:00:00.000Z'
                      updatedAt: '2026-08-28T10:00:00.000Z'
                    execution:
                      appId: app_123
                      displayState: preparing
                      statusInfo:
                        code: example
                        terminal: true
                        userActionRequired: true
                        retryable: true
                        message: example
                        updatedAt: null
                        nextPollAfterMs: null
                      description: null
                      returnUrl: null
                      destinationAmount:
                        amountAtomic: '10000000'
                        assetSymbol: USDC
                        decimals: 6
                        chainId: 42161
                        tokenAddress: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831'
                      amounts:
                        recipient:
                          amountAtomic: '10000000'
                          amountDecimal: '10'
                          assetSymbol: USDC
                          decimals: 6
                          chainId: 42161
                          tokenAddress: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831'
                      expiresAt: '2026-08-28T10:00:00.000Z'
                      merchant:
                        displayName: Acme Inc
                        logoUrl: https://cdn.example.com/acme-logo.png
                        primaryColor: '#5B5BF6'
                      presentedBy:
                        displayName: Acme Platform
                        logoUrl: null
                      provisioning:
                        status: preparing
                    checkout:
                      paymentUrl: https://example.com
                      clientSecret: examplexxxxxxxxxxxxxxxxxxxxxxxxx
                      expiresAt: '2026-08-28T10:00:00.000Z'
                      returnUrl: null
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
        - paymentClientSecret: []
components:
  schemas:
    CanonicalPublicPaymentResponse:
      type: object
      additionalProperties: false
      required:
        - payment
        - execution
      properties:
        payment:
          type: object
          additionalProperties: false
          required:
            - id
            - apiVersion
            - intent
            - amountMode
            - status
            - stage
            - operationalState
            - operationalReasonCode
            - operationalUpdatedAt
            - statusVersion
            - paymentAmount
            - description
            - externalReference
            - expiresAt
            - createdAt
            - updatedAt
          properties:
            id:
              type: string
              pattern: ^payment_[A-Za-z0-9_-]+$
            apiVersion:
              $ref: '#/components/schemas/StableyardApiVersion'
            intent:
              type: string
              enum:
                - receive
                - send
            amountMode:
              type: string
              enum:
                - collect_exact
                - deliver_exact
            status:
              type: string
              enum:
                - requires_payment_method
                - requires_action
                - processing
                - accepted
                - succeeded
                - failed
                - cancelled
                - expired
            stage:
              type:
                - string
                - 'null'
              enum:
                - escrow_provisioning
                - awaiting_payment
                - destination_verifying
                - provider_processing
                - quote_pending
                - transaction_broadcast
                - receipt_verifying
                - payment_detected
                - settlement_pending
                - settlement_broadcast
                - settlement_confirming
                - settlement_returned
                - payout_pending
                - payout_processing
                - payout_confirming
                - refund_pending
                - refund_broadcast
                - null
            operationalState:
              type: string
              enum:
                - normal
                - retrying
                - requires_intervention
            operationalReasonCode:
              type:
                - string
                - 'null'
              enum:
                - collection_requires_intervention
                - custody_after_failure
                - duplicate_payment_detected
                - fee_payout_failed
                - fee_payout_requires_intervention
                - fee_payout_retry_scheduled
                - late_payment_received
                - payment_execution_requires_intervention
                - payment_execution_retry_scheduled
                - escrow_provisioning_retry_scheduled
                - payment_session_requires_intervention
                - payout_failed
                - payout_requires_intervention
                - payout_retry_scheduled
                - refund_failed
                - refund_requires_intervention
                - refund_retry_scheduled
                - settlement_failed
                - settlement_requires_intervention
                - settlement_retry_scheduled
                - settlement_unconfirmed
                - null
            operationalUpdatedAt:
              type:
                - string
                - 'null'
              format: date-time
            statusVersion:
              type: integer
              minimum: 1
            paymentAmount:
              $ref: '#/components/schemas/CanonicalPaymentAmount'
            description:
              type:
                - string
                - 'null'
            externalReference:
              type:
                - string
                - 'null'
            expiresAt:
              type:
                - string
                - 'null'
              format: date-time
            createdAt:
              type: string
              format: date-time
            updatedAt:
              type: string
              format: date-time
        execution:
          $ref: '#/components/schemas/PublicPaymentExecutionState'
        checkout:
          type: object
          additionalProperties: false
          required:
            - paymentUrl
            - clientSecret
            - expiresAt
            - returnUrl
          properties:
            paymentUrl:
              type: string
              format: uri
            clientSecret:
              type: string
              minLength: 32
              maxLength: 512
            expiresAt:
              type: string
              format: date-time
            returnUrl:
              type:
                - string
                - 'null'
              format: uri
    StableyardApiVersion:
      type: string
      enum:
        - '2026-08-28'
        - '2026-09-09'
      example: '2026-09-09'
      description: >-
        Immutable date-based contract recorded on the resource. Historical
        values may appear on existing records; only versions advertised in
        x-stableyard-supported-api-versions are accepted for new requests.
    CanonicalPaymentAmount:
      type: object
      additionalProperties: false
      required:
        - amount
        - amountAtomic
        - assetType
        - assetCode
        - decimals
      properties:
        amount:
          type: string
          minLength: 1
          maxLength: 100
          pattern: ^(0|[1-9][0-9]*)(\.[0-9]{1,18})?$
          example: '50.00'
        amountAtomic:
          type: string
          minLength: 1
          maxLength: 80
          pattern: ^[1-9][0-9]*$
          example: '50000000'
        assetType:
          type: string
          enum:
            - crypto
            - fiat
        assetCode:
          type: string
          example: USDC
        decimals:
          type: integer
          minimum: 0
          maximum: 36
          example: 6
        chainId:
          type: integer
          minimum: 1
          example: 8453
        tokenAddress:
          type: string
    PublicPaymentExecutionState:
      type: object
      additionalProperties: false
      required:
        - appId
        - displayState
        - statusInfo
        - description
        - returnUrl
        - destinationAmount
        - amounts
        - expiresAt
        - merchant
        - provisioning
      properties:
        appId:
          type: string
          pattern: ^app_
        displayState:
          type: string
          enum:
            - preparing
            - open
            - processing
            - payment_accepted
            - refunding
            - refunded
            - expired
            - cancelled
            - failed
            - requires_intervention
          description: >-
            Presentation hint for checkout UI. The canonical financial truth is
            payment.status; never reconcile money from this field.
        statusInfo:
          $ref: '#/components/schemas/PublicPaymentStatusInfo'
        description:
          type:
            - string
            - 'null'
        returnUrl:
          type:
            - string
            - 'null'
          format: uri
          description: >-
            Allowlisted merchant navigation target. It is presentation metadata,
            not payment evidence.
        destinationAmount:
          $ref: '#/components/schemas/PaymentAmount'
        amounts:
          type: object
          additionalProperties: false
          required:
            - recipient
          properties:
            recipient:
              $ref: '#/components/schemas/NormalizedPaymentAmount'
        expiresAt:
          type: string
          format: date-time
        merchant:
          $ref: '#/components/schemas/PublicMerchantBranding'
        presentedBy:
          oneOf:
            - $ref: '#/components/schemas/PublicPaymentPresenter'
            - type: 'null'
          description: >-
            Integrating platform identity when it differs from the recipient.
            Null when app branding is the recipient fallback.
        provisioning:
          $ref: '#/components/schemas/PublicPaymentProvisioningState'
        message:
          type: string
        paymentMethods:
          type: array
          items:
            $ref: '#/components/schemas/PublicPaymentMethod'
        selectedOption:
          oneOf:
            - $ref: '#/components/schemas/PublicPaymentOption'
              title: Selected payment option
            - title: No method selected
              type: 'null'
        winningOption:
          oneOf:
            - $ref: '#/components/schemas/PublicPaymentOption'
              title: Verified winning option
            - title: No verified payment yet
              type: 'null'
        paymentAcceptedAt:
          type:
            - string
            - 'null'
          format: date-time
        collectedAt:
          type:
            - string
            - 'null'
          format: date-time
        succeededAt:
          type:
            - string
            - 'null'
          format: date-time
        refundReason:
          type: object
          additionalProperties: false
          required:
            - code
            - message
          properties:
            code:
              type: string
            message:
              type: string
        error:
          $ref: '#/components/schemas/PublicPaymentError'
    ErrorResponse:
      type: object
      additionalProperties: false
      required:
        - error
      properties:
        error:
          type: object
          additionalProperties: false
          required:
            - code
            - message
          properties:
            code:
              type: string
              minLength: 1
              maxLength: 128
              example: bad_request
            message:
              type: string
              minLength: 1
              maxLength: 1000
              example: The request is invalid
            details: {}
    PublicPaymentStatusInfo:
      type: object
      additionalProperties: false
      required:
        - code
        - terminal
        - userActionRequired
        - retryable
        - message
        - updatedAt
        - nextPollAfterMs
      properties:
        code:
          type: string
        terminal:
          type: boolean
          description: >-
            Derived only from canonical payment.status. Presentation state never
            makes a Payment terminal.
        userActionRequired:
          type: boolean
        retryable:
          type: boolean
        message:
          type: string
        updatedAt:
          type:
            - string
            - 'null'
          format: date-time
        nextPollAfterMs:
          type:
            - integer
            - 'null'
          minimum: 0
    PaymentAmount:
      type: object
      additionalProperties: false
      required:
        - amountAtomic
        - assetSymbol
        - decimals
      properties:
        amountAtomic:
          type: string
          pattern: ^[0-9]+$
          example: '10000000'
        assetSymbol:
          type: string
          example: USDC
        decimals:
          type: integer
          minimum: 0
          maximum: 36
          example: 6
        chainId:
          type: integer
          example: 42161
        tokenAddress:
          type: string
          example: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831'
    NormalizedPaymentAmount:
      type: object
      additionalProperties: false
      required:
        - amountAtomic
        - amountDecimal
        - assetSymbol
        - decimals
      properties:
        amountAtomic:
          type: string
          pattern: ^[0-9]+$
          example: '10000000'
        amountDecimal:
          type: string
          pattern: ^(0|[1-9]\d*)(\.\d+)?$
          example: '10'
        assetSymbol:
          type: string
          example: USDC
        decimals:
          type: integer
          minimum: 0
          maximum: 36
          example: 6
        chainId:
          type: integer
          example: 42161
        tokenAddress:
          type: string
          example: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831'
    PublicMerchantBranding:
      type: object
      additionalProperties: false
      required:
        - displayName
        - logoUrl
        - primaryColor
      properties:
        displayName:
          type: string
          example: Acme Inc
        logoUrl:
          type:
            - string
            - 'null'
          format: uri
          example: https://cdn.example.com/acme-logo.png
        primaryColor:
          type: string
          pattern: ^#[0-9a-fA-F]{6}$
          example: '#5B5BF6'
    PublicPaymentPresenter:
      type: object
      additionalProperties: false
      required:
        - displayName
        - logoUrl
      properties:
        displayName:
          type: string
          minLength: 1
          maxLength: 120
          example: Acme Platform
        logoUrl:
          type:
            - string
            - 'null'
          format: uri
          maxLength: 2048
    PublicPaymentProvisioningState:
      oneOf:
        - title: Checkout provisioning state
          type: object
          additionalProperties: false
          required:
            - status
          properties:
            status:
              type: string
              enum:
                - preparing
                - ready
                - unavailable
              description: >-
                Coarse checkout readiness. Internal operation identifiers,
                stages, retries, and diagnostics are never exposed.
        - title: No provisioning operation
          type: 'null'
    PublicPaymentMethod:
      type: object
      additionalProperties: false
      required:
        - id
        - providerCode
        - type
        - displayName
        - networkCode
        - chainId
        - tokenAddress
        - assetSymbol
        - decimals
        - available
        - availability
        - recommended
        - disabledReason
        - estimatedSeconds
        - minimumAmount
        - minimumAmountSource
        - maximumAmount
        - executionTypes
        - walletFamily
      properties:
        id:
          type: string
          example: crypto.direct
        providerCode:
          type: string
          enum:
            - direct
            - routing
            - banxa
          example: direct
        type:
          type: string
          enum:
            - crypto
            - fiat_onramp
            - card
        displayName:
          type: string
          example: Arbitrum USDC
        networkCode:
          type: string
          example: arbitrum
        chainId:
          type: integer
          example: 42161
        tokenAddress:
          type: string
          example: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831'
        assetSymbol:
          type: string
          example: USDC
        decimals:
          type: integer
          minimum: 0
          maximum: 36
          example: 6
        available:
          type: boolean
          const: true
          description: >-
            Whether this method can be selected. This is not a promise that a
            third-party quote will succeed.
        availability:
          type: string
          enum:
            - ready
            - provider_confirmation_required
          description: >-
            Direct is ready immediately. Routing/onramp methods require a live
            provider quote or order during option creation.
        recommended:
          type: boolean
        disabledReason:
          type: 'null'
        estimatedSeconds:
          type:
            - integer
            - 'null'
          minimum: 1
        minimumAmount:
          anyOf:
            - $ref: '#/components/schemas/NormalizedPaymentAmount'
            - type: 'null'
        minimumAmountSource:
          type: string
          enum:
            - stableyard
            - provider
          description: >-
            provider means the exact minimum is dynamic and enforced during
            option creation.
        maximumAmount:
          anyOf:
            - $ref: '#/components/schemas/NormalizedPaymentAmount'
            - type: 'null'
        executionTypes:
          type: array
          items:
            type: string
            enum:
              - deposit_address
              - hosted_checkout
        walletFamily:
          type: string
          enum:
            - evm
            - bitcoin
            - tron
            - solana
            - movement
    PublicPaymentOption:
      type: object
      additionalProperties: false
      required:
        - id
        - providerCode
        - paymentMethodType
        - paymentMethodId
        - type
        - displayName
        - status
        - selectionStatus
        - requiredAmountAtomic
        - paidAmountAtomic
        - remainingAmountAtomic
        - isTerminal
        - confirmationMode
        - transactionSubmissions
        - destinationAmount
        - payerAmount
        - recipientAmount
        - providerFee
        - execution
        - expiresAt
        - refreshable
        - actionExpiresAt
        - receipts
      properties:
        id:
          type: string
          example: pay_option_123
        providerCode:
          type: string
          enum:
            - direct
            - routing
            - banxa
            - vault
          example: direct
        paymentMethodType:
          type: string
          enum:
            - crypto
            - fiat_onramp
            - card
            - account_balance
        paymentMethodId:
          type: string
          example: crypto.direct
        type:
          type: string
          enum:
            - crypto
            - fiat_onramp
            - card
            - account_balance
        displayName:
          type: string
          example: Arbitrum USDC
        status:
          type: string
          enum:
            - creating
            - pending
            - processing
            - succeeded
            - expired
            - failed
            - cancelled
        selectionStatus:
          type: string
          enum:
            - selected
            - superseded
        requiredAmountAtomic:
          type: string
          pattern: ^[0-9]+$
        paidAmountAtomic:
          type: string
          pattern: ^[0-9]+$
        remainingAmountAtomic:
          type: string
          pattern: ^[0-9]+$
        isTerminal:
          type: boolean
        confirmationMode:
          type: string
          enum:
            - provider_webhook
            - transaction_hash_submission
          description: >-
            Movement direct payments require transaction-hash submission. Other
            supported Payment escrow networks are detected by provider webhook.
        transactionSubmissions:
          type: array
          items:
            $ref: '#/components/schemas/PaymentTransactionSubmission'
          description: >-
            Movement transaction candidates submitted for this option. Empty for
            webhook-detected networks.
        sourceAmount:
          anyOf:
            - $ref: '#/components/schemas/PaymentAmount'
            - type: 'null'
          description: >-
            Exact amount the payer must deposit in the selected source asset.
            For Routing exact-output options, this is normalized from
            quote.inputAmount.
        destinationAmount:
          $ref: '#/components/schemas/PaymentAmount'
        payerAmount:
          $ref: '#/components/schemas/NormalizedPaymentAmount'
        recipientAmount:
          $ref: '#/components/schemas/NormalizedPaymentAmount'
        providerFee:
          anyOf:
            - $ref: '#/components/schemas/NormalizedPaymentAmount'
            - type: 'null'
          description: >-
            Routing/provider network cost when reported. Commercial partner and
            platform fees remain private.
        execution:
          description: >-
            Normalized interface execution contract for the selected Payment
            option.
          oneOf:
            - title: Crypto deposit address
              type: object
              additionalProperties: false
              required:
                - type
                - address
                - chainId
                - tokenAddress
                - assetSymbol
                - amountAtomic
                - decimals
                - expiresAt
              properties:
                type:
                  type: string
                  const: deposit_address
                address:
                  type: string
                chainId:
                  type: integer
                tokenAddress:
                  type: string
                assetSymbol:
                  type: string
                amountAtomic:
                  type: string
                  pattern: ^[0-9]+$
                decimals:
                  type: integer
                  minimum: 0
                  maximum: 36
                expiresAt:
                  type:
                    - string
                    - 'null'
                  format: date-time
            - title: Hosted fiat checkout
              type: object
              additionalProperties: false
              required:
                - type
                - provider
                - checkoutUrl
              properties:
                type:
                  type: string
                  const: hosted_checkout
                provider:
                  type: string
                  enum:
                    - banxa
                checkoutUrl:
                  type: string
                  format: uri
            - title: Account-bound Vault authorization
              description: >-
                Returned only after an authenticated UPA selects its Vault. The
                Payment client secret alone cannot authorize this action.
              type: object
              additionalProperties: false
              required:
                - type
                - actionId
                - authorization
                - expiresAt
                - confirmEndpoint
              properties:
                type:
                  type: string
                  const: managed_authorization
                actionId:
                  type: string
                  minLength: 1
                  maxLength: 128
                authorization:
                  type: string
                  const: approved
                expiresAt:
                  type:
                    - string
                    - 'null'
                  format: date-time
                confirmEndpoint:
                  type: string
            - title: Execution not ready
              type: 'null'
        expiresAt:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            Compatibility field for the effective payer deadline, capped by the
            Stableyard action TTL, provider deadline, and enclosing Payment
            expiry. Use this for countdowns.
        refreshable:
          type: boolean
          description: >-
            True only when this provider option has expired or failed and
            Stableyard has observed no financial evidence, so it may be replaced
            safely.
        feeAmountAtomic:
          type:
            - string
            - 'null'
          pattern: ^[0-9]+$
          description: >-
            Provider/network fee in the source denomination when reported.
            Stableyard and partner commercial fee economics are private.
        actionExpiresAt:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            Stableyard-controlled deadline for completing or refreshing the
            current payer action. It is not proof that a provider order is
            terminal and does not by itself permit replacement.
        quoteExpiresAt:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            Provider quote deadline used server-to-server while creating the
            order. Do not show this as the payer funding timer.
        orderExpiresAt:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            Provider-owned funding-order deadline before it is capped by the
            enclosing Payment expiry. Null when the provider does not return
            one. Legacy Banxa records may retain the former action deadline here
            during a rolling deployment; use expiresAt for countdowns.
        receipts:
          type: array
          items:
            $ref: '#/components/schemas/PaymentReceipt'
        error:
          $ref: '#/components/schemas/PublicPaymentError'
    PublicPaymentError:
      type: object
      additionalProperties: false
      required:
        - code
        - message
        - details
      properties:
        code:
          type: string
          enum:
            - routing_underpayment
        message:
          type: string
          example: Routing delivered less than the required payment amount.
        details:
          type: object
          additionalProperties: false
          required:
            - expectedAmountAtomic
            - receivedAmountAtomic
          properties:
            expectedAmountAtomic:
              type: string
              pattern: ^[0-9]+$
              example: '1000000'
            receivedAmountAtomic:
              type: string
              pattern: ^[0-9]+$
              example: '966741'
    PaymentTransactionSubmission:
      type: object
      additionalProperties: false
      required:
        - transactionHash
        - status
        - failureCode
        - submittedAt
        - verifiedAt
      properties:
        transactionHash:
          type: string
          description: >-
            Canonical EVM/Movement transaction hash, Bitcoin/Tron transaction
            id, or Solana transaction signature.
          pattern: ^(0x[0-9a-fA-F]{64}|[0-9a-fA-F]{64}|[1-9A-HJ-NP-Za-km-z]{80,90})$
        purpose:
          type: string
          enum:
            - destination_escrow
            - routing_source
          description: >-
            Omitted for legacy destination-escrow submissions; routing_source
            identifies payer funding evidence sent to Routing for verification.
        status:
          type: string
          enum:
            - submitted
            - verifying
            - verified
            - rejected
            - requires_intervention
        failureCode:
          type:
            - string
            - 'null'
          enum:
            - invalid_payment_binding
            - invalid_transaction_hash
            - transaction_failed
            - invalid_transaction_type
            - transaction_hash_mismatch
            - invalid_transfer_function
            - invalid_transfer_arguments
            - asset_mismatch
            - destination_mismatch
            - transaction_already_used
            - transaction_not_confirmed
            - transaction_verification_unavailable
            - payment_option_missing
            - routing_transaction_rejected
            - null
        submittedAt:
          type: string
          format: date-time
        verifiedAt:
          type:
            - string
            - 'null'
          format: date-time
    PaymentReceipt:
      type: object
      additionalProperties: false
      required:
        - chainId
        - txHash
        - logIndex
        - amountAtomic
        - confirmedAt
      properties:
        chainId:
          type: integer
        txHash:
          type: string
        logIndex:
          type:
            - integer
            - 'null'
          minimum: 0
          description: >-
            EVM token log index when available; null for chain evidence without
            an EVM log index.
        amountAtomic:
          type: string
          pattern: ^[0-9]+$
        confirmedAt:
          type: string
          format: date-time
  responses:
    Unauthorized:
      description: Unauthorized
      headers:
        Stableyard-Version:
          description: >-
            Effective date-based Stableyard API contract version for this
            response.
          schema:
            type: string
            enum:
              - '2026-09-09'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            example:
              summary: Unauthorized response
              value:
                error:
                  code: bad_request
                  message: The request is invalid
                  details: example
    NotFound:
      description: Not found
      headers:
        Stableyard-Version:
          description: >-
            Effective date-based Stableyard API contract version for this
            response.
          schema:
            type: string
            enum:
              - '2026-09-09'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            example:
              summary: NotFound response
              value:
                error:
                  code: bad_request
                  message: The request is invalid
                  details: example
  securitySchemes:
    paymentClientSecret:
      type: http
      scheme: bearer
      bearerFormat: Stableyard Payment client secret
      description: >-
        Short-lived browser capability for exactly one payment_* resource. Never
        place it in a URL.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.