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

# Crypto payout fee

> Fee schedule for a crypto payout on a given chain and asset. Use at
quote/display time; echo the returned `fixed` + `bps` on the payout submit
as `expectedFeeSchedule` to guard against config drift.



## OpenAPI

````yaml GET /v1/fees/crypto-payout
openapi: 3.0.0
info:
  title: nxos API
  version: 1.0.0
  contact:
    name: nxos
    url: https://nxos.io
  description: |-
    The nxos platform API provides programmatic access to accounts, balances,
    quotes, and trades. All endpoints require API key authentication.
servers:
  - url: https://api.nxos.io
    description: Production
    variables: {}
  - url: https://api.sandbox.nxos.io
    description: Sandbox
    variables: {}
security: []
tags:
  - name: Accounts
  - name: Quotes
  - name: Beneficiaries
  - name: Fiat Payouts
  - name: Crypto Payouts
  - name: Sandbox Faucet
  - name: Nxosnet
  - name: Fees
  - name: Funding Methods
  - name: Transactions
  - name: Organizations
  - name: Authorizations
  - name: Webhooks
    description: >-
      Register an HTTPS endpoint to receive events (organization verification
      and

      transaction status changes) instead of polling. Deliveries are signed;
      verify

      the `svix-signature` header before acting on an event.


      See the [Webhooks guide](https://docs.nxos.io/core-concepts/webhooks) for
      the

      delivery format, signature verification, retries, and broker behavior.
      Payload

      shapes are documented in the `…Event` models below.
paths:
  /v1/fees/crypto-payout:
    get:
      tags:
        - Fees
      description: >-
        Fee schedule for a crypto payout on a given chain and asset. Use at

        quote/display time; echo the returned `fixed` + `bps` on the payout
        submit

        as `expectedFeeSchedule` to guard against config drift.
      operationId: Fees_cryptoPayout
      parameters:
        - $ref: '#/components/parameters/ApiKeyAuth'
        - name: chainName
          in: query
          required: true
          description: >-
            Chain to price the payout on. Must exactly match the `chainName`
            you'll

            send on the payout submit — quoting one chain and paying on another

            returns the wrong schedule. See `ChainName` for the full list of

            accepted values (mainnets + sandbox testnets).
          schema:
            $ref: '#/components/schemas/ChainName'
          explode: false
        - name: asset
          in: query
          required: true
          description: Asset code being sent (e.g. `USDC`, `USDT`).
          schema:
            type: string
          explode: false
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FeeSchedule'
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error400'
        '401':
          description: Access is unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error401'
        '429':
          description: Client error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error429'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error500'
components:
  parameters:
    ApiKeyAuth:
      name: Authorization
      in: header
      required: true
      description: 'Bearer token. Format: `Bearer <api_key>`'
      schema:
        type: string
  schemas:
    ChainName:
      type: string
      enum:
        - ETHEREUM_MAINNET
        - ARBITRUM_ONE
        - BASE_MAINNET
        - BSC_MAINNET
        - SOLANA_MAINNET
        - TRON_MAINNET
        - ETHEREUM_SEPOLIA
        - ARBITRUM_SEPOLIA
        - BASE_SEPOLIA
        - BSC_TESTNET
        - SOLANA_DEVNET
        - TRON_NILE
      description: >-
        Blockchain network identifier.


        **Production** (use these on the live API):

        `ETHEREUM_MAINNET`, `ARBITRUM_ONE`, `BASE_MAINNET`, `BSC_MAINNET`,

        `SOLANA_MAINNET`, `TRON_MAINNET`.


        **Sandbox** (testnets — use these only in the sandbox environment):

        `ETHEREUM_SEPOLIA`, `ARBITRUM_SEPOLIA`, `BASE_SEPOLIA`, `BSC_TESTNET`,

        `SOLANA_DEVNET`, `TRON_NILE`.


        The chain you quote here must exactly match the `chainName` you send
        when

        submitting the payout (`POST /v1/transactions/crypto-payouts`) — a
        mismatch

        is the most common cause of an unexpected fee or a
        `404`/`invalid_request`.
    FeeSchedule:
      type: object
      required:
        - fixed
        - bps
        - asset
      properties:
        fixed:
          allOf:
            - $ref: '#/components/schemas/amount'
          description: >-
            Flat component charged regardless of the principal. Zero when the
            schedule has no fixed component.
        bps:
          type: integer
          format: int32
          description: >-
            Rate applied to the principal, in basis points (1 bp = 0.01%, so 50
            bps = 0.5%). Zero when the schedule has no rate component.
        asset:
          type: string
          description: >-
            Asset code the schedule is denominated in. Fees are always charged
            in the same asset as the principal — no FX.
      description: >-
        Fee schedule for a given transaction type + asset (+ method or chain).

        Describes the pricing rule without running a calculation — clients apply
        it

        to their own `amount` to display a running total:

          fee = fixed + round(amount × bps / 10_000)

        where `bps` are integer basis points (1 bp = 0.01%) and rounding is
        half-up

        at the asset's subunit precision. Clients displaying the fee before the

        user commits can calculate locally; the server re-validates at submit
        time

        (via the payout request's `expectedFeeSchedule`), so a stale local rate

        can't result in a wrong charge — it just fails the submit with a

        drift error, prompting the client to refresh.


        Missing fees (a currency or chain not explicitly priced) return zeros

        across the board — adding a new asset without a configured fee rule
        means

        it's free.
      example:
        fixed: '50.00'
        bps: 0
        asset: USD
    Error400:
      type: object
      required:
        - error
      properties:
        error:
          $ref: '#/components/schemas/ErrorBody'
      description: Standard error response returned by all endpoints on failure.
      example:
        error:
          code: invalid_request
          message: The request body is malformed or missing required fields.
          requestId: req_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4
    Error401:
      type: object
      required:
        - error
      properties:
        error:
          $ref: '#/components/schemas/ErrorBody'
      description: Standard error response returned by all endpoints on failure.
      example:
        error:
          code: missing_api_key
          message: No Authorization header provided.
          requestId: req_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4
    Error429:
      type: object
      required:
        - error
      properties:
        error:
          $ref: '#/components/schemas/ErrorBody'
      description: Standard error response returned by all endpoints on failure.
      example:
        error:
          code: rate_limited
          message: 'Rate limit exceeded: 1000 requests per minute. Retry in 23 seconds.'
          requestId: req_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4
    Error500:
      type: object
      required:
        - error
      properties:
        error:
          $ref: '#/components/schemas/ErrorBody'
      description: Standard error response returned by all endpoints on failure.
      example:
        error:
          code: internal_error
          message: An unexpected server error occurred.
          requestId: req_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4
    amount:
      type: string
      description: >-
        Monetary amount as a decimal string in major units (e.g., `"10.50"` for
        ten dollars

        and fifty cents). Amounts are always returned at the asset's native
        precision — for

        example, USDT amounts have 6 decimal places (`"10.500000"`).


        Clients should parse amounts as arbitrary-precision decimals, never as
        floating-point

        numbers, to avoid rounding errors. Internally, the platform stores all
        amounts as

        integer subunits and converts at the API boundary.
    ErrorBody:
      type: object
      required:
        - code
        - message
        - requestId
      properties:
        code:
          allOf:
            - $ref: '#/components/schemas/ErrorCode'
          description: Machine-readable error code.
        message:
          type: string
          description: Human-readable error message.
        requestId:
          type: string
          description: Unique identifier for this request, useful for debugging.
    ErrorCode:
      type: string
      enum:
        - missing_api_key
        - authentication_failed
        - invalid_api_key
        - forbidden
        - swap_direction_not_allowed
        - service_not_enabled
        - not_found
        - organization_not_found
        - account_not_found
        - quote_not_found
        - beneficiary_not_found
        - transaction_not_found
        - funding_method_not_found
        - authorization_not_found
        - nxosnet_handle_not_found
        - quote_expired
        - quote_already_used
        - beneficiary_already_archived
        - beneficiary_not_archived
        - beneficiary_blocked
        - nxosnet_not_enabled
        - nxosnet_handle_taken
        - chain_send_failed
        - idempotency_key_in_use
        - idempotency_request_in_flight
        - invalid_request
        - insufficient_funds
        - validation_error
        - share_token_invalid
        - verification_import_unsupported
        - verification_required
        - rate_limited
        - webhooks_unavailable
        - internal_error
      description: All possible error codes returned by the API.

````