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

# Get quotes

> Returns every available route for a token pair and amount — private, standard and DEX. Narrow the set with `types`.

`from` and `to` are token ids; look them up with [Get tokens](/api-reference/private-and-standard-swaps/get-tokens).

For a private same-token send you can use [Get private send quote](/api-reference/private-send/get-private-send-quote), or stay on this endpoint with the same token on `from` and `to` and `types=private` — see the [Private send](/developer-hub/swap-flows/send) guide.



## OpenAPI

````yaml https://api-partner.houdiniswap.com/v2/openapi.json get /quotes
openapi: 3.0.0
info:
  title: Houdini Swap Partner API
  version: 2.1.2
  description: >-
    Quote and execute private, standard, and DEX swaps — one at a time or
    batched.
  license:
    name: ISC
  contact: {}
servers:
  - url: https://api-partner.houdiniswap.com/v2
security: []
tags:
  - name: Private and Standard Swaps
    description: >-
      CEX swaps in two modes, sharing the same endpoints — pick one with the
      `types` parameter.


      - `types=standard` — direct single-leg swap. Fastest, no privacy hop.

      - `types=private` — two legs through a privacy bridge, so deposit and
      payout are not linkable on-chain. Adds `anonymous`, `useXmr`,
      `rotatePayoutWallets` and the `inLeg*` / `outLeg*` filters.


      Flow: [Get tokens](/api-reference/private-and-standard-swaps/get-tokens)
      with `hasCex=true` → [Get
      quotes](/api-reference/private-and-standard-swaps/get-quotes) → [Create
      exchange](/api-reference/private-and-standard-swaps/create-exchange) →
      [track the
      order](/api-reference/private-and-standard-swaps/get-order-details).
      `markup` works in both modes.
  - name: Private Send
    description: >-
      Send a token to another wallet privately — same token in and out, with no
      on-chain link between the two addresses.


      - find eligible tokens with [Get
      tokens](/api-reference/private-send/get-tokens) and `hasSelfPrivate=true`

      - quote with Get private send quote, then create with Create private send
      order

      - you can also stay on the main endpoints with a private same-token
      `quoteId`


      See the [Private send](/docs/v2/private-send) guide.
  - name: Multi-Exchange
    description: >-
      Create and track a group of swaps sharing one `multiId`.


      - post the orders straight to Create multi exchange — there is no quote
      step and no `quoteId`

      - Get multi quotes is optional, for showing rates first

      - each order gets its own deposit address; poll [Get batch
      status](/api-reference/multi-exchange/get-batch-status) for every leg

      - CEX standard and private only — no DEX in a batch


      To fund the whole group in one transaction, see Bundler SOL or Bundler
      EVM. See the [multi-swap
      flow](https://docs.houdiniswap.com/developer-hub/swap-flows/multi-swap)
      for the full sequence.
  - name: Bundler SOL
    description: >-
      Fund a whole multi-exchange group with one Solana batch transfer.


      - one call — Get batch transaction returns the transaction to sign and
      broadcast

      - up to 10 deposits per batch; every order must send the same token

      - find batchable tokens with [Get
      tokens](/api-reference/multi-exchange/get-tokens) and `hasBundler=true`

      - nothing to submit back afterwards — retry and recovery are EVM-only


      See the [multi-swap
      flow](https://docs.houdiniswap.com/developer-hub/swap-flows/multi-swap)
      for the full sequence.
  - name: Bundler EVM
    description: >-
      Fund a whole multi-exchange group with one ERC-4337 UserOperation,
      submitted through the bundler.


      - Ethereum, Base and BNB Smart Chain only; other EVM chains are rejected

      - up to 20 legs per batch; every order must send the same source token

      - find batchable tokens with [Get
      tokens](/api-reference/multi-exchange/get-tokens) and `hasBundler=true`

      - build the UserOp, then submit the signed result

      - if a bundle fails: retry within 30 minutes, or recover stuck assets


      See the [multi-swap
      flow](https://docs.houdiniswap.com/developer-hub/swap-flows/multi-swap)
      for the full sequence.
  - name: On-chain DEX or Bridge
    description: >-
      On-chain swaps signed and funded from the user's own wallet.


      Flow: [Get tokens](/api-reference/on-chain-dex-or-bridge/get-tokens) with
      `hasDex=true` → [Get
      quotes](/api-reference/on-chain-dex-or-bridge/get-quotes) with `types=dex`
      → [Get token approval
      data](/api-reference/on-chain-dex-or-bridge/get-token-approval-data) →
      send it and poll [Check token
      allowance](/api-reference/on-chain-dex-or-bridge/check-token-allowance) →
      [Get next chain
      signature](/api-reference/on-chain-dex-or-bridge/get-next-chain-signature)
      → [Create exchange](/api-reference/on-chain-dex-or-bridge/create-exchange)
      → [Confirm DEX
      transaction](/api-reference/on-chain-dex-or-bridge/confirm-dex-transaction)
      → [track the
      order](/api-reference/on-chain-dex-or-bridge/get-order-details).


      - `slippage` applies to DEX only

      - `markup` is not supported
  - name: Reference Data
    description: >-
      Optional lookups: supported chains, liquidity providers, and per-pair
      min/max swap amounts. Responses are cached and change rarely — safe to
      fetch once and reuse. Token ids come from `/tokens`, listed in each swap
      section above.
  - name: Partner Account
    description: >-
      Your orders, profile, earned commissions, withdrawals, volume analytics,
      and the rate-limit budget attached to your API key. Every endpoint is
      scoped to the partner that owns the key making the request.
  - name: System
    description: >-
      Service health. [Get system
      health](/api-reference/system/get-system-health) is unauthenticated and
      exempt from x402 payment — use it for uptime monitoring.
paths:
  /quotes:
    get:
      tags:
        - Private and Standard Swaps
        - On-chain DEX or Bridge
      summary: Get quotes
      description: >-
        Returns every available route for a token pair and amount — private,
        standard and DEX. Narrow the set with `types`.


        `from` and `to` are token ids; look them up with [Get
        tokens](/api-reference/private-and-standard-swaps/get-tokens).


        For a private same-token send you can use [Get private send
        quote](/api-reference/private-send/get-private-send-quote), or stay on
        this endpoint with the same token on `from` and `to` and `types=private`
        — see the [Private send](/developer-hub/swap-flows/send) guide.
      operationId: GetQuotes
      parameters:
        - description: >-
            Amount of the `from` token to swap, e.g. `1.5` BTC or `250.75` USDT
            — not base units / wei like `100000000000000`.
          in: query
          name: amount
          required: true
          schema:
            format: double
            type: number
            minimum: 0
            maximum: 1.7976931348623157e+308
          example: 1
        - description: >-
            Token you are swapping from. Use an `id` from [Get
            tokens](/api-reference/private-and-standard-swaps/get-tokens) — a
            24-character hex id such as `6689b73ec90e45f3b3e51566`, not a symbol
            like `ETH`.
          in: query
          name: from
          required: true
          schema:
            type: string
          example: 6689b73ec90e45f3b3e51566
        - description: >-
            Token you are swapping to. Use an `id` from [Get
            tokens](/api-reference/private-and-standard-swaps/get-tokens) — a
            24-character hex id such as `6689b73ec90e45f3b3e51558`, not a symbol
            like `SOL`.
          in: query
          name: to
          required: true
          schema:
            type: string
          example: 6689b73ec90e45f3b3e51558
        - description: >-
            Markup for this request, as a percentage — `0.5` means 0.5%.


            - range 0–4; overrides your account default for this trade

            - send `0` for no markup, or omit the field to use your account
            default

            - providers that cannot apply it are excluded from the results

            - not supported on DEX routes. Leave `types` unset and DEX quotes
            are simply left out; ask for `types=dex` together with a markup and
            the request is rejected
          in: query
          name: markup
          required: false
          schema:
            format: double
            type: number
            minimum: 0
            maximum: 4
        - description: >-
            Use Monero (XMR) as the bridge token on a private swap.


            A private route hops through an intermediary token so the deposit
            and the payout are not linkable on-chain. `true` pins that hop to
            XMR; leave it unset and the hop is picked from a rotating set of
            other tokens. Ignored by standard and DEX quotes, which are
            single-leg.
          in: query
          name: useXmr
          required: false
          schema:
            type: boolean
          example: false
        - description: >-
            Request a fixed-rate quote. Only partners that support fixed rate
            will be returned. Available for standard and private CEX quotes; not
            supported for DEX.
          in: query
          name: fixed
          required: false
          schema:
            type: boolean
          example: false
        - description: >-
            Where funds are returned if a swap cannot complete. Optional here —
            quotes are never filtered by it.


            - **use a wallet the user controls, not an exchange deposit
            address**

            - must be on the source chain — the refund comes back as the token
            you deposited

            - a route that will need one comes back with `requiresRefundAddress:
            true`

            - supply it at [Create
            exchange](/api-reference/private-and-standard-swaps/create-exchange),
            where it is required for fixed-rate quotes and for those routes
          in: query
          name: refundAddress
          required: false
          schema:
            type: string
            maxLength: 200
          example: 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
        - description: >-
            Maximum price deviation percentage when rotating wallets. Only used
            if rotatePayoutWallets is true. Default 5
          in: query
          name: deviationThreshold
          required: false
          schema:
            format: double
            type: number
            minimum: 0
            maximum: 100
          example: 5
        - description: >-
            Number of recent orders to check for path rotation. Only used if
            rotatePayoutWallets is true. Default 10
          in: query
          name: rotationLookback
          required: false
          schema:
            format: int32
            type: integer
            minimum: 1
            maximum: 100
          example: 10
        - description: >-
            Rotate the payout path for better privacy. Only used for private
            swaps (`types=private`) — standard and DEX are single-leg and ignore
            it.
          in: query
          name: rotatePayoutWallets
          required: false
          schema:
            type: boolean
          example: false
        - description: >-
            When strict rotation exhausts every rotated route, fall back to a
            valid non-rotated route instead of failing. Default false. Requires
            rotatePayoutWallets — a no-op on its own.
          in: query
          name: rotateFallback
          required: false
          schema:
            type: boolean
          example: false
        - description: >-
            Only use these providers for the in-leg of a private (2-hop) route.
            Ignored by standard and DEX quotes, which are single-hop.
          in: query
          name: inLegIncludedSwaps
          required: false
          schema:
            type: array
            items:
              type: string
        - description: >-
            Never use these providers for the in-leg of a private (2-hop) route.
            Does not affect the out-leg. Ignored by standard and DEX quotes.
          in: query
          name: inLegExcludedSwaps
          required: false
          schema:
            type: array
            items:
              type: string
        - description: >-
            Only use these providers for the out-leg of a private (2-hop) route.
            Ignored by standard and DEX quotes, which are single-hop.
          in: query
          name: outLegIncludedSwaps
          required: false
          schema:
            type: array
            items:
              type: string
        - description: >-
            Never use these providers for the out-leg of a private (2-hop)
            route. Does not affect the in-leg. Ignored by standard and DEX
            quotes.
          in: query
          name: outLegExcludedSwaps
          required: false
          schema:
            type: array
            items:
              type: string
        - description: Slippage percentage. Only used for DEX swaps.
          in: query
          name: slippage
          required: false
          schema:
            format: double
            type: number
            minimum: 0
            maximum: 100
          example: 1
        - description: Types of quotes to return; if omitted, all types are used
          in: query
          name: types
          required: false
          schema:
            type: array
            items:
              $ref: '#/components/schemas/QuoteType'
        - description: >-
            Only quote these providers. Omit to use all of them.


            - values are `shortName` from [Get swap
            providers](/api-reference/reference-data/get-swap-providers)

            - applies to every quote type — private, standard and DEX
          in: query
          name: swaps
          required: false
          schema:
            type: array
            items:
              $ref: '#/components/schemas/ExchangeType'
        - description: >-
            Wallet that funds the swap, on the source chain. Used by DEX quotes
            only — private and standard swaps ignore it.
          in: query
          name: senderAddress
          required: false
          schema:
            type: string
          example: '0xb7dE6b6eEBF7401aFea5a49D6405C9048fEf2d40'
        - description: >-
            Wallet that receives the payout.


            - when it differs from `senderAddress`, DEX routes that cannot pay
            out to a different wallet are returned with `filtered: true` and
            `filteredReason: different_recipient` — still listed, but not usable

            - also used for payout wallet rotation
          in: query
          name: receiverAddress
          required: false
          schema:
            type: string
          example: 8jZnXYnZB1MJQG6zBXyouzcycsaPTrZtPXPHDNifjYaC
        - description: 'Sort the quotes by the given field (default: amountOut)'
          in: query
          name: sort
          required: false
          schema:
            $ref: '#/components/schemas/QuoteSort'
        - description: 'Sort direction for quotes (default: desc)'
          in: query
          name: sortOrder
          required: false
          schema:
            $ref: '#/components/schemas/SortDirection'
        - description: >-
            Whether `amount` refers to the send side or the receive side.

            - `"send"` (default): amount is what the user sends — system
            computes what they receive.

            - `"receive"`: amount is what the user wants to receive — system
            computes what they must send. Requires `fixed=true`. Available for
            standard and private CEX quotes; DEX quotes are dropped from the
            result, and a DEX-only request is rejected.
          in: query
          name: amountType
          required: false
          schema:
            type: string
            enum:
              - send
              - receive
          example: send
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuoteResultV2'
              examples:
                Example 1:
                  value:
                    total: 3
                    quotes:
                      - amountIn: 1
                        amountOut: 24.308952
                        min: 0.041681
                        max: 1617.53705385
                        duration: 4
                        amountOutUsd: 2366.7195667200003
                        quoteId: 6aaa4273aa41ccf7cad03086
                        type: private
                        rewardsAvailable: true
                        fixed: false
                      - amountIn: 1
                        amountOut: 24.50601963
                        min: 0.01250098966168155
                        max: 9007199254740991
                        duration: 21
                        amountOutUsd: 2385.9060711768
                        swap: se
                        swapName: StealthEx
                        logoUrl: https://api.houdiniswap.com/assets/logos/stealthex.png
                        quoteId: 6aaa4272aa41ccf7cad03035
                        type: standard
                        rewardsAvailable: false
                        rateId: null
                      - swap: cf
                        quoteId: 6aaa4272aa41ccf7cad0303c
                        duration: 2.71
                        gas: 0
                        amountIn: 1
                        amountOut: 24.690801441
                        amountOutUsd: 2402.4149802093
                        netAmountOut: 24.690801441
                        swapName: ChainFlip
                        type: dex
                        logoUrl: https://api.houdiniswap.com/assets/logos/chainflip.png
                        markupSupported: true
                        apiMarkupValue: 10
                        markupType: bp
                        restrictedCountries: []
                        rewardsAvailable: false
                        min: 0
                        max: 9007199254740991
                        requiresApproval: false
                        depositAddressSupported: true
        '401':
          description: >-
            Credentials missing, malformed, or rejected — all return
            `INVALID_API_CREDENTIALS`. Sending only `partner-id` returns
            `PARTNER_ID_NOT_SUPPORTED`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '402':
          description: >-
            Payment required — x402 protocol. The body is empty; what to pay is
            in the `payment-required` header. Not returned when you send an
            `Authorization` header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/X402PaymentRequired'
          headers:
            payment-required:
              schema:
                type: string
              required: true
        '404':
          description: Token not found or disabled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Validation Failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
        '429':
          description: Rate limit exceeded — back off and retry
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - apiKey: []
components:
  schemas:
    QuoteType:
      enum:
        - private
        - standard
        - dex
      type: string
    ExchangeType:
      type: string
      enum:
        - ch
        - cl
        - cn
        - ff
        - le
        - se
        - ss
        - sx
        - sxby
        - sxhu
        - sxku
        - sxmx
        - sz
        - sp
        - eb
        - nx
        - cc
        - qx
        - sg
        - tc
        - hu
        - nic
        - dl
        - ad
        - wh
        - cf
        - un
        - jp
        - mn
        - rd
        - ps
        - cs
        - kd
        - ct
        - zx
        - wc
        - su
        - tt
        - ni
        - sd
        - bg
        - ab
        - pt
        - ax
        - rl
    QuoteSort:
      enum:
        - amountOut
        - amountOutUsd
        - amountIn
        - duration
      type: string
    SortDirection:
      enum:
        - asc
        - desc
      type: string
    QuoteResultV2:
      properties:
        quotes:
          items:
            $ref: '#/components/schemas/QuoteV2'
          type: array
        total:
          type: number
          format: double
      required:
        - quotes
        - total
      type: object
      additionalProperties: false
    ErrorResponse:
      properties:
        message:
          type: string
        code:
          type: string
          description: >-
            Machine-readable reason for the failure. Branch on this, not on
            `message` — messages are free to change.


            The value depends on the HTTP status. The common ones:


            - `400` — `BAD_REQUEST`

            - `401` — `INVALID_API_CREDENTIALS`, `PARTNER_ID_NOT_SUPPORTED`

            - `403` — `ACCESS_DENIED`, `FIXED_RATE_NOT_ALLOWED`

            - `404` — `NOT_FOUND`, `TOKEN_NOT_FOUND`, `TOKEN_DISABLED`

            - `409` — `ALREADY_SUBMITTED`, `STATIC_DEPOSIT_IN_USE`

            - `422` — `VALIDATION_ERROR`, `AMOUNT_TOO_LOW`, `INVALID_SWAP`,
            `FIXED_RATE_QUOTE_EXPIRED`, and most other request problems

            - `429` — `RATE_LIMIT_EXCEEDED`

            - `5xx` — `INTERNAL_SERVER_ERROR`, `PROVIDER_EXCHANGE_FAILED`,
            `SERVICE_UNAVAILABLE`


            New codes are added over time, so treat this as an open set: match
            the ones you handle and fall back to the HTTP status for the rest.
        requestId:
          type: string
          description: >-
            Unique id for this request. Quote it when contacting support — it is
            how we find the failure in our logs.
      required:
        - message
        - code
      type: object
      additionalProperties: false
    X402PaymentRequired:
      description: >-
        Body of a `402 Payment required`. Empty — `{}` — for API clients; a
        request that looks like a browser gets an HTML paywall page instead.


        This is the x402 payment protocol, not the normal error format, so there
        is no `code` or `message` to branch on. What to pay is always in the
        `payment-required` response header, in both cases: base64-encoded JSON
        whose `accepts[]` entries each carry the `network`, the `asset` to pay
        in, the `amount`, and the `payTo` address, alongside `maxTimeoutSeconds`
        and the x402 `scheme`.


        Sending `Authorization` skips the payment flow, so a 402 only reaches
        callers paying per request. An `apiKey` query param also skips it but is
        not a credential — those requests fail with `401
        INVALID_API_CREDENTIALS`.
      properties: {}
      type: object
      additionalProperties: false
    ValidationError:
      properties:
        message:
          type: string
        code:
          type: string
          description: >-
            Machine-readable reason for the failure. Branch on this, not on
            `message` — messages are free to change.


            The value depends on the HTTP status. The common ones:


            - `400` — `BAD_REQUEST`

            - `401` — `INVALID_API_CREDENTIALS`, `PARTNER_ID_NOT_SUPPORTED`

            - `403` — `ACCESS_DENIED`, `FIXED_RATE_NOT_ALLOWED`

            - `404` — `NOT_FOUND`, `TOKEN_NOT_FOUND`, `TOKEN_DISABLED`

            - `409` — `ALREADY_SUBMITTED`, `STATIC_DEPOSIT_IN_USE`

            - `422` — `VALIDATION_ERROR`, `AMOUNT_TOO_LOW`, `INVALID_SWAP`,
            `FIXED_RATE_QUOTE_EXPIRED`, and most other request problems

            - `429` — `RATE_LIMIT_EXCEEDED`

            - `5xx` — `INTERNAL_SERVER_ERROR`, `PROVIDER_EXCHANGE_FAILED`,
            `SERVICE_UNAVAILABLE`


            New codes are added over time, so treat this as an open set: match
            the ones you handle and fall back to the HTTP status for the rest.
        requestId:
          type: string
          description: >-
            Unique id for this request. Quote it when contacting support — it is
            how we find the failure in our logs.
        fields:
          $ref: '#/components/schemas/FieldErrors'
      required:
        - message
        - code
        - fields
      type: object
      additionalProperties: false
    QuoteV2:
      properties:
        swap:
          type: string
          description: >-
            Provider short code, e.g. `se`. Matches `shortName` from [Get swap
            providers](/api-reference/reference-data/get-swap-providers).


            Absent on private quotes — the providers behind a private route are
            not disclosed.
        quoteId:
          type: string
          description: >-
            Pass this to [Create
            exchange](/api-reference/private-and-standard-swaps/create-exchange)
            to execute the quote.
        duration:
          type: number
          format: double
          description: Our estimate of how long the swap takes, in minutes.
        providerEta:
          type: number
          format: double
          description: >-
            The provider's own stated ETA, in minutes. May differ from
            `duration`.
        gas:
          type: number
          format: double
          description: >-
            Estimated gas cost, in the source chain's native gas units. DEX
            routes only.
        gasUsd:
          type: number
          format: double
          description: Estimated gas cost in USD. DEX routes only.
        amountIn:
          type: number
          format: double
          description: Amount you send, e.g. `0.25` BTC.
        amountOut:
          type: number
          format: double
          description: Amount you receive, e.g. `3.52` ETH.
        amountOutUsd:
          type: number
          format: double
          description: '`amountOut` valued in USD.'
        amountInUsd:
          type: number
          format: double
          description: '`amountIn` valued in USD. Present on exact-out quotes only.'
        feeUsd:
          type: number
          format: double
          description: >-
            Provider fee in USD, charged on the source chain in its native
            token. Does not include gas.
        bridgeFeeUsd:
          type: number
          format: double
          description: Bridge fee in USD, when the route crosses chains.
        netAmountOut:
          type: number
          format: double
          description: >-
            The field to compare routes on: `amountOut` minus `feeUsd`, in the
            output token — not USD.


            - equals `amountOut` on CEX quotes, which carry no `feeUsd`

            - gas is not deducted

            - falls back to `amountOut` when the output token has no USD price
        error:
          type: string
          description: >-
            Why this route could not be priced. When set, the amounts are not
            usable.
        swapName:
          type: string
          description: |-
            Provider display name, e.g. `StealthEx`.

            Absent on private quotes, for the same reason as `swap`.
        type:
          $ref: '#/components/schemas/QuoteType'
          description: 'Which route this is: `private`, `standard`, or `dex`.'
        filtered:
          type: boolean
          description: >-
            True when the route was returned but should not be used — check
            `filteredReason`. Creating an exchange from a filtered route is
            rejected.
          default: false
        filteredReason:
          $ref: '#/components/schemas/FilteredReason'
          description: >-
            Why the route was filtered: unacceptable price impact, or the payout
            wallet differs from the sender.
        supportsSignatures:
          type: boolean
          description: >-
            True when the route accepts EIP-712 permit signatures instead of a
            separate approval transaction.
        logoUrl:
          type: string
          description: Provider logo.
        markupSupported:
          type: boolean
          description: >-
            True when the route can apply partner markup. Routes that cannot are
            excluded when you send `markup`.
        slippageSupported:
          type: boolean
          description: True when the route honours the `slippage` parameter.
        apiMarkupValue:
          type: number
          format: double
          description: Markup the route was priced with, in the unit given by `markupType`.
        markupType:
          type: string
          enum:
            - absolute
            - percentage
            - bp
          description: >-
            How to read `apiMarkupValue`: `percentage`, `absolute`, or `bp`
            (basis points).
        restrictedCountries:
          items:
            type: string
          type: array
          description: ISO country codes where this route may not be offered.
        rewardsAvailable:
          type: boolean
          description: True when the swap earns rewards.
        min:
          type: number
          format: double
          description: Smallest amount this route accepts, e.g. `0.001` BTC.
        max:
          type: number
          format: double
          description: Largest amount this route accepts, e.g. `5` BTC.
        minOut:
          type: number
          format: double
          description: >-
            Smallest amount you can receive, e.g. `100` USDT. Present only when
            `amountType` is `receive` and the provider returns receive-side
            bounds.
        maxOut:
          type: number
          format: double
          description: >-
            Largest amount you can receive, e.g. `50000` USDT. Present only when
            `amountType` is `receive` and the provider returns receive-side
            bounds.
        rateId:
          type: string
          description: >-
            Identifies the locked rate on a fixed-rate quote. You do not pass
            this when creating the exchange — `quoteId` carries it.
        fixed:
          type: boolean
          description: True when the rate is locked until `validUntil`.
        validUntil:
          type: string
          description: >-
            When the locked rate expires, as a Unix timestamp in seconds, e.g.
            `"1767225600"`. Fixed-rate quotes only — create the exchange before
            it passes.
        requiresApproval:
          type: boolean
          description: >-
            DEX quotes only. True when the wallet must approve the token before
            swapping — EVM and Tron non-native tokens. Call [Get token approval
            data](/api-reference/on-chain-dex-or-bridge/get-token-approval-data),
            send what it returns, then poll [Check token
            allowance](/api-reference/on-chain-dex-or-bridge/check-token-allowance)
            until it turns true.
        isPriority:
          type: boolean
        depositAddressSupported:
          type: boolean
          description: >-
            DEX quotes only. True when the route can be funded by sending to a
            deposit address, with no connected wallet.
        requiresRefundAddress:
          type: boolean
          description: >-
            True when this provider needs a `refundAddress` to execute. Collect
            one before creating the exchange; without it the swap falls through
            to the next provider.
        appliedApiMarkup:
          type: number
          format: double
          description: >-
            The `markup` you sent, as a percentage (`0.5` = 0.5%), returned back
            so you can check it was used. Absent when your stored account markup
            applied. On a private swap this is the PER-LEG value and is charged
            on both legs.
        refundAddress:
          type: string
          description: >-
            The `refundAddress` you sent, returned back so you can check it was
            used. It sits on the source chain.
        amountType:
          type: string
          enum:
            - send
            - receive
          description: >-
            Whether the amounts are driven by the send side (`send`) or the
            receive side (`receive`).
        requiresIntermediateRefundAddress:
          type: boolean
          description: >-
            True when this route settles through an on-chain hop, which needs a
            second refund address on top of `refundAddress`.


            Collect it from the user and send it as `intermediateRefundAddress`
            at [Create
            exchange](/api-reference/private-and-standard-swaps/create-exchange),
            or the call is rejected. `intermediateRefundChain` and
            `intermediateRefundToken` say which chain it must be on and which
            token it would receive.
        intermediateRefundChain:
          type: string
          description: >-
            Chain the `intermediateRefundAddress` must be on, e.g. `base`,
            `ethereum` or `solana`. Present only on a route that settles through
            an on-chain hop.
        intermediateRefundToken:
          type: string
          description: >-
            Token the intermediate refund arrives in, e.g. `USDC`. The address
            you supply must be able to receive it. Present only on a route that
            settles through an on-chain hop.
      type: object
      additionalProperties: false
    FieldErrors:
      properties: {}
      type: object
      additionalProperties:
        properties:
          value: {}
          message:
            type: string
        required:
          - message
        type: object
    FilteredReason:
      enum:
        - price_impact
        - different_recipient
      type: string
  securitySchemes:
    apiKey:
      type: apiKey
      name: Authorization
      in: header
      description: >-
        Send `Authorization: <ApiKey>:<ApiSecret>` — joined by a colon, raw. No
        `Bearer` prefix, no base64.


        [Get your
        credentials](https://docs.houdiniswap.com/developer-hub/getting-started/authentication)

````

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