---
title: "Quote a gasless route"
method: POST
path: "/api/route/quote"
tags: ["routing"]
---

# Quote a gasless route

`POST /api/route/quote`

## Request

- Base URL: `https://api.anygas.xyz/svc`
- URL: `https://api.anygas.xyz/svc/api/route/quote`
- Auth: none declared

Best gasless route for a single intent. POST a JSON body (preferred from code); the same fields are also accepted as GET query parameters with an identical response. EVM<->EVM runs best-of-N over the bridge aggregators; a Stellar/Solana/Bitcoin/Tron side is dispatched to its dedicated leg. Rate limit 40/min.

## Headers

- `x-anygas-pass` string

## Request body

- RouteRequest
  - `fromChain` union, required: Source node: EVM chain id or one of "solana"/"stellar"/"bitcoin".
    - string
    - integer
  - `toChain` union, required: Destination node.
    - string
    - integer
  - `amount` string, required: Source-token smallest units.
  - `fromToken` string: Symbol or address; omit for native.
  - `toToken` string: Symbol or address; omit for native.
  - `toAddress` string: Recipient; defaults to fromAddress.
  - `fromAddress` string: Quote origin; anonymous default used if omitted.
  - `slippage` number: Fraction, e.g. 0.005.
  - `token` string: Shorthand: sets BOTH fromToken and toToken (e.g. "USDC"). Accepted on POST bodies and as a GET query parameter. Explicit fromToken/toToken win when present.

## Response `200`

Best route quote

- Quote: Single-intent quote. Non-EVM legs return a dedicated shape (shown); EVM<->EVM lanes return best-of-N fields (bridge, bestOf, compared[]).
  - `gasless` boolean
  - `from` object
    - `chain` unknown
    - `token` string
    - `amount` string
  - `to` object
  - `bridge` string
  - `via` string[]
  - `bestOf` integer: EVM<->EVM: number of aggregators compared
  - `compared` object[]: EVM<->EVM: per-aggregator outputs
  - `durationSec` number
  - `robynRouteFeeBps` integer
  - `robynRouteFee` string
  - `quoteOnly` boolean: TRUE means this corridor can be PRICED but NOT settled: POST /api/route/execute will refuse it with status UNSUPPORTED_DIRECTION. Absent or false means the route is executable. ALWAYS branch on this before presenting a quote as actionable - a quoteOnly route is for price comparison only. Currently set for Solana (both directions) and stellar->evm.
  - `executeReady` boolean: False alongside quoteOnly:true. Present so a client can gate on a single positive assertion of executability rather than inferring it from the absence of an error.
  - `quoteOnlyReason` string: Human-readable explanation of why this corridor cannot settle, and what would lift the restriction.
  - `floatlane` object: Present when the Robyn float lane can serve this pair (our own inventory on both chains, no bridge in the path). Key fields: `fee` (base units), `effectiveFeeBps`, `pricing.mode` (free-micro-vip | micro-standard | rebalancing-discount | rebalancing-partial | base | adaptive | undercut), `freeTier` (whether the micro tier applied and, if not, exactly which check failed), `vip` (member status and the recognised collections), `capNow` (largest transfer this lane can serve right now = 25% of destination float) and `destFloat`. MICRO TIER: transfers of $0.10-$25 to a low-cost destination are FREE for holders of a recognised member NFT, and cost a fraction of a cent for everyone else - never more than the standard 8bps. Pass `fromAddress` so membership can be recognised.
    - `fee` string
    - `effectiveFeeBps` number
    - `capNow` string: Largest transfer this lane can serve right now, in base units
    - `pricing` object
    - `freeTier` object
    - `vip` object
  - `note` string

## Other responses

- `400`: Malformed or incomplete request. Body: {error, errorCode (e.g. MISSING_FIELD, BAD_REQUEST), suggestedAction, example} — fix and resend.
- `404`: Unroutable lane
- `422`: NO_ROUTE — no rail can settle this exact lane/amount right now (every rail's own reason is in `error`). Not a rate limit; try /api/route/compare, another amount or lane.
- `429`: RATE_LIMITED — Retry-After header (seconds) + retryAfterMs in the body. Anonymous callers get 40 quotes/min per IP; a free key (POST /api/keys/create, header x-anygas-key) raises it.

---

[API](https://skmtc.dev/anygas/apis/robyn-anygas-api.md) · [All operations](https://skmtc.dev/anygas/apis/robyn-anygas-api/llms.txt) · [OpenAPI document](https://skmtc.dev/anygas/apis/robyn-anygas-api/revisions/9b7498be8304?raw)
