openapi: 3.1.0
info:
  title: Banxa Native API
  description: >-
    Official Banxa Enterprise API Specs


    > For the complete documentation index, see
    [llms.txt](https://docs.banxa.com/llms.txt). Append `.md` to any page URL
    for its markdown version.
  license:
    name: MIT
    identifier: MIT
  version: 0 BETA
  x-logo:
    url: >-
      https://banxa.com/wp-content/uploads/2025/02/Banxa-Logo-Primary-RGB-for-Dark-Mode.png
    backgroundColor: '#121730'
    altText: Banxa official logo
  termsOfService: https://banxa.com/terms-of-use/
  contact:
    name: Banxa customer support
    url: https://support.banxa.com/en/support/home
    email: developer-support@banxa.com
servers:
  - url: https://api.banxa.com
    description: Production environment server
  - url: https://api.banxa-sandbox.com
    description: Sandbox environment server
tags:
  - name: Ramps
    description: >-
      **Ramp Transactions** - Create and manage cryptocurrency on-ramp (fiat →
      crypto) and off-ramp (crypto → fiat) transactions.


      **Key Operations**:

      - Create on-ramp transactions (buy cryptocurrency)

      - Create off-ramp transactions (sell cryptocurrency)

      - Retrieve transaction status and details

      - Monitor transaction lifecycle via webhooks


      **Transaction Flow**:

      1. Check eligibility and limits

      2. Get price quote

      3. Create ramp transaction

      4. Customer completes payment/deposit

      5. Receive status updates via webhooks

      6. Transaction completes


      **Supported Payment Methods**: PayID (AU), SEPA (EU), ACH (US), Interac
      (CA)


      **Supported Blockchains**: Bitcoin, Ethereum, TRON, Polygon, BSC
    x-displayName: Ramps (Transactions)
  - name: Identities
    description: >-
      **Identity & KYC Management** - Manage customer identity verification and
      Know Your Customer (KYC) compliance.


      **Key Operations**:

      - Create basic customer identities

      - Share KYC verification via third-party providers (Sumsub)

      - Upload identity documents directly

      - Update customer information

      - Retrieve identity verification status


      **Verification Methods**:

      1. **Token Sharing**: Use existing KYC from Sumsub

      2. **Identity Reliance**: Share verified identity data

      3. **Document Upload**: Submit documents directly to Banxa


      **Required Documents**:

      - Government-issued photo ID (passport, driver's license, national ID)

      - Proof of address (utility bill, bank statement)

      - Selfie for liveness verification


      **Verification Tiers**:

      - **Tier 0**: Basic info (low limits)

      - **Tier 1**: Email + phone verified (medium limits)

      - **Tier 2**: Full KYC verified (high limits)
    x-displayName: Identities (KYC)
  - name: Quote
    description: >-
      **Quotes** - Get a locked price quote with a unique `quoteId` and a
      3-minute TTL.


      **Key Features**:

      - Returns a `quoteId` that can be used to create a ramp transaction

      - Quote is valid for 3 minutes (`expiresAt`)

      - Includes all fees (processing + network)

      - Lock fiat OR crypto amount


      **Flow**:

      1. Request a quote via `GET /eapi/v0/quote`

      2. Display the quote to the customer

      3. Use the `quoteId` in the ramp creation payload before it expires


      **Important Notes**:

      - Prices are subject to market volatility and network congestion

      - Once expired, a new quote must be requested

      - The `quoteId` can only be used once
    x-displayName: Quote
  - name: Price
    description: >-
      **Indicative Pricing** - Get real-time, non-persisted price estimates for
      cryptocurrency transactions.


      The price endpoint returns an **indicative** price that is not stored or
      locked. It carries no `quoteId` and cannot be referenced when creating a
      ramp transaction. For a locked quote that can be used to create a ramp,
      use the `GET /eapi/v0/quote` endpoint.


      **Key Features**:

      - Real-time market rates

      - Includes all fees (processing + network)

      - Lock fiat OR crypto amount


      **Important Notes**:

      - Prices are indicative and not persisted

      - Prices fluctuate with market conditions

      - Don't cache prices for more than 1 minute

      - Use the Quote endpoint to obtain a locked, referenceable quote


      **Use Cases**:

      - Display indicative price to customer

      - Transaction previews and fee breakdowns

      - UI price tickers and estimates
    x-displayName: Price (Indicative)
  - name: Eligibility
    description: >-
      **Transaction Eligibility** - Pre-check if a customer can perform a
      transaction.


      **Purpose**: Determine if customer meets requirements before attempting
      transaction.


      **Returns**:

      - `paymentReady`: Boolean indicating if customer can transact immediately

      - `requirements`: Array of outstanding KYC/compliance requirements


      **Possible Requirements**:

      - `US_TAX_ID`: US tax identification needed

      - `PERSONAL_DETAILS`: Name, DOB, address required

      - `DOCUMENT`: Government ID needed

      - `SELFIE`: Liveness check required

      - `SOURCE_FUNDS`: Source of funds declaration needed

      - `OCCUPATION`: Occupation information required

      - `PURPOSE_OF_TX`: Transaction purpose needed


      **Best Practice**: Check eligibility before showing price quotes to avoid
      failed transactions.
    x-displayName: Eligibility (Pre-checks)
  - name: Limits
    description: >-
      **Transaction Limits** - Check applicable transaction limits for
      customers.


      **Limit Types**:

      - **Transaction Limits**: Minimum and maximum per transaction

      - **Daily Limits**: 24-hour rolling window

      - **Weekly Limits**: 7-day rolling window

      - **Monthly Limits**: 30-day rolling window

      - **Annual Limits**: 365-day rolling window


      **Limit Sources**:

      - **Provider Limits**: Payment method/route specific limits

      - **Customer Limits**: User tier-based limits and overrides


      **Effective Limit**: The most restrictive limit applies (minimum of
      provider and customer limits).


      **Use Cases**:

      - Display available transaction amounts to customer

      - Validate transaction amount before submission

      - Show customer their current tier limits

      - Explain why a transaction amount is not allowed
    x-displayName: Limits (Transaction Limits)
  - name: Verifications
    description: >-
      **OTP Verification** - Email verification using one-time password (OTP)
      codes.


      **Key Operations**:

      - Request OTP code to be sent to customer's email

      - Verify OTP code to confirm email ownership


      **Flow**:

      1. Request OTP via `POST /eapi/v0/verifications/otp`

      2. Customer receives OTP code via email

      3. Verify OTP via `POST /eapi/v0/verifications/otp/verify`


      **Rate Limits**:

      - OTP requests: 3 per minute per customer

      - OTP verification attempts: 4 per minute per customer


      **Important Notes**:

      - OTP codes are single-use and expire after a set time

      - Email must be verified for certain compliance requirements

      - Feature must be enabled for your merchant account
    x-displayName: Verifications (OTP)
  - name: Configuration
    description: >-
      **Configuration Endpoints** - Retrieve supported payment methods, fiat
      currencies, countries, crypto currencies, and other configuration data
      required to build onboarding and transaction flows.


      **Key Operations**:

      - List supported fiat currencies for on-ramp and off-ramp transactions

      - Retrieve available payment methods for a given transaction direction

      - Get supported countries and any required states or provinces

      - List supported crypto currencies for transaction setup

      - Use configuration data to pre-fill forms before pricing or ramp creation


      **Use Cases**:

      - Populate dropdowns and selectors in your UI

      - Filter valid options based on customer choices

      - Validate transaction parameters before submission

      - Display supported onboarding and payout options
    x-displayName: Configuration
externalDocs:
  url: https://banxa.com
  description: Banxa website
paths:
  /eapi/v0/ramps:
    get:
      summary: Ramps List
      description: >-
        Retrieve a paginated list of transfer orders (ramps).


        **Pagination Modes**:

        - **Cursor Pagination**: Use `startAfter`, `endBefore`, or `cursor`
        parameters. Dates are optional.

        - **Offset Pagination**: Use `page` parameter. Dates (`dateFrom` and
        `dateTo`) are required.


        **Important**: Cannot mix pagination types. Choose either cursor-based
        or offset-based pagination.


        **Use Cases**:

        - Retrieve transaction history for reporting

        - Sync transactions to your system

        - Display transaction list to customers

        - Export transaction data
      operationId: listRamps
      tags:
        - Ramps
      security:
        - HMACAuth: []
      parameters:
        - name: perPage
          in: query
          description: >-
            Number of items per page.


            **Range**: 1-200

            **Default**: 10


            **Recommendation**: Use smaller page sizes (10-50) for better
            performance.
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 200
            default: 10
          example: 25
        - name: page
          in: query
          description: >-
            Page number for offset pagination (1-based).


            **Offset Pagination Mode**:

            - Cannot be used with cursor parameters (`startAfter`, `endBefore`,
            `cursor`)

            - **Requires** `dateFrom` and `dateTo` when used

            - Returns total count and page information

            - Suitable for UI pagination with page numbers


            **Example**:
            `page=2&perPage=25&dateFrom=2024-01-01&dateTo=2024-12-31`
          required: false
          schema:
            type: integer
            minimum: 1
            default: 1
          example: 2
        - name: startAfter
          in: query
          description: >-
            Cursor to start after (order key or ID). Returns orders after this
            cursor, excluding it.


            **Cursor Pagination Mode**:

            - Cannot be used with `endBefore` or `page`

            - Dates are optional when using cursor pagination

            - More efficient for large datasets

            - Suitable for infinite scroll or "load more" patterns


            **Example**: `startAfter=ORD-2024-100&perPage=25`
          required: false
          schema:
            type: string
            maxLength: 255
          example: ORD-2024-100
        - name: endBefore
          in: query
          description: >-
            Cursor to end before (order key or ID). Returns orders before this
            cursor, excluding it.


            **Cursor Pagination Mode**:

            - Cannot be used with `startAfter` or `page`

            - Dates are optional when using cursor pagination

            - Useful for reverse pagination


            **Example**: `endBefore=ORD-2024-200&perPage=25`
          required: false
          schema:
            type: string
            maxLength: 255
          example: ORD-2024-200
        - name: cursor
          in: query
          description: >-
            Generic cursor parameter for pagination (typically from previous
            response).


            **Usage**:

            - Cannot be used with `page`

            - Dates are optional when using cursor pagination

            - Use `nextCursor` or `prevCursor` from previous response

            - Opaque string - do not parse or modify


            **Example**: `cursor=eyJvcmRlcnMuaWQiOjEyMzQ1fQ==`
          required: false
          schema:
            type: string
            maxLength: 255
          example: eyJvcmRlcnMuaWQiOjEyMzQ1LCJfcG9pbnRzVG9OZXh0SXRlbXMiOnRydWV9
        - name: dateFrom
          in: query
          description: >-
            Start date filter (YYYY-MM-DD).


            **Requirements**:

            - **Required** for offset pagination (when using `page`)

            - **Optional** for cursor pagination (when using `startAfter`,
            `endBefore`, or `cursor`)


            **Validation**:

            - Must be valid date in YYYY-MM-DD format

            - Cannot be in the future

            - Must be <= `dateTo` if both provided
          required: false
          schema:
            type: string
            format: date
          example: '2024-01-01'
        - name: dateTo
          in: query
          description: >-
            End date filter (YYYY-MM-DD). Must be >= `dateFrom` if provided.


            **Requirements**:

            - **Required** for offset pagination (when using `page`)

            - **Optional** for cursor pagination (when using `startAfter`,
            `endBefore`, or `cursor`)


            **Validation**:

            - Must be valid date in YYYY-MM-DD format

            - Must be >= `dateFrom`

            - Cannot be in the future
          required: false
          schema:
            type: string
            format: date
          example: '2024-12-31'
      responses:
        '200':
          description: >-
            Successful response with paginated ramps list.


            **Response Structure**:

            - `data`: Array of ramp objects

            - `pagination`: Pagination metadata (cursor or offset based)


            **Pagination Metadata**:

            - **Cursor mode**: `nextCursor`, `prevCursor`, `hasMore`, `perPage`

            - **Offset mode**: `currentPage`, `perPage`, `total`, `lastPage`,
            `from`, `to`
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RampsListResponse'
              examples:
                cursorPaginationResponse:
                  summary: Cursor pagination response
                  description: >-
                    Example response using cursor-based pagination. Use
                    nextCursor for next page.
                  value:
                    data:
                      - id: ORD-2024-001
                        subPartnerId: partner-123
                        identityReference: customer-12345
                        status: completed
                        source:
                          fiat:
                            id: USD
                            method: card
                          amount: '1000.00'
                        target:
                          crypto:
                            id: BTC
                            blockchain: BTC
                            walletAddress: 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
                            walletAddressMemo: null
                          amount: '0.025'
                        receipt:
                          targetTransactionHash: 0xabc123...
                          gatewayFee: '5.00'
                          networkFee: '2.50'
                          sourceAmount: '1000.00'
                          targetAmount: '0.025'
                        createdAt: '2024-01-15T10:30:00Z'
                        completedAt: '2024-01-15T10:45:00Z'
                    pagination:
                      nextCursor: >-
                        eyJvcmRlcnMuaWQiOjEyMzQ1LCJfcG9pbnRzVG9OZXh0SXRlbXMiOnRydWV9
                      prevCursor: null
                      hasMore: true
                      perPage: 10
                offsetPaginationResponse:
                  summary: Offset pagination response
                  description: >-
                    Example response using offset-based pagination. Use page
                    parameter for navigation.
                  value:
                    data:
                      - id: ORD-2024-001
                        subPartnerId: partner-123
                        identityReference: customer-12345
                        status: completed
                        source:
                          fiat:
                            id: USD
                            method: card
                          amount: '1000.00'
                        target:
                          crypto:
                            id: BTC
                            blockchain: BTC
                            walletAddress: 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
                            walletAddressMemo: null
                          amount: '0.025'
                        receipt:
                          targetTransactionHash: 0xabc123...
                          gatewayFee: '5.00'
                          networkFee: '2.50'
                          sourceAmount: '1000.00'
                          targetAmount: '0.025'
                        createdAt: '2024-01-15T10:30:00Z'
                        completedAt: '2024-01-15T10:45:00Z'
                    pagination:
                      currentPage: 1
                      perPage: 10
                      total: 150
                      lastPage: 15
                      from: 1
                      to: 10
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
    post:
      summary: Ramps enable Fiat to Crypto and Crypto to fiat on and off ramp.
      security:
        - HMACAuth: []
      description: Enables conversion between fiat and cryptocurrency in both directions.
      operationId: createRamp
      tags:
        - Ramps
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/OnRampRequest'
                - $ref: '#/components/schemas/OffRampRequest'
                - $ref: '#/components/schemas/QuoteRampRequest'
            examples:
              onramp_fiat_amount:
                summary: On-Ramp with fiat amount (Buy crypto)
                description: >-
                  Customer wants to buy USDT on TRON network using AUD via
                  PayID. Fiat amount is locked at 100 AUD.
                value:
                  identityReference: customer-12345
                  subPartnerId: partner-app-1
                  source:
                    fiat:
                      id: AUD
                      method: payid-bank-transfer
                  target:
                    crypto:
                      id: USDT
                      blockchain: TRON
                      walletAddress: TYDzsYUEpvnYmQk4zGP9sWWcTEd2MiAtW6
                      walletAddressMemo: '39730'
                  fiatAmount: '100.00'
              onramp_crypto_amount:
                summary: On-Ramp with crypto amount (Buy exact crypto)
                description: >-
                  Customer wants to buy exactly 100 USDT using ACH. Fiat amount
                  will be calculated. Includes tosAccepted for ACH terms of
                  service.
                value:
                  identityReference: customer-67890
                  source:
                    fiat:
                      id: USD
                      method: ach-bank-transfer
                      tosAccepted: true
                  target:
                    crypto:
                      id: USDT
                      blockchain: ETH
                      walletAddress: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb'
                  cryptoAmount: '100.00'
              offramp_crypto_amount:
                summary: Off-Ramp with crypto amount (Sell crypto)
                description: >-
                  Customer wants to sell 100 USDT for AUD. Crypto amount is
                  locked.
                value:
                  identityReference: customer-11111
                  source:
                    crypto:
                      id: USDT
                      blockchain: TRON
                      walletAddress: TYDzsYUEpvnYmQk4zGP9sWWcTEd2MiAtW6
                      walletAddressMemo: '1234'
                  target:
                    fiat:
                      id: AUD
                      method: payid-bank-transfer
                      instructions:
                        - accountName: John Doe
                          accountNumber: '12345678'
                          bsb: '063123'
                  cryptoAmount: '100.00'
              offramp_fiat_amount:
                summary: Off-Ramp with fiat amount (Receive exact fiat)
                description: >-
                  Customer wants to receive exactly 100 AUD. Crypto amount will
                  be calculated.
                value:
                  identityReference: customer-22222
                  source:
                    crypto:
                      id: ETH
                      blockchain: ETH
                      walletAddress: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb'
                  target:
                    fiat:
                      id: EUR
                      method: sepa-bank-transfer
                      instructions:
                        - accountName: Jane Smith
                          iban: DE89370400440532013000
                  fiatAmount: '100.00'
              quote_ramp:
                summary: Ramp using a quote ID
                description: >-
                  Create a ramp transaction using a previously obtained quote
                  ID. Source, target, and amount details are inferred from the
                  quote.
                value:
                  quoteId: 6e9174edd370ffe6331aeda7a6d75592
                  identityReference: customer-ref-1234
                  walletAddress: '0xc292474673cf1a96a96e8c56ec4f45ecf2e0b448'
                  walletAddressMemo: null
              offramp_ach_with_tos:
                summary: Off-Ramp with ACH bank transfer
                description: >-
                  Customer wants to sell crypto and receive USD via ACH.
                  Includes tosAccepted for ACH terms of service.
                value:
                  identityReference: customer-33333
                  source:
                    crypto:
                      id: USDT
                      blockchain: ETH
                      walletAddress: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb'
                  target:
                    fiat:
                      id: USD
                      method: ach-bank-transfer
                      tosAccepted: true
                      instructions:
                        - bankName: Bank of America
                          accountName: John Doe
                          accountNumber: '123456789012'
                          routingNumber: '121000358'
                  cryptoAmount: '100.00'
      responses:
        '201':
          description: >-
            Successful ramp response.


            **Next Steps**:

            - **On-Ramp**: Display payment instructions to customer
            (sourceDepositInstructions)

            - **Off-Ramp**: Display crypto deposit address to customer
            (sourceDepositInstructions)

            - Monitor status via webhooks or GET endpoint


            **Important**: The response type (OnRamp vs OffRamp) matches the
            request type.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/offramp-response'
                  - $ref: '#/components/schemas/onramp-response'
              examples:
                onramp_response:
                  summary: On-Ramp Response
                  description: >-
                    Response for an on-ramp transaction. Customer needs to make
                    payment to the provided instructions.
                  value:
                    id: b7f1ffbb2f1bd7a5e2ba152b4049d234
                    subPartnerId: partner-app-1
                    identityReference: customer-12345
                    status: INITIALIZED
                    source:
                      fiat:
                        id: AUD
                        method: payid-bank-transfer
                      amount: '100.00'
                    target:
                      crypto:
                        id: USDT
                        blockchain: TRON
                        walletAddress: TYDzsYUEpvnYmQk4zGP9sWWcTEd2MiAtW6
                        walletAddressMemo: '39730'
                      amount: '95.50'
                    sourceDepositInstructions:
                      recipientEmail: 15600270@banxa.com
                      depositReference: BNX-12345678
                    receipt:
                      targetTransactionHash: null
                      gatewayFee: '2.50'
                      networkFee: '2.00'
                      sourceAmount: '100.00'
                      targetAmount: '95.50'
                    createdAt: '2023-06-05T19:53:08.320Z'
                    completedAt: null
                offramp_response:
                  summary: Off-Ramp Response
                  description: >-
                    Response for an off-ramp transaction. Customer needs to send
                    crypto to the provided address.
                  value:
                    id: c8g2ggcc3g2ce8b6f3cb263b5150e345
                    subPartnerId: partner-app-1
                    identityReference: customer-11111
                    status: AWAITING_FUNDS
                    source:
                      crypto:
                        id: USDT
                        blockchain: TRON
                        walletAddress: TYDzsYUEpvnYmQk4zGP9sWWcTEd2MiAtW6
                        walletAddressMemo: '1234'
                      amount: '105.00'
                    target:
                      fiat:
                        id: AUD
                        method: payid-bank-transfer
                      amount: '100.00'
                    sourceDepositInstructions:
                      walletAddress: TBanxaDepositAddress123456789
                      walletAddressMemo: MEMO123456
                    receipt:
                      sourceTransactionHash: null
                      gatewayFee: '3.00'
                      networkFee: '2.00'
                      sourceAmount: '105.00'
                      targetAmount: '100.00'
                    createdAt: '2023-06-05T19:53:08.320Z'
                    completedAt: null
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /eapi/v0/ramps/{ramp_id}:
    get:
      security:
        - HMACAuth: []
      summary: Ramp retrieval
      description: >-
        Enables retrieval of detailed information about a specific order using
        its unique identifier.
      operationId: getRamp
      tags:
        - Ramps
      parameters:
        - name: ramp_id
          in: path
          required: true
          schema:
            type: string
            example: b7f1ffbb2f1bd7a5e2ba152b4049d234
            maxLength: 100
          description: The ramp ID to fetch.
      responses:
        '200':
          description: Successful ramp response
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/offramp-response'
                  - $ref: '#/components/schemas/onramp-response'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /eapi/v0/identities/share/token:
    post:
      security:
        - HMACAuth: []
      summary: Identity token sharing (sumsub)
      description: Share customer identity
      operationId: shareIdentity
      tags:
        - Identities
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IdentityTokenSharingRequest'
            examples:
              sumsub_token:
                summary: Share Sumsub KYC token
                description: Share existing KYC verification from Sumsub
                value:
                  identityReference: customer-12345
                  email: john.doe@example.com
                  mobileNumber: '+61431000001'
                  provider:
                    vendor: sumsub
                    token: >-
                      eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
      responses:
        '202':
          description: >-
            The identity sharing request has been accepted for processing, but
            the processing has not been finished yet.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IdentityTokenSharingResponse'
              examples:
                accepted:
                  summary: Request accepted for processing
                  value:
                    identityReference: customer-12345
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /eapi/v0/identities/reliance:
    post:
      security:
        - HMACAuth: []
      summary: Identity Reliance
      description: Share customer identity
      operationId: identityReliance
      tags:
        - Identities
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IdentityRelianceRequest'
            examples:
              identity_reliance:
                summary: Share verified identity data
                description: >-
                  Share identity data that has been verified by another trusted
                  party
                value:
                  identityReference: customer-12345
                  email: john.doe@example.com
                  mobileNumber: '+61431000001'
                  screeningDate: '2024-01-15'
                  screeningSanctionsResult: true
                  screeningPepResult: true
                  customerIdentity:
                    givenName: John
                    surname: Doe
                    dob: '1990-01-15'
                    residentialAddress:
                      addressLine: 123 Main Street
                      suburb: Sydney
                      state: NSW
                      postCode: '2000'
                      country: AU
                  identityDocuments:
                    - type: PASSPORT
                      data:
                        number: N1234567
      responses:
        '202':
          description: The identity sharing request has been accepted for processing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IdentityRelianceResponse'
              examples:
                accepted:
                  summary: Request accepted for processing
                  value:
                    identityReference: customer-12345
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /eapi/v0/identities/{identity_reference}:
    get:
      security:
        - HMACAuth: []
      summary: Identity Retrieval
      description: >-
        Enables retrieval of detailed information about a specific identity
        using the unique identityReference.
      operationId: getIdentity
      tags:
        - Identities
      parameters:
        - name: identity_reference
          in: path
          required: true
          schema:
            type: string
            example: /identities/c-13344
            maxLength: 100
          description: The identity reference to retrieve data for.
        - name: email
          in: query
          required: false
          schema:
            type: string
            format: email
            maxLength: 254
          description: Optional email address to assist with identity matching.
          example: user@example.com
      responses:
        '200':
          description: Successful identity response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetIdentityResponse'
              examples:
                existing_identity:
                  summary: Existing verified identity
                  description: >-
                    Identity exists with verified KYC data on file. Note:
                    VERIFIED status means the identity data we have is
                    validated, but does not guarantee transaction eligibility.
                    Check the eligibility endpoint before allowing transactions.
                  value:
                    identityReference: customer-12345
                    account:
                      blocked: false
                      exists: true
                      createdAt: '2024-01-15T10:30:00Z'
                    kyc:
                      status: VERIFIED
                blocked_identity:
                  summary: Blocked identity
                  description: Identity exists but has been blocked
                  value:
                    identityReference: customer-blocked
                    account:
                      blocked: true
                      exists: true
                      createdAt: '2024-01-10T08:15:00Z'
                    kyc:
                      status: REJECTED
                new_identity:
                  summary: New identity (not yet created)
                  description: Identity does not exist in the system
                  value:
                    identityReference: customer-new
                    account:
                      blocked: false
                      exists: false
                      createdAt: null
                    kyc:
                      status: PENDING
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /eapi/v0/identities/basic:
    post:
      security:
        - HMACAuth: []
      summary: Identity create
      description: Low level identity onboarding
      operationId: createIdentity
      tags:
        - Identities
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BasicIdentityRequest'
            examples:
              basic_identity:
                summary: Create basic identity
                description: Minimal identity creation with required fields
                value:
                  identityReference: customer-12345
                  givenName: John
                  surname: Doe
                  dateOfBirth: '1990-01-15'
                  email: john.doe@example.com
                  residentialAddress:
                    addressLine: 123 Main Street
                    suburb: Sydney
                    state: NSW
                    postCode: '2000'
                    country: AU
      responses:
        '201':
          description: The identity has been created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BasicIdentityResponse'
              examples:
                created:
                  summary: Identity created successfully
                  value:
                    identityReference: customer-12345
                    createdAt: '2024-01-15T10:30:00Z'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /eapi/v0/identities/share/documents:
    post:
      security:
        - HMACAuth: []
      summary: Identity Document sharing
      description: >-
        Share identity documents for KYC verification.


        **Use Case**: Submit customer identity documents directly to Banxa for
        verification.


        **Process**:

        1. Collect customer information and documents

        2. Submit via this endpoint

        3. Receive 202 Accepted response

        4. Wait for webhook notification with verification result


        **Required Documents**:

        - At least one government-issued photo ID

        - Proof of address (if required)

        - Selfie for liveness verification


        **Document Quality**:

        - Clear, high-resolution images

        - All text readable

        - No glare or shadows

        - Maximum 10MB per image
      operationId: shareIdentityDocuments
      tags:
        - Identities
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IdentityDocumentSharingRequest'
            examples:
              complete_submission:
                summary: Complete identity submission with passport
                description: >-
                  Example of a complete identity verification submission
                  including passport, proof of address, and selfie
                value:
                  identityReference: customer-12345
                  mobileNumber: '+61431000001'
                  email: john.doe@example.com
                  customerIdentity:
                    givenName: John
                    surname: Doe
                    dob: '1990-01-15'
                    residentialAddress:
                      addressLine: 123 Main Street
                      suburb: Sydney
                      state: NSW
                      postCode: '2000'
                      country: AU
                  occupationIndustry: Consulting, IT, or business services
                  occupation: IT developer
                  sourceOfFunds: Salary
                  purposeOfTransaction: Investment
                  identityDocuments:
                    - type: PASSPORT
                      data:
                        number: N1234567
                      images:
                        - type: PASSPORT
                          base64: >-
                            iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==
                          mimetype: image/jpeg
                    - type: PROOF_OF_ADDRESS
                      images:
                        - type: PROOF_OF_ADDRESS
                          base64: >-
                            iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==
                          mimetype: image/jpeg
                    - type: SELFIE
                      images:
                        - type: SELFIE
                          base64: >-
                            iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==
                          mimetype: image/jpeg
      responses:
        '202':
          description: >-
            The identity document sharing request has been accepted for
            processing, but the processing of the sent documents has not been
            finished yet.


            **Next Steps**:

            - Documents are being verified (typical time: 1-24 hours)

            - You will receive a webhook notification when verification is
            complete

            - Status will be either VERIFIED or REJECTED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IdentityDocumentSharingResponse'
              examples:
                pending:
                  summary: Verification pending
                  value:
                    identityReference: customer-12345
                    status: PENDING
                    customerIdentity:
                      givenName: John
                      surname: Doe
                      dob: '1990-01-15'
                      residentialAddress:
                        addressLine: 123 Main Street
                        suburb: Sydney
                        state: NSW
                        postCode: '2000'
                        country: AU
                    occupationIndustry: Consulting, IT, or business services
                    occupation: IT developer
                    purposeOfTransaction: Investment
                    createdAt: '2023-06-05T19:53:08.320Z'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /eapi/v0/identities:
    patch:
      security:
        - HMACAuth: []
      summary: Identity update
      description: >-
        Update specific fields of an existing customer identity.


        **Use Case**: Update customer information without resubmitting all
        documents.


        **Partial Updates**: Only include fields you want to update. Omitted
        fields remain unchanged.


        **Important Notes**:

        - Some changes may trigger re-verification

        - Email and identityReference are required to identify the customer

        - Changes to critical fields (name, DOB) may require document
        re-submission
      operationId: patchIdentity
      tags:
        - Identities
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IdentityPatchRequest'
            examples:
              update_contact:
                summary: Update contact information
                description: Update email and mobile number only
                value:
                  identityReference: customer-12345
                  email: updated.email@example.com
                  mobileNumber: '+61431000002'
              update_address:
                summary: Update residential address
                description: Update customer's residential address
                value:
                  identityReference: customer-67890
                  email: john.doe@example.com
                  customerIdentity:
                    residentialAddress:
                      addressLine: 456 New Street
                      suburb: Melbourne
                      state: VIC
                      postCode: '3000'
                      country: AU
      responses:
        '204':
          description: No content, success. The identity has been updated successfully.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /eapi/v0/identities/transactions/limits:
    post:
      security:
        - HMACAuth: []
      summary: Transaction Limits
      description: >
        Returns applicable transaction limits for a given identity and
        transaction context.


        Limits are derived from:

        - payment-provider limits (route/method specific), and

        - customer-specific limits (tier-based and/or overrides)


        The response returns:

        - limits for DAILY/WEEKLY/MONTHLY/ANNUAL windows,
          including provider vs customer sources
      operationId: postIdentityTransactionLimits
      tags:
        - Limits
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LimitsRequest'
            examples:
              example:
                summary: Limits request
                value:
                  identityReference: 206-0x56c386b7b49be8618dbcdb2c6d09e161645c31ed
                  method: payid-bank-transfer
                  fiat: AUD
                  crypto: BTC
                  blockchain: BTC
                  transactionType: ONRAMP
      responses:
        '200':
          description: Limits result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LimitsResponse'
              examples:
                limits_response:
                  summary: Transaction limits for customer
                  description: >-
                    Shows per-transaction and periodical limits from both
                    provider and customer sources
                  value:
                    identityReference: RandomCustReferenceForTesting020600001
                    limits:
                      transaction:
                        maxFiat:
                          amount: '15000'
                          currency: AUD
                        minFiat:
                          amount: '50'
                          currency: AUD
                      periodical:
                        - period: DAILY
                          sources:
                            provider:
                              maxFiat:
                                amount: '10000'
                                currency: AUD
                              remainder: '9000'
                            customer:
                              maxFiat:
                                amount: '15000'
                                currency: AUD
                              remainder: '14000'
                        - period: WEEKLY
                          sources:
                            provider:
                              maxFiat:
                                amount: '30000'
                                currency: AUD
                              remainder: '29000'
                            customer:
                              maxFiat:
                                amount: '50000'
                                currency: AUD
                              remainder: '49000'
                        - period: MONTHLY
                          sources:
                            provider:
                              maxFiat:
                                amount: '120000'
                                currency: AUD
                              remainder: '119000'
                            customer:
                              maxFiat:
                                amount: '200000'
                                currency: AUD
                              remainder: '199000'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /eapi/v0/identities/transactions/eligibility:
    post:
      security:
        - HMACAuth: []
      summary: Identity transaction eligibility
      description: Request transaction eligibility for a specific identity
      operationId: Identities/Transactions
      tags:
        - Eligibility
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EligibilityRequest'
            examples:
              with_identity_reference:
                summary: Check eligibility with identity reference
                description: Check if existing customer can perform transaction
                value:
                  identityReference: customer-12345
                  method: payid-bank-transfer
                  transactionType: ONRAMP
                  fiat: AUD
                  crypto: BTC
                  blockchain: BTC
                  fiatAmount: '100.00'
              without_identity_reference:
                summary: Check eligibility without identity reference
                description: Check eligibility for new customer using personal details
                value:
                  email: newuser@example.com
                  countryOfResidence: AU
                  dateOfBirth: '1990-01-30'
                  method: payid-bank-transfer
                  transactionType: ONRAMP
                  fiat: AUD
                  crypto: USDT
                  blockchain: TRON
                  fiatAmount: '500.00'
      responses:
        '202':
          description: Eligibility check result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EligibilityResponse'
              examples:
                ready_to_transact:
                  summary: Customer ready to transact
                  description: Customer has completed all KYC requirements and can proceed
                  value:
                    paymentReady: true
                    requirements: []
                kyc_required:
                  summary: KYC requirements needed
                  description: Customer needs to complete KYC verification
                  value:
                    paymentReady: false
                    kycRequirements:
                      - NAME
                      - DOB
                      - ADDRESS
                      - TIN
                      - POA
                      - DOCUMENT
                      - SELFIE
                additional_info_required:
                  summary: Additional information required
                  description: Customer needs to provide occupation and source of funds
                  value:
                    paymentReady: false
                    kycRequirements:
                      - OCCUPATION
                      - SOURCE_FUNDS
                      - PURPOSE_OF_TX
                us_tax_id_required:
                  summary: Tax ID required
                  description: Customer needs to provide tax identification
                  value:
                    paymentReady: false
                    kycRequirements:
                      - TIN
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /eapi/v0/price:
    get:
      security:
        - HMACAuth: []
      summary: Indicative price request
      description: >-
        Request an indicative, non-persisted price. The returned price is a
        point-in-time estimate and is **not** stored or locked — it carries no
        `quoteId` and cannot be referenced later.


        Use this endpoint for display purposes, transaction previews, or fee
        breakdowns. For a locked price that can be used to create a ramp
        transaction, use the `GET /eapi/v0/quote` endpoint instead.


        Prices are subject to change based on market volatility and network
        congestion.
      operationId: getPrice
      tags:
        - Price
      parameters:
        - name: identityReference
          in: query
          description: >-
            A unique customer identifier provided by you. This field is required
            and must be unique for each customer. Please ensure you consistently
            reuse the same identityReference for repeat interactions with the
            same customer, allowing us to reliably recognize and associate their
            identity.
          required: true
          schema:
            type: string
            example: c-13344
        - name: fiat
          in: query
          description: The desired fiat
          required: true
          schema:
            type: string
            example: AUD
        - name: crypto
          in: query
          description: The desired crypto
          required: true
          schema:
            type: string
            example: USDT
        - name: method
          in: query
          description: |
            The payment method.

            | Available payments |
            |-------------|
            |debit-credit-card|
            |apple-pay|
            |sepa-bank-transfer|
            |gbp-bank-transfer|
            |ach-bank-transfer|
            |pix|
            |zar-bank-transfer|
            |interac-bank-transfer|
            |ideal-bank-transfer|
            |google-pay|
            |payid-bank-transfer|
            |wire-transfer|
            |spei|
            |pse|
            |khipu|
            |aud-bank-transfer|
            |usd-bank-transfer|
            |paypal|
            |klarna-paynow|
          required: true
          schema:
            type: string
            example: payid-bank-transfer
        - name: blockchain
          in: query
          description: The chain for the crypto currency e.g. TRON or ETH
          required: true
          schema:
            type: string
            example: TRON
        - name: transactionType
          in: query
          description: The type of transaction
          schema:
            type: string
            enum:
              - ONRAMP
              - OFFRAMP
            example: ONRAMP
        - name: fiatAmount
          in: query
          required: false
          schema:
            type: number
            minimum: 10
          description: >
            **Required without cryptoAmount**

            The amount in fiat currency to convert.

            Amount in fiat minor precision (typically 2 decimals).

            This locks the fiat amount; the crypto amount will be computed and
            rounded to the configured crypto scale.

            Note: due to differing decimal scales and rounding rules, converting
            fiat→crypto and then crypto→fiat may not return the exact original
            number..
        - name: cryptoAmount
          in: query
          required: false
          schema:
            type: number
            minimum: 0.01
          description: >
            **Required without fiatAmount**

            Amount in crypto precision (token-dependent, e.g., 6–8 decimals).

            This locks the crypto amount; the fiat amount will be computed and
            rounded to the fiat scale.

            Note: small differences vs the reverse path are expected from
            precision/rounding.
      responses:
        '200':
          description: >-
            Indicative price response. This price is not persisted and cannot be
            used to create a ramp transaction.
          x-summary: >-
            Prices are subject to change due to market volatility and network
            congestion, therefore it's not recommended to cache this response
            for longer than 1 minute.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/OnRampQuoteResponse'
                  - $ref: '#/components/schemas/OffRampQuoteResponse'
              examples:
                onramp_fiat_locked:
                  summary: On-ramp quote with fiat amount locked
                  description: Customer wants to spend exactly 100 AUD to buy USDT on TRON
                  value:
                    identityReference: customer-12345
                    source:
                      fiat:
                        id: AUD
                        method: payid-bank-transfer
                      amount: '100.00'
                    target:
                      crypto:
                        id: USDT
                        blockchain: TRON
                      amount: '95.50'
                    processingFee: '2.50'
                    networkFee: '2.00'
                    marketRate:
                      crypto:
                        USD: '1.0000'
                        AUD: '1.4071'
                      forex:
                        reference: USD
                        AUD: '1.4071'
                onramp_crypto_locked:
                  summary: On-ramp quote with crypto amount locked
                  description: Customer wants to receive exactly 100 USDT on TRON
                  value:
                    identityReference: customer-12345
                    source:
                      fiat:
                        id: AUD
                        method: payid-bank-transfer
                      amount: '145.23'
                    target:
                      crypto:
                        id: USDT
                        blockchain: TRON
                      amount: '100.00'
                    processingFee: '3.62'
                    networkFee: '2.00'
                    marketRate:
                      crypto:
                        USD: '1.0000'
                        AUD: '1.4071'
                      forex:
                        reference: USD
                        AUD: '1.4071'
                offramp_crypto_locked:
                  summary: Off-ramp quote with crypto amount locked
                  description: Customer wants to sell exactly 0.01 BTC for AUD
                  value:
                    identityReference: customer-12345
                    source:
                      crypto:
                        id: BTC
                        blockchain: BTC
                      amount: '0.01'
                    target:
                      fiat:
                        id: AUD
                        method: payid-bank-transfer
                      amount: '542.15'
                    processingFee: '13.55'
                    networkFee: '0.00'
                    marketRate:
                      crypto:
                        USD: '38497.64'
                        AUD: '54170.03'
                      forex:
                        reference: USD
                        AUD: '1.4071'
                offramp_fiat_locked:
                  summary: Off-ramp quote with fiat amount locked
                  description: Customer wants to receive exactly 1000 AUD
                  value:
                    identityReference: customer-12345
                    source:
                      crypto:
                        id: BTC
                        blockchain: BTC
                      amount: '0.01876'
                    target:
                      fiat:
                        id: AUD
                        method: payid-bank-transfer
                      amount: '1000.00'
                    processingFee: '25.00'
                    networkFee: '0.00'
                    marketRate:
                      crypto:
                        USD: '38497.64'
                        AUD: '54170.03'
                      forex:
                        reference: USD
                        AUD: '1.4071'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /eapi/v0/quote:
    get:
      security:
        - HMACAuth: []
      summary: Quote request
      description: >-
        Request a quote with a locked price and a unique `quoteId`. The quote is
        valid for **3 minutes** (`expiresAt`). Unique identifier for this quote.
        Use this when creating a ramp transaction via the Ramps Request payload
        to lock the quote in.


        Prices are subject to change based on market volatility and network
        congestion. Once expired, a new quote must be requested.
      operationId: getQuote
      tags:
        - Quote
      parameters:
        - name: identityReference
          in: query
          description: >-
            A unique customer identifier provided by you. This field is required
            and must be unique for each customer. Please ensure you consistently
            reuse the same identityReference for repeat interactions with the
            same customer, allowing us to reliably recognize and associate their
            identity.
          required: true
          schema:
            type: string
            example: c-13344
        - name: fiat
          in: query
          description: The desired fiat currency. Must be formatted as an ISO 4217 code.
          required: true
          schema:
            type: string
            example: AUD
        - name: crypto
          in: query
          description: The desired crypto token.
          required: true
          schema:
            type: string
            example: ETH
        - name: method
          in: query
          description: |
            The payment method.

            | Available payments |
            |-------------|
            |debit-credit-card|
            |apple-pay|
            |sepa-bank-transfer|
            |gbp-bank-transfer|
            |ach-bank-transfer|
            |upi|
            |pix|
            |zar-bank-transfer|
            |interac-bank-transfer|
            |ideal-bank-transfer|
            |google-pay|
            |payid-bank-transfer|
            |poli-bank-transfer|
            |try-bank-transfer|
            |wire-transfer|
            |spei|
            |pse|
            |khipu|
            |io-ar-bank-transfer|
            |aud-bank-transfer|
            |open-banking|
            |euro-open-banking|
            |usd-bank-transfer|
            |paypal|
            |klarna-paynow|
          required: true
          schema:
            type: string
            example: payid-bank-transfer
        - name: blockchain
          in: query
          description: The blockchain for the crypto currency e.g. TRON or ETH.
          required: true
          schema:
            type: string
            example: ETH
        - name: transactionType
          in: query
          description: The type of transaction.
          required: true
          schema:
            type: string
            enum:
              - ONRAMP
              - OFFRAMP
            example: ONRAMP
        - name: fiatAmount
          in: query
          required: false
          schema:
            type: number
            minimum: 10
          description: >
            **Required without cryptoAmount**

            The amount in fiat currency to convert.

            Amount in fiat minor precision (typically 2 decimals).

            This locks the fiat amount; the crypto amount will be computed and
            rounded to the configured crypto scale.

            Note: due to differing decimal scales and rounding rules, converting
            fiat→crypto and then crypto→fiat may not return the exact original
            number.
        - name: cryptoAmount
          in: query
          required: false
          schema:
            type: number
            minimum: 0.01
          description: >
            **Required without fiatAmount**

            Amount in crypto precision (token-dependent, e.g., 6–8 decimals).

            This locks the crypto amount; the fiat amount will be computed and
            rounded to the fiat scale.

            Note: small differences vs the reverse path are expected from
            precision/rounding.
      responses:
        '200':
          description: >-
            Quote response with a unique `quoteId` and an `expiresAt` timestamp.
            The quote is valid for 3 minutes.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/OnRampQuoteWithIdResponse'
                  - $ref: '#/components/schemas/OffRampQuoteWithIdResponse'
              examples:
                onramp_fiat_locked:
                  summary: On-ramp quote with fiat amount locked
                  description: Customer wants to spend exactly 24.50 AUD to buy ETH
                  value:
                    quoteId: 6e9174edd370ffe6331aeda7a6d75592
                    identityReference: wesley
                    source:
                      fiat:
                        id: AUD
                        method: payid-bank-transfer
                      amount: '24.50'
                    target:
                      crypto:
                        id: ETH
                        blockchain: ETH
                      amount: '0.007259'
                    processingFee: '0.00'
                    networkFee: '0.00'
                    marketRate:
                      crypto:
                        USD: '2342.218527689999974'
                        AUD: '3297.796842616966163'
                      forex:
                        reference: USD
                        AUD: '1.4079800'
                    expiresAt: '2026-04-10 04:50:36'
                onramp_crypto_locked:
                  summary: On-ramp quote with crypto amount locked
                  description: Customer wants to receive exactly 0.01 ETH
                  value:
                    quoteId: 7f0285dee481ffe7331bfca9c8f97603
                    identityReference: customer-12345
                    source:
                      fiat:
                        id: AUD
                        method: payid-bank-transfer
                      amount: '33.75'
                    target:
                      crypto:
                        id: ETH
                        blockchain: ETH
                      amount: '0.01'
                    processingFee: '0.84'
                    networkFee: '0.00'
                    marketRate:
                      crypto:
                        USD: '2342.218527689999974'
                        AUD: '3297.796842616966163'
                      forex:
                        reference: USD
                        AUD: '1.4079800'
                    expiresAt: '2026-04-10 04:52:10'
                offramp_crypto_locked:
                  summary: Off-ramp quote with crypto amount locked
                  description: Customer wants to sell exactly 100 USDT for AUD
                  value:
                    quoteId: 8a2b45ccd891ffe7442bfdb8b7e86703
                    identityReference: customer-12345
                    source:
                      crypto:
                        id: USDT
                        blockchain: TRON
                      amount: '100'
                    target:
                      fiat:
                        id: AUD
                        method: payid-bank-transfer
                      amount: '95.50'
                    processingFee: '2.50'
                    networkFee: '2.00'
                    marketRate:
                      crypto:
                        USD: '1.0000'
                        AUD: '1.4071'
                      forex:
                        reference: USD
                        AUD: '1.4071'
                    expiresAt: '2026-04-10 04:53:12'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /eapi/v0/verifications/otp:
    post:
      security:
        - HMACAuth: []
      summary: Request OTP Code
      description: >-
        Sends a one-time password (OTP) code to the customer's email address for
        verification. The OTP code is valid for a limited time and can only be
        used once. Rate limited to 3 requests per minute per customer.
      operationId: requestOtp
      tags:
        - Verifications
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OtpRequestRequest'
            examples:
              request_otp:
                summary: Request OTP for customer
                description: Send OTP code to customer's registered email address
                value:
                  identityReference: customer-12345
                  email: user@example.com
      responses:
        '200':
          description: OTP sent successfully to customer's email address
          headers:
            X-RateLimit-Limit:
              description: Maximum number of requests allowed per minute
              schema:
                type: integer
                example: 3
            X-RateLimit-Remaining:
              description: Number of requests remaining in current window
              schema:
                type: integer
                example: 2
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OtpRequestResponse'
              examples:
                success:
                  summary: OTP sent successfully
                  value:
                    message: OTP sent successfully
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/OtpFeatureNotEnabled'
        '422':
          description: Validation error - invalid or missing identity reference
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: The identity reference field is required.
                  errors:
                    type: object
                    additionalProperties:
                      type: array
                      items:
                        type: string
              examples:
                missing_identity_reference:
                  summary: Missing identity reference
                  value:
                    message: The identity reference field is required.
                    errors:
                      identityReference:
                        - The identity reference field is required.
                invalid_identity_reference:
                  summary: Invalid customer reference
                  value:
                    message: The selected identity reference is invalid.
                    errors:
                      identityReference:
                        - The selected identity reference is invalid.
        '429':
          $ref: '#/components/responses/OtpRateLimitExceeded'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /eapi/v0/verifications/otp/verify:
    post:
      security:
        - HMACAuth: []
      summary: Verify OTP Code
      description: >-
        Verifies the OTP code sent to the customer's email address. Upon
        successful verification, the customer's email is marked as verified. OTP
        codes are single-use and expire after a set time period. Rate limited to
        4 verification attempts per minute per customer.
      operationId: verifyOtp
      tags:
        - Verifications
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OtpVerifyRequest'
            examples:
              verify_otp:
                summary: Verify OTP code
                description: Verify the OTP code received via email
                value:
                  identityReference: customer-12345
                  email: test@example.com
                  code: '1234'
      responses:
        '200':
          description: OTP verified successfully. Customer email is now verified.
          headers:
            X-RateLimit-Limit:
              description: Maximum number of verification attempts allowed per minute
              schema:
                type: integer
                example: 4
            X-RateLimit-Remaining:
              description: Number of verification attempts remaining in current window
              schema:
                type: integer
                example: 3
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OtpVerifyResponse'
              examples:
                success:
                  summary: OTP verified successfully
                  value:
                    message: Success
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/OtpFeatureNotEnabled'
        '422':
          description: Validation error - invalid or missing fields, incorrect OTP code
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Validation error occurred.
                  errors:
                    type: object
                    additionalProperties:
                      type: array
                      items:
                        type: string
              examples:
                missing_fields:
                  summary: Missing required fields
                  value:
                    errors:
                      identityReference:
                        - The identity reference field is required.
                      code:
                        - The code field is required.
                invalid_code_length:
                  summary: Invalid code length
                  value:
                    errors:
                      code:
                        - The code field must be at least 4 characters.
                incorrect_code:
                  summary: Incorrect OTP code
                  description: >-
                    The provided OTP code is invalid, expired, or has already
                    been used
                  value:
                    message: The provided code is invalid.
                    errors:
                      code:
                        - The provided code is invalid.
        '429':
          $ref: '#/components/responses/OtpRateLimitExceeded'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /eapi/v0/payment-methods/{transactionType}:
    get:
      summary: Payment Methods
      description: >-
        Retrieve supported payment methods for the specified transaction type as
        part of the configuration data required to build onboarding and
        transaction flows.


        **Use Cases**:

        - Populate payment method selectors for on-ramp and off-ramp journeys

        - Determine which fiat currencies are available for each payment method

        - Pre-configure transaction forms before requesting quotes or creating
        ramps

        - Show only valid payment options for the customer's selected
        transaction direction


        **Transaction Types**:

        - `onramp` - Payment methods available for buying cryptocurrency with
        fiat

        - `offramp` - Payment methods available for selling cryptocurrency to
        fiat


        **Response Structure**:

        Each payment method includes:

        - `method`: Unique code used in API requests

        - `name`: Human-readable payment method name

        - `supportedFiats`: Fiat currencies supported by that payment method
      operationId: listPaymentMethods
      tags:
        - Configuration
      security:
        - HMACAuth: []
      parameters:
        - name: transactionType
          in: path
          description: >-
            The transaction direction used to retrieve available payment
            methods.


            **Values**:

            - `onramp` - Buy cryptocurrency using fiat

            - `offramp` - Sell cryptocurrency and receive fiat
          required: true
          schema:
            type: string
            enum:
              - onramp
              - offramp
            example: onramp
      responses:
        '200':
          description: >-
            Successful response with supported payment methods for the selected
            transaction type.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentMethodsResponse'
              examples:
                onramp:
                  summary: On-ramp payment methods
                  description: Available payment methods for buying cryptocurrency
                  value:
                    data:
                      - method: payid-bank-transfer
                        name: PayID Bank Transfer
                        supportedFiats:
                          - AUD
                      - method: sepa-bank-transfer
                        name: SEPA Bank Transfer
                        supportedFiats:
                          - EUR
                      - method: ach-bank-transfer
                        name: ACH Bank Transfer
                        supportedFiats:
                          - USD
                      - method: debit-credit-card
                        name: Debit/Credit Card
                        supportedFiats:
                          - AUD
                          - USD
                          - EUR
                          - GBP
                offramp:
                  summary: Off-ramp payment methods
                  description: Available payment methods for selling cryptocurrency
                  value:
                    data:
                      - method: payid-bank-transfer
                        name: PayID Bank Transfer
                        supportedFiats:
                          - AUD
                      - method: sepa-bank-transfer
                        name: SEPA Bank Transfer
                        supportedFiats:
                          - EUR
                      - method: ach-bank-transfer
                        name: ACH Bank Transfer
                        supportedFiats:
                          - USD
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/InvalidTransactionType'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /eapi/v0/cryptocurrencies/{transactionType}:
    get:
      security:
        - HMACAuth: []
      summary: Cryptocurrencies
      description: >-
        Retrieve supported cryptocurrencies for the specified transaction type
        as part of the configuration data required to build onboarding and
        transaction flows.


        **Use Cases**:

        - Display available cryptocurrency options to customers

        - Show supported blockchains for each cryptocurrency

        - Pre-configure asset and network selectors before pricing or ramp
        creation

        - Filter cryptocurrencies by transaction direction


        **Transaction Types**:

        - `onramp` - Cryptocurrencies available for buying (fiat → crypto)

        - `offramp` - Cryptocurrencies available for selling (crypto → fiat)


        **Response Structure**: Each cryptocurrency includes:

        - `crypto`: Unique coin code (e.g., `BTC`, `ETH`, `USDT`)

        - `name`: Human-readable display name

        - `blockchains`: Array of supported blockchain networks, each with
        contract address, minimum amount, default flag, and restricted countries
      operationId: listCryptocurrencies
      tags:
        - Configuration
      parameters:
        - name: transactionType
          in: path
          description: >-
            The transaction direction used to retrieve available
            cryptocurrencies.


            **Values**:

            - `onramp` - Buy cryptocurrency using fiat

            - `offramp` - Sell cryptocurrency and receive fiat
          required: true
          schema:
            type: string
            enum:
              - onramp
              - offramp
            example: onramp
      responses:
        '200':
          description: >-
            Successful response with supported cryptocurrencies and blockchains
            for the selected transaction type.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CryptoCurrenciesResponse'
              examples:
                onramp_cryptocurrencies:
                  summary: On-ramp cryptocurrencies
                  description: >-
                    Supported cryptocurrencies available for purchase (fiat →
                    crypto)
                  value:
                    data:
                      - crypto: BTC
                        name: Bitcoin
                        blockchains:
                          - blockchain: BTC
                            name: Bitcoin
                            isDefault: true
                            address: null
                            network: null
                            minimum: '0.00001'
                            unsupportedCountries: []
                      - crypto: USDT
                        name: Tether USD
                        blockchains:
                          - blockchain: ETH
                            name: Ethereum
                            isDefault: false
                            address: '0xdac17f958d2ee523a2206206994597c13d831ec7'
                            network: null
                            minimum: '1'
                            unsupportedCountries: []
                          - blockchain: TRON
                            name: TRON
                            isDefault: true
                            address: TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t
                            network: null
                            minimum: '1'
                            unsupportedCountries: []
                offramp_cryptocurrencies:
                  summary: Off-ramp cryptocurrencies
                  description: >-
                    Supported cryptocurrencies available for selling (crypto →
                    fiat)
                  value:
                    data:
                      - crypto: ETH
                        name: Ethereum
                        blockchains:
                          - blockchain: ETH
                            name: Ethereum
                            isDefault: true
                            address: null
                            network: null
                            minimum: '0.001'
                            unsupportedCountries:
                              - US
                              - CA
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/InvalidTransactionType'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /eapi/v0/fiats/{transactionType}:
    get:
      summary: Supported Fiats
      description: >-
        Retrieve a list of supported fiat currencies for the specified
        transaction type (onramp or offramp).


        **Use Cases**:

        - Display available fiat currencies to customers during onboarding

        - Filter payment methods by fiat currency

        - Show fiat options in transaction creation UI

        - Validate customer-selected fiat before transaction


        **Transaction Types**:

        - `onramp` - Returns fiat currencies supported for buying cryptocurrency

        - `offramp` - Returns fiat currencies supported for selling
        cryptocurrency


        **Response Structure**: Each fiat currency includes:

        - `fiat` - Three-letter ISO 4217 currency code (e.g., "AUD", "USD")

        - `name` - Human-readable currency name (e.g., "Australian Dollar")

        - `symbol` - Currency symbol (e.g., "$", "€")

        - `supportedPaymentMethods` - Array of payment methods available for
        this fiat
      operationId: listFiats
      tags:
        - Configuration
      security:
        - HMACAuth: []
      parameters:
        - name: transactionType
          in: path
          description: >-
            The type of transaction to retrieve supported fiats for.


            **Values**:

            - `onramp` - Buying cryptocurrency with fiat

            - `offramp` - Selling cryptocurrency for fiat


            **Note**: Value is case-insensitive (e.g., `onramp`, `ONRAMP`,
            `OnRamp` are all valid).
          required: true
          schema:
            type: string
            enum:
              - onramp
              - offramp
            example: onramp
      responses:
        '200':
          description: >-
            Successful response with list of supported fiat currencies and their
            payment methods.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FiatsListResponse'
              examples:
                onramp_fiats:
                  summary: On-ramp supported fiats
                  description: >-
                    Example response for on-ramp transaction type showing
                    available fiat currencies for buying crypto.
                  value:
                    - fiat: AUD
                      name: Australian Dollar
                      symbol: $
                      supportedPaymentMethods:
                        - method: payid-bank-transfer
                          name: Payid Bank Transfer
                          minimum: '10'
                          maximum: '50000'
                        - method: debit-credit-card
                          name: Debit Credit Card
                          minimum: '10'
                          maximum: '10000'
                    - fiat: USD
                      name: US Dollar
                      symbol: $
                      supportedPaymentMethods:
                        - method: ach-bank-transfer
                          name: Ach Bank Transfer
                          minimum: '10'
                          maximum: '25000'
                        - method: debit-credit-card
                          name: Debit Credit Card
                          minimum: '10'
                          maximum: '10000'
                offramp_fiats:
                  summary: Off-ramp supported fiats
                  description: >-
                    Example response for off-ramp transaction type showing
                    available fiat currencies for selling crypto.
                  value:
                    - fiat: AUD
                      name: Australian Dollar
                      symbol: $
                      supportedPaymentMethods:
                        - method: payid-bank-transfer
                          name: Payid Bank Transfer
                          minimum: '10'
                          maximum: '50000'
                    - fiat: EUR
                      name: Euro
                      symbol: €
                      supportedPaymentMethods:
                        - method: sepa-bank-transfer
                          name: Sepa Bank Transfer
                          minimum: '10'
                          maximum: '50000'
                empty_response:
                  summary: Empty response
                  description: >-
                    Response when no payment providers are configured for the
                    merchant.
                  value: []
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/InvalidTransactionType'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /eapi/v0/countries:
    get:
      security:
        - HMACAuth: []
      summary: Supported Countries
      description: >-
        Retrieve supported countries for KYC and transaction flows as part of
        the configuration data required to build onboarding and transaction
        flows.


        **Use Cases**:

        - Populate country dropdowns during customer onboarding

        - Determine which countries are enabled for your merchant configuration

        - Retrieve state or province options for countries that require region
        selection

        - Filter valid options based on customer location


        **Response Structure**: Each country includes:

        - `id`: Two-letter ISO country code

        - `description`: Human-readable country name

        - `states`: List of supported states or provinces for that country, if
        applicable
      operationId: listCountries
      tags:
        - Configuration
      responses:
        '200':
          description: >-
            Successful response with supported countries and their states or
            provinces where applicable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CountriesListResponse'
              examples:
                countries_response:
                  summary: Supported countries response
                  description: >-
                    Example response showing countries with and without state or
                    province lists.
                  value:
                    - id: US
                      description: United States
                      states:
                        - id: AL
                          description: Alabama
                        - id: CA
                          description: California
                        - id: TX
                          description: Texas
                    - id: CA
                      description: Canada
                      states:
                        - id: AB
                          description: Alberta
                        - id: BC
                          description: British Columbia
                        - id: 'ON'
                          description: Ontario
                    - id: GB
                      description: United Kingdom
                      states: []
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
webhooks:
  rampMessage:
    post:
      tags:
        - Ramps
      summary: Inbound message regarding the ramp status
      operationId: rampMessage
      security: []
      description: >
        When a ramp transitions into a new status, the status update will be
        sent to the provided callback endpoint to your server.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - order_id
                - status
                - status_date
                - internal_reason
                - external_reason
              properties:
                order_id:
                  type: string
                  description: >-
                    The ID of the ramp, returned on creation of a ramp, or via
                    the GET ramp endpoint.
                  example: fd04c5780062121628e05324003eef30
                status:
                  type: string
                  enum:
                    - IN_PROGRESS
                    - REFUNDED
                    - EXPIRED
                    - FULFILLED
                    - EXTRA_VERIFICATION
                    - COIN_DEPOSIT_READY
                    - COIN_DEPOSIT_CONFIRMED
                    - COIN_TRANSFERRED
                    - FIAT_TRANSFERRED
                    - ACCOUNT_BLOCKED
                    - PAYMENT_READY
                    - PAYMENT_ACCEPTED
                    - PAYMENT_RECEIVED
                    - PAYMENT_DECLINED
                    - PAYMENT_CANCELLED
                  description: >
                    | Status                 |
                    Description                                                         
                    |

                    |------------------------|----------------------------------------------------------------------|

                    | IN_PROGRESS            | Order is in progress. |

                    | REFUNDED               | Order has been
                    refunded                                              |

                    | EXPIRED                | Order has
                    expired.                                                   |

                    | FULFILLED              | Order has been
                    completed.                                            |

                    | EXTRA_VERIFICATION     | Customer requires extra
                    verification.                                |

                    | COIN_DEPOSIT_READY     | Coin deposit is
                    ready.                                               |

                    | COIN_DEPOSIT_CONFIRMED | Coin deposit has been
                    confirmed.                                     |

                    | COIN_TRANSFERRED       | Coin has been
                    transferred.                                           |

                    | FIAT_TRANSFERRED       | Fiat has been
                    transferred.                                           |

                    | ACCOUNT_BLOCKED   | Customer account is blocked., a
                    separate webhook will be sent with the Identity reference of
                    the customer |

                    | PAYMENT_READY          | Payment is ready to be
                    processed.                                    |

                    | PAYMENT_ACCEPTED       | Payment has been accepted for the
                    order                              |

                    | PAYMENT_RECEIVED       | Payment has been
                    received.                                           |

                    | PAYMENT_DECLINED       | Payment has been
                    declined.                                           |

                    | PAYMENT_CANCELLED      | Payment has been
                    cancelled.                                          |
                  example: IN_PROGRESS
                status_date:
                  type: string
                  format: datetime
                  description: The date of the status update
                  example: '2023-06-05 19:53:08'
                created_at:
                  type: string
                  format: datetime
                  description: The date of the status update
                  example: '2023-06-02 14:44:00'
                updated_at:
                  type: string
                  format: datetime
                  description: The date of the status update
                  example: '2023-06-09 13:53:08'
                internal_reason:
                  type: string
                  description: >-
                    The internal body for this inbound message containing the
                    reason of the message, this is for internal use.
                  example: Order is in progress
                external_reason:
                  type: string
                  description: >-
                    The external reason to provide to your customer via your
                    designated messaging channel.
                  example: >-
                    Your payment was successfully received. Your order is now
                    being processed.
                order_type:
                  type: string
                  enum:
                    - ONRAMP
                    - OFFRAMP
                  description: The transaction type of the ramp
                  example: ONRAMP
                crypto_coin:
                  type: string
                  description: The crypto currency requested
                  example: ETH
                crypto_blockchain:
                  type: string
                  description: The blockchain
                  example: ETH
                crypto_amount:
                  type: string
                  description: The amount of crypto
                  example: '0.228632'
                fiat_currency:
                  type: string
                  description: The requested fiat currency
                  example: USD
                fiat_amount:
                  type: string
                  description: The amount of fiat
                  example: '100'
                asset_price:
                  type: string
                  description: The market rate of the asset (crypto)
                  example: '0.018656'
                payment:
                  type: string
                  description: The payment requested
                  example: '100'
                processing_fee:
                  type: string
                  description: The processing fee associated to the ramp
                  example: '1.95'
                network_fee:
                  type: string
                  description: The network fee associated to the ramp
                  example: '2.33'
                usd_exchange_rate:
                  type: string
                  description: Represent the value of 1 unit of the source Fiat in USD
                  example: '1.36'
                transaction_hash:
                  type: string
                  description: The transaction hash of the completed ramp
                  example: >-
                    0x9401a7173d7bd2ad73e8b798fdc30c83fb0529e6edbad163c549a5ad136407be
      responses:
        '200':
          description: >
            Your server returns this code if it accepts the callback. On a
            failed response we will retry sending the webook.
  identityMessage:
    post:
      security: []
      tags:
        - Identities
      summary: Inbound message regarding customer Identity related messages
      operationId: identityMessage
      description: >
        When a customer failed to create an order for a specific reason, the
        status update will be sent to the provided callback endpoint to your
        server.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - identity_reference
                - status
                - status_date
                - internal_reason
                - external_reason
              properties:
                identity_reference:
                  $ref: '#/components/schemas/identity-reference'
                status:
                  type: string
                  enum:
                    - ACCOUNT_BLOCKED
                  description: >
                    | Status                 |
                    Description                                                         
                    |

                    |------------------------|----------------------------------------------------------------------|

                    | ACCOUNT_BLOCKED   | Customer account is
                    blocked.                                       |
                  example: ACCOUNT_BLOCKED
                status_date:
                  type: string
                  format: datetime
                  description: The date of the status update
                  example: '2023-06-05 19:53:08'
                internal_reason:
                  type: string
                  description: >-
                    The internal body for this inbound message containing the
                    reason of the message, this is for internal use.
                  example: Customer account is blocked.
                external_reason:
                  type: string
                  description: >-
                    The external reason to provide to your customer via your
                    designated messaging channel.
                  example: You order could not be processed
      responses:
        '200':
          description: >
            Your server returns this code if it accepts the callback. On a
            failed response we will retry sending the webook.
components:
  securitySchemes:
    HMACAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >
        HMAC authentication using SHA256.

        The URI must be used to generate the hmac signature e.g.
        `/eapi/v0/ramps` example:    

        "POST    

        /eapi/v0/ramps   

        1741220905019999   

        {\"subPartnerId\":null,\"identityReference\":\"926553-1732538-7235638-6352926\",\"source\":{\"crypto\":{\"id\":\"USDT\",\"blockchain\":\"ETH\",\"walletAddress\":\"0xc292474673cf1a96a96e8c56ec4f45ecf2e0b448\",\"walletAddressMemo\":null},\"amount\":\"100\"},\"target\":{\"fiat\":{\"id\":\"AUD\",\"method\":\"payid-bank-transfer\",\"instructions\":{\"accountName\":\"Foo
        Bar\",\"accountNumber\":\"12345678\",\"bsb\":\"063123\"}}}}"
  schemas:
    IdentityReference:
      $ref: '#/components/schemas/identity-reference'
    ResidentialAddress:
      type: object
      title: Residential Address
      description: >-
        Customer's residential address. Required for identity verification and
        compliance purposes.


        **Important**: This must be the customer's current residential address,
        not a PO Box or business address.
      properties:
        addressLine:
          type: string
          title: Street Address
          description: |-
            Primary street address including street number and name.

            **Examples**:
            - "44 Gwynne Street"
            - "123 Main Street, Apt 4B"
            - "10 Downing Street"

            **Requirements**:
            - Must include street number and name
            - Can include unit/apartment number
            - Maximum 200 characters
          example: 44 Gwynne Street
          minLength: 1
          maxLength: 200
        suburb:
          type: string
          title: Suburb/City
          description: |-
            Suburb, city, or town name.

            **Regional Variations**:
            - Australia: Suburb (e.g., "Cremorne")
            - USA: City (e.g., "New York")
            - UK: Town/City (e.g., "London")
            - Europe: City (e.g., "Paris")
          example: Cremorne
          minLength: 1
          maxLength: 100
        state:
          type: string
          title: State/Region
          description: |-
            State, province, or region code.

            **Format**: Typically 2-3 character code

            **Examples**:
            - Australia: "VIC", "NSW", "QLD"
            - USA: "CA", "NY", "TX" (required for US addresses)
            - Canada: "ON", "BC", "QC"

            **Note**: Required when country is "US"
          example: VIC
          minLength: 2
          maxLength: 3
        postCode:
          type: string
          title: Postal Code
          description: |-
            Postal code, ZIP code, or postCode.

            **Format varies by country**:
            - Australia: 4 digits (e.g., "3121")
            - USA: 5 digits or 5+4 format (e.g., "90210" or "90210-1234")
            - UK: Alphanumeric (e.g., "SW1A 1AA")
            - Canada: Alphanumeric (e.g., "K1A 0B1")
          example: '3121'
          minLength: 3
          maxLength: 10
        country:
          type: string
          title: Country Code
          description: >-
            Two-letter ISO 3166-1 alpha-2 country code.


            **Common Examples**:

            - AU - Australia

            - US - United States

            - GB - United Kingdom

            - CA - Canada

            - NZ - New Zealand

            - SG - Singapore


            **Note**: The country must be supported by Banxa for the requested
            transaction type.
          example: AU
          pattern: ^[A-Z]{2}$
          minLength: 2
          maxLength: 2
      required:
        - addressLine
        - suburb
        - state
        - postCode
        - country
      examples:
        - addressLine: 44 Gwynne Street
          suburb: Cremorne
          state: VIC
          postCode: '3121'
          country: AU
        - addressLine: 123 Main Street, Apt 5B
          suburb: New York
          state: NY
          postCode: '10001'
          country: US
        - addressLine: 10 Downing Street
          suburb: London
          state: LDN
          postCode: SW1A 2AA
          country: GB
    Money:
      type: object
      title: Money
      description: >-
        Represents a monetary amount with currency. Used throughout the API for
        fiat currency amounts.
      additionalProperties: false
      required:
        - amount
        - currency
      properties:
        amount:
          type: string
          title: Amount
          description: >-
            The monetary amount as a decimal string.


            **Format**: String representation of a decimal number with up to 2
            decimal places for fiat currencies.


            **Why String?**: Using strings prevents floating-point precision
            errors in financial calculations.


            **Examples**:

            - "100.00" - One hundred dollars/euros/etc

            - "1234.56" - One thousand two hundred thirty-four and 56 cents

            - "0.01" - One cent (minimum for most currencies)
          example: '5000.00'
          pattern: ^[0-9]+(\.[0-9]{1,2})?$
        currency:
          type: string
          title: Currency Code
          description: >-
            Three-letter ISO 4217 currency code.


            **Supported Currencies** (examples):

            - AUD - Australian Dollar

            - USD - United States Dollar

            - EUR - Euro

            - GBP - British Pound Sterling

            - CAD - Canadian Dollar


            **Note**: The actual list of supported currencies depends on your
            partner configuration and the payment method being used.
          example: AUD
          pattern: ^[A-Z]{3}$
          minLength: 3
          maxLength: 3
      examples:
        - amount: '100.00'
          currency: USD
        - amount: '5000.50'
          currency: AUD
        - amount: '250.00'
          currency: EUR
    Email:
      type: string
      format: email
      title: Email Address
      description: |-
        Email address in valid RFC 5322 format.

        **Requirements**:
        - Must be a valid email format
        - Used for communication and verification
        - Maximum 254 characters (RFC 5321)

        **Best Practice**: Use the customer's primary email address
      example: customer@example.com
      maxLength: 254
    MobileNumber:
      type: string
      title: Mobile Number
      description: |-
        Mobile phone number in international E.164 format.

        **Format**: Include country code with + prefix

        **Examples**:
        - "+61431000001" (Australia)
        - "+14155552671" (USA)
        - "+442071234567" (UK)

        **Requirements**:
        - Must be a valid, active mobile number
        - Used for SMS verification if needed
        - Length: 8-20 characters
      example: '+61431000001'
      pattern: ^\+[1-9]\d{1,14}$
      minLength: 8
      maxLength: 20
    OccupationIndustry:
      type: string
      title: Occupation Industry
      description: >-
        The industry sector of the customer's occupation.


        **Important**: The selected industry determines which specific
        occupations are valid. See the Occupation schema for the mapping table.


        **Compliance Requirement**: Required for AML/KYC compliance to assess
        customer risk profile.
      enum:
        - Consulting, IT, or business services
        - Design, marketing or communication
        - Travel, accommodation, or transport
        - Entertainment, arts or photography
        - Health, sports or personal care
        - Food, beverages, or tobacco
        - Retail, eCommerce, wholesale or manufacturing
        - Dealers & Resellers
        - Financial services, products, or holding companies
        - Real estate or construction
        - Education or learning
        - Charity or not-for-profit
        - Public or government services
        - Utility services
        - Unemployed/Retired
        - In between jobs/looking for work
        - Fulltime student
      example: Consulting, IT, or business services
    SourceOfFunds:
      type: string
      title: Source of Funds
      description: >-
        The source from which the customer's funds are obtained.


        **Compliance Requirement**: Required for AML compliance to verify the
        origin of funds.


        **Common Sources**:

        - Employment income (Salary)

        - Business revenue (Business Income/Profits)

        - Investment returns

        - Savings and inheritance
      enum:
        - Personal Savings
        - Salary
        - Business Income/Profits
        - Pension
        - Government Benefits
        - Income from Cryptocurrency Trading
        - Income from Investments (e.g. shares, bonds, investment funds)
        - Income from sale of real estate or other property
        - Income from renting/leasing
        - Private loan from family members/ friends/others
        - Loan from bank
        - Inheritance
        - Gift
        - Other
      example: Salary
    PurposeOfTransaction:
      type: string
      title: Purpose of Transaction
      description: >-
        The intended purpose for the cryptocurrency transaction.


        **Compliance Requirement**: Required for AML compliance to understand
        transaction intent.


        **Note**: Currently only 'investment' is supported.
      enum:
        - Investment
        - Trading
        - Payment for Online Purchase
        - Payment for Services
        - Gaming
        - Charity
        - Ransomware/Virus/Cyber Extortion Demands
        - Other
      example: Investment
    Occupation:
      type: string
      enum:
        - Architect
        - IT developer
        - IT hosting services
        - IT consulting/services - other
        - Scientific or technical consulting
        - Management consulting and coaching
        - Employment placement and recruitment services
        - Cleaning, repair and maintenance services
        - Financial (inc. tax, accounting, audit)
        - Lawyer / Legal services
        - Translation or language services
        - Company establishment/formation services
        - Freelance platform
        - Other consulting
        - Advertising and marketing
        - Designer
        - Interior design
        - Audio and video
        - Photography
        - Print and online media
        - Telecommunications services
        - Travel agent
        - Tour operator
        - Accommodation or hotelier
        - Other travel or tour activities
        - Passenger transport or rentals
        - Freight transport
        - Rideshare and transport share services
        - Transport - other
        - Audio and video engineer
        - Events and entertainment organiser
        - Photographer
        - Books, magazines, blogs, news
        - Video gaming
        - Performing arts
        - Gambling, betting, and lotteries
        - Adult Entertainment
        - Beautician
        - Vitamins and dietary supplements
        - Fitness or sports services
        - Medical or veterinary services
        - Dental services
        - Medical equipment
        - Elderly or other care home
        - Nursing or other care services
        - Pharmaceuticals
        - Pharmacy
        - Food manufacturing and retail
        - Restaurants and catering
        - Alcohol
        - Soft drinks
        - Tobacco
        - Clothing and accessories
        - Beauty products and services
        - Home and garden
        - Toys, games and musical instruments
        - Electronics and electrical products
        - Sports equipment (excl. weapons)
        - Manufacturing
        - Farming, seeds, plants
        - Pets or pet supplies
        - Vehicle sales
        - Vehicle accessories, spare parts, manufacturing
        - Machinery and equipment
        - Firearms, weapons, and military goods/services
        - Arts - fine art sales, auctions or procurement
        - Arts - other arts and crafts products or services
        - Jewellery - fine jewellery, watches
        - Jewellery - fashion jewellery
        - Precious stones, diamonds, or metals
        - Chemicals
        - Legal highs and related accessories
        - >-
          Selling products on behalf of others (incl. auction, online
          marketplace)
        - Other retail or wholesale (not listed above)
        - Financial Adviser (inc. tax, accounting, audit)
        - Investment Manager
        - Money service business operator
        - Professional Trader
        - Insurance Manager
        - Crowdfunding and peer lending
        - Other financial services
        - Real estate sale, purchase, and management
        - Construction
        - Real estate development
        - Online learning
        - Teaching and tutoring
        - Schools and universities
        - Any charity related activity
        - Government Official
        - Politician
        - Other, not listed above
        - Utility services and providers
        - Unemployed/Retired
        - In between jobs/looking for work
        - Fulltime student
      example: IT developer
      description: >-
        Customer's occupation. Must be a valid occupation for the selected
        'occupationIndustry'. When the selected combination is invalid a
        validation error will be thrown. Refer to the Occupation-Industry
        mapping table:


        | occupationIndustry | occupation |

        |--------------------|------------|

        | Consulting, IT, or business services | Architect |

        | Consulting, IT, or business services | IT developer |

        | Consulting, IT, or business services | IT hosting services |

        | Consulting, IT, or business services | IT consulting/services - other
        |

        | Consulting, IT, or business services | Scientific or technical
        consulting |

        | Consulting, IT, or business services | Management consulting and
        coaching |

        | Consulting, IT, or business services | Employment placement and
        recruitment services |

        | Consulting, IT, or business services | Cleaning, repair and
        maintenance services |

        | Consulting, IT, or business services | Financial (inc. tax,
        accounting, audit) |

        | Consulting, IT, or business services | Lawyer / Legal services |

        | Consulting, IT, or business services | Translation or language
        services |

        | Consulting, IT, or business services | Company establishment/formation
        services |

        | Consulting, IT, or business services | Freelance platform |

        | Consulting, IT, or business services | Other consulting |

        | Design, marketing or communication | Advertising and marketing |

        | Design, marketing or communication | Designer |

        | Design, marketing or communication | Interior design |

        | Design, marketing or communication | Audio and video |

        | Design, marketing or communication | Photography |

        | Design, marketing or communication | Print and online media |

        | Design, marketing or communication | Translation or language services
        |

        | Design, marketing or communication | Telecommunications services |

        | Travel, accommodation, or transport | Travel agent |

        | Travel, accommodation, or transport | Tour operator |

        | Travel, accommodation, or transport | Accommodation or hotelier |

        | Travel, accommodation, or transport | Other travel or tour activities
        |

        | Travel, accommodation, or transport | Passenger transport or rentals |

        | Travel, accommodation, or transport | Freight transport |

        | Travel, accommodation, or transport | Rideshare and transport share
        services |

        | Travel, accommodation, or transport | Transport - other |

        | Entertainment, arts or photography | Audio and video engineer |

        | Entertainment, arts or photography | Events and entertainment
        organiser |

        | Entertainment, arts or photography | Photographer |

        | Entertainment, arts or photography | Books, magazines, blogs, news |

        | Entertainment, arts or photography | Video gaming |

        | Entertainment, arts or photography | Performing arts |

        | Entertainment, arts or photography | Gambling, betting, and lotteries
        |

        | Entertainment, arts or photography | Telecommunications services |

        | Entertainment, arts or photography | Adult Entertainment |

        | Health, sports or personal care | Beautician |

        | Health, sports or personal care | Vitamins and dietary supplements |

        | Health, sports or personal care | Fitness or sports services |

        | Health, sports or personal care | Medical or veterinary services |

        | Health, sports or personal care | Dental services |

        | Health, sports or personal care | Medical equipment |

        | Health, sports or personal care | Elderly or other care home |

        | Health, sports or personal care | Nursing or other care services |

        | Health, sports or personal care | Pharmaceuticals |

        | Health, sports or personal care | Pharmacy |

        | Food, beverages, or tobacco | Food manufacturing and retail |

        | Food, beverages, or tobacco | Restaurants and catering |

        | Food, beverages, or tobacco | Vitamins and dietary supplements |

        | Food, beverages, or tobacco | Alcohol |

        | Food, beverages, or tobacco | Soft drinks |

        | Food, beverages, or tobacco | Tobacco |

        | Retail, eCommerce, wholesale or manufacturing | Clothing and
        accessories |

        | Retail, eCommerce, wholesale or manufacturing | Beauty products and
        services |

        | Retail, eCommerce, wholesale or manufacturing | Home and garden |

        | Retail, eCommerce, wholesale or manufacturing | Toys, games and
        musical instruments |

        | Retail, eCommerce, wholesale or manufacturing | Electronics and
        electrical products |

        | Retail, eCommerce, wholesale or manufacturing | Sports equipment
        (excl. weapons) |

        | Retail, eCommerce, wholesale or manufacturing | Manufacturing |

        | Retail, eCommerce, wholesale or manufacturing | Farming, seeds, plants
        |

        | Retail, eCommerce, wholesale or manufacturing | Pets or pet supplies |

        | Dealers & Resellers | Vehicle sales |

        | Dealers & Resellers | Vehicle accessories, spare parts, manufacturing
        |

        | Dealers & Resellers | Machinery and equipment |

        | Dealers & Resellers | Firearms, weapons, and military goods/services |

        | Dealers & Resellers | Arts - fine art sales, auctions or procurement |

        | Dealers & Resellers | Arts - other arts and crafts products or
        services |

        | Dealers & Resellers | Jewellery - fine jewellery, watches |

        | Dealers & Resellers | Jewellery - fashion jewellery |

        | Dealers & Resellers | Precious stones, diamonds, or metals |

        | Dealers & Resellers | Chemicals |

        | Dealers & Resellers | Legal highs and related accessories |

        | Dealers & Resellers | Selling products on behalf of others (incl.
        auction, online marketplace) |

        | Dealers & Resellers | Other retail or wholesale (not listed above) |

        | Financial services, products, or holding companies | Financial Adviser
        (inc. tax, accounting, audit) |

        | Financial services, products, or holding companies | Investment
        Manager |

        | Financial services, products, or holding companies | Money service
        business operator |

        | Financial services, products, or holding companies | Professional
        Trader |

        | Financial services, products, or holding companies | Insurance Manager
        |

        | Financial services, products, or holding companies | Crowdfunding and
        peer lending |

        | Financial services, products, or holding companies | Other financial
        services |

        | Real estate or construction | Real estate sale, purchase, and
        management |

        | Real estate or construction | Construction |

        | Real estate or construction | Real estate development |

        | Education or learning | Online learning |

        | Education or learning | Teaching and tutoring |

        | Education or learning | Schools and universities |

        | Charity or not-for-profit | Any charity related activity |

        | Public or government services | Government Official |

        | Public or government services | Politician |

        | Public or government services | Other, not listed above |

        | Utility services | Utility services and providers |

        | Utility services | Cleaning, repair and maintenance services |

        | Utility services | Telecommunications services |

        | Utility services | Other, not listed above |

        | Unemployed/Retired | Unemployed/Retired |

        | In between jobs/looking for work | In between jobs/looking for work |

        | Fulltime student | Fulltime student |
    CursorPagination:
      type: object
      title: Cursor Pagination
      description: |-
        Cursor-based pagination metadata.

        **Advantages**:
        - More efficient for large datasets
        - Consistent results even when data changes
        - Suitable for infinite scroll patterns

        **Usage**:
        - Use `nextCursor` to fetch next page
        - Use `prevCursor` to fetch previous page
        - Check `hasMore` to determine if more results exist
      additionalProperties: false
      required:
        - hasMore
        - perPage
      properties:
        nextCursor:
          type:
            - string
            - 'null'
          description: Cursor for the next page. Null if no more pages.
          example: eyJvcmRlcnMuaWQiOjEyMzQ1LCJfcG9pbnRzVG9OZXh0SXRlbXMiOnRydWV9
        prevCursor:
          type:
            - string
            - 'null'
          description: Cursor for the previous page. Null if on first page.
          example: eyJvcmRlcnMuaWQiOjEyMzQ1LCJfcG9pbnRzVG9OZXh0SXRlbXMiOmZhbHNlfQ==
        hasMore:
          type: boolean
          title: Has More
          description: >-
            Indicates if there are more results available after the current
            page.


            **Usage**: Use this to show/hide "Load More" button in UI.
          example: true
        perPage:
          type: integer
          title: Per Page
          description: Number of items per page (as requested or default)
          example: 10
          minimum: 1
    OffsetPagination:
      type: object
      title: Offset Pagination
      description: |-
        Offset-based pagination metadata.

        **Advantages**:
        - Shows total count and page numbers
        - Familiar pagination pattern
        - Suitable for traditional page-based UI

        **Usage**:
        - Use `currentPage` to show current position
        - Use `total` to calculate total pages
        - Increment/decrement `page` parameter for navigation
      additionalProperties: false
      required:
        - currentPage
        - perPage
        - total
        - lastPage
      properties:
        currentPage:
          type: integer
          title: Current Page
          description: Current page number (1-based)
          example: 1
          minimum: 1
        perPage:
          type: integer
          title: Per Page
          description: Number of items per page
          example: 10
          minimum: 1
        total:
          type: integer
          title: Total Items
          description: Total number of items across all pages
          example: 150
          minimum: 0
        lastPage:
          type: integer
          title: Last Page
          description: Last page number (total pages)
          example: 15
          minimum: 1
        from:
          type:
            - integer
            - 'null'
          title: From
          description: Index of first item on current page (1-based). Null if no results.
          example: 1
          minimum: 1
        to:
          type:
            - integer
            - 'null'
          title: To
          description: Index of last item on current page (1-based). Null if no results.
          example: 10
          minimum: 1
    OffRampRequest:
      title: Off-Ramp Request
      oneOf:
        - $ref: '#/components/schemas/OffRampRequestWithCryptoAmount'
        - $ref: '#/components/schemas/OffRampRequestWithFiatAmount'
    OnRampRequest:
      title: On-Ramp Request
      oneOf:
        - $ref: '#/components/schemas/OnRampRequestWithFiatAmount'
        - $ref: '#/components/schemas/OnRampRequestWithCryptoAmount'
    QuoteRampRequest:
      title: Quote Ramp Request
      type: object
      description: >-
        Create a ramp transaction using a previously obtained quote ID. This
        simplified payload references an existing quote, avoiding the need to
        re-specify source/target and amount details.
      properties:
        quoteId:
          type: string
          description: The unique identifier of a previously obtained price quote.
          example: 6e9174edd370ffe6331aeda7a6d75592
        identityReference:
          $ref: '#/components/schemas/identity-reference'
        walletAddress:
          type: string
          description: The wallet address to use for the transaction.
          example: '0xc292474673cf1a96a96e8c56ec4f45ecf2e0b448'
        walletAddressMemo:
          type:
            - string
            - 'null'
          description: The wallet address memo associated with the wallet address.
          example: null
      required:
        - quoteId
        - identityReference
        - walletAddress
    OffRampResponse:
      $ref: '#/components/schemas/offramp-response'
    OnRampResponse:
      $ref: '#/components/schemas/onramp-response'
    PaymentMethodsResponse:
      type: object
      title: Payment Methods Response
      description: List of available payment methods for a transaction type.
      required:
        - data
      properties:
        data:
          type: array
          title: Payment Methods
          description: Array of available payment method objects
          items:
            $ref: '#/components/schemas/PaymentMethod'
    PaymentMethod:
      type: object
      title: Payment Method
      description: Individual payment method with its supported fiat currencies.
      required:
        - method
        - name
        - supportedFiats
      properties:
        method:
          type: string
          title: Payment Method Code
          description: >-
            Unique identifier code for the payment method. Use this value when
            specifying the payment method in other API calls.
          example: payid-bank-transfer
        name:
          type: string
          title: Payment Method Name
          description: Human-readable display name for the payment method.
          example: PayID Bank Transfer
        supportedFiats:
          type: array
          title: Supported Fiat Currencies
          description: >-
            Array of ISO 4217 fiat currency codes supported by this payment
            method.
          items:
            type: string
            example: AUD
          example:
            - AUD
            - USD
            - EUR
    RampsListResponse:
      type: object
      title: Ramps List Response
      description: >-
        Paginated list of ramp transactions with metadata.


        **Pagination Types**:

        - **Cursor-based**: More efficient for large datasets, suitable for
        infinite scroll

        - **Offset-based**: Traditional page-based pagination with total count
      required:
        - data
        - pagination
      properties:
        data:
          type: array
          title: Ramps Data
          description: Array of ramp transaction objects
          items:
            $ref: '#/components/schemas/RampListItem'
        pagination:
          title: Pagination Metadata
          description: Pagination information - either cursor-based or offset-based
          oneOf:
            - $ref: '#/components/schemas/CursorPagination'
            - $ref: '#/components/schemas/OffsetPagination'
    RampListItem:
      type: object
      title: Ramp List Item
      description: Individual ramp transaction in the list
      required:
        - id
        - status
        - source
        - target
        - receipt
        - createdAt
      properties:
        id:
          type: string
          title: Order ID
          description: Unique order identifier (order key)
          example: ORD-2024-12345
        subPartnerId:
          type:
            - string
            - 'null'
          title: Sub-Partner ID
          description: Sub-partner identifier if applicable
          example: partner-123
        identityReference:
          type:
            - string
            - 'null'
          title: Identity Reference
          description: Customer identity reference
          example: customer-12345
        status:
          type: string
          title: Order Status
          description: Current status of the ramp transaction
          enum:
            - pending
            - processing
            - completed
            - cancelled
            - failed
          example: completed
        source:
          title: Source
          description: Source of the transfer (fiat for on-ramp, crypto for off-ramp)
          oneOf:
            - title: Fiat Source (On-ramp)
              type: object
              required:
                - fiat
                - amount
              properties:
                fiat:
                  type: object
                  required:
                    - id
                    - method
                  properties:
                    id:
                      type: string
                      description: Fiat currency code
                      example: USD
                    method:
                      type: string
                      description: Payment method
                      example: card
                amount:
                  type: string
                  description: Source amount
                  example: '1000.00'
            - title: Crypto Source (Off-ramp)
              type: object
              required:
                - crypto
                - amount
              properties:
                crypto:
                  type: object
                  required:
                    - id
                    - blockchain
                  properties:
                    id:
                      type: string
                      description: Cryptocurrency code
                      example: BTC
                    blockchain:
                      type: string
                      description: Blockchain network
                      example: BTC
                    walletAddress:
                      type: string
                      example: 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
                    walletAddressMemo:
                      type:
                        - string
                        - 'null'
                      example: '123456'
                amount:
                  type: string
                  description: Source amount
                  example: '0.025'
        target:
          title: Target
          description: Target of the transfer (crypto for on-ramp, fiat for off-ramp)
          oneOf:
            - title: Crypto Target (On-ramp)
              type: object
              required:
                - crypto
                - amount
              properties:
                crypto:
                  type: object
                  required:
                    - id
                    - blockchain
                  properties:
                    id:
                      type: string
                      description: Cryptocurrency code
                      example: ETH
                    blockchain:
                      type: string
                      description: Blockchain network
                      example: ETH
                    walletAddress:
                      type: string
                      example: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb'
                    walletAddressMemo:
                      type:
                        - string
                        - 'null'
                      example: '100547087'
                amount:
                  type: string
                  description: Target amount
                  example: '0.5'
            - title: Fiat Target (Off-ramp)
              type: object
              required:
                - fiat
                - amount
              properties:
                fiat:
                  type: object
                  required:
                    - id
                    - method
                  properties:
                    id:
                      type: string
                      description: Fiat currency code
                      example: EUR
                    method:
                      type: string
                      description: Payment method
                      example: bank_transfer
                amount:
                  type: string
                  description: Target amount
                  example: '950.00'
        receipt:
          type: object
          title: Receipt
          description: Transaction receipt with fees and hashes
          properties:
            targetTransactionHash:
              type:
                - string
                - 'null'
              description: Blockchain transaction hash for target (on-ramp)
              example: 0xabc123def456789...
            sourceTransactionHash:
              type:
                - string
                - 'null'
              description: Blockchain transaction hash for source (off-ramp)
              example: 0x789def456abc123...
            gatewayFee:
              type:
                - string
                - 'null'
              example: '5.00'
            networkFee:
              type:
                - string
                - 'null'
              example: '2.50'
            sourceAmount:
              type:
                - string
                - 'null'
              example: '1000.00'
            targetAmount:
              type:
                - string
                - 'null'
              example: '0.025'
        createdAt:
          type: string
          format: date-time
          title: Created At
          description: Order creation timestamp (ISO 8601 UTC)
          example: '2024-01-15T10:30:00Z'
        completedAt:
          type:
            - string
            - 'null'
          format: date-time
          title: Completion Time
          description: When the transaction was completed (null if not completed)
          example: '2024-01-15T10:45:00Z'
    IdentityTokenSharingRequest:
      title: Identity Sharing Request
      type: object
      properties:
        identityReference:
          $ref: '#/components/schemas/identity-reference'
        email:
          type: string
          format: email
          example: user@banxa.com
          description: The customer email
          maxLength: 200
        mobileNumber:
          type: string
          example: '61410001000'
          description: |-
            Mobile phone number in international format (E.164).

            **Format**: Include country code with + prefix

            **Examples**:
            - "+61431000001" (Australia)
            - "+14155552671" (USA)
            - "+442071234567" (UK)

            **Requirements**:
            - Must be a valid, active mobile number
            - Used for SMS verification if needed
            - Maximum 20 characters
        taxIdType:
          $ref: '#/components/schemas/TaxIdType'
        taxId:
          $ref: '#/components/schemas/TaxId'
        taxState:
          type: string
          example: IL
          description: >
            Tax state or region if applicable.(associated with the taxId)
            Required format as two characters. Note; We do not accept any states
            where Banxa is not licensed.
        provider:
          type: object
          properties:
            vendor:
              type: string
              description: The KYC provider e.g. sumsub
              enum:
                - sumsub
              example: sumsub
            token:
              type: string
              minimum: 6
              description: Arbitrary string
              example: >-
                eyJhbGciOiJub25lIn0.eyJqdGkiOiJfYWN0LTZmODI2ZTU0LTE2MzctNDViMS05NzMyLWY1MjZiN2YxNWE3YyIsInVybCI6Imh0dHBzOi8vYXBpLnN1bXN1Yi5jb20ifQ.
          required:
            - vendor
            - token
      required:
        - identityReference
        - email
        - provider
    IdentityTokenSharingResponse:
      title: Identity Sharing Response
      type: object
      properties:
        identityReference:
          $ref: '#/components/schemas/identity-reference'
      required:
        - identityReference
    IdentityRelianceRequest:
      title: Identity Reliance Request
      type: object
      properties:
        identityReference:
          $ref: '#/components/schemas/identity-reference'
        mobileNumber:
          type: string
          example: '61431000001'
          description: Mobile number of the customer.
        email:
          type: string
          format: email
          example: test@bitcoin.com.au
          description: Email address of the customer.
        screeningDate:
          type: string
          format: date
          description: The UTC screening date of the applicant.
          example: '2023-06-05'
        screeningSanctionsResult:
          type: boolean
          description: The result of the sanction screening.
          example: true
        screeningPepResult:
          type: boolean
          description: The result of the PEP sanction screening.
          example: true
        customerIdentity:
          $ref: '#/components/schemas/CustomerIdentity'
        identityDocuments:
          type: array
          description: >
            Collection of identity documents colected frofmo the customer.
            (array of objects)
          items:
            $ref: '#/components/schemas/IdentityRelianceDocument'
      required:
        - identityReference
        - mobileNumber
        - email
        - screeningDate
        - screeningSanctionsResult
        - screeningPepResult
        - customerIdentity
        - identityDocuments
    IdentityRelianceResponse:
      title: Identity Reliance Response
      type: object
      properties:
        identityReference:
          $ref: '#/components/schemas/identity-reference'
      required:
        - identityReference
    GetIdentityResponse:
      type: object
      properties:
        identityReference:
          $ref: '#/components/schemas/identity-reference'
        account:
          type: object
          properties:
            blocked:
              type: boolean
              description: The account status
              example: false
            exists:
              type: boolean
              description: Indicated wether the account exists
              example: true
            createdAt:
              type:
                - string
                - 'null'
              format: date-time
              description: >-
                The UTC date time of the identity. Null if identity does not
                exist.
              example: '2023-06-05T19:53:08.320Z'
          required:
            - blocked
            - exists
            - createdAt
        kyc:
          type: object
          description: >-
            Reflects the verification status of identity documents submitted
            through Banxa's identity provider. This status is updated based on
            document and liveness verification only — it does not account for
            Lite tier data, supplementary fields (e.g. purpose of transaction,
            occupation), or overall transaction eligibility. Use the eligibility
            endpoint to determine whether a customer can transact.
          properties:
            status:
              type: string
              description: >-
                The verification outcome of the customer's submitted identity
                documents (selfie + document), as processed by Banxa's identity
                provider. APPROVED indicates that document and liveness
                verification passed. It does not indicate that all required data
                for a given transaction has been collected or that the customer
                is eligible to transact.
              enum:
                - PENDING
                - UNDER_REVIEW
                - ACTION_REQUIRED
                - VERIFIED
                - REJECTED
              example: VERIFIED
          required:
            - status
      required:
        - identityReference
        - account
        - kyc
    BasicIdentityRequest:
      title: >
        The basic requirements to register a customer, redidential address and
        email are optional, if available it's recomended to provide these.
      type: object
      properties:
        identityReference:
          $ref: '#/components/schemas/identity-reference'
        givenName:
          type: string
          example: Joe
          description: Company representative first name.
        surname:
          type: string
          example: Bloggs
          description: Company representative last name.
        dateOfBirth:
          type: string
          format: date
          description: Date of birth in `YYYY-MM-DD` format. Must be a past date.
          example: '1990-05-21'
        email:
          type: string
          format: email
          example: test@solana.com.au
          description: Email address of the customer.
        taxIdType:
          $ref: '#/components/schemas/TaxIdType'
        taxId:
          $ref: '#/components/schemas/TaxId'
        taxState:
          type: string
          example: IL
          description: >
            Tax state or region if applicable.(associated with the taxId)
            Required format as two characters. Note; We do not accept any states
            where Banxa is not licensed.
        residentialAddress:
          $ref: '#/components/schemas/ResidentialAddress'
      required:
        - identityReference
    BasicIdentityResponse:
      type: object
      properties:
        identityReference:
          $ref: '#/components/schemas/identity-reference'
        createdAt:
          type: string
          format: date-time
          description: The UTC date time of the identity.
          example: '2023-06-05T19:53:08.320Z'
      required:
        - identityReference
        - createdAt
    CustomerIdentity:
      type: object
      properties:
        givenName:
          type: string
          example: Joe
          description: |
            Customer's given / first name.
        surname:
          type: string
          example: Bloggs
          description: |
            Customer's surname / last name.
        dob:
          type: string
          format: date
          example: '1990-01-31'
          description: >
            Customer's date of birth (e.g. "1985-01-31"). Required to format as
            ISO 8601 Date format : YYYY-MM-DD.
        taxIdType:
          $ref: '#/components/schemas/TaxIdType'
        taxId:
          $ref: '#/components/schemas/TaxId'
        taxState:
          type: string
          example: IL
          description: >
            Tax state or region if applicable.(associated with the taxId)
            Required format as two characters. Note; We do not accept any states
            where Banxa is not licensed.
        residentialAddress:
          $ref: '#/components/schemas/ResidentialAddress'
      required:
        - givenName
        - surname
        - dob
        - residentialAddress
    IdentityDocumentSharingRequest:
      title: Identity Document Sharing Request
      type: object
      description: >-
        Request to share identity documents and customer information for KYC
        verification.


        **Use Case**: When you want to submit customer identity documents
        directly to Banxa for verification instead of using a third-party KYC
        provider.


        **Process Flow**:

        1. Collect customer information and documents

        2. Submit via this endpoint

        3. Banxa processes and verifies the documents

        4. Receive webhook notification with verification status


        **Required Documents**: Typically requires at least one
        government-issued ID (passport, driver's license, or national ID) and
        proof of address.
      properties:
        identityReference:
          $ref: '#/components/schemas/identity-reference'
        mobileNumber:
          type: string
          title: Mobile Number
          description: |-
            Customer's mobile phone number in international format (E.164).

            **Format**: Include country code with + prefix

            **Examples**:
            - "+61431000001" (Australia)
            - "+14155552671" (USA)
            - "+442071234567" (UK)

            **Requirements**:
            - Must be a valid, active mobile number
            - Used for SMS verification if needed
            - Maximum 20 characters
          example: '+61431000001'
          pattern: ^\+[1-9]\d{1,14}$
          minLength: 8
          maxLength: 20
        email:
          type: string
          format: email
          title: Email Address
          description: |-
            Customer's email address.

            **Requirements**:
            - Must be a valid email format
            - Used for communication and verification
            - Maximum 254 characters (RFC 5321)

            **Best Practice**: Use the customer's primary email address
          example: customer@example.com
          maxLength: 254
        customerIdentity:
          $ref: '#/components/schemas/CustomerIdentity'
        occupationIndustry:
          $ref: '#/components/schemas/OccupationIndustry'
        occupation:
          $ref: '#/components/schemas/Occupation'
        sourceOfFunds:
          $ref: '#/components/schemas/SourceOfFunds'
        purposeOfTransaction:
          $ref: '#/components/schemas/PurposeOfTransaction'
        identityDocuments:
          type: array
          title: Identity Documents
          description: >-
            Array of identity documents to verify the customer's identity.


            **Minimum Requirements**:

            - At least one government-issued photo ID (Passport, Driver's
            License, or National ID)

            - Proof of Address (if required based on jurisdiction)

            - Selfie (for liveness verification)


            **Document Quality Requirements**:

            - Clear, high-resolution images

            - All text must be readable

            - All four corners of the document visible

            - No glare or shadows obscuring information

            - Color images preferred

            - Maximum file size: 10MB per image (before base64 encoding)
          items:
            $ref: '#/components/schemas/IdentityDocument'
          minItems: 1
          maxItems: 10
      required:
        - identityReference
        - mobileNumber
        - email
        - customerIdentity
        - occupation
        - occupationIndustry
        - sourceOfFunds
        - purposeOfTransaction
        - identityDocuments
      examples:
        - identityReference: customer-12345
          mobileNumber: '+61431000001'
          email: john.doe@example.com
          customerIdentity:
            givenName: John
            surname: Doe
            dob: '1990-01-15'
            residentialAddress:
              addressLine: 123 Main Street
              suburb: Sydney
              state: NSW
              postCode: '2000'
              country: AU
          occupationIndustry: Consulting, IT, or business services
          occupation: IT developer
          sourceOfFunds: Salary
          purposeOfTransaction: Investment
          identityDocuments:
            - type: PASSPORT
              data:
                number: N1234567
              images:
                - type: PASSPORT
                  base64: iVBORw0KGgoAAAANSUhEUgAAAAUA...
                  mimetype: image/jpeg
    IdentityDocumentSharingResponse:
      title: Identity Document Sharing Response
      type: object
      description: |-
        Response after submitting identity documents for verification.

        **Status Flow**:
        1. PENDING - Documents submitted, verification in progress
        2. VERIFIED - Documents verified successfully
        3. REJECTED - Documents rejected (see rejectionReason for details)

        **Next Steps**:
        - PENDING: Wait for webhook notification
        - VERIFIED: Customer can proceed with transactions
        - REJECTED: Review rejection reason and resubmit with corrections
      properties:
        identityReference:
          $ref: '#/components/schemas/identity-reference'
        status:
          type: string
          title: Verification Status
          description: >-
            Current status of the identity verification.


            **Status Meanings**:

            - **PENDING**: Documents are being reviewed (typical review time:
            1-24 hours)

            - **VERIFIED**: Identity verified successfully, customer can
            transact

            - **REJECTED**: Documents rejected, see rejectionReason for details
          enum:
            - PENDING
            - UNDER_REVIEW
            - ACTION_REQUIRED
            - VERIFIED
            - REJECTED
          example: PENDING
        rejectionReason:
          type: object
          title: Rejection Reason
          description: >-
            Details about why the identity verification was rejected. Only
            present when status is REJECTED.
          properties:
            internalReason:
              type: string
              title: Internal Reason Code
              description: >-
                Internal code/reason for rejection. For logging and debugging
                purposes.
              example: DOCUMENT_BLURRY
            reason:
              type: string
              title: User-Facing Reason
              description: >-
                Human-readable rejection message that can be displayed to the
                customer.


                **Common Reasons**:

                - Document image is blurry or unclear

                - Document is expired

                - Information doesn't match provided details

                - Document type not accepted

                - Selfie doesn't match ID photo
              example: >-
                The document image is blurry. Please re-submit a clear photo
                showing all details.
        customerIdentity:
          $ref: '#/components/schemas/CustomerIdentity'
        occupationIndustry:
          type: string
          title: Occupation Industry
          description: Echo of the submitted occupation industry.
          example: Consulting, IT, or business services
        occupation:
          type: string
          title: Occupation
          description: Echo of the submitted occupation.
          example: IT developer
        purposeOfTransaction:
          type: string
          title: Purpose of Transaction
          description: Submitted transaction purpose.
          enum:
            - Investment
            - Trading
            - Payment for Online Purchase
            - Payment for Services
            - Gaming
            - Charity
            - Ransomware/Virus/Cyber Extortion Demands
            - Other
          example: Investment
        createdAt:
          type: string
          format: date-time
          title: Creation Timestamp
          description: |-
            UTC timestamp when the identity verification request was created.

            **Format**: ISO 8601 date-time format
          example: '2023-06-05T19:53:08.320Z'
      required:
        - identityReference
        - status
      examples:
        - identityReference: customer-12345
          status: PENDING
          customerIdentity:
            givenName: John
            surname: Doe
            dob: '1990-01-15'
          occupationIndustry: Consulting, IT, or business services
          occupation: IT developer
          purposeOfTransaction: Investment
          createdAt: '2023-06-05T19:53:08.320Z'
        - identityReference: customer-67890
          status: REJECTED
          rejectionReason:
            internalReason: DOCUMENT_BLURRY
            reason: >-
              The passport image is too blurry. Please take a new photo in good
              lighting and ensure all text is clearly readable.
          createdAt: '2023-06-05T19:53:08.320Z'
    IdentityPatchRequest:
      title: Identity Update Request
      type: object
      description: >-
        Request to update specific fields of an existing customer identity.


        **Use Case**: Update customer information without resubmitting all
        documents.


        **Partial Updates**: Only include fields you want to update. Omitted
        fields will remain unchanged.


        **Note**: Some changes may trigger re-verification depending on
        compliance requirements.
      properties:
        identityReference:
          $ref: '#/components/schemas/identity-reference'
        mobileNumber:
          type: string
          title: Mobile Number
          description: Updated mobile phone number in international format (E.164).
          example: '+61431000001'
          pattern: ^\+[1-9]\d{1,14}$
          minLength: 8
          maxLength: 20
        email:
          type: string
          format: email
          title: Email Address
          description: Updated email address.
          example: newemail@example.com
          maxLength: 254
        customerIdentity:
          type: object
          title: Customer Identity Updates
          description: Partial customer identity updates. Only include fields to update.
          properties:
            givenName:
              type: string
              title: Given Name
              description: Customer's first/given name.
              example: John
              minLength: 1
              maxLength: 100
            surname:
              type: string
              title: Surname
              description: Customer's last/family name.
              example: Doe
              minLength: 1
              maxLength: 100
            dob:
              type: string
              format: date
              title: Date of Birth
              description: Customer's date of birth in YYYY-MM-DD format.
              example: '1990-01-31'
            taxIdType:
              $ref: '#/components/schemas/TaxIdType'
            taxId:
              $ref: '#/components/schemas/TaxId'
            taxState:
              type: string
              title: Tax State
              description: State associated with the tax ID (for USA).
              example: CA
              minLength: 2
              maxLength: 2
            residentialAddress:
              $ref: '#/components/schemas/ResidentialAddress'
        occupationIndustry:
          $ref: '#/components/schemas/OccupationIndustry'
        occupation:
          $ref: '#/components/schemas/Occupation'
        sourceOfFunds:
          $ref: '#/components/schemas/SourceOfFunds'
        purposeOfTransaction:
          $ref: '#/components/schemas/PurposeOfTransaction'
        identityDocuments:
          type: array
          title: Updated Identity Documents
          description: New or updated identity documents.
          items:
            $ref: '#/components/schemas/IdentityDocument'
          minItems: 1
          maxItems: 10
      required:
        - identityReference
        - email
      examples:
        - identityReference: customer-12345
          email: updated.email@example.com
          mobileNumber: '+61431000002'
        - identityReference: customer-67890
          email: john.doe@example.com
          customerIdentity:
            residentialAddress:
              addressLine: 456 New Street
              suburb: Melbourne
              state: VIC
              postCode: '3000'
              country: AU
    OnRampQuoteResponse:
      title: On-Ramp Indicative Price
      type: object
      properties:
        identityReference:
          $ref: '#/components/schemas/identity-reference'
        source:
          type: object
          properties:
            fiat:
              type: object
              properties:
                id:
                  type: string
                  description: The fiat currency.
                  example: AUD
                method:
                  type: string
                  description: |
                    The payment method.

                    | Available payments |
                    |-------------|
                    |debit-credit-card|
                    |apple-pay|
                    |sepa-bank-transfer|
                    |gbp-bank-transfer|
                    |ach-bank-transfer|
                    |pix|
                    |zar-bank-transfer|
                    |interac-bank-transfer|
                    |ideal-bank-transfer|
                    |google-pay|
                    |payid-bank-transfer|
                    |wire-transfer|
                    |spei|
                    |pse|
                    |khipu|
                    |aud-bank-transfer|
                    |usd-bank-transfer|
                    |paypal|
                    |klarna-paynow|
                  example: payid-bank-transfer
              required:
                - id
                - method
            amount:
              type: string
              description: The amount of fiat in.
              example: '100'
          required:
            - fiat
            - amount
        target:
          type: object
          properties:
            crypto:
              type: object
              properties:
                id:
                  type: string
                  description: The crypto token.
                  example: USDT
                blockchain:
                  type: string
                  description: The blockchain that is associated with the crypto token.
                  example: TRON
              required:
                - id
                - blockchain
            amount:
              type: string
              example: '100'
              description: The total amount of crypto out.
          required:
            - crypto
            - amount
        processingFee:
          type: string
          example: '1.00'
          description: The processing fee associated with the price.
        networkFee:
          type: string
          example: '1.00'
          description: The network fee (gas fee) associated with the price.
        marketRate:
          type: object
          title: Market Rates
          description: >-
            Current market rates for crypto and forex conversions.


            **Purpose**: Provides transparency on the exchange rates used for
            the quote calculation.


            **Components**:

            - `crypto`: Map of fiat currencies to crypto market rates

            - `forex`: Foreign exchange rates relative to reference currency
          required:
            - crypto
            - forex
          properties:
            crypto:
              type: object
              title: Crypto Market Rates
              description: >-
                Map of fiat currency codes to crypto market rates.


                **Format**: Each property is a fiat currency code, and the value
                is the amount of that fiat currency equal to 1 unit of the
                crypto.


                **Example**: If crypto is BTC and USD rate is "38497.64", then 1
                BTC = 38,497.64 USD
              additionalProperties:
                type: string
                description: Decimal market rate as string to preserve precision.
                example: '3849.764255560000038'
              example:
                USD: '3849.764255560000038'
                AUD: '5417.003283998476053'
            forex:
              type: object
              title: Foreign Exchange Rates
              description: >-
                Foreign exchange rates relative to the reference currency.


                **Format**: Each property (except `reference`) is a quote
                currency code, and the value is the amount of that currency
                equal to 1 unit of the reference currency.


                **Example**: If reference is USD and AUD is "1.4071000", then 1
                USD = 1.4071 AUD


                **Usage**: Use these rates to convert between different fiat
                currencies.
              required:
                - reference
              properties:
                reference:
                  type: string
                  title: Reference Currency
                  description: >-
                    Reference/base currency used for all forex conversion
                    values.


                    **Common Reference Currencies**: USD, EUR
                  example: USD
              additionalProperties:
                type: string
                description: >-
                  FX conversion rate from the reference currency to the property
                  currency, expressed as a decimal string.
                example: '1.4071000'
              example:
                reference: USD
                AUD: '1.4071000'
                EUR: '0.9234000'
                GBP: '0.7891000'
      required:
        - identityReference
        - source
        - target
        - processingFee
        - networkFee
        - marketRate
    OffRampQuoteResponse:
      title: Off-Ramp Indicative Price
      type: object
      properties:
        identityReference:
          $ref: '#/components/schemas/identity-reference'
        source:
          type: object
          properties:
            crypto:
              type: object
              properties:
                id:
                  type: string
                  description: The crypto token.
                  example: USDT
                blockchain:
                  type: string
                  description: The blockchain that is associated with the crypto token.
                  example: TRON
              required:
                - id
                - blockchain
            amount:
              type: string
              example: '100'
              description: The amount of crypto in.
          required:
            - crypto
            - amount
        target:
          type: object
          properties:
            fiat:
              type: object
              properties:
                id:
                  type: string
                  description: The fiat currency.
                  example: AUD
                method:
                  type: string
                  description: The payment method.
                  example: payid-bank-transfer
              required:
                - id
                - method
            amount:
              type: string
              description: The amount of fiat out.
              example: '100'
          required:
            - fiat
            - amount
        processingFee:
          type: string
          example: '0.00'
          description: The processing fee associated with the price.
        networkFee:
          type: string
          example: '0.00'
          description: The network fee (gas fee) associated with the price.
        marketRate:
          type: object
          title: Market Rates
          description: Current market rates for crypto and forex conversions.
          required:
            - crypto
            - forex
          properties:
            crypto:
              type: object
              title: Crypto Market Rates
              description: Map of fiat currency codes to crypto market rates.
              additionalProperties:
                type: string
                description: Decimal market rate as string to preserve precision.
            forex:
              type: object
              title: Foreign Exchange Rates
              description: Foreign exchange rates relative to the reference currency.
              required:
                - reference
              properties:
                reference:
                  type: string
                  title: Reference Currency
                  description: >-
                    Reference/base currency used for all forex conversion
                    values.
                  example: USD
              additionalProperties:
                type: string
                description: FX conversion rate from the reference currency.
      required:
        - identityReference
        - source
        - target
    OnRampQuoteWithIdResponse:
      title: On-Ramp Quote
      type: object
      properties:
        quoteId:
          type: string
          description: >-
            Unique identifier for this quote. Use this when creating a ramp
            transaction via the Ramps Request payload to lock the quote in.
          example: 6e9174edd370ffe6331aeda7a6d75592
        identityReference:
          $ref: '#/components/schemas/identity-reference'
        source:
          type: object
          properties:
            fiat:
              type: object
              properties:
                id:
                  type: string
                  description: The fiat currency.
                  example: AUD
                method:
                  type: string
                  description: The payment method.
                  example: payid-bank-transfer
              required:
                - id
                - method
            amount:
              type: string
              description: The amount of fiat in.
              example: '24.50'
          required:
            - fiat
            - amount
        target:
          type: object
          properties:
            crypto:
              type: object
              properties:
                id:
                  type: string
                  description: The crypto token.
                  example: ETH
                blockchain:
                  type: string
                  description: The blockchain that is associated with the crypto token.
                  example: ETH
              required:
                - id
                - blockchain
            amount:
              type: string
              example: '0.007259'
              description: The total amount of crypto out.
          required:
            - crypto
            - amount
        processingFee:
          type: string
          example: '0.00'
          description: The processing fee associated with the quote.
        networkFee:
          type: string
          example: '0.00'
          description: The network fee (gas fee) associated with the quote.
        marketRate:
          type: object
          title: Market Rates
          description: Current market rates for crypto and forex conversions.
          required:
            - crypto
            - forex
          properties:
            crypto:
              type: object
              title: Crypto Market Rates
              description: >-
                Map of fiat currency codes to crypto market rates.


                **Format**: Each property is a fiat currency code, and the value
                is the amount of that fiat currency equal to 1 unit of the
                crypto.
              additionalProperties:
                type: string
                description: Decimal market rate as string to preserve precision.
                example: '2342.218527689999974'
              example:
                USD: '2342.218527689999974'
                AUD: '3297.796842616966163'
            forex:
              type: object
              title: Foreign Exchange Rates
              description: Foreign exchange rates relative to the reference currency.
              required:
                - reference
              properties:
                reference:
                  type: string
                  title: Reference Currency
                  description: >-
                    Reference/base currency used for all forex conversion
                    values.
                  example: USD
              additionalProperties:
                type: string
                description: >-
                  FX conversion rate from the reference currency to the property
                  currency, expressed as a decimal string.
                example: '1.4079800'
              example:
                reference: USD
                AUD: '1.4079800'
        expiresAt:
          type: string
          description: >-
            The expiry timestamp of the quote. The quote is valid for 3 minutes
            from creation.
          example: '2026-04-10 04:50:36'
      required:
        - quoteId
        - identityReference
        - source
        - target
        - processingFee
        - networkFee
        - marketRate
        - expiresAt
    OffRampQuoteWithIdResponse:
      title: Off-Ramp Quote
      type: object
      properties:
        quoteId:
          type: string
          description: >-
            Unique identifier for this quote. Use this when creating a ramp
            transaction via the Ramps Request payload to lock the quote in.
          example: 8a2b45ccd891ffe7442bfdb8b7e86703
        identityReference:
          $ref: '#/components/schemas/identity-reference'
        source:
          type: object
          properties:
            crypto:
              type: object
              properties:
                id:
                  type: string
                  description: The crypto token.
                  example: USDT
                blockchain:
                  type: string
                  description: The blockchain that is associated with the crypto token.
                  example: TRON
              required:
                - id
                - blockchain
            amount:
              type: string
              example: '100'
              description: The amount of crypto in.
          required:
            - crypto
            - amount
        target:
          type: object
          properties:
            fiat:
              type: object
              properties:
                id:
                  type: string
                  description: The fiat currency.
                  example: AUD
                method:
                  type: string
                  description: The payment method.
                  example: payid-bank-transfer
              required:
                - id
                - method
            amount:
              type: string
              description: The amount of fiat out.
              example: '95.50'
          required:
            - fiat
            - amount
        processingFee:
          type: string
          example: '2.50'
          description: The processing fee associated with the quote.
        networkFee:
          type: string
          example: '2.00'
          description: The network fee (gas fee) associated with the quote.
        marketRate:
          type: object
          title: Market Rates
          description: Current market rates for crypto and forex conversions.
          required:
            - crypto
            - forex
          properties:
            crypto:
              type: object
              title: Crypto Market Rates
              description: Map of fiat currency codes to crypto market rates.
              additionalProperties:
                type: string
                description: Decimal market rate as string to preserve precision.
            forex:
              type: object
              title: Foreign Exchange Rates
              description: Foreign exchange rates relative to the reference currency.
              required:
                - reference
              properties:
                reference:
                  type: string
                  title: Reference Currency
                  description: >-
                    Reference/base currency used for all forex conversion
                    values.
                  example: USD
              additionalProperties:
                type: string
                description: FX conversion rate from the reference currency.
        expiresAt:
          type: string
          description: >-
            The expiry timestamp of the quote. The quote is valid for 3 minutes
            from creation.
          example: '2026-04-10 04:53:12'
      required:
        - quoteId
        - identityReference
        - source
        - target
        - processingFee
        - networkFee
        - marketRate
        - expiresAt
    LimitsRequest:
      type: object
      additionalProperties: false
      required:
        - identityReference
        - method
        - fiat
        - crypto
        - blockchain
        - transactionType
      properties:
        identityReference:
          type: string
          minLength: 1
          maxLength: 255
          description: Partner identity reference.
          example: 206-0x56c386b7b49be8618dbcdb2c6d09e161645c31ed
        method:
          type: string
          minLength: 1
          maxLength: 100
          description: |
            The payment method.

            | Available payments |
            |-------------|
            |debit-credit-card|
            |apple-pay|
            |sepa-bank-transfer|
            |gbp-bank-transfer|
            |ach-bank-transfer|
            |pix|
            |zar-bank-transfer|
            |interac-bank-transfer|
            |ideal-bank-transfer|
            |google-pay|
            |payid-bank-transfer|
            |wire-transfer|
            |spei|
            |pse|
            |khipu|
            |aud-bank-transfer|
            |usd-bank-transfer|
            |paypal|
            |klarna-paynow|
          example: payid-bank-transfer
        transactionType:
          type: string
          description: >-
            Transaction type (e.g., ONRAMP/OFFRAMP). Populate enum from your
            TransactionTypeEnum if desired.
          example: ONRAMP
        fiat:
          type: string
          minLength: 1
          maxLength: 10
          description: Fiat currency code (typically ISO 4217).
          example: AUD
          pattern: ^[A-Z0-9]{1,10}$
        crypto:
          type: string
          minLength: 1
          maxLength: 10
          description: Crypto asset code.
          example: BTC
          pattern: ^[A-Z0-9]{1,10}$
        blockchain:
          type: string
          minLength: 1
          maxLength: 50
          description: Blockchain identifier.
          example: BTC
    LimitsResponse:
      type: object
      additionalProperties: false
      required:
        - identityReference
        - limits
      properties:
        identityReference:
          type: string
          description: Echo of the identity reference.
          example: 206-0x56c386b7b49be8618dbcdb2c6d09e161645c31ed
        limits:
          type: object
          properties:
            transaction:
              type: object
              properties:
                maxFiat:
                  type: object
                  properties:
                    amount:
                      type: string
                      example: '100'
                      description: The maximum value for the transaction
                    currency:
                      type: string
                      example: AUD
                      description: Subject fiat currencty
                minFiat:
                  type: object
                  properties:
                    amount:
                      type: string
                      example: '100'
                      description: The maximum value for the transaction
                    currency:
                      type: string
                      example: AUD
                      description: Subject fiat currencty
            periodical:
              type: array
              description: List of limit buckets for each time period.
              items:
                $ref: '#/components/schemas/LimitBucket'
    EligibilityRequest:
      type: object
      additionalProperties: false
      description: >
        Request payload for transaction eligibility.


        Identification rules:

        - Provide `identityReference`, OR provide all of `email`,
        `countryOfResidence`.

        - Responses containg 422 status codes can vary based on the restrcitions
        found for the profile for example:
          - limit breach (daily, weekly, monthly, annual) 
          - age restrictions 
          - unsupported asset or fiat currency
          - Locality restrictions

        Amount rules:

        - Provide exactly one of `fiatAmount` or `cryptoAmount`.


        Conditional:

        - `state` is required when `countryOfResidence` is `US`.
      required:
        - method
        - transactionType
        - fiat
        - crypto
        - blockchain
      properties:
        identityReference:
          type: string
          minLength: 1
          maxLength: 255
          description: Partner identity reference.
          example: user-123
        method:
          type: string
          minLength: 1
          maxLength: 100
          description: |
            The payment method.

            | Available payments |
            |-------------|
            |debit-credit-card|
            |apple-pay|
            |sepa-bank-transfer|
            |gbp-bank-transfer|
            |ach-bank-transfer|
            |pix|
            |zar-bank-transfer|
            |interac-bank-transfer|
            |ideal-bank-transfer|
            |google-pay|
            |payid-bank-transfer|
            |wire-transfer|
            |spei|
            |pse|
            |khipu|
            |aud-bank-transfer|
            |usd-bank-transfer|\n|paypal|\n|klarna-paynow|\n",|
          example: payid-bank-transfer
        transactionType:
          type: string
          enum:
            - ONRAMP
            - OFFRAMP
          description: >
            Transaction type. Must be a valid value of `TransactionTypeEnum`.

            (Populate the allowed values here if you want strict client
            validation.)
          example: ONRAMP
        fiat:
          type: string
          minLength: 1
          maxLength: 10
          description: |
            Fiat currency code allowed for the partner (e.g., ISO 4217).
            Enforced server-side validation for availbility
          example: AUD
          pattern: ^[A-Z0-9]{1,10}$
        crypto:
          type: string
          minLength: 1
          maxLength: 10
          description: |
            Crypto asset code. Enforced server-side validation for availbility
          example: BTC
          pattern: ^[A-Z0-9]{1,10}$
        fiatAmount:
          type: string
          minLength: 1
          description: |
            Fiat amount as a decimal string.
            Mutually exclusive with `cryptoAmount`.
          example: '250.00'
          pattern: ^[0-9]+(\.[0-9]+)?$
        cryptoAmount:
          type: string
          minLength: 1
          description: |
            Crypto amount as a decimal string.
            Mutually exclusive with `fiatAmount`.
          example: '0.125'
          pattern: ^[0-9]+(\.[0-9]+)?$
        blockchain:
          type: string
          minLength: 1
          description: Blockchain identifier.
          example: BITCOIN
        email:
          type: string
          format: email
          description: Required when `identityReference` is not provided.
          example: user@example.com
        countryOfResidence:
          type: string
          minLength: 2
          maxLength: 2
          description: |
            Required when `identityReference` is not provided.
            ISO 3166-1 alpha-2 country code.
          example: AU
          pattern: ^[A-Z]{2}$
        dateOfBirth:
          type: string
          format: date
          description: >-
            Optional when `identityReference` is not provided. (Format
            YYYY-MM-DD)"
          example: '1990-01-30'
        state:
          type: string
          description: Required if `countryOfResidence` is `US`. (Enforced server-side.)
          example: CA
      anyOf:
        - required:
            - identityReference
        - required:
            - email
            - countryOfResidence
            - dateOfBirth
      oneOf:
        - title: fiatAmount
          required:
            - fiatAmount
        - title: cryptoAmount
          required:
            - cryptoAmount
    EligibilityResponse:
      type: object
      additionalProperties: false
      required:
        - paymentReady
        - kycRequirements
      properties:
        paymentReady:
          type: boolean
          description: >-
            Whether the identity is eligible and can proceed with
            payment/transaction. When true, there are no KYC requirements.
          example: false
        kycRequirements:
          type: array
          description: >
            List of outstanding requirements that must be satisfied before
            payment can proceed.

            If `paymentReady` is true, this will typically be an empty array.
          items:
            type: string
            enum:
              - TIN
              - NAME
              - DOB
              - ADDRESS
              - POA
              - DOCUMENT
              - SELFIE
              - SOURCE_FUNDS
              - OCCUPATION
              - PURPOSE_OF_TX
          uniqueItems: true
          example:
            - TIN
            - NAME
            - DOB
            - ADDRESS
            - POA
            - DOCUMENT
            - SELFIE
            - SOURCE_FUNDS
            - OCCUPATION
            - PURPOSE_OF_TX
    OtpRequestRequest:
      type: object
      title: OTP Request
      description: >-
        Request to send an OTP code to the customer's email address for
        verification.
      properties:
        identityReference:
          type: string
          title: Identity Reference
          description: >-
            Identity reference of an existing customer created through our
            platform
          example: c-13344
          pattern: ^[A-Za-z0-9-]+$
          minLength: 1
          maxLength: 255
        email:
          type: string
          format: email
          description: The customer's email address
          example: user@example.com
      required:
        - identityReference
        - email
    OtpRequestResponse:
      type: object
      title: OTP Request Response
      description: Response after successfully requesting an OTP code.
      properties:
        message:
          type: string
          description: Success message indicating OTP was sent.
          example: OTP sent successfully
      required:
        - message
    OtpVerifyRequest:
      type: object
      title: OTP Verification Request
      description: Request to verify an OTP code sent to the customer's email.
      properties:
        identityReference:
          type: string
          title: Identity Reference
          description: >-
            Identity reference of an existing customer created through our
            platform
          example: c-13344
          pattern: ^[A-Za-z0-9-]+$
          minLength: 1
          maxLength: 255
        email:
          type: string
          format: email
          description: The customer's email address
          example: user@example.com
        code:
          type: string
          description: The OTP code received via email. Must be 4 characters.
          minLength: 4
          maxLength: 4
          example: '4205'
      required:
        - identityReference
        - email
        - code
    OtpVerifyResponse:
      type: object
      title: OTP Verification Response
      description: Response after successfully verifying an OTP code.
      properties:
        message:
          type: string
          description: Success message indicating verification was successful.
          example: Success
      required:
        - message
    identity-reference:
      type: string
      title: Identity Reference
      description: >-
        A unique customer identifier provided by the partner. This field is
        required and must be unique for each customer.


        **Important**: You must consistently reuse the same identityReference
        for repeat interactions with the same customer, allowing Banxa to
        reliably recognize and associate their identity across multiple
        transactions.


        **Format Requirements**:

        - Only ASCII letters (a-z, A-Z), digits (0-9), and hyphens (-) are
        allowed

        - Must be between 1 and 255 characters

        - Case-sensitive


        **Best Practices**:

        - Use a consistent format across your system

        - Consider using a prefix to identify your organization (e.g.,
        'partner-customer-123')

        - Do not include personally identifiable information (PII) in the
        reference

        - Store the mapping between your internal customer ID and this reference
        securely
      example: c-13344
      pattern: ^[A-Za-z0-9-]+$
      minLength: 1
      maxLength: 255
    OnRampRequestBase:
      title: On-Ramp Request
      type: object
      properties:
        subPartnerId:
          type: string
          description: >-
            Your defined ID for associating an order with. You may use this to
            differentiate between your customers.
          example: '2125'
          minimum: 1
        identityReference:
          $ref: '#/components/schemas/identity-reference'
        source:
          type: object
          properties:
            fiat:
              type: object
              properties:
                id:
                  type: string
                  description: >-
                    The fiat currency to be transferred. Must be formatted as an
                    ISO 4217 code.
                  example: AUD
                method:
                  type: string
                  example: payid-bank-transfer
                  description: |
                    | Available payments |
                    |-------------|
                    |interac-bank-transfer|
                    |payid-bank-transfer|
                    |sepa-bank-transfer|
                    |ach-bank-transfer|
                tosAccepted:
                  type: boolean
                  description: >-
                    Indicates whether the customer has accepted the Terms of
                    Service. Required for ach-bank-transfer method if the
                    customer has not previously signed the terms of service
                    agreement.
                  example: true
              required:
                - id
                - method
          required:
            - fiat
        target:
          type: object
          properties:
            crypto:
              type: object
              properties:
                id:
                  type: string
                  description: The crypto token to be received.
                  example: XRP
                blockchain:
                  type: string
                  description: The blockchain that is associated with the crypto token.
                  example: XRP Ledger
                walletAddress:
                  type: string
                  description: The wallet address Banxa will use to transfer the crypto.
                  example: rp93JdjfXxPYVjo5E7qF4G6tRbBeweUz9K
                walletAddressMemo:
                  type: string
                  description: The wallet address memo associated with the wallet address.
                  example: '39730'
              required:
                - id
                - blockchain
                - walletAddress
          required:
            - crypto
      required:
        - identityReference
        - source
        - target
    OnRampRequestWithFiatAmount:
      title: Lock fiat amount
      allOf:
        - $ref: '#/components/schemas/OnRampRequestBase'
        - type: object
          properties:
            fiatAmount:
              type: string
              description: >
                The amount in fiat currency to convert. 

                Amount in fiat minor precision (typically 2 decimals). 

                This locks the fiat amount; the crypto amount will be computed
                and rounded to the configured crypto scale. 

                Note: due to differing decimal scales and rounding rules,
                converting fiat→crypto and then crypto→fiat may not return the
                exact original number.
              example: '100'
          required:
            - fiatAmount
    OnRampRequestWithCryptoAmount:
      title: Lock crypto amount
      allOf:
        - $ref: '#/components/schemas/OnRampRequestBase'
        - type: object
          properties:
            cryptoAmount:
              type: string
              description: >
                Amount in crypto precision (token-dependent, e.g., 6–8
                decimals).

                This locks the crypto amount; the fiat amount will be computed
                and rounded to the fiat scale.

                Note: small differences vs the reverse path are expected from
                precision/rounding.
              example: '100'
          required:
            - cryptoAmount
    payid-bank-transfer:
      type: object
      title: Offramp PayId instructions
      description: |
        The payment instructions for the bank transfer in Australia.
      properties:
        accountName:
          type: string
          description: The account name for the bank transfer.
          example: John Citizen
        accountNumber:
          type: string
          description: The account number for the bank transfer.
          example: '12345678'
        bsb:
          type: string
          description: The BSB number for the bank transfer.
          example: '26195'
      required:
        - accountName
        - accountNumber
        - bsb
    interac-bank-transfer:
      type: object
      title: Offramp Interac instructions
      properties:
        email:
          type: string
          example: j.citizen@example.com
          description: The account holder email
          maxLength: 160
      required:
        - email
    sepa-bank-transfer:
      type: object
      title: Offramp SEPA instructions
      description: |
        The payment instructions for the bank transfer in Europe
      properties:
        accountName:
          type: string
          description: The account name for the bank transfer.
          example: John Citizen
        iban:
          type: string
          description: The IBAN number for the bank transfer.
          example: '26195'
      required:
        - accountName
        - iban
    ach-bank-transfer:
      type: object
      title: Offramp ACH instructions
      properties:
        bankName:
          type: string
          example: Bank of America
          description: The bank name
          maxLength: 200
        accountName:
          type: string
          example: John Armstrong
          description: The account name
          maxLength: 200
        accountNumber:
          type: string
          example: '123456789012'
          description: The account number
          minLength: 1
        routingNumber:
          type: string
          example: '121000358'
      required:
        - bankName
        - accountName
        - accountNumber
        - routingNumber
    OffRampInstructions:
      type: object
      oneOf:
        - $ref: '#/components/schemas/payid-bank-transfer'
        - $ref: '#/components/schemas/interac-bank-transfer'
        - $ref: '#/components/schemas/sepa-bank-transfer'
        - $ref: '#/components/schemas/ach-bank-transfer'
    OffRampRequestBase:
      title: Off-Ramp Request
      type: object
      properties:
        subPartnerId:
          type: string
          description: >
            Your defined ID for associating an order with. You may use this to
            differentiate between your customers.
          example: '2125'
          minimum: 1
        identityReference:
          $ref: '#/components/schemas/identity-reference'
        source:
          type: object
          properties:
            crypto:
              type: object
              properties:
                id:
                  type: string
                  description: The crypto token to be transferred.
                  example: ETH
                blockchain:
                  type: string
                  description: The blockchain that is associated with the crypto token.
                  example: ethereum
                walletAddress:
                  type: string
                  description: >-
                    The wallet address that will be used to send the crypto.
                    This will also be the wallet address used for refunds if a
                    refund is necessary.
                  example: '0xc292474673cf1a96a96e8c56ec4f45ecf2e0b448'
                walletAddressMemo:
                  type: string
                  description: The wallet address memo associated with the wallet address.
                  example: '1234'
              required:
                - id
                - blockchain
                - walletAddress
          required:
            - crypto
        target:
          type: object
          properties:
            fiat:
              type: object
              properties:
                id:
                  type: string
                  description: >-
                    The fiat currency to be received. Must be formatted as an
                    ISO 4217 code.
                  example: GBP
                method:
                  type: string
                  description: The payment method used for the ramp.
                  example: payid-bank-transfer
                instructions:
                  type: array
                  description: >-
                    The payment instructions that you provide to Banxa. It will
                    be the where the payout will be made to and will differ per
                    payment method.
                  items:
                    $ref: '#/components/schemas/OffRampInstructions'
                tosAccepted:
                  type: boolean
                  description: >-
                    Indicates whether the customer has accepted the Terms of
                    Service. Required for ach-bank-transfer method if the
                    customer has not previously signed the terms of service
                    agreement.
                  example: true
              required:
                - id
                - method
                - instructions
          required:
            - fiat
      required:
        - identityReference
        - source
        - target
    OffRampRequestWithCryptoAmount:
      title: Lock crypto amount
      allOf:
        - $ref: '#/components/schemas/OffRampRequestBase'
        - type: object
          properties:
            cryptoAmount:
              type: string
              description: >
                Amount in crypto precision (token-dependent, e.g., 6–8
                decimals).

                This locks the crypto amount; the fiat amount will be computed
                and rounded to the fiat scale.

                Note: small differences vs the reverse path are expected from
                precision/rounding.
              example: '100'
          required:
            - cryptoAmount
    OffRampRequestWithFiatAmount:
      title: Lock fiat amount
      allOf:
        - $ref: '#/components/schemas/OffRampRequestBase'
        - type: object
          properties:
            fiatAmount:
              type: string
              description: >
                The amount in fiat currency to convert. 

                Amount in fiat minor precision (typically 2 decimals). 

                This locks the fiat amount; the crypto amount will be computed
                and rounded to the configured crypto scale. 

                Note: due to differing decimal scales and rounding rules,
                converting fiat→crypto and then crypto→fiat may not return the
                exact original number.
              example: '100'
          required:
            - fiatAmount
    offramp-response:
      title: Off-Ramp Response
      type: object
      properties:
        id:
          type: string
          description: The ramp ID.
          example: '4002'
        subPartnerId:
          type: string
          description: >-
            Your defined ID for associating an order with. You may use this to
            differentiate between your customers.
          example: '2125'
        identityReference:
          $ref: '#/components/schemas/identity-reference'
        status:
          type: string
          enum:
            - INITIALIZED
            - AWAITING_FUNDS
            - PAYMENT_SUBMITTED
            - FUNDS_RECEIVED
            - UNDER_REVIEW
            - CANCELLED
            - REFUNDED
            - COMPLETED
          description: >
            | Status           |
            Description                                                                                  
            |

            |------------------|-----------------------------------------------------------------------------------------------|

            | INITIALIZED      | The request has been accepted and is queued for
            processing.                          |

            | AWAITING_FUNDS   | The order is ready; awaiting receipt of funds
            at the specified wallet address.             |

            | FUNDS_RECEIVED   | Funds have been successfully received at the
            destination wallet address.                      |

            | UNDER_REVIEW     | The order is undergoing compliance and security
            review.                                    |

            | COMPLETED        | The order is finalized: funds have been secured
            and fiat disbursed to the customer's method. |

            | CANCELLED        | The order has been cancelled and will not
            proceed.                                         |

            | REFUNDED         | The amount has been returned to the customer's
            wallet address.                       |
          example: INITIALIZED
        source:
          type: object
          properties:
            crypto:
              type: object
              properties:
                id:
                  type: string
                  description: The crypto token to be transferred.
                  example: USDT
                blockchain:
                  type: string
                  description: The blockchain that is associated with the crypto token.
                  example: ethereum
                walletAddress:
                  type: string
                  description: >-
                    The wallet address that will be used to send the crypto.
                    This will also be the wallet address used for refunds if a
                    refund is necessary.
                  example: '0x46B2E9701FE4F6C0A23533D196DbBE7EfEeDea4F'
                walletAddressMemo:
                  type: string
                  description: The wallet address memo associated with the wallet address.
                  example: '1234'
              required:
                - id
                - blockchain
                - walletAddress
            amount:
              type: string
              description: The amount of crypto to be transferred
              example: '105'
          required:
            - crypto
            - amount
        target:
          type: object
          properties:
            fiat:
              type: object
              properties:
                id:
                  type: string
                  description: >-
                    The fiat currency to be received. Must be formatted as an
                    ISO 4217 code.
                  example: USD
                method:
                  type: string
                  description: The payment method used for the ramp.
                  example: payid-bank-transfer
              required:
                - id
                - method
            amount:
              type: string
              description: The amount of fiat to be received.
              example: '100.5'
          required:
            - fiat
            - amount
        sourceDepositInstructions:
          type: object
          properties:
            walletAddress:
              type: string
              description: The Banxa deposit wallet address.
              example: '0x46B2E9701FE4F6C0A23533D196DbBE7EfEeDea4F'
            walletAddressMemo:
              type: string
              description: >-
                The wallet address memo assoicated with the Banxa deposit wallet
                address.
              example: '1684'
          required:
            - walletAddress
            - walletAddressMemo
        receipt:
          type: object
          properties:
            sourceTransactionHash:
              type:
                - string
                - 'null'
              description: >-
                The transaction hash of the crypto transfer. Null if not yet
                received.
              example: >-
                0x637f3f8c7b15a83657901ca9f9e0134f0b7dad09e09fbac8a637d026343f586e
            gatewayFee:
              type: string
              description: The fee charged by the payment processor.
              example: '1.95'
            networkFee:
              type: string
              description: The blockchain network fee required to process the transaction.
              example: '1.95'
            sourceAmount:
              type: string
              description: The amount of crypto transferred.
              example: '100'
            targetAmount:
              type: string
              description: The amount of fiat received.
              example: '100'
          required:
            - sourceTransactionHash
            - gatewayFee
            - networkFee
            - sourceAmount
            - targetAmount
        createdAt:
          type: string
          format: date-time
          description: The UTC date time of creation.
          example: '2023-05-05T19:53:08.320Z'
        completedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: The UTC date time of the completion. Null if not yet completed.
          example: '2023-06-05T19:53:08.320Z'
      required:
        - id
        - subPartnerId
        - identityReference
        - status
        - source
        - target
        - sourceDepositInstructions
        - receipt
        - createdAt
        - completedAt
    payid-bank-transfer-onramp:
      type: object
      title: Onramp PayId instructions
      description: >
        The Australian payment instructions the customer to complete the payment
        for the transfer.
      properties:
        recipientEmail:
          type: string
          description: The account name for the payid bank transfer.
          example: 15600270@banxa.com
        depositReference:
          type: string
          description: The reference required to provide with the deposit.
          example: '12345678'
      required:
        - recipientEmail
        - depositReference
    interac-bank-transfer-onramp:
      type: object
      title: Onramp Interac instructions
      properties:
        recipientEmail:
          type: string
          example: j.citizen@example.com
          description: The account holder email
          maxLength: 255
        securityQuestion:
          type: string
          example: What was the name of your first pet?
          description: Security question
          maxLength: 255
        securityAnswer:
          type: string
          example: DOGE
          description: The answer to the security question.
          maxLength: 255
      required:
        - recipientEmail
        - securityQuestion
        - securityAnswer
    sepa-bank-transfer-onramp:
      type: object
      title: Onramp SEPA instructions
      description: >
        The European payment instructions the customer to complete the payment
        for the transfer.
      properties:
        depositReference:
          type: string
          description: The reference for the deposit.
          example: '01'
        recipientName:
          type: string
          description: The name of the recipient.
          example: Banxa
        recipientAddress:
          type: string
          description: The address of the recipient
          example: >-
            EU Internet Ventures B.V. Piet. Heinkade 93B, 1019GM, Amsterdam, The
            Netherlands
        BIC:
          type: string
          description: The BIC number.
          example: CLJUGB00
        IBAN:
          type: string
          description: The IBAN number for the bank transfer.
          example: GB22CLJU10000000000000
        bankName:
          type: string
          description: The name of the bank
          example: CJ Limited
        bankAddress:
          type: string
          description: The bank address
          example: >-
            6th Floor, Manfield House, 1 Southampton Street London, United
            Kingdom WC2R OLR
      required:
        - depositReference
        - recipientName
        - recipientAddress
        - BIC
        - IBAN
        - bankName
        - bankAddress
    ach-bank-transfer-onramp:
      type: object
      title: Onramp ACH instructions
      properties:
        paymentRail:
          type: string
          example: ach_push
          description: The payment rail
        currency:
          type: string
          example: usd
          description: The currency
        amount:
          type: string
          example: '500'
          description: The amount
          minLength: 1
        depositReference:
          type: string
          example: BRGYAVF82BNNR3ZPGBD6
          description: The deposit reference
        bankAccountNumber:
          type: string
          description: The bank account number
          example: '210351636791'
        bankRoutingNumber:
          type: string
          description: The bank routing number
          example: '101019644'
        bankBeneficiaryName:
          type: string
          description: The bank beneficiary name
          example: BNXA USA MTL Inc
        bankBeneficiaryAddress:
          type: string
          description: The beneficiary address
          example: 1 East Liberty Street, 600, Reno, Nevada 895010000, US
        bankName:
          type: string
          description: The bank name
          example: Lead Bank
        bankAddress:
          type: string
          description: The bank aaddress
          example: 1801 Main St., Kansas City, MO 64108
      required:
        - paymentRail
        - currency
        - amount
        - depositReference
        - bankAccountNumber
        - bankRoutingNumber
        - bankBeneficiaryName
        - bankName
        - bankAddress
    OnRampInstructions:
      type: object
      oneOf:
        - $ref: '#/components/schemas/payid-bank-transfer-onramp'
        - $ref: '#/components/schemas/interac-bank-transfer-onramp'
        - $ref: '#/components/schemas/sepa-bank-transfer-onramp'
        - $ref: '#/components/schemas/ach-bank-transfer-onramp'
    onramp-response:
      title: On-Ramp Response
      type: object
      properties:
        id:
          type: string
          description: The ramp ID.
          example: '4002'
        subPartnerId:
          type: string
          description: >-
            Your defined ID for associating an order with. You may use this to
            differentiate between your customers.
          example: '2125'
        identityReference:
          $ref: '#/components/schemas/identity-reference'
        status:
          type: string
          enum:
            - INITIALIZED
            - AWAITING_FUNDS
            - PAYMENT_SUBMITTED
            - FUNDS_RECEIVED
            - UNDER_REVIEW
            - CANCELLED
            - REFUNDED
            - COMPLETED
          description: >
            | Status           |
            Description                                                                                  
            |

            |------------------|-----------------------------------------------------------------------------------------------|

            | INITIALIZED      | The request has been accepted and is queued for
            processing.                          |

            | AWAITING_FUNDS   | The order is ready; awaiting receipt of funds
            through the specified payment method.             |

            | FUNDS_RECEIVED   | Funds have been successfully received via the
            requested payment method.                      |

            | UNDER_REVIEW     | The order is undergoing compliance and security
            review.                                    |

            | COMPLETED        | The order is finalized: funds have been secured
            and crypto is disbursed to the customer's wallet address. |

            | CANCELLED        | The order has been cancelled and will not
            proceed.                                         |

            | REFUNDED         | The order amount has been returned to the
            customer.                       |
          example: INITIALIZED
        source:
          type: object
          properties:
            fiat:
              type: object
              properties:
                id:
                  type: string
                  description: >
                    The fiat currency to be transferred. Must be formatted as an
                    ISO 4217 code.
                  example: AUD
                method:
                  type: string
                  description: The payment method used for the ramp.
                  example: payid-bank-transfer
              required:
                - id
                - method
            amount:
              type: string
              description: The amount of fiat to be transferred.
              example: '100'
          required:
            - fiat
            - amount
        target:
          type: object
          properties:
            crypto:
              type: object
              properties:
                id:
                  type: string
                  description: The crypto token to be received.
                  example: XRP
                blockchain:
                  type: string
                  description: The blockchain that is associated with the crypto token.
                  example: XRP Ledger
                walletAddress:
                  type: string
                  description: The wallet address Banxa will use to transfer the crypto.
                  example: rp93JdjfXxPYVjo5E7qF4G6tRbBeweUz9K
                walletAddressMemo:
                  type: string
                  description: The wallet address memo associated with the wallet address.
                  example: '39730'
              required:
                - id
                - blockchain
                - walletAddress
            amount:
              type: string
              description: The amount of crypto to be received.
              example: '105'
          required:
            - crypto
            - amount
        sourceDepositInstructions:
          $ref: '#/components/schemas/OnRampInstructions'
        receipt:
          type: object
          properties:
            targetTransactionHash:
              type:
                - string
                - 'null'
              description: >-
                The transaction hash of the crypto transfer. Null if not yet
                completed.
              example: string
            gatewayFee:
              type: string
              description: The fee charged by the payment processor.
              example: '1.95'
            networkFee:
              type: string
              description: The blockchain network fee required to process the transaction.
              example: '1.95'
            sourceAmount:
              type: string
              description: The amount of fiat transferred.
              example: '100'
            targetAmount:
              type: string
              description: The amount of crypto received.
              example: '100'
          required:
            - targetTransactionHash
            - gatewayFee
            - networkFee
            - sourceAmount
            - targetAmount
        createdAt:
          type: string
          format: date-time
          description: The UTC date time of the transaction creation.
          example: '2023-05-05T19:53:08.320Z'
        completedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The UTC date time of the transaction completion. Null if not yet
            completed.
          example: '2023-06-05T19:53:08.320Z'
      required:
        - id
        - subPartnerId
        - identityReference
        - status
        - source
        - target
        - sourceDepositInstructions
        - receipt
        - createdAt
        - completedAt
    TaxIdType:
      type: string
      example: tax_id
      description: >-
        The category of tax or government identifier supplied in `taxId`. The
        correct value depends on the customer's country and the identifier type
        accepted for that country.


        | Value | Description |

        |---|---|

        | `identity_card` | A government-issued identity card number used for
        identity or tax reporting in the customer's country. |

        | `tax_id` | A tax identification number issued by a tax authority, such
        as a TFN, TIN, ITIN, or equivalent. |

        | `national_number` | A national, citizen, resident, or social insurance
        number used to identify an individual in their country. |

        | `ssn` | A Social Security Number, generally used for US individuals. |
      enum:
        - identity_card
        - tax_id
        - national_number
        - ssn
    TaxId:
      type: string
      example: 123-11-123
      description: >-
        Tax identification number.


        See [TIN
        validation](./enterprise-api/v0-beta/how-it-works/tin-validation).
    IdentityRelianceDocument:
      type: object
      properties:
        type:
          type: string
          enum:
            - DRIVING_LICENSE
            - PASSPORT
            - IDENTIFICATION
          example: DRIVING_LICENSE
          description: The type of document collected from the applicant.
        data:
          type: object
          description: The document data collected from the customer.
          properties:
            number:
              type: string
              example: '123456789'
              description: Identifier number from the document.
    Image:
      type: object
      oneOf:
        - title: Driving License / Identification
          required:
            - side
          properties:
            type:
              type: string
              enum:
                - DRIVING_LICENSE
                - IDENTIFICATION
              example: DRIVING_LICENSE
        - title: Other
          properties:
            type:
              type: string
              enum:
                - PASSPORT
                - PROOF_OF_ADDRESS
                - SELFIE
              example: PASSPORT
      description: >
        The mimetype field is required and must be either image/jpeg or
        image/png. Note: JSON does not support line breaks in string values, so
        the Base64-encoded content must be provided as a single continuous line
        without any line breaks.
      properties:
        base64:
          type: string
          example: >-
            iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P49/8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==
          pattern: ^[A-Za-z0-9\/\r\n+]*={0,2}$
          description: >
            Base64-encoded file content. Maximum original file size before
            encoding is 10 MB.
          format: byte
        mimetype:
          type: string
          example: image/png
          description: >
            MIME type of the image, we support image/jpeg and image/png
            mimetypes
        side:
          type: string
          example: FRONT
          enum:
            - FRONT
            - BACK
          description: |
            The side of the identity document
      required:
        - base64
        - mimetype
    IdentityDocument:
      type: object
      oneOf:
        - title: Passport / Driving License / ID
          required:
            - type
            - images
            - data
          properties:
            type:
              type: string
              enum:
                - PASSPORT
                - DRIVING_LICENSE
                - IDENTIFICATION
              example: PASSPORT
        - title: Proof of Address / Selfie
          required:
            - type
            - images
          properties:
            type:
              type: string
              enum:
                - PROOF_OF_ADDRESS
                - SELFIE
              example: PROOF_OF_ADDRESS
      properties:
        type:
          type: string
          enum:
            - DRIVING_LICENSE
            - PASSPORT
            - IDENTIFICATION
            - PROOF_OF_ADDRESS
            - SELFIE
          example: DRIVING_LICENSE
          description: The type of document provided.
        data:
          type: object
          description: >
            Required when the document "type" is "PASSPORT", "DRIVING_LICENSE",
            or "IDENTIFICATION".
          properties:
            number:
              type: string
              example: '123456789'
              description: Identifier number from the document.
        images:
          type: array
          description: One or more images of the document.
          items:
            $ref: '#/components/schemas/Image'
    LimitAmounts:
      type: object
      additionalProperties: false
      description: |
        Limit amounts for a given context.
      properties:
        maxFiat:
          $ref: '#/components/schemas/Money'
        remainder:
          title: Remainder
          description: Total remaining value the customer can purchase.
          example: '5000'
          pattern: ^[0-9]+(\.[0-9]{1,2})?$
    LimitBucket:
      type: object
      additionalProperties: false
      required:
        - period
      properties:
        period:
          type: string
          description: Time window the limits apply to.
          enum:
            - TRANSACTION
            - DAILY
            - WEEKLY
            - MONTHLY
            - ANNUAL
          example: DAILY
        sources:
          type: object
          additionalProperties: false
          description: Breakdown of limit sources
          properties:
            provider:
              $ref: '#/components/schemas/LimitAmounts'
            customer:
              $ref: '#/components/schemas/LimitAmounts'
    CryptoCurrenciesResponse:
      type: object
      title: Cryptocurrencies Response
      description: A list of supported cryptocurrencies and their available blockchains.
      required:
        - data
      properties:
        data:
          type: array
          description: Array of supported cryptocurrencies.
          items:
            $ref: '#/components/schemas/CryptoCurrency'
    CryptoCurrency:
      type: object
      title: Cryptocurrency
      description: A supported cryptocurrency and its available blockchains.
      required:
        - crypto
        - name
        - blockchains
      properties:
        crypto:
          type: string
          description: The cryptocurrency coin code.
          example: BTC
        name:
          type: string
          description: The display name of the cryptocurrency.
          example: Bitcoin
        blockchains:
          type: array
          description: The list of blockchains on which this cryptocurrency is supported.
          items:
            $ref: '#/components/schemas/CryptoCurrencyBlockchain'
    CryptoCurrencyBlockchain:
      type: object
      title: Cryptocurrency Blockchain
      description: A blockchain network on which a cryptocurrency is available.
      required:
        - blockchain
        - name
        - isDefault
        - address
        - network
        - minimum
        - unsupportedCountries
      properties:
        blockchain:
          type: string
          description: The blockchain network code.
          example: TRON
        name:
          type: string
          description: The display name of the blockchain network.
          example: TRON
        isDefault:
          type: boolean
          description: >-
            Indicates whether this is the default blockchain for the
            cryptocurrency.
          example: true
        address:
          type:
            - string
            - 'null'
          description: >-
            The contract address of the token on this blockchain, if applicable.
            `null` for native coins.
          example: TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t
        network:
          type:
            - string
            - 'null'
          description: >-
            A network or asset identifier used to disambiguate the asset on this
            blockchain, if applicable. `null` if not set.
          example: null
        minimum:
          type: string
          description: >-
            The minimum transaction amount for this asset on this blockchain, as
            a decimal string.
          example: '0.00001'
        unsupportedCountries:
          type: array
          description: ISO 3166-1 alpha-2 country codes where this asset is unavailable.
          items:
            type: string
            example: US
          example: []
    FiatsListResponse:
      type: array
      title: Fiats List Response
      description: >-
        List of supported fiat currencies with their available payment methods
        for a specific transaction type.
      items:
        $ref: '#/components/schemas/FiatWithPaymentMethods'
    FiatWithPaymentMethods:
      type: object
      title: Fiat Currency with Payment Methods
      description: A fiat currency supported by Banxa with its available payment methods.
      required:
        - fiat
        - name
        - symbol
        - supportedPaymentMethods
      properties:
        fiat:
          type: string
          title: Fiat Currency Code
          description: Three-letter ISO 4217 currency code identifying the fiat currency.
          example: AUD
          pattern: ^[A-Z]{3}$
          minLength: 3
          maxLength: 3
        name:
          type: string
          title: Currency Name
          description: Human-readable name of the fiat currency.
          example: Australian Dollar
        symbol:
          type: string
          title: Currency Symbol
          description: Symbol used to represent the currency (e.g., $, €, £).
          example: $
        supportedPaymentMethods:
          type: array
          title: Supported Payment Methods
          description: >-
            List of payment methods available for this fiat currency. Each
            method includes transaction limits.
          items:
            $ref: '#/components/schemas/PaymentMethodWithLimits'
    PaymentMethodWithLimits:
      type: object
      title: Payment Method with Transaction Limits
      description: >-
        Payment method available for a fiat currency with minimum and maximum
        transaction limits.
      required:
        - method
        - name
        - minimum
        - maximum
      properties:
        method:
          type: string
          title: Payment Method Code
          description: Unique identifier for the payment method.
          example: payid-bank-transfer
        name:
          type: string
          title: Payment Method Name
          description: Human-readable name of the payment method.
          example: Payid Bank Transfer
        minimum:
          type: string
          title: Minimum Transaction Amount
          description: >-
            Minimum allowed transaction amount for this payment method in the
            fiat currency's minor units (e.g., cents for AUD).
          example: '10'
        maximum:
          type: string
          title: Maximum Transaction Amount
          description: >-
            Maximum allowed transaction amount for this payment method in the
            fiat currency's minor units.
          example: '50000'
    CountriesListResponse:
      type: array
      title: Countries List Response
      description: List of supported countries available for KYC and transaction flows.
      items:
        $ref: '#/components/schemas/Country'
    Country:
      type: object
      title: Country
      description: A supported country and its available states or provinces.
      required:
        - id
        - description
        - states
      properties:
        id:
          type: string
          title: Country Code
          description: Two-letter ISO 3166-1 alpha-2 country code.
          example: US
          pattern: ^[A-Z]{2}$
          minLength: 2
          maxLength: 2
        description:
          type: string
          title: Country Name
          description: Human-readable name of the country.
          example: United States
        states:
          type: array
          title: States or Provinces
          description: >-
            List of supported states or provinces for the country. Empty when
            the country does not require region selection.
          items:
            $ref: '#/components/schemas/CountryState'
    CountryState:
      type: object
      title: Country State
      description: A state or province supported for a country.
      required:
        - id
        - description
      properties:
        id:
          type: string
          title: State or Province Code
          description: Short code identifying the state or province.
          example: CA
        description:
          type: string
          title: State or Province Name
          description: Human-readable name of the state or province.
          example: California
  responses:
    BadRequest:
      description: |-
        Bad request due to invalid input.

        **Common Causes**:
        - Malformed JSON in request body
        - Invalid data types
        - Missing required fields
        - Invalid request structure
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                description: Human-readable error message
                example: Bad Request
              code:
                type: integer
                description: HTTP status code
                example: 400
              traceId:
                type: string
                description: >-
                  Unique identifier for this error instance. Use this when
                  contacting support.
                example: 2b6fc5d0-57e4-4b5a-9e3c-6cfbb6d8023f
    Unauthorized:
      description: |-
        Authentication failed or missing credentials.

        **Common Causes**:
        - Missing Authorization header
        - Invalid API key
        - Expired or invalid HMAC signature
        - Incorrect timestamp (must be within 5 minutes of server time)
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                description: Human-readable error message
                example: Unauthenticated.
              code:
                type: integer
                description: HTTP status code
                example: 401
              traceId:
                type: string
                description: Unique identifier for this error instance
                example: 2b6fc5d0-57e4-4b5a-9e3c-6cfbb6d8023f
    NotFound:
      description: |-
        The requested resource was not found.

        **Common Causes**:
        - Invalid ramp ID
        - Invalid identity reference
        - Resource has been deleted
        - Incorrect endpoint URL
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                description: Human-readable error message
                example: Not Found
              code:
                type: integer
                description: Error code (may be HTTP status or custom code)
                example: 500100
              traceId:
                type: string
                description: Unique identifier for this error instance
                example: 2b6fc5d0-57e4-4b5a-9e3c-6cfbb6d8023f
    UnprocessableEntity:
      description: |-
        Validation error - request is well-formed but contains invalid data.

        **Common Causes**:
        - Field validation failures
        - Business rule violations
        - Invalid field combinations
        - Out of range values
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                description: Summary of validation errors
                example: The given data was invalid.
              errors:
                type: object
                description: >-
                  Map of field names to error messages.


                  **Format**: Each key is a field name, value is an array of
                  error messages for that field.
                additionalProperties:
                  type: array
                  items:
                    type: string
                example:
                  email:
                    - The email field is required.
                  fiatAmount:
                    - The fiat amount must be at least 10.
              code:
                type: integer
                description: HTTP status code
                example: 422
              traceId:
                type: string
                description: Unique identifier for this error instance
                example: 2b6fc5d0-57e4-4b5a-9e3c-6cfbb6d8023f
    TooManyRequests:
      description: >-
        Rate limit exceeded.


        **Rate Limits**:

        - General API: 100 requests per minute

        - Price endpoint: 60 requests per minute


        **Action**: Wait for the duration specified in `Retry-After` header
        before retrying.
      headers:
        Retry-After:
          description: >-
            Number of seconds to wait before retrying.


            **Important**: Always respect this header to avoid further rate
            limiting.
          schema:
            type: integer
            example: 60
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                description: Human-readable error message
                example: Too Many Requests. Please try again later.
              code:
                type: integer
                description: HTTP status code
                example: 429
              traceId:
                type: string
                description: Unique identifier for this error instance
                example: 2b6fc5d0-57e4-4b5a-9e3c-6cfbb6d8023f
    InternalServerError:
      description: >-
        Unexpected server error.


        **Action**: 

        - Retry with exponential backoff (up to 3 attempts)

        - If error persists, contact support with the traceId


        **Note**: This is a temporary issue on our side, not a problem with your
        request.
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                description: Human-readable error message
                example: Server Error
              code:
                type: integer
                description: HTTP status code
                example: 500
              traceId:
                type: string
                description: >-
                  Unique identifier for this error instance. **Important**:
                  Include this when contacting support.
                example: 2b6fc5d0-57e4-4b5a-9e3c-6cfbb6d8023f
    InvalidTransactionType:
      description: |-
        Validation error - the transactionType path parameter is invalid.

        **Common Causes**:
        - Supplied value is not `onramp` or `offramp`
        - Parameter is missing or empty
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                type: integer
                description: HTTP status code
                example: 422
              message:
                type: string
                description: Validation error message
                example: Invalid transaction type. Must be one of onramp and offramp
              errors:
                type: object
                description: Map of field names to error messages.
                additionalProperties:
                  type: array
                  items:
                    type: string
                example:
                  transactionType:
                    - >-
                      Invalid transaction type. Must be one of onramp and
                      offramp
    OtpFeatureNotEnabled:
      description: >-
        Email verification feature is not enabled for this merchant. Contact
        support to enable this feature.
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                example: >-
                  Email validation is not enabled, please contact us to enable
                  this feature.
              code:
                type: integer
                example: 403
    OtpRateLimitExceeded:
      description: >-
        Rate limit exceeded for OTP requests or verification attempts. Rate
        limits reset after 60 seconds.
      headers:
        Retry-After:
          description: Number of seconds to wait before retrying
          schema:
            type: integer
            example: 60
        X-RateLimit-Reset:
          description: Unix timestamp when the rate limit resets
          schema:
            type: integer
            example: 1710648000
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                example: Too many OTP requests. Please try again later.
              code:
                type: integer
                example: 429
              traceId:
                type: string
                example: abc123def456
          examples:
            request_rate_limit:
              summary: OTP request rate limit exceeded
              description: Maximum 3 OTP requests per minute per customer
              value:
                message: Too many OTP requests. Please try again later.
                code: 429
                traceId: req_abc123
            verify_rate_limit:
              summary: OTP verification rate limit exceeded
              description: Maximum 4 verification attempts per minute per customer
              value:
                message: Too many OTP verification attempts. Please try again later.
                code: 429
                traceId: ver_def456
