RFQ API
Endpoints

Get a Quote

Request executable cross-chain quotes for a source/destination asset pair.

POST /v1/quote

Returns executable cross-chain quotes for transferring value from a source asset to a destination asset. Each quote contains the full economics of the transfer (input, output, fees, estimated time, expiry) and the ordered list of on-chain actions the user must execute.

The response may contain multiple quotes, sorted by API preference. The quote at index 0 is the recommended quote.

Request

{
  "fromChain": "eip155:42161",
  "fromToken": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
  "toChain": "eip155:8453",
  "toToken": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
  "amount": "1000000",
  "orderType": "EXACT_INPUT",
  "sender": "0x...",
  "recipient": "0x...",
  "slippageTolerance": 100
}

Request Fields

FieldTypeRequiredDescription
fromChainstringYesSource chain, CAIP-2 identifier
fromTokenstringYesSource token address on fromChain
toChainstringYesDestination chain, CAIP-2 identifier
toTokenstringYesDestination token address on toChain
amountstringYesAmount in base units. Interpreted according to orderType
orderTypestringYesEXACT_INPUT or EXACT_OUTPUT (see below)
senderstringYesAddress that will execute the actions and provide the input funds
recipientstringYesAddress that receives the output on toChain
slippageTolerancenumberNoMaximum acceptable output slippage, in basis points (e.g. 100 = 1%). See Slippage.

Order Types

EXACT_INPUTamount is the exact source amount the user will send. The API returns the destination amount the user should receive.

EXACT_OUTPUTamount is the exact destination amount the user wants to receive. The API returns the exact source amount the user must deposit (input.amount in each quote).

Slippage

slippageTolerance bounds how far the delivered output may fall below the quoted estimate, in basis points. It is only meaningful for quotes whose output is determined at execution time — for example, a route that swaps into toToken on a destination-chain DEX. For such quotes the API sets output.minimumAmount = output.amount × (1 − slippageTolerance), and the transfer reverts (and refunds) rather than delivering less than output.minimumAmount.

For quotes with a guaranteed output — where the backend commits to the amount — there is no execution-time variance, so slippageTolerance has no effect: output.minimumAmount equals output.amount. The field is always accepted and never an error; it simply does nothing when the route has no output variance to bound.

If omitted, a default tolerance is applied to quotes that require it. To tell whether a given quote's output is firm or subject to slippage, compare output.amount and output.minimumAmount (see Input and Output).

Response

{
  "quotes": [ ... ]
}
FieldTypeDescription
quotesarrayQuote objects, sorted by API preference. Index 0 is the recommended quote. Empty if the route is supported but no pricing is currently available.

Quote Object

FieldTypeDescription
quoteIdstringUnique identifier for this quote. Used for execution tracking and status lookups.
selectionReasonstringWhy this quote is ranked where it is, e.g. highest_output.
backendobjectThe execution route serving this quote (Backend)
estimatedTimeSecondsnumberEstimated end-to-end fulfillment time, in seconds
validityobjectQuote expiry and deadline semantics (Validity)
inputobjectWhat the user deposits (Input and Output)
outputobjectWhat the recipient receives (Input and Output)
feesobjectAggregate fee breakdown (Fees)
actionsarrayOrdered on-chain actions to execute the quote (Actions)

Backend

Identifies the execution route serving the quote, with route-specific tracking fields.

{
  "backend": {
    "type": "intent",
    "name": "Axelar Intents",
    "tracking": {
      "swapId": "0x..."
    },
    "metadata": {}
  }
}
FieldTypeDescription
typestringRoute type: intent, its, gateway, or gateway-express
namestringHuman-readable route name
trackingobjectRoute-specific identifiers for tracking fulfillment (e.g. swapId for intent routes)
metadataobjectAdditional route-specific data

Validity

Quotes expire. The validity object describes when the quote must be acted on.

{
  "validity": {
    "type": "expires_at",
    "quoteExpiresAt": "2026-06-09T12:34:56Z",
    "fulfillmentDeadline": "2026-06-09T12:39:56Z"
  }
}
FieldTypeDescription
typestringValidity scheme. Currently expires_at.
quoteExpiresAtstringThe user must submit the first action before this timestamp. After it, request a fresh quote.
fulfillmentDeadlinestringLatest time the transfer will be fulfilled on the destination chain. Only present when the route provides this guarantee.

Input and Output

For executable quotes, input.amount is always the exact amount the user must deposit — including for EXACT_OUTPUT requests, where it is the computed source amount.

{
  "input": {
    "chain": "eip155:42161",
    "token": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
    "amount": "1000000",
    "amountUsdApprox": "1.00"
  },
  "output": {
    "chain": "eip155:8453",
    "token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "amount": "995000",
    "minimumAmount": "995000",
    "amountUsdApprox": "0.995"
  }
}
FieldTypeDescription
chainstringCAIP-2 chain identifier
tokenstringToken address
amountstringAmount in base units. On input: exact deposit required. On output: expected amount received.
minimumAmountstring(output only) Guaranteed minimum the recipient receives. Always present. See note below.
amountUsdApproxstringApproximate USD value. Informational only; may be omitted.

output.minimumAmount is always populated and is the guaranteed worst-case output — it is the value enforced on-chain as the minimum the recipient will accept. Use it (not output.amount) when wiring an on-chain minimum-received check.

  • Firm output (the backend commits to the amount, or a same-token transfer with no swap): minimumAmount == amount. There is no execution-time variance; the recipient receives amount.
  • Floating output (route includes a swap priced at execution time): minimumAmount < amount. The recipient receives somewhere in [minimumAmount, amount] (and minimumAmount is governed by slippageTolerance). If the route cannot deliver at least minimumAmount, the transfer reverts and the user is refunded rather than receiving less. Which case applies is decided per quote by how the route is fulfilled.

