routing

Execute a signed gasless route

Submit a route; the relayer fronts all gas, tries ranked routes in net-output order and fails over on error, then returns a route id to track. Use mode=permit2 for a user-signed off-chain pull. Add header x-anygas-sandbox: 1 for a zero-funds simulation. Rate limit 8/min. REHEARSAL: send dryRun:true (or live:false) for a rail-independent dry run that broadcasts nothing, or the x-anygas-sandbox: 1 header for a full simulation with sbx_ ids.

THIS ENDPOINT BROADCASTS REAL TRANSACTIONS BY DEFAULT. Omitting live does NOT mean dry run. To simulate without moving funds, send "live": false or "dryRun": true (or the header x-anygas-sandbox: 1 for a fully simulated route with sbx_ ids). Requests to burn/null addresses are refused with BURN_ADDRESS_REFUSED because those funds would be unrecoverable; pass "allowBurnAddress": true only if the burn is intentional. Amounts must be a positive integer string in base units — malformed, zero or negative amounts are rejected with BAD_AMOUNT on the dry path as well as the live one.

minOut coverage: the Robyn float lane enforces it and refuses the transfer with BELOW_AGREED_OUTPUT before any custody change. On third-party bridge rails minOut is passed through to the underlying bridge as its slippage floor rather than enforced by Robyn, so the guarantee is the bridge's, not ours. Use POST /api/floatlane/execute when you need Robyn itself to refuse a route that would deliver less than you agreed to.

post/api/route/execute

Request

  • Base URL: https://api.anygas.xyz/svc
  • URL: https://api.anygas.xyz/svc/api/route/execute
  • Auth: none declared

Headers

x-anygas-sandbox'1'

Set to "1" to simulate the full execute lifecycle with zero funds — no signature, no relayer spend, nothing on-chain. Returns an sbx_ id that progresses BRIDGING -> DONE in ~40s.

x-anygas-keystring

Optional API key (ak_…). Never required for reads; only tags requests for usage visibility.

Request body

amountstring required

Smallest units.

fromTokenstring
toTokenstring
toAddressstring
mode'self' | 'permit2'

"permit2" = user-signed off-chain pull; "self" = operator moves own funds.

Example request

{
  "amount": "5000000",
  "fromToken": "USDC",
  "toToken": "USDC",
  "toAddress": "0x8EdE0eEb8C03a45886836A1baDec03CdB08cDFb2",
  "permit2": {
    "owner": "0xAbC0000000000000000000000000000000000001",
    "permitted": {
      "token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "amount": "4000000"
    },
    "nonce": "0x9f2c…",
    "deadline": "1785300000",
    "signature": "0x…"
  }
}

Response

Route accepted (or FUNDS_REQUIRED for an unfunded non-EVM lane)

idstring
statusstring

BRIDGING | DONE | FAILED (plus FUNDS_REQUIRED / AWAITING_DEPOSIT for unfunded non-EVM lanes)

gaslessboolean
sandboxboolean
bridgestring
aggregatorstring
robynFeestring
bridgedstring
fromobject
toobject
srcTxstring nullable
destTxstring nullable
stagestring
elapsedSecnumber
trackstring

Example response

{
  "id": "rt_1a2b3c4d5e6f",
  "status": "BRIDGING",
  "gasless": true,
  "bridge": "across",
  "aggregator": "lifi",
  "robynFee": "12500",
  "bridged": "4987500",
  "stage": "RECEIVING",
  "track": "/api/route/status?id=rt_1a2b3c4d5e6f"
}

Changes

No recorded changes to this operation across all 1 revision of this API.