Routheus

Real-time swap quotes, executable routes with prepared calldata (Permit2 supported), token metadata, token search and pool data across multiple EVM chains. Pay per call in USDC via x402 — no API key, no subscription, no signup.

x402 v1 · exact · USDC network: … chains: … only successful responses are charged own pool-state engine — not an aggregator proxy

Try it — one curl, no account

curl "…loading…"

The response is an HTTP 402 with everything needed to pay: price, USDC contract, receiving address. Any x402 client (@x402/fetch, x402-axios, x402-reqwest, Coinbase AgentKit, MCP) signs the payment offline and retries automatically — settlement lands on-chain in ~1–2s and the receipt (tx hash) is returned in the X-PAYMENT-RESPONSE header.

Products & pricing

ProductEndpoint (GET)PriceWhat you get
Loading live pricing from /x402/info…

Supported chains

Loading…

Executing a swap route

Routes bought with to=<your address> include a ready-to-send transaction (tx: {to, data, value, chainId}). Before sending it, the input token needs an allowance — two options:

Option A — direct approve

ERC-20 approve(router, amount) to the router address in tx.to, then send tx as-is. Simple; one approval per token+amount.

Option B — Permit2 (recommended)

One-time ERC-20 approve(Permit2, ∞) to the canonical Permit2 (0x…22D473030F116dDEE9F6B43aC78BA3). Then request with_permit2_data=true: the response adds tx_permit2 — calldata with zeroed placeholders plus byte offsets (nonce_offset, permit_deadline_offset, signature_offset). Sign the EIP-712 PermitTransferFrom (domain: name "Permit2", your chainId, verifying contract Permit2; spender = router), splice nonce, deadline and 65-byte signature at those offsets, send. No per-swap approvals.

How payment works

  1. Call a paid endpoint → HTTP 402 with an accepts array (price, asset, receiver).
  2. Your client signs an EIP-3009 USDC authorization offline — gasless for you, the facilitator pays gas.
  3. Retry with the X-PAYMENT header → payment is verified, your request runs.
  4. Only useful answers settle: upstream errors and {"ok": false} results are never charged (X-Payment-Charged: false) and your authorization stays reusable.

One payment authorization pays for exactly one served response. Multi-input batches (amounts_in, up to 50 amounts) are priced per amount with a 10% batch discount. With simulate=true the returned amount_out is the on-chain simulated result — what you'd actually receive, not a local estimate; failed simulations are free. The exclusive quote_on_top_of_amounts product quotes on top of in-transit swaps (pool state mutated per prior amount) — built for arbitrage sizing, MEV bundles and multi-step strategies.

Machine-readable