Fees

Fees are reported as quote-level aggregates.

{
  "fees": {
    "gas": {
      "amount": "1200000000000000",
      "amountUsdApprox": "4.20",
      "token": {
        "chain": "eip155:42161",
        "symbol": "ETH",
        "type": "native"
      },
      "paymentMethod": "wallet_native",
      "quoteTreatment": "outside_quote"
    },
    "user": {
      "amount": "2500000",
      "amountUsdApprox": "2.50",
      "token": {
        "chain": "eip155:42161",
        "symbol": "USDC",
        "address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831"
      },
      "paymentMethod": "input_token",
      "quoteTreatment": "included_in_quote"
    },
    "integrator": null
  }
}
FieldTypeDescription
gasobjectEstimated total native gas for all user-executed on-chain actions in the quote. If a quote has an approval and a transfer, this is the aggregate of both.
userobjectFee charged to the user by the execution route
integratorobject | nullIntegrator-configured fee, if any. Includes bps and recipient in addition to the standard fee fields.

Each fee entry contains:

FieldTypeDescription
amountstringFee amount in base units of token
amountUsdApproxstringApproximate USD value. Informational only.
tokenobjectThe fee token: chain, symbol, and either address or type: "native"
paymentMethodstringHow the fee is paid (see below)
quoteTreatmentstringWhether the fee is already reflected in quote amounts (see below)

paymentMethod values

ValueMeaning
wallet_nativeUser pays chain gas from their wallet balance
tx_valueUser sends native value in the executable transaction
input_tokenCharged from or embedded in the input token
output_tokenDeducted from the output token
sponsoredNot paid by the user
offchainTracked or settled outside execution

quoteTreatment values

ValueMeaning
outside_quoteNot included in input/output economics — the user pays this on top
included_in_quoteAlready reflected in the quoted input/output amounts
informationalShown for transparency but not charged by this quote

Actions

The ordered list of on-chain actions the user must execute, in sequence, to start the transfer. Each action is a chain-agnostic envelope (id, label, type, chain) with a chain-specific payload, discriminated by payload.type (e.g. evm_transaction, solana_instructions, deposit_address).

The action envelope and all payload formats are documented in User Actions. See the full example below for a typical approve-and-transfer action sequence.

Errors

Invalid requests return an HTTP error status with a structured error body:

{
  "error": {
    "code": "UNSUPPORTED_ROUTE",
    "message": "No backend supports the requested route.",
    "details": {
      "fromChain": "eip155:1",
      "toChain": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp"
    }
  }
}
HTTP StatusCodeMeaning
400INVALID_REQUESTMalformed body, missing required field, or invalid field value
422UNSUPPORTED_CHAINfromChain or toChain is not supported
422UNSUPPORTED_TOKENfromToken or toToken is not supported on the given chain
422UNSUPPORTED_ROUTEBoth assets are supported but no backend serves this pair
422AMOUNT_OUT_OF_RANGEamount is below the route minimum or above the route maximum
429RATE_LIMITEDToo many requests
500INTERNAL_ERRORUnexpected server error; safe to retry

A supported route with no currently available pricing is not an error. The API returns 200 with "quotes": [] — request a quote again later or try a different amount.

Full Example

Request

curl -X POST 'https://rfq.axelar.network/v1/quote' \
  -H 'Content-Type: application/json' \
  -d '{
    "fromChain": "eip155:42161",
    "fromToken": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
    "toChain": "eip155:8453",
    "toToken": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "amount": "1000000",
    "orderType": "EXACT_INPUT",
    "sender": "0x...",
    "recipient": "0x..."
  }'

Response

{
  "quotes": [
    {
      "quoteId": "quote_123",
      "selectionReason": "highest_output",
      "backend": {
        "type": "intent",
        "name": "Axelar Intents",
        "tracking": {
          "swapId": "0x..."
        },
        "metadata": {}
      },
      "estimatedTimeSeconds": 45,
      "validity": {
        "type": "expires_at",
        "quoteExpiresAt": "2026-06-09T12:34:56Z",
        "fulfillmentDeadline": "2026-06-09T12:39:56Z"
      },
      "input": {
        "chain": "eip155:42161",
        "token": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
        "amount": "1000000",
        "amountUsdApprox": "1.00"
      },
      "output": {
        "chain": "eip155:8453",
        "token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "amount": "995000",
        "minimumAmount": "995000",
        "amountUsdApprox": "0.995"
      },
      "fees": {
        "gas": {
          "amount": "1200000000000000",
          "amountUsdApprox": "4.20",
          "token": {
            "chain": "eip155:42161",
            "symbol": "ETH",
            "type": "native"
          },
          "paymentMethod": "wallet_native",
          "quoteTreatment": "outside_quote"
        },
        "user": {
          "amount": "2500000",
          "amountUsdApprox": "2.50",
          "token": {
            "chain": "eip155:42161",
            "symbol": "USDC",
            "address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831"
          },
          "paymentMethod": "input_token",
          "quoteTreatment": "included_in_quote"
        },
        "integrator": null
      },
      "actions": [
        {
          "id": "approve",
          "label": "Approve token",
          "type": "approval",
          "chain": "eip155:42161",
          "payload": {
            "type": "evm_transaction",
            "to": "0x...",
            "data": "0x...",
            "value": "0",
            "gasLimit": "60000"
          }
        },
        {
          "id": "transfer",
          "label": "Start transfer",
          "type": "transaction",
          "chain": "eip155:42161",
          "payload": {
            "type": "evm_transaction",
            "to": "0x...",
            "data": "0x...",
            "value": "0",
            "gasLimit": "180000"
          }
        }
      ]
    }
  ]
}

On this page