---
title: "Execute a signed gasless route"
method: POST
path: "/api/route/execute"
tags: ["routing"]
---

# Execute a signed gasless route

`POST /api/route/execute`

## Request

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

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.

## Headers

- `x-anygas-sandbox` '1'
- `x-anygas-key` string

## Request body

- ExecuteRequest
  - `fromChain` union, required
    - string
    - integer
  - `toChain` union, required
    - string
    - integer
  - `amount` string, required: Smallest units.
  - `fromToken` string
  - `toToken` string
  - `toAddress` string
  - `mode` 'self' | 'permit2': "permit2" = user-signed off-chain pull; "self" = operator moves own funds.
  - `permit2` Permit2SignatureTransfer: A signed Permit2 SignatureTransfer authorising the relayer to pull exactly `amount` of `token` once. Sign the EIP-712 payload returned by POST /api/agent/do as signRequest.eip712 (domain {name:'Permit2', chainId, verifyingContract: the canonical Permit2 contract}; types PermitTransferFrom + TokenPermissions). IMPORTANT: the signed `spender` must be the relayer address from signRequest.spender - permitTransferFrom takes the spender implicitly as msg.sender, so a permit signed for any other address cannot be redeemed.
    - `owner` string, required: Address that signed the permit (the payer).
    - `permitted` object, required: The single token permission being granted.
      - `token` string, required: ERC-20 contract on the source chain (signRequest.tokenAddress).
      - `amount` string, required: Exact amount in the token's smallest units.
    - `nonce` string, required: Unordered Permit2 nonce (bitmap) - any unused value; signRequest suggests one.
    - `deadline` string, required: Unix seconds after which the permit is void.
    - `signature` string, required: 0x… EIP-712 signature over the payload above.

## Response `200`

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

- RouteReceipt
  - `id` string
  - `status` string: BRIDGING | DONE | FAILED (plus FUNDS_REQUIRED / AWAITING_DEPOSIT for unfunded non-EVM lanes)
  - `gasless` boolean
  - `sandbox` boolean
  - `bridge` string
  - `aggregator` string
  - `robynFee` string
  - `bridged` string
  - `from` object
  - `to` object
  - `srcTx` string, nullable
  - `destTx` string, nullable
  - `stage` string
  - `elapsedSec` number
  - `track` string

---

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