---
title: "Get executable quote"
method: POST
path: "/v1/swap/quote"
tags: ["Swaps"]
---

# Get executable quote

`POST /v1/swap/quote`

Get an executable quote for a swap, including transaction data. Requires a specific swapper name.

## Headers

- `X-Partner-Code` string

## Request body

- object
  - `sellAssetId` string, required
  - `buyAssetId` string, required
  - `sellAmountCryptoBaseUnit` string — Exact amount of the sell asset to send, in base units. Required unless buyAmountCryptoBaseUnit is given.
  - `buyAmountCryptoBaseUnit` string — Exact amount of the buy asset to receive, in base units. The sell amount you must send is derived from it and returned on the quote. Mutually exclusive with sellAmountCryptoBaseUnit, and rejected for swappers that cannot quote an exact output.
  - `receiveAddress` string, required
  - `sendAddress` string, required
  - `swapperName` string, required
  - `slippageTolerancePercentageDecimal` string
  - `accountNumber` number, nullable
  - `xpub` string

## Response `200`

Swap quote

- QuoteResponse
  - `quoteId` string, uuid, required
  - `swapperName` string, required
  - `rate` string, required
  - `sellAsset` Asset, required
    - `assetId` string, required
    - `chainId` string, required
    - `name` string, required
    - `symbol` string, required
    - `precision` number, required
    - `color` string, required
    - `icon` string, required
    - `networkName` string
    - `networkColor` string
    - `networkIcon` string
    - `explorer` string, required
    - `explorerAddressLink` string, required
    - `explorerTxLink` string, required
    - `relatedAssetKey` string, nullable, required
  - `buyAsset` Asset, required
    - `assetId` string, required
    - `chainId` string, required
    - `name` string, required
    - `symbol` string, required
    - `precision` number, required
    - `color` string, required
    - `icon` string, required
    - `networkName` string
    - `networkColor` string
    - `networkIcon` string
    - `explorer` string, required
    - `explorerAddressLink` string, required
    - `explorerTxLink` string, required
    - `relatedAssetKey` string, nullable, required
  - `sellAmountCryptoBaseUnit` string, required
  - `buyAmountBeforeFeesCryptoBaseUnit` string, required
  - `buyAmountAfterFeesCryptoBaseUnit` string, required
  - `affiliateBps` string, required — Total on-chain fee in bps.
  - `partnerBps` string — Partner share in bps.
  - `shapeshiftBps` string, required — ShapeShift platform fee in bps.
  - `slippageTolerancePercentageDecimal` string
  - `networkFeeCryptoBaseUnit` string
  - `approval` object, required
    - `isRequired` boolean, required
    - `spender` string, required
    - `approvalTxs` object[], required — Ready-to-sign approval transactions in broadcast order, empty when the current allowance already covers the amount. Approvals are exact - sized to the step's sellAmountCryptoBaseUnit and consumed by the swap's execution. Usually a single approve; tokens that require resetting a non-zero allowance before changing it (e.g. USDT) get a preceding approve(spender, 0). Sign and broadcast sequentially, waiting for each to confirm. Clients preferring an unlimited approval can build their own approve to `spender` instead.
      - `to` string, required
      - `data` string, required
      - `value` string, required
  - `steps` QuoteStep[], required
    - `sellAsset` Asset, required
      - `assetId` string, required
      - `chainId` string, required
      - `name` string, required
      - `symbol` string, required
      - `precision` number, required
      - `color` string, required
      - `icon` string, required
      - `networkName` string
      - `networkColor` string
      - `networkIcon` string
      - `explorer` string, required
      - `explorerAddressLink` string, required
      - `explorerTxLink` string, required
      - `relatedAssetKey` string, nullable, required
    - `buyAsset` Asset, required
      - `assetId` string, required
      - `chainId` string, required
      - `name` string, required
      - `symbol` string, required
      - `precision` number, required
      - `color` string, required
      - `icon` string, required
      - `networkName` string
      - `networkColor` string
      - `networkIcon` string
      - `explorer` string, required
      - `explorerAddressLink` string, required
      - `explorerTxLink` string, required
      - `relatedAssetKey` string, nullable, required
    - `sellAmountCryptoBaseUnit` string, required
    - `buyAmountAfterFeesCryptoBaseUnit` string, required
    - `allowanceContract` string, required
    - `estimatedExecutionTimeMs` number
    - `source` string, required
    - `transactionData` union
      - object
        - `type` 'evm', required
        - `chainId` number, required
        - `to` string, required
        - `data` string, required
        - `value` string, required
        - `gasLimit` string
        - `signatureRequired` object — When present, the transaction requires a permit2 signature before broadcast: sign the eip712 payload with eth_signTypedData_v4, then append a 32-byte big-endian signature-length word followed by the signature to `data` (the 0x settler convention). The supplied gasLimit already accounts for the appended signature.
          - `type` 'zrx_permit2', required
          - `eip712` object, required
      - object
        - `type` 'solana_instructions', required
        - `instructions` object[], required
          - `programId` string, required
          - `keys` object[], required
            - `pubkey` string, required
            - `isSigner` boolean, required
            - `isWritable` boolean, required
          - `data` string, required
        - `addressLookupTableAddresses` string[], required
      - object
        - `type` 'solana_serialized_tx', required
        - `serializedTx` string, required
      - object
        - `type` 'utxo', required
        - `to` string, required
        - `opReturnData` string
        - `value` string, required
      - object
        - `type` 'cosmossdk_msg_send', required
        - `chainId` string, required
        - `to` string, required
        - `denom` string, required
        - `value` string, required
        - `memo` string
      - object
        - `type` 'cosmossdk_msg_deposit', required
        - `chainId` string, required
        - `value` string, required
        - `memo` string, required
        - `coin` string, required
  - `expiresAt` number, required — Epoch ms after which the quote must not be executed - the swapper's own deadline (inbound address rotation, deposit channel expiry, order validity). Broadcasting after it risks failed swaps or, for deposit-style swappers, lost funds. Request a fresh quote instead.

## Other responses

- `400` — Invalid request or unavailable swapper
- `404` — No quote available
- `429` — Rate limit exceeded. Includes Retry-After header with seconds until reset.
- `500` — Internal server error
- `502` — Swapper returned an expired or implausible quote deadline

---

[API](https://skmtc.net/shapeshift/apis/shapeshift-public-api.md) · [All operations](https://skmtc.net/shapeshift/apis/shapeshift-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/shapeshift/shapeshift-public-api/revisions/6ffb6a8fd74a/schema)
