---
title: "GO / NO-GO check before executing a transfer (free, read-only)"
method: POST
path: "/api/route/preflight"
tags: ["routing"]
---

# GO / NO-GO check before executing a transfer (free, read-only)

`POST /api/route/preflight`

## Request

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

Call this before /api/route/execute. Returns `decision` (GO|NO_GO), typed `blockers` each carrying a `fix`, advisory `warnings`, and the `expected` delivery. It answers for free the questions that otherwise cost gas to discover: BELOW_FEE_THRESHOLD (a fixed corridor fee would consume the entire amount, so nothing arrives), BAD_RECIPIENT (address not valid for the destination chain family — unrecoverable once broadcast), QUOTE_ONLY_CORRIDOR (the rail prices but cannot settle), ABOVE_LANE_CAPACITY (the instant lane is full so a dearer bridge would serve you; the response names the exact ceiling to split at), HIGH_COST (>=20% of the amount withheld by vendor fees). Signs nothing, broadcasts nothing, moves nothing. Pass `fromAddress` so NFT membership — and therefore free micro-transfers — is recognised. A GO reflects conditions now; capacity and vendor fees move, so treat it as fresh for seconds. Also reports OUR OWN readiness — relayer native gas on both chains — because a preflight that says GO while the relayer cannot perform the transfer is worse than none.

## Query parameters

- `deep` '1'

## Headers

- `x-anygas-pass` string

## Request body

- object
  - `fromChain` union, required
    - integer
    - string
  - `toChain` union, required
    - integer
    - string
  - `amount` string, required
  - `fromToken` string
  - `toToken` string
  - `fromAddress` string: Determines membership and therefore fee tier
  - `toAddress` string: Validated against the destination chain family

## Response `200`

Preflight verdict

- object
  - `decision` 'GO' | 'NO_GO'
  - `ok` boolean
  - `blockers` object[]
    - `code` string
    - `what` string
    - `fix` string
  - `warnings` object[]
  - `checks` object
  - `expected` object

## Other responses

- `400`: Malformed request. Body carries errorCode + suggestedAction + example.
- `429`: RATE_LIMITED — honour Retry-After.

---

[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)
