{"openapi":"3.1.0","info":{"title":"arcgate","version":"0.1.0","description":"arcgate is a checkpoint between your agent and the DEXes on Arc. It finds the token you meant, the venues that can actually fill it, and whether the trade is safe, then prices it and hands back unsigned transactions. **It never holds funds and never signs.** Your wallet does both.\n\n# A checkpoint, not a DEX\n\nThree paid calls, in this order, then your wallet takes over, and a free receipt tells you whether it landed.\n\n<ol>\n<li><code>search</code><strong>Right token.</strong><span>Every contract with the name you asked for, ranked, with impostors flagged by identity. Pick the address you meant.</span></li>\n<li><code>quote</code><strong>Right venue, safe to trade, best price.</strong><span>Only pools that exist and hold liquidity at this block. A simulated buy and sell-back from a fresh wallet. Prices at parity with KyberSwap. Returns a quoteId that is good for 120 seconds. Name your <code>taker</code> and it also says whether that wallet can finish the trade, and what finishing costs (<code>readiness</code>).</span></li>\n<li><code>swap</code><strong>Unsigned transactions.</strong><span>The quoteId and your taker address become the transactions to send, any approvals first, then the swap, re-simulated from your wallet first, and executed through arcgate's own ArcgateRouter contract. Approvals your allowance already covers are skipped, and a route funded entirely by native USDC needs no approval or signature at all. With the default Permit2 approval you may otherwise get a permit to sign; the response carries `signatures[]` (typed data) and `next: \"sign_permit\"`. After signing the permit, the next step is `POST /trade/v1/swap/tx`.</span></li>\n<li><code>swap/tx</code><strong>Free, for signed permits.</strong><span>FREE, never payment-gated. Turns a signed Permit2 permit into the final swap transactions. Body: `{ quoteId, taker, recipient? (defaults to taker), deadlineSec?, permit: { message, signature } }`. Permit required; no `approval` field. Returns the same 200 body as a swap answer with no pending signature. Only works right after a paid /swap for the same quote, taker and recipient that asked for a permit, and only once. Otherwise 409 `no_pending_swap` (next: `fix_request`). An expired quote answers 410 `quote_expired`, without a fresh quote.</span></li>\n<li><code>sign</code><strong>Your wallet signs.</strong><span>And broadcasts. arcgate never does.</span></li>\n<li><code>receipt</code><strong>Did it land?</strong><span>Free. Send the quoteId and your transaction hashes; get back what you received against minAmountOut, and pass or fail.</span></li>\n</ol>\n\n# Paying arcgate from your own code\n\n`search`, `quote` and `swap` are paid per call with [x402](https://x402.org) v2, in USDC on Arc. No API keys, no accounts.\n\n1. Call the endpoint with no payment. The answer is `402 Payment Required`, with the requirements (scheme, network, amount, asset, `payTo`, timeout) base64-encoded in the `PAYMENT-REQUIRED` header.\n2. Sign an EIP-3009 authorization for that amount and retry the **same** request with the signed payload, base64-encoded, in `PAYMENT-SIGNATURE`.\n3. A paid response carries the settlement receipt in `PAYMENT-RESPONSE`.\n\nAny x402 client runs that loop for you. Fees are paid in **real USDC on Arc mainnet**, the same chain the trade runs on. Arc USDC isn't one of x402's built-in assets (the standard client libraries ship USDC for Base only), so the client must allow it explicitly, or every payment is refused before it's signed. In JavaScript, that's `spendControls.allowedAssets` with network `eip155:5042`, asset `0x3600000000000000000000000000000000000000` and a per-payment maximum, as in the example below. Install once:\n\n```bash\nnpm install @x402/fetch @x402/core @x402/evm viem\n# Python: pip install \"x402[evm,requests]\"\n```\n\nThe example follows the language picked under **Client Libraries**. Its first call is one paid `search` (0.005 USDC), which proves the setup; the calls after it are the whole trade:\n\n```js\nimport { wrapFetchWithPayment } from \"@x402/fetch\";\nimport { x402Client } from \"@x402/core/client\";\nimport { ExactEvmScheme } from \"@x402/evm/exact/client\";\nimport { privateKeyToAccount } from \"viem/accounts\";\n\n// The server shown on this page.\nconst API = process.env.API_URL;\n// Holds USDC on Arc mainnet: fees are real.\nconst signer =\n  privateKeyToAccount(process.env.PRIVATE_KEY);\n// The address you picked from search.\nconst TOKEN = \"0x…\";\n\n// Fees are paid on Arc mainnet. (A local dev stack\n// charges on Arc testnet: \"eip155:5042002\".)\nconst FEE_NETWORK = \"eip155:5042\";\nconst USDC =\n  \"0x3600000000000000000000000000000000000000\";\n\nconst x402 = x402Client.fromConfig({\n  schemes: [{\n    network: FEE_NETWORK,\n    client: new ExactEvmScheme(signer),\n  }],\n  // Allow Arc USDC, capped per payment at the top\n  // swap fee (5 USDC).\n  spendControls: {\n    allowedAssets: [{\n      network: FEE_NETWORK,\n      asset: USDC,\n      maxAmountPerPayment: \"5000000\",\n    }],\n  },\n});\nconst pay = wrapFetchWithPayment(fetch, x402);\n\nasync function call(path, body) {\n  const res = await pay(`${API}/trade/v1/${path}`, {\n    method: \"POST\",\n    headers: { \"content-type\": \"application/json\" },\n    body: JSON.stringify(body),\n  });\n  const json = await res.json();\n  // Errors are never charged.\n  if (!res.ok) {\n    const code = json.error?.code;\n    throw new Error(`${path}: ${res.status} ${code}`);\n  }\n  return json;\n}\n\n// 0.005 USDC: the first paid call. If this returns\n// results, Arc USDC is allowed and the wallet pays.\nconst found = await call(\"search\", { query: \"USDC\" });\n\n// 0.01 USDC: route, round-trip loss, 120 second\n// expiry. Sells 100 USDC.\nconst quote = await call(\"quote\", {\n  sell: USDC, buy: TOKEN, amount: \"100\",\n});\n\n// 0.01 to 5 USDC by size. approval \"approve\" is\n// always one call: at most one exact-amount ERC-20\n// approve(ArcgateRouter, amountIn), no Permit2, no\n// signature. The default, \"permit2\", can return a\n// permit to sign. Then POST /trade/v1/swap/tx (free)\n// with the signed permit turns it into transactions.\nconst swap = await call(\"swap\", {\n  quoteId: quote.quoteId,\n  taker: signer.address,\n  approval: \"approve\",\n});\n\n// swap.transactions: approvals still needed, then\n// the swap, all unsigned. Read what you sign. Your\n// wallet signs and sends each one, in order.\n```\n\n```python\n# pip install \"x402[evm,requests]\"\nimport os\nfrom eth_account import Account\nfrom x402 import (\n    SchemeRegistration,\n    x402ClientConfig,\n    x402ClientSync,\n)\nfrom x402.http.clients import x402_requests\nfrom x402.mechanisms.evm.exact import (\n    ExactEvmClientScheme)\n\n# The server shown on this page.\nAPI = os.environ[\"API_URL\"]\n# Holds USDC on Arc mainnet: fees are real.\naccount = Account.from_key(os.environ[\"PRIVATE_KEY\"])\n# The address you picked from search.\nTOKEN = \"0x…\"\n\n# Fees are paid on Arc mainnet. (A local dev stack\n# charges on Arc testnet: \"eip155:5042002\".)\nFEE_NETWORK = \"eip155:5042\"\nUSDC = \"0x3600000000000000000000000000000000000000\"\n\nx402 = x402ClientSync.from_config(x402ClientConfig(\n    schemes=[SchemeRegistration(\n        network=FEE_NETWORK,\n        client=ExactEvmClientScheme(account),\n    )],\n    # Allow Arc USDC, capped per payment at the top\n    # swap fee (5 USDC).\n    spend_controls={\"allowed_assets\": [{\n        \"network\": FEE_NETWORK,\n        \"asset\": USDC,\n        \"max_amount_per_payment\": \"5000000\",\n    }]},\n))\nsession = x402_requests(x402)\n\ndef call(path, body):\n    url = f\"{API}/trade/v1/{path}\"\n    res = session.post(url, json=body)\n    data = res.json()\n    # Errors are never charged.\n    if not res.ok:\n        code = data[\"error\"][\"code\"]\n        raise RuntimeError(\n            f\"{path}: {res.status_code} {code}\")\n    return data\n\n# 0.005 USDC: the first paid call. If this returns\n# results, Arc USDC is allowed and the wallet pays.\nfound = call(\"search\", {\"query\": \"USDC\"})\n\n# 0.01 USDC: route, round-trip loss, 120 second\n# expiry. Sells 100 USDC.\nquote = call(\"quote\", {\n    \"sell\": USDC, \"buy\": TOKEN, \"amount\": \"100\",\n})\n\n# 0.01 to 5 USDC by size. approval \"approve\" is\n# always one call: at most one exact-amount approve,\n# no Permit2, no signature.\nswap = call(\"swap\", {\n    \"quoteId\": quote[\"quoteId\"],\n    \"taker\": account.address,\n    \"approval\": \"approve\",\n})\n\n# swap[\"transactions\"]: approvals still needed, then\n# the swap, all unsigned. Read what you sign. Your\n# wallet signs and sends each one, in order.\n```\n\n```bash\n# Free calls work from curl as they are.\ncurl \"$API_URL/trade/v1/venues\"\ncurl \"$API_URL/health\"\n\n# A paid call answers 402, with its price in\n# PAYMENT-REQUIRED (base64 JSON).\nUSDC=0x3600000000000000000000000000000000000000\nTOKEN=0x…   # the address you picked from search\nBODY=\"{\\\"sell\\\":\\\"$USDC\\\",\\\"buy\\\":\\\"$TOKEN\\\",\"\nBODY+=\"\\\"amount\\\":\\\"100\\\"}\"\ncurl -s -D - -o /dev/null \\\n  -X POST \"$API_URL/trade/v1/quote\" \\\n  -H 'content-type: application/json' -d \"$BODY\" \\\n  | grep -i '^payment-required' | cut -d' ' -f2 \\\n  | tr -d '\\r' | base64 -d\n\n# curl can't sign the EIP-3009 payment for the\n# retry. Pay with the JavaScript or Python client\n# (pick it under Client Libraries), or connect over\n# MCP below.\n```\n\n# Prices\n\n| Operation | USDC per call |\n| --- | --- |\n| `search` | 0.005 |\n| `quote` | 0.01 |\n| `swap` under 1k | 0.01 |\n| `swap` 1k to 10k | 0.05 |\n| `swap` over 10k | 0.05 + 0.5 bps above 10k, capped at 5 |\n| `swap/tx`, `venues`, `health`, `openapi`, `receipt` | free |\n\nErrors are never charged. A `cannot_sell` safety verdict on a quote is an answer, so it is charged. `insufficient_liquidity` (`422`) and an expired quote (`410`) are free. Nothing is taken from your swap output. `swap` is paid once per quote. When it requests a signature, `swap/tx` turns the signed permit into the transactions, free.\n\n# Calling the API\n\nEvery operation has a **Test Request** button that calls the API from this page. Free operations, `venues` and `health`, just run. A paid one answers `402`, and the page pays it with your browser wallet (MetaMask, or any EIP-1193 wallet): it switches the wallet to Arc mainnet, asks you to sign the USDC authorization for the price shown, and resends the call. An MCP tool call on `POST /trade/v1/mcp` is paid the same way: when the tool answers with its price, the page signs it and resends the call with the payment inside.\n\n> [!CAUTION]\n> **Test Requests on paid operations cost real money.** Each one is a real x402 payment in USDC on Arc mainnet, at the prices above, from the wallet you connect. Your wallet shows the exact amount before you sign, and nothing is paid unless you sign. A single payment is never allowed above 5 USDC, the top swap fee, and errors are never charged.\n\n`swap` takes a `quoteId`, so run `quote` first and paste its id into the swap body. The `swap` answer is unsigned transactions for Arc mainnet: this page shows them, it never sends them.\n\nFrom your own code, use an x402 client as above, or the MCP server below.\n\nEvery error body has `next` beside `error`, saying what to do: `requote`, `retry` (after `retryAfterSec` when given), `fix_request`, `stop` or `pay`; a 200 that needs an action has one too.\n\nEvery response carries an `X-Request-Id` header. If a call goes wrong in a way you don't expect, send us that id with your report: it finds that exact call in our logs, including what the payment facilitator said about your payment.\n\n# MCP for agents\n\n`POST /trade/v1/mcp` is a [Model Context Protocol](https://modelcontextprotocol.io) server over Streamable HTTP. It is stateless: there's no session to open or keep, and every call is a single JSON-RPC `POST` (send `Accept: application/json, text/event-stream`).\n\n| Tool | What it does | USDC per call |\n| --- | --- | --- |\n| `tradeSearch` | Resolves a ticker, name or address to tokens | 0.005 |\n| `tradeQuote` | Prices a swap and returns a `quoteId` | 0.01 |\n| `tradeSwap` | Turns a `quoteId` into unsigned transactions | 0.01 to 5, by size |\n| `tradeSwapTx` | Turns a signed Permit2 permit into final swap transactions | free |\n| `tradeVenues` | Lists venues, hubs and launchpads | free |\n| `health` | Reports service status | free |\n\nEach tool takes the same input as its operation on this page and costs the same. Payments are real USDC on Arc mainnet.\n\n**Paying inside MCP.** MCP has no HTTP headers, so x402 rides in the tool call itself. A paid tool called without payment answers `isError: true` with the price in `structuredContent`: the same requirements a `402` carries. An x402-aware client signs them and calls again with the payment in `params._meta[\"x402/payment\"]`, and the result carries the settlement receipt in `_meta[\"x402/payment-response\"]`. A result with `isError: true` is never charged. `@x402/mcp` runs that loop for you:\n\n```js\nimport { createx402MCPClient } from \"@x402/mcp\";\nimport { ExactEvmScheme } from \"@x402/evm/exact/client\";\nimport { StreamableHTTPClientTransport } from\n  \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport { privateKeyToAccount } from \"viem/accounts\";\n\n// Holds USDC on Arc mainnet: fees are real.\nconst signer =\n  privateKeyToAccount(process.env.PRIVATE_KEY);\n// The address you picked from tradeSearch.\nconst TOKEN = \"0x…\";\n\nconst FEE_NETWORK = \"eip155:5042\";\nconst USDC =\n  \"0x3600000000000000000000000000000000000000\";\n\nconst client = createx402MCPClient({\n  name: \"my-agent\",\n  version: \"1.0.0\",\n  schemes: [{\n    network: FEE_NETWORK,\n    client: new ExactEvmScheme(signer),\n  }],\n  // Allow Arc USDC, capped per payment at the top\n  // swap fee (5 USDC).\n  spendControls: {\n    allowedAssets: [{\n      network: FEE_NETWORK,\n      asset: USDC,\n      maxAmountPerPayment: \"5000000\",\n    }],\n  },\n});\nconst url = new URL(\n  `${process.env.API_URL}/trade/v1/mcp`);\nawait client.connect(\n  new StreamableHTTPClientTransport(url));\n// A tool's answer is JSON in its text content.\nconst body = (result) =>\n  JSON.parse(result.content[0].text);\n\n// Paid tools pay on their own; free ones never do.\nconst quote = await client.callTool(\"tradeQuote\", {\n  sell: USDC, buy: TOKEN, amount: \"100\",\n});\nif (quote.isError) {\n  throw new Error(JSON.stringify(quote.content));\n}\n// quote.paymentResponse is the settlement receipt.\nconst { quoteId } = body(quote);\n\nconst swap = await client.callTool(\"tradeSwap\", {\n  quoteId, taker: signer.address, approval: \"approve\",\n});\n// body(swap).transactions: unsigned, in order. Read\n// what you sign, then sign and send.\n```\n\nA generic MCP host (Claude Desktop, Cursor and the like) can connect and call the free tools. Its paid calls come back with the price, because paying takes an x402-aware client like the one above.\n\n# Agent skill\n\n`arcgate-trade` is an [Agent Skill](https://agentskills.io) that teaches an agent to take a plain-English order (\"buy 100 USDC of X\", \"sell my MOLLY\") through search, quote and swap: settling the trade's direction, resolving tickers to addresses, reading the safety verdict, and handing the user's wallet the transactions to sign. It includes a script that makes the paid calls with a wallet key, capped per payment.\n\n**Claude Code:**\n\n```bash\n/plugin marketplace add arcgate-dev/docs\n/plugin install arcgate-trade@arcgate\n```\n\n**Any other agent:** load [`/plugin/skills/arcgate-trade/SKILL.md`](/plugin/skills/arcgate-trade/SKILL.md) from this site; the script is in the same folder.\n\nPaid calls need an agent that can run code and a wallet key in `PRIVATE_KEY`, holding USDC on Arc. The fees are real. An agent that can't run code can still plan the trade and make the free calls.","x-guidance":"arcgate turns a trade on Arc into checked, unsigned transactions. It never holds funds or signs. Call in order: POST /trade/v1/search with a ticker, name or address to get candidate tokens, impostors flagged; pick an address. POST /trade/v1/quote with sell and buy token addresses, amount and side (exactIn/exactOut) to get the best price across Arc's DEX venues, a simulated buy and sell-back safety verdict, and a quoteId valid up to 120 s. POST /trade/v1/swap with the quoteId and taker address to get unsigned transactions (approvals first). If it returns signatures with next \"sign_permit\", sign the Permit2 typed data and call POST /trade/v1/swap/tx (free). Sign and send the transactions from your wallet, then POST /trade/v1/receipt (free) with the quoteId and transaction hashes to confirm the fill against minAmountOut. search, quote and swap are paid per call over x402 in USDC: call once unpaid, pay the 402's PAYMENT-REQUIRED requirements, retry with PAYMENT-SIGNATURE. Errors carry `next` (requote, retry, fix_request, stop, pay, sign_permit): act on it. A 402 with an empty body came from the payment layer (wrong amount, failed verification, or failed settlement, with PAYMENT-RESPONSE's errorReason): nothing was charged; pay the PAYMENT-REQUIRED requirements afresh and retry. The same operations are MCP tools at POST /trade/v1/mcp.","contact":{"name":"arcgate support","email":"support@arcgate.dev"}},"servers":[{"url":"/"}],"tags":[{"name":"trade","x-displayName":"Trade","description":"Find a token, price a swap, build the transactions and confirm the fill: search -> quote -> swap -> receipt, plus venues and the MCP endpoint."},{"name":"service","x-displayName":"Service","description":"Health checks, this OpenAPI document and the ERC-8004 agent registration file."}],"security":[],"paths":{"/trade/v1/search":{"post":{"operationId":"tradeSearch","tags":["trade"],"summary":"Resolve a ticker, name or address to tokens","description":"Resolves a ticker, name, prefix or `0x` address to candidate ERC-20 tokens on Arc.\n\n- **Cost:** 0.005 USDC per call over x402: the first call gets a 402 with payment requirements in the `PAYMENT-REQUIRED` header (base64 JSON); sign them and retry with a `PAYMENT-SIGNATURE` header carrying the payment payload.\n- **Key inputs:** `query` (required), `limit` (1-25, default 10).\n- **Returns:** each match with its verification status, safety verdicts and USDC/hub pools, most relevant first.\n- **Next:** pass the chosen result's `address` as `sell` or `buy` to POST /trade/v1/quote.","security":[{"x402":[]}],"parameters":[{"$ref":"#/components/parameters/PaymentSignature"}],"x-price":"0.005 USDC","x-payment":{"envVar":"PRICE_SEARCH","defaultBaseUnits":5000,"asset":"USDC","decimals":6},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest"},"examples":{"ticker":{"summary":"ticker query","value":{"query":"USDC","limit":2}}}}}},"responses":{"200":{"description":"Matching tokens, most relevant first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"},"examples":{"USDC by ticker":{"summary":"USDC by ticker","value":{"query":"USDC","network":"eip155:5042","block":22784798,"resolution":"verified","rulesVersion":"r2-383954828c","results":[{"address":"0x3600000000000000000000000000000000000000","symbol":"USDC","name":"USDC","decimals":6,"match":"symbol","verification":{"status":"verified","source":"circle_docs","trust":1,"sourceUrl":"https://docs.arc.io/contract-addresses","note":null,"coinId":null,"checkedAt":"2026-09-23T22:16:07.000Z"},"evidence":{"firstWithTicker":true,"creatorLinked":false,"depth2PctUsd":"64000","depthKind":"lower_bound","depthAgeSec":490936,"volume24hUsd":"934.1393915596246","traders24h":23,"ageHours":3376.008611111111,"posterior":null},"discovered":"index","origin":{"launchpad":"direct","creator":null,"createdBlock":0,"createdAt":"2026-05-12T00:00:00.000Z"},"state":"pool_only","venues":[{"venue":"uniswap_v3","poolId":"0x82916bee18fcef517b26c72d7cb5f13694e1db41","pair":"cirBTC","feeBps":1,"hooks":null},{"venue":"uniswap_v3","poolId":"0x6fd5f2fb831940dcd61a98c5b3acb7d8c6f3bfc1","pair":"EURC","feeBps":5,"hooks":null},{"venue":"uniswap_v4","poolId":"0xeb0fd02fb8044d5514fb6e165ee134fd547eff0378bb33b76f4b81d8b03bd1ae","pair":"EURC","feeBps":5,"hooks":null},{"venue":"aerodrome_cl","poolId":"0x6f302decb49fb30b2d2c609bdd16e04e7dd096fc","pair":"WETH","feeBps":null,"hooks":null},{"venue":"aerodrome_cl","poolId":"0xd945caee4635bcd7fb8a9fa74dc1d0c4c1472782","pair":"cirBTC","feeBps":null,"hooks":null},{"venue":"aerodrome_cl","poolId":"0xbe080ac37ad1305dfcc9521f5e6f68cfdc41b7fa","pair":"EURC","feeBps":null,"hooks":null},{"venue":"uniswap_v2","poolId":"0xfb778eacdd10603c521e8a343f4d37f3afa41fb7","pair":"EURC","feeBps":null,"hooks":null},{"venue":"uniswap_v4","poolId":"0x85ff2b5048d26bbdf37e249333b59891605149a4a5476cea5c93050501e0f83d","pair":"cirBTC","feeBps":15,"hooks":"0x0000000000000000000000000000000000000000"}],"liquidityUsd":"2651241593149.373047","depth2PctUsd":"64000","volume24hUsd":"934.1393915596246","holders":null,"safety":null,"safetyByRoute":[],"flags":[]},{"address":"0x8e98a62a995a50eca9979bfa016f91bf36a8f9d9","symbol":"USDC","name":"UpSideDownCat","decimals":18,"match":"symbol","verification":{"status":"unverified","source":"coingecko","trust":4,"sourceUrl":"https://api.coingecko.com/api/v3/coins/upsidedowncat-3","note":null,"coinId":"upsidedowncat-3","checkedAt":"2026-09-23T22:16:07.000Z"},"evidence":{"firstWithTicker":false,"creatorLinked":false,"depth2PctUsd":"1451.256332","depthKind":"measured","depthAgeSec":78620,"volume24hUsd":"531987.846046","traders24h":817,"ageHours":321.62361111111113,"posterior":0.342990632858822},"discovered":"index","origin":{"launchpad":"argus","creator":"0xddefb07c4902cf67811bf396eee28059604978b4","createdBlock":21114023,"createdAt":"2026-09-16T06:23:06.000Z"},"state":"pool_only","venues":[{"venue":"uniswap_v4","poolId":"0x54d5fe8ee7a9546ce74ebe06c1d040defb7757410a627d4793d62a77eaaae4bf","pair":"USDC","feeBps":100,"hooks":"0xdb0bfde55fea51eaea8f6cc91d5a253c9265a044"},{"venue":"uniswap_v3","poolId":"0x083859cf0533b25f35a958a9292fa5653528f841","pair":"USDC","feeBps":100,"hooks":null},{"venue":"uniswap_v4","poolId":"0x2f4040d563fc000f9d0ee449f21c6d551e471ecdce0e618a14507af43b18101f","pair":"USDC","feeBps":299.9,"hooks":"0x0000000000000000000000000000000000000000"},{"venue":"uniswap_v4","poolId":"0x771b16f71e0086e673a5866ead7607855cc9cd4636fe789521b4cd80aa5958dc","pair":"USDC","feeBps":400,"hooks":"0x0000000000000000000000000000000000000000"},{"venue":"uniswap_v4","poolId":"0xc2a6886ca120fbf9e01e95685fc6168a6075ccce35c02f7eb93fbf649960c0c8","pair":"USDC","feeBps":350,"hooks":"0x0000000000000000000000000000000000000000"},{"venue":"uniswap_v4","poolId":"0x2dfe6915c47bc5afb83b9c95d97a4278b946972004e614ddba7c4e177bc4855b","pair":"USDC","feeBps":315.9,"hooks":"0x0000000000000000000000000000000000000000"},{"venue":"uniswap_v4","poolId":"0x79ccbd9dd0a25d4fc1a320cafaa9698f7fe2725774d166a2fa5e385d3ad88e78","pair":"USDC","feeBps":500,"hooks":"0x0000000000000000000000000000000000000000"},{"venue":"uniswap_v4","poolId":"0xc7e2789f0dd69af19b9de76d98a4ad5eee702e7534224f595e05225c1ba8b897","pair":"USDC","feeBps":275,"hooks":"0x0000000000000000000000000000000000000000"}],"liquidityUsd":"389157.3722","depth2PctUsd":"1451.256332","volume24hUsd":"531987.846046","holders":null,"safety":{"routeId":"uniswap_v4:0x54d5fe8ee7a9546ce74ebe06c1d040defb7757410a627d4793d62a77eaaae4bf","route":{"venue":"uniswap_v4","poolId":"0x54d5fe8ee7a9546ce74ebe06c1d040defb7757410a627d4793d62a77eaaae4bf","pair":"USDC"},"verdict":"taxed","canSell":true,"buyTaxBps":100,"sellTaxBps":100,"buyImpactBps":0,"roundTripLossBps":394,"scope":{"block":23393283,"walletProfile":"fresh_eoa"}},"safetyByRoute":[{"routeId":"uniswap_v4:0x54d5fe8ee7a9546ce74ebe06c1d040defb7757410a627d4793d62a77eaaae4bf","route":{"venue":"uniswap_v4","poolId":"0x54d5fe8ee7a9546ce74ebe06c1d040defb7757410a627d4793d62a77eaaae4bf","pair":"USDC"},"verdict":"taxed","buyTaxBps":100,"sellTaxBps":100,"checkedBlock":23393283},{"routeId":"uniswap_v3:0x083859cf0533b25f35a958a9292fa5653528f841","route":{"venue":"uniswap_v3","poolId":"0x083859cf0533b25f35a958a9292fa5653528f841","pair":"USDC"},"verdict":"ok","buyTaxBps":0,"sellTaxBps":0,"checkedBlock":23391278},{"routeId":"uniswap_v4:0x2f4040d563fc000f9d0ee449f21c6d551e471ecdce0e618a14507af43b18101f","route":{"venue":"uniswap_v4","poolId":"0x2f4040d563fc000f9d0ee449f21c6d551e471ecdce0e618a14507af43b18101f","pair":"USDC"},"verdict":"ok","buyTaxBps":0,"sellTaxBps":0,"checkedBlock":23080319}],"flags":["buy_tax","hooked_pool","impersonates_canonical","sell_tax","shared_ticker"]}]}}}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"PAYMENT-RESPONSE":{"description":"Settlement receipt for this call's payment (base64 JSON); see the SettleResponse schema for the decoded shape.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/SettleResponse"}},"example":"eyJzdWNjZXNzIjp0cnVlLCJwYXllciI6IjB4NUVkZmY4MkYwRTdEQzI1OTY4Y2JhOEI2MTRiZURENzgyYWMyY0VERCIsInRyYW5zYWN0aW9uIjoiMHgzYzM3ZTRhZjMxMDA2YmIyOTQ3ZDU3MzlmNmE4NzkzOGIzOTBiOGFiZTBlOTAyZTc3YWRhMTUzNWIwYjVlNGQ4IiwibmV0d29yayI6ImVpcDE1NTo1MDQyMDAyIn0="}}},"400":{"description":"invalid_request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"},"examples":{"missing query":{"summary":"missing query","value":{"error":{"code":"invalid_request","message":"invalid request body","details":[{"expected":"string","code":"invalid_type","path":["query"],"message":"Invalid input: expected string, received undefined"}]},"next":"fix_request"}}}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"402":{"$ref":"#/components/responses/PaymentRequired"},"404":{"description":"token_not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"413":{"description":"payload_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"429":{"description":"lookup_rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"500":{"description":"internal (arcgate's own handler) or an x402 middleware internal error - neither settles payment.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ErrorBody"},{"$ref":"#/components/schemas/X402MiddlewareError"}]}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"502":{"$ref":"#/components/responses/FacilitatorError"},"503":{"description":"rpc_unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005000"}}}},"/trade/v1/quote":{"post":{"operationId":"tradeQuote","tags":["trade"],"summary":"Quote a swap between two different assets","description":"Prices a swap between `sell` and `buy` across the indexed venues and stores it under a `quoteId`.\n\n- **Cost:** 0.01 USDC per call over x402: the first call gets a 402 with payment requirements in the `PAYMENT-REQUIRED` header (base64 JSON); sign them and retry with a `PAYMENT-SIGNATURE` header carrying the payment payload.\n- **`sell` / `buy`:** two different assets (native and ERC-20 USDC count as the same asset; either side may be USDC). Resolve a ticker with POST /trade/v1/search first.\n- **Response shape:** when one side is USDC, `best.type` is `direct`/`two_hop`/`split` and `best.legs` lists one leg per path actually used; `routes[]` lists every discovery candidate. When neither side is USDC, or when a USDC-side allocation can't be expressed as legs, `best.type` is `graph`, `best.legs` is empty, and the execution plan is in `best.graph`. Both shapes support `side: exactIn` and `exactOut`, and both execute the same way through POST /trade/v1/swap.\n- **`amount`:** a human-readable decimal string in the token's own units, e.g. \"1.5\" for 1.5 USDC, not base units. It is the `sell` amount for `side: exactIn` and the `buy` amount for `side: exactOut`.\n- **Optional:** `side` (exactIn/exactOut), `slippageBps`, split and hop limits, `venues`/`excludeVenues` (ids from GET /trade/v1/venues), `taker`, `ttlSec`.\n- **Executability:** POST /trade/v1/swap executes every quote through ArcgateRouter. `best.executable` is `false`, with warning `graph_execution_unavailable`, when no ArcgateRouter is configured (or, for an Aerodrome edge, no Aerodrome router), or when the operator has disabled a selected path's venue - even with both routers configured. In that last case, POST /trade/v1/swap may still fall back to an executable candidate the quote already priced instead of failing outright.\n- **Readiness:** name the wallet that will trade in `taker` and the answer carries `readiness`, read at the quote's block: whether that wallet holds the input (`balance`), which approval or Permit2 signature POST /trade/v1/swap will need (`approval` for the default permit2, `approve` for `approval: \"approve\"`), enough native USDC for gas (`gas`), and whether this call's x402 payer can pay the swap fee (`fees`). `totalCostUsdc` is the swap fee plus gas: what finishing costs. When `ready` is false, `next` is `stop`. Without `taker` there is no `readiness`.\n- **Lifetime:** the `quoteId` is good for `ttlSec` seconds (default and max 120).\n- **Next:** POST /trade/v1/swap with the returned `quoteId`.","security":[{"x402":[]}],"parameters":[{"$ref":"#/components/parameters/PaymentSignature"}],"x-price":"0.01 USDC","x-payment":{"envVar":"PRICE_QUOTE","defaultBaseUnits":10000,"asset":"USDC","decimals":6},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRequest"},"examples":{"exactIn, every venue":{"summary":"exactIn, every venue","value":{"sell":"0x3600000000000000000000000000000000000000","buy":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","amount":"100","side":"exactIn"}}}}}},"responses":{"200":{"description":"Quote, including routes, safety and the stored quoteId.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteResponse"},"examples":{"quoted route":{"summary":"quoted route","value":{"quoteId":"q_d02d694103c1e1f2","network":"eip155:5042","block":23393292,"expiresAt":"2026-09-29T16:02:36.289Z","side":"exactIn","sell":{"address":"0x3600000000000000000000000000000000000000","symbol":"USDC","decimals":6,"amount":"100","amountRaw":"100000000","verification":{"status":"verified","source":"circle_docs","trust":1},"state":null},"buy":{"address":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","symbol":"WETH","decimals":18,"verification":{"status":"verified","source":"circle_docs","trust":1},"state":"pool_only","discovered":"index"},"slippageBps":100,"routes":[{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|aerodrome_cl:0x6f302decb49fb30b2d2c609bdd16e04e7dd096fc","provider":"native","hops":[{"venue":"aerodrome_cl","poolId":"0x6f302decb49fb30b2d2c609bdd16e04e7dd096fc","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":null}],"amountOutQuoted":"0.037364994127906937","buyTaxBps":0,"costVsMidBps":0,"gasUsdc":"0.00857","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0xe68ba1ac44fe2b602ae95c05df0d3b8940e81ad16d859e63449b6fb5c64f2f8f","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0xe68ba1ac44fe2b602ae95c05df0d3b8940e81ad16d859e63449b6fb5c64f2f8f","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":29,"hooks":"0x1df2971b2dfb0e80d7061dbe5e73688ba6552800"}],"amountOutQuoted":"0.037282329350358011","buyTaxBps":0,"costVsMidBps":22,"gasUsdc":"0.003606","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v3:0x964cff2cccb9059e83d507df348f070e5257a2e0","provider":"native","hops":[{"venue":"uniswap_v3","poolId":"0x964cff2cccb9059e83d507df348f070e5257a2e0","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":30}],"amountOutQuoted":"0.037028477878735493","buyTaxBps":0,"costVsMidBps":90,"gasUsdc":"0.005201","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0x0e3778957c57c367e7ea5513122d3e300a1ee635166e22d07c284b01dcea1f95","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0x0e3778957c57c367e7ea5513122d3e300a1ee635166e22d07c284b01dcea1f95","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":25,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0x3bbec4961c22b01bf59fae55aa26bb27a09af34464c08703d732455d1cca0458","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0x3bbec4961c22b01bf59fae55aa26bb27a09af34464c08703d732455d1cca0458","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":20,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0x43d6152184604afd6b042b10581732773f38a3b78a853f162fbe22d78473da24","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0x43d6152184604afd6b042b10581732773f38a3b78a853f162fbe22d78473da24","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":15,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0xc28a1c158752bfff216957aa4a763fc6039640eb56d4a1c317d3fbbe842a84c0","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0xc28a1c158752bfff216957aa4a763fc6039640eb56d4a1c317d3fbbe842a84c0","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":1,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0xf77dcc99ff598ee0c39366c31788e879346e490614c311d337d43a4a54be3751","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0xf77dcc99ff598ee0c39366c31788e879346e490614c311d337d43a4a54be3751","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":21,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0xfb8548b4ff27561d87480be6a9eaa54ed70e4acbf0573bcc3474e791b9fc4df7","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0xfb8548b4ff27561d87480be6a9eaa54ed70e4acbf0573bcc3474e791b9fc4df7","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":29,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0xf9a7d535a7d2c0b6aa57c7a58fea5e9236f0fc3298dc0f29d45d28b6a5c13738","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0xf9a7d535a7d2c0b6aa57c7a58fea5e9236f0fc3298dc0f29d45d28b6a5c13738","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":10,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0xb975733743abcffdc62507fe36eac83ad0d3600cb6ed4731cf62d32ad12a4425","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0xb975733743abcffdc62507fe36eac83ad0d3600cb6ed4731cf62d32ad12a4425","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":23,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0xc0254fec12d761c1297865ad969f681c0328ae687889aebe67a53be6bd16900b","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0xc0254fec12d761c1297865ad969f681c0328ae687889aebe67a53be6bd16900b","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":5,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v3:0x82916bee18fcef517b26c72d7cb5f13694e1db41>aerodrome_cl:0x72dff32c9c5c28758565be0a7d4e6e42fb498506","provider":"native","hops":[{"venue":"uniswap_v3","poolId":"0x82916bee18fcef517b26c72d7cb5f13694e1db41","tokenIn":"USDC","tokenOut":"cirBTC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","feeBps":1},{"venue":"aerodrome_cl","poolId":"0x72dff32c9c5c28758565be0a7d4e6e42fb498506","tokenIn":"cirBTC","tokenOut":"WETH","tokenInAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":null}],"amountOutQuoted":"0.037358031360826521","buyTaxBps":0,"costVsMidBps":1,"gasUsdc":"0.011457","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v3:0x82916bee18fcef517b26c72d7cb5f13694e1db41>uniswap_v4:0xbcb805f39d6cd6dfa1f6d71f31d5705a8313d17a161d1bf0d672ac55fdd4cac9","provider":"native","hops":[{"venue":"uniswap_v3","poolId":"0x82916bee18fcef517b26c72d7cb5f13694e1db41","tokenIn":"USDC","tokenOut":"cirBTC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","feeBps":1},{"venue":"uniswap_v4","poolId":"0xbcb805f39d6cd6dfa1f6d71f31d5705a8313d17a161d1bf0d672ac55fdd4cac9","tokenIn":"cirBTC","tokenOut":"WETH","tokenInAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":100,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v3:0x82916bee18fcef517b26c72d7cb5f13694e1db41>uniswap_v3:0xbb505c923d0ce6364b6d1769fd85bd62b0c0e9c9","provider":"native","hops":[{"venue":"uniswap_v3","poolId":"0x82916bee18fcef517b26c72d7cb5f13694e1db41","tokenIn":"USDC","tokenOut":"cirBTC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","feeBps":1},{"venue":"uniswap_v3","poolId":"0xbb505c923d0ce6364b6d1769fd85bd62b0c0e9c9","tokenIn":"cirBTC","tokenOut":"WETH","tokenInAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":30}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|aerodrome_cl:0xd945caee4635bcd7fb8a9fa74dc1d0c4c1472782>aerodrome_cl:0x72dff32c9c5c28758565be0a7d4e6e42fb498506","provider":"native","hops":[{"venue":"aerodrome_cl","poolId":"0xd945caee4635bcd7fb8a9fa74dc1d0c4c1472782","tokenIn":"USDC","tokenOut":"cirBTC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","feeBps":null},{"venue":"aerodrome_cl","poolId":"0x72dff32c9c5c28758565be0a7d4e6e42fb498506","tokenIn":"cirBTC","tokenOut":"WETH","tokenInAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":null}],"amountOutQuoted":"0.037343738764921397","buyTaxBps":0,"costVsMidBps":5,"gasUsdc":"0.016086","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|aerodrome_cl:0xd945caee4635bcd7fb8a9fa74dc1d0c4c1472782>uniswap_v4:0xbcb805f39d6cd6dfa1f6d71f31d5705a8313d17a161d1bf0d672ac55fdd4cac9","provider":"native","hops":[{"venue":"aerodrome_cl","poolId":"0xd945caee4635bcd7fb8a9fa74dc1d0c4c1472782","tokenIn":"USDC","tokenOut":"cirBTC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","feeBps":null},{"venue":"uniswap_v4","poolId":"0xbcb805f39d6cd6dfa1f6d71f31d5705a8313d17a161d1bf0d672ac55fdd4cac9","tokenIn":"cirBTC","tokenOut":"WETH","tokenInAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":100,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|aerodrome_cl:0xd945caee4635bcd7fb8a9fa74dc1d0c4c1472782>uniswap_v3:0xbb505c923d0ce6364b6d1769fd85bd62b0c0e9c9","provider":"native","hops":[{"venue":"aerodrome_cl","poolId":"0xd945caee4635bcd7fb8a9fa74dc1d0c4c1472782","tokenIn":"USDC","tokenOut":"cirBTC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","feeBps":null},{"venue":"uniswap_v3","poolId":"0xbb505c923d0ce6364b6d1769fd85bd62b0c0e9c9","tokenIn":"cirBTC","tokenOut":"WETH","tokenInAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":30}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0x85ff2b5048d26bbdf37e249333b59891605149a4a5476cea5c93050501e0f83d>aerodrome_cl:0x72dff32c9c5c28758565be0a7d4e6e42fb498506","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0x85ff2b5048d26bbdf37e249333b59891605149a4a5476cea5c93050501e0f83d","tokenIn":"USDC","tokenOut":"cirBTC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","feeBps":15,"hooks":"0x0000000000000000000000000000000000000000"},{"venue":"aerodrome_cl","poolId":"0x72dff32c9c5c28758565be0a7d4e6e42fb498506","tokenIn":"cirBTC","tokenOut":"WETH","tokenInAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":null}],"amountOutQuoted":"0.037244622717046637","buyTaxBps":0,"costVsMidBps":32,"gasUsdc":"0.010478","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0x85ff2b5048d26bbdf37e249333b59891605149a4a5476cea5c93050501e0f83d>uniswap_v4:0xbcb805f39d6cd6dfa1f6d71f31d5705a8313d17a161d1bf0d672ac55fdd4cac9","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0x85ff2b5048d26bbdf37e249333b59891605149a4a5476cea5c93050501e0f83d","tokenIn":"USDC","tokenOut":"cirBTC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","feeBps":15,"hooks":"0x0000000000000000000000000000000000000000"},{"venue":"uniswap_v4","poolId":"0xbcb805f39d6cd6dfa1f6d71f31d5705a8313d17a161d1bf0d672ac55fdd4cac9","tokenIn":"cirBTC","tokenOut":"WETH","tokenInAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":100,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0x85ff2b5048d26bbdf37e249333b59891605149a4a5476cea5c93050501e0f83d>uniswap_v3:0xbb505c923d0ce6364b6d1769fd85bd62b0c0e9c9","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0x85ff2b5048d26bbdf37e249333b59891605149a4a5476cea5c93050501e0f83d","tokenIn":"USDC","tokenOut":"cirBTC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","feeBps":15,"hooks":"0x0000000000000000000000000000000000000000"},{"venue":"uniswap_v3","poolId":"0xbb505c923d0ce6364b6d1769fd85bd62b0c0e9c9","tokenIn":"cirBTC","tokenOut":"WETH","tokenInAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":30}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v3:0x5e82892d361a6c680027a97da2280064b8fc8a52>uniswap_v4:0x7b07f308dc43dd7d6fdfbfbc6456e61b88749816a998125cc1af86ac013946e0","provider":"native","hops":[{"venue":"uniswap_v3","poolId":"0x5e82892d361a6c680027a97da2280064b8fc8a52","tokenIn":"USDC","tokenOut":"XAUM","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x178b01f61cbea1d2a5581fe1621be607835ec349","feeBps":5},{"venue":"uniswap_v4","poolId":"0x7b07f308dc43dd7d6fdfbfbc6456e61b88749816a998125cc1af86ac013946e0","tokenIn":"XAUM","tokenOut":"WETH","tokenInAddress":"0x178b01f61cbea1d2a5581fe1621be607835ec349","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":9885,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0x596b558298f7398edfc6579a32354f34544b403944dd5c4b05377a5993629eb2>uniswap_v4:0x7b07f308dc43dd7d6fdfbfbc6456e61b88749816a998125cc1af86ac013946e0","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0x596b558298f7398edfc6579a32354f34544b403944dd5c4b05377a5993629eb2","tokenIn":"USDC","tokenOut":"XAUM","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x178b01f61cbea1d2a5581fe1621be607835ec349","feeBps":5,"hooks":"0x0000000000000000000000000000000000000000"},{"venue":"uniswap_v4","poolId":"0x7b07f308dc43dd7d6fdfbfbc6456e61b88749816a998125cc1af86ac013946e0","tokenIn":"XAUM","tokenOut":"WETH","tokenInAddress":"0x178b01f61cbea1d2a5581fe1621be607835ec349","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":9885,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0xc96ec046f0c094414e175ee751c1319dc2f22e685be5935e3406adbde85e6dda>uniswap_v4:0x7b07f308dc43dd7d6fdfbfbc6456e61b88749816a998125cc1af86ac013946e0","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0xc96ec046f0c094414e175ee751c1319dc2f22e685be5935e3406adbde85e6dda","tokenIn":"USDC","tokenOut":"XAUM","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x178b01f61cbea1d2a5581fe1621be607835ec349","feeBps":90,"hooks":"0x0000000000000000000000000000000000000000"},{"venue":"uniswap_v4","poolId":"0x7b07f308dc43dd7d6fdfbfbc6456e61b88749816a998125cc1af86ac013946e0","tokenIn":"XAUM","tokenOut":"WETH","tokenInAddress":"0x178b01f61cbea1d2a5581fe1621be607835ec349","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":9885,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0x27b37d8ba66027716bc4bccdce7b797e4ecd9d2dc7e59df3eb5c8cf473b4081b>uniswap_v4:0x8fbdaf4c75ae7042e00e9685a4fae0f34f1a2c49a94106ed06ce3a25b4634869","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0x27b37d8ba66027716bc4bccdce7b797e4ecd9d2dc7e59df3eb5c8cf473b4081b","tokenIn":"USDC","tokenOut":"CRCL","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x2ba0f44bdfc17fba30eda9cdbecb908ca45b043b","feeBps":17,"hooks":"0x0000000000000000000000000000000000000000"},{"venue":"uniswap_v4","poolId":"0x8fbdaf4c75ae7042e00e9685a4fae0f34f1a2c49a94106ed06ce3a25b4634869","tokenIn":"CRCL","tokenOut":"WETH","tokenInAddress":"0x2ba0f44bdfc17fba30eda9cdbecb908ca45b043b","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":9885,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v3:0x64d77c65a5cbd728d891140fd5c30e07d21ee65b>uniswap_v4:0x8fbdaf4c75ae7042e00e9685a4fae0f34f1a2c49a94106ed06ce3a25b4634869","provider":"native","hops":[{"venue":"uniswap_v3","poolId":"0x64d77c65a5cbd728d891140fd5c30e07d21ee65b","tokenIn":"USDC","tokenOut":"CRCL","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x2ba0f44bdfc17fba30eda9cdbecb908ca45b043b","feeBps":30},{"venue":"uniswap_v4","poolId":"0x8fbdaf4c75ae7042e00e9685a4fae0f34f1a2c49a94106ed06ce3a25b4634869","tokenIn":"CRCL","tokenOut":"WETH","tokenInAddress":"0x2ba0f44bdfc17fba30eda9cdbecb908ca45b043b","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":9885,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v3:0x2e8180fa3967caf9abf57bbaeab9ae9063bcd7ba>uniswap_v4:0x8fbdaf4c75ae7042e00e9685a4fae0f34f1a2c49a94106ed06ce3a25b4634869","provider":"native","hops":[{"venue":"uniswap_v3","poolId":"0x2e8180fa3967caf9abf57bbaeab9ae9063bcd7ba","tokenIn":"USDC","tokenOut":"CRCL","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x2ba0f44bdfc17fba30eda9cdbecb908ca45b043b","feeBps":100},{"venue":"uniswap_v4","poolId":"0x8fbdaf4c75ae7042e00e9685a4fae0f34f1a2c49a94106ed06ce3a25b4634869","tokenIn":"CRCL","tokenOut":"WETH","tokenInAddress":"0x2ba0f44bdfc17fba30eda9cdbecb908ca45b043b","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":9885,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v3:0x6fd5f2fb831940dcd61a98c5b3acb7d8c6f3bfc1>uniswap_v4:0x77593a92cfedc9a37f1d4f358b0c402fcc25c73149e013477a3abeb00d7b47f1","provider":"native","hops":[{"venue":"uniswap_v3","poolId":"0x6fd5f2fb831940dcd61a98c5b3acb7d8c6f3bfc1","tokenIn":"USDC","tokenOut":"EURC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","feeBps":5},{"venue":"uniswap_v4","poolId":"0x77593a92cfedc9a37f1d4f358b0c402fcc25c73149e013477a3abeb00d7b47f1","tokenIn":"EURC","tokenOut":"WETH","tokenInAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":10000,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v3:0x6fd5f2fb831940dcd61a98c5b3acb7d8c6f3bfc1>uniswap_v4:0xdc626cf9b88b9dc26fd0435ff9b27e48ad3d87a2640f4ee3ca0a58141d294326","provider":"native","hops":[{"venue":"uniswap_v3","poolId":"0x6fd5f2fb831940dcd61a98c5b3acb7d8c6f3bfc1","tokenIn":"USDC","tokenOut":"EURC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","feeBps":5},{"venue":"uniswap_v4","poolId":"0xdc626cf9b88b9dc26fd0435ff9b27e48ad3d87a2640f4ee3ca0a58141d294326","tokenIn":"EURC","tokenOut":"WETH","tokenInAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":9785,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|aerodrome_cl:0xbe080ac37ad1305dfcc9521f5e6f68cfdc41b7fa>uniswap_v4:0x77593a92cfedc9a37f1d4f358b0c402fcc25c73149e013477a3abeb00d7b47f1","provider":"native","hops":[{"venue":"aerodrome_cl","poolId":"0xbe080ac37ad1305dfcc9521f5e6f68cfdc41b7fa","tokenIn":"USDC","tokenOut":"EURC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","feeBps":null},{"venue":"uniswap_v4","poolId":"0x77593a92cfedc9a37f1d4f358b0c402fcc25c73149e013477a3abeb00d7b47f1","tokenIn":"EURC","tokenOut":"WETH","tokenInAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":10000,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|aerodrome_cl:0xbe080ac37ad1305dfcc9521f5e6f68cfdc41b7fa>uniswap_v4:0xdc626cf9b88b9dc26fd0435ff9b27e48ad3d87a2640f4ee3ca0a58141d294326","provider":"native","hops":[{"venue":"aerodrome_cl","poolId":"0xbe080ac37ad1305dfcc9521f5e6f68cfdc41b7fa","tokenIn":"USDC","tokenOut":"EURC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","feeBps":null},{"venue":"uniswap_v4","poolId":"0xdc626cf9b88b9dc26fd0435ff9b27e48ad3d87a2640f4ee3ca0a58141d294326","tokenIn":"EURC","tokenOut":"WETH","tokenInAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":9785,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v2:0xfb778eacdd10603c521e8a343f4d37f3afa41fb7>uniswap_v4:0x77593a92cfedc9a37f1d4f358b0c402fcc25c73149e013477a3abeb00d7b47f1","provider":"native","hops":[{"venue":"uniswap_v2","poolId":"0xfb778eacdd10603c521e8a343f4d37f3afa41fb7","tokenIn":"USDC","tokenOut":"EURC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","feeBps":0},{"venue":"uniswap_v4","poolId":"0x77593a92cfedc9a37f1d4f358b0c402fcc25c73149e013477a3abeb00d7b47f1","tokenIn":"EURC","tokenOut":"WETH","tokenInAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":10000,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v2:0xfb778eacdd10603c521e8a343f4d37f3afa41fb7>uniswap_v4:0xdc626cf9b88b9dc26fd0435ff9b27e48ad3d87a2640f4ee3ca0a58141d294326","provider":"native","hops":[{"venue":"uniswap_v2","poolId":"0xfb778eacdd10603c521e8a343f4d37f3afa41fb7","tokenIn":"USDC","tokenOut":"EURC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","feeBps":0},{"venue":"uniswap_v4","poolId":"0xdc626cf9b88b9dc26fd0435ff9b27e48ad3d87a2640f4ee3ca0a58141d294326","tokenIn":"EURC","tokenOut":"WETH","tokenInAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":9785,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false}],"unsupportedVenues":[],"best":{"provider":"native","amountOutQuoted":"0.037364994127906937","amountOutSimulated":"0.037364994127906937","amountOutRaw":"37364994127906937","minAmountOut":"0.036991344186627867","gasUsdc":"0.00857","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"floorBasis":"simulated","type":"direct","legs":[{"routeIndex":0,"shareBps":10000,"amountIn":"100","amountOut":"0.037364994127906937","minAmountOut":"0.036991344186627867"}]},"safety":{"verdict":"pinned","method":"simulate_v1","routeId":"graph:0x3600000000000000000000000000000000000000:0x128cc466b61f542da60c70e3aa11c10e19b84edb:8b294cebb19db855561ff028","canSell":true,"buyTaxBps":null,"sellTaxBps":null,"exitSellTaxBps":null,"buyImpactBps":0,"sellImpactBps":null,"execCostBps":null,"roundTripLossBps":null,"maxBuyUsdc":null,"maxSellTokens":null,"sellDelaySec":null,"revertReason":null,"scope":{"block":23393292,"walletProfile":"fresh_eoa","sellDelaySec":null,"tokenAgeSec":9065285},"note":"Both endpoints are pinned assets; graph delivery was measured at the quote block."},"warnings":[],"attestation":null}}}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"PAYMENT-RESPONSE":{"description":"Settlement receipt for this call's payment (base64 JSON); see the SettleResponse schema for the decoded shape.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/SettleResponse"}},"example":"eyJzdWNjZXNzIjp0cnVlLCJwYXllciI6IjB4NUVkZmY4MkYwRTdEQzI1OTY4Y2JhOEI2MTRiZURENzgyYWMyY0VERCIsInRyYW5zYWN0aW9uIjoiMHhiZTdiYjEzMWRjODhiNjI1NjZiOGZkY2ZkNWY1N2ViNzQ1Njk3ZDU3N2NmNmQ5Y2JmZTgxZWVmNTI5ODFlNzFiIiwibmV0d29yayI6ImVpcDE1NTo1MDQyMDAyIn0="}}},"400":{"description":"invalid_request / ticker_not_allowed / invalid_amount / unsupported_pair / unknown_venue / unknown_source / taker_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteErrorResponse"},"examples":{"ticker_not_allowed":{"summary":"ticker_not_allowed","value":{"error":{"code":"ticker_not_allowed","message":"sell must be a 0x token address, not a ticker or name","hint":"Resolve the ticker with POST /trade/v1/search and quote the address you pick."},"next":"fix_request"}}}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"402":{"$ref":"#/components/responses/PaymentRequired"},"404":{"description":"token_not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteErrorResponse"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"413":{"description":"payload_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"422":{"description":"no_route / insufficient_liquidity / unsupported_venue / buy_reverts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteErrorResponse"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"429":{"description":"lookup_rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteErrorResponse"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"500":{"description":"internal (arcgate's own handler) or an x402 middleware internal error - neither settles payment.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/QuoteErrorResponse"},{"$ref":"#/components/schemas/X402MiddlewareError"}]}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"502":{"$ref":"#/components/responses/FacilitatorError"},"503":{"description":"rpc_unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteErrorResponse"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.010000"}}}},"/trade/v1/swap":{"post":{"operationId":"tradeSwap","tags":["trade"],"summary":"Turn a stored quote into unsigned swap transactions","description":"Turns a stored quote into unsigned transactions for the taker to sign and send. arcgate never signs, broadcasts or holds funds.\n\n- **Cost:** 0.01 USDC under $1,000; 0.05 USDC from $1,000 to $10,000; above that 0.05 USDC plus 0.5 bps of the amount over $10,000, capped at 5 USDC, size-tiered by the quote's USD notional (the USDC side for a USDC pair, or a token-to-token quote's USD valuation; a quote with no valuation prices at tier 1), over x402 (402 with `PAYMENT-REQUIRED`, retry with `PAYMENT-SIGNATURE`). Charged once per quote: POST /trade/v1/swap/tx, the Permit2 second round below, is free.\n- **Key inputs:** `quoteId` (from POST /trade/v1/quote), `taker`; optional `recipient` (defaults to `taker`), `deadlineSec`, `approval`. Never `permit` - that belongs to POST /trade/v1/swap/tx; sending one here is 400 `invalid_request` (the strict schema rejects the unknown key).\n- **Every quote executes through ArcgateRouter:** it is always the Permit2 `spender` and the ERC-20 `approve` spender below. When every source pool of the route being executed trades native USDC, the swap is funded by `value` instead - no approval transaction and no signature at all.\n- **Permit2 (default, one or two calls):**\n  - Returns `transactions` - an unlimited ERC-20 `approve(Permit2, type(uint256).max)` first, if the token's ERC-20 allowance to Permit2 is below the amount, then the swap, which carries an empty Permit2 signature and is only directly sendable as-is when a Permit2 allowance to ArcgateRouter already covers the amount, in which case `signatures` is empty too. Otherwise it also returns `signatures: [{ kind: \"permit2\", typedData }]`; sign `typedData` with the taker's key (EIP-712, e.g. viem's `signTypedData`).\n  - **Sign, then call POST /trade/v1/swap/tx** with the same `quoteId`, `taker` and `recipient`, and `permit: { message: typedData.message, signature }`, while the quote is live: free, because this call already paid the swap fee. The first call to it that succeeds uses the round up; a failed one doesn't.\n  - Send that response's `transactions` in order.\n- **`approval: \"approve\"` (one call):** returns at most one ERC-20 `approve(ArcgateRouter, amountIn)` transaction instead of a permit to sign - an exact amount, never Permit2, never a signature - and only when the taker's current allowance is below it.\n- **Freshness:** the quote lives for the `ttlSec` the quote call asked for (default/max 120s); after that `quoteId` is 410 `quote_expired`. Every call re-quotes and re-simulates at the current block and returns 409 `quote_stale` when the fresh re-quote fails or falls below the stored `minAmountOut`, when the pre-flight simulation reverts on slippage, or when the simulated delivery is below `minAmountOut`. A 409 or 410 carries a free fresh quote in `quote`, with `next: \"requote\"`: the original quote request (same amount, tokens, side, `slippageBps` and venues, default `ttlSec`) quoted again through the same pipeline, exactly as POST /trade/v1/quote answers it; when the original named a `taker`, the fresh quote is for this call's `taker`, the wallet swapping now. Nothing executes on it: check its price, `safety.verdict` and `readiness`, then swap its `quoteId`. When the fresh quote can't be traded (`no_route`, `insufficient_liquidity`, `unsupported_venue` or `buy_reverts`, a `cannot_sell` or `illiquid` verdict, not executable, or the taker isn't ready) the answer is `next: \"stop\"` with no `quote`, and `error.hint` says why. One fresh quote per paid quote: a second 409/410 for the same `quoteId`, a quote that itself came from a 409/410, or a quote expired over 5 minutes ago gets plain `requote` with no `quote`, as does one whose re-quote couldn't run or failed on the server's side; then quote again yourself.\n- **Fallback:** A stored route on a disabled/undeployed venue falls back to the best executable candidate the quote already priced (warning `route_not_executable`), or 422 `not_executable` when no such candidate exists, none re-quotes, or no ArcgateRouter is configured at all.\n- **Attempts:** a quote gets at most 5 failed calls here; the next call on that `quoteId` is 429 `swap_attempts_exhausted` (`next: \"requote\"`), answered without running the swap pipeline. A failed call is a 409, a 410 (its fresh quote may run), a 422, 500 or 503, or a successful pipeline whose payment settlement or delivery fails. An attempt stays reserved until its 200 is delivered (after settlement when paid); that delivery, a 404, or a 400 (at parse, or a reserved `taker`/`recipient`) uses none. A delivered 200 does not reset this quote's previous failures. POST /trade/v1/swap/tx counts its own, per permit round.\n- **Next:** a 200 with `signatures` non-empty needs POST /trade/v1/swap/tx before sending anything (`next: \"sign_permit\"`); otherwise sign and send `transactions` in order, then confirm the fill with POST /trade/v1/receipt (free).","security":[{"x402":[]}],"parameters":[{"$ref":"#/components/parameters/PaymentSignature"}],"x-price":"0.01 USDC under $1,000; 0.05 USDC from $1,000 to $10,000; above that 0.05 USDC plus 0.5 bps of the amount over $10,000, capped at 5 USDC","x-payment":{"asset":"USDC","decimals":6,"tiers":[{"envVar":"PRICE_SWAP","defaultBaseUnits":10000,"appliesToUsdNotional":"< 1,000, a quote with no USD valuation, or unknown/expired quoteId"},{"envVar":"PRICE_SWAP_MID","defaultBaseUnits":50000,"appliesToUsdNotional":"1,000-10,000 inclusive"},{"envVar":"PRICE_SWAP_LARGE_BPS","defaultBps":0.5,"appliesToUsdNotional":"> 10,000","formula":"PRICE_SWAP_MID + bps * (notionalUsd - 10000), rounded up"}],"cap":{"envVar":"PRICE_SWAP_MAX","defaultBaseUnits":5000000}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapRequest"},"examples":{"swap":{"summary":"swap","value":{"quoteId":"q_d02d694103c1e1f2","taker":"0x93595C7Ac4E7E5afe5232D614041B48a6111687B"}}}}}},"responses":{"200":{"description":"Unsigned transactions. When a signature is needed, `signatures[0].typedData` is the Permit2 `PermitSingle` to sign (`next: \"sign_permit\"`); `transactions` includes the swap with an empty Permit2 signature, not yet embedded - sign, then call POST /trade/v1/swap/tx. When no signature is needed (native-USDC-funded, or an existing Permit2 allowance already covers the amount), `signatures` is empty and `transactions` is directly sendable. `warnings[]` may include `route_not_executable` (fallback route; a truly non-executable route is 422 instead). `approval_fallback` is reserved in the schema for contract stability but is never emitted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapResponse"},"examples":{"swap":{"summary":"swap","value":{"quoteId":"q_d02d694103c1e1f2","block":23393292,"expiresAt":"2026-09-29T16:01:42.000Z","signatures":[{"kind":"permit2","typedData":{"domain":{"name":"Permit2","chainId":5042,"verifyingContract":"0x000000000022D473030F116dDEE9F6B43aC78BA3"},"types":{"PermitSingle":[{"name":"details","type":"PermitDetails"},{"name":"spender","type":"address"},{"name":"sigDeadline","type":"uint256"}],"PermitDetails":[{"name":"token","type":"address"},{"name":"amount","type":"uint160"},{"name":"expiration","type":"uint48"},{"name":"nonce","type":"uint48"}]},"primaryType":"PermitSingle","message":{"details":{"token":"0x3600000000000000000000000000000000000000","amount":"100000000","expiration":"1793289642","nonce":"0"},"spender":"0x6cf4f7785d479b9ec1c3abe2fb569525380baede","sigDeadline":"1790697702"}}}],"transactions":[{"to":"0x3600000000000000000000000000000000000000","data":"0x095ea7b3000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","value":"0","gas":"72444","purpose":"approve"},{"to":"0x6cf4f7785d479b9ec1c3abe2fb569525380baede","data":"0xfdbcb69200000000000000000000000036000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f5e100000000000000000000000000128cc466b61f542da60c70e3aa11c10e19b84edb00000000000000000000000000000000000000000000000000836b6e7a02171b00000000000000000000000093595c7ac4e7e5afe5232d614041b48a6111687b000000000000000000000000000000000000000000000000000000006abbe0e6000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000128cc466b61f542da60c70e3aa11c10e19b84edb0000000000000000000000000000000000000000000000000000000005f5e1000000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000836b6e7a02171b00000000000000000000000057025fb592d9832b05d11097058c475b3ed974210000000000000000000000003600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a400000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000104a026383e0000000000000000000000003600000000000000000000000000000000000000000000000000000000000000128cc466b61f542da60c70e3aa11c10e19b84edb00000000000000000000000000000000000000000000000000000000000000320000000000000000000000006cf4f7785d479b9ec1c3abe2fb569525380baede000000000000000000000000000000000000000000000000000000006abbe0e67fffffffffffffffffffffffffffffffffffffffffffffffffffffffa3a3a3a400000000000000000000000000000000000000000000000000836b6e7a02171b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000","value":"0","gas":"674049","purpose":"swap"}],"amountOutSimulated":"37364994127906937","minAmountOut":"36991344186627867","recipient":"0x93595c7ac4e7e5afe5232d614041b48a6111687b","safety":{"verdict":"pinned","scope":{"walletProfile":"taker","block":23393292}},"attestation":null,"warnings":[],"next":"sign_permit"}}}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"PAYMENT-RESPONSE":{"description":"Settlement receipt for this call's payment (base64 JSON); see the SettleResponse schema for the decoded shape.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/SettleResponse"}},"example":"eyJzdWNjZXNzIjp0cnVlLCJwYXllciI6IjB4NUVkZmY4MkYwRTdEQzI1OTY4Y2JhOEI2MTRiZURENzgyYWMyY0VERCIsInRyYW5zYWN0aW9uIjoiMHg5N2MxYzE0YWY1YzQxZmFjNjNhZjZiZGE4Y2FjNDQxZTFjY2NhNDU0NDJhZmQxYTk4ODczYjk5MDBiZWM1MDAxIiwibmV0d29yayI6ImVpcDE1NTo1MDQyMDAyIn0="}}},"400":{"description":"invalid_request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapErrorResponse"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"402":{"$ref":"#/components/responses/PaymentRequired"},"404":{"description":"quote_not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapErrorResponse"},"examples":{"quote_not_found":{"summary":"quote_not_found","value":{"error":{"code":"quote_not_found","message":"no quote with that id"},"next":"requote"}}}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"409":{"description":"quote_stale","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapErrorResponse"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"410":{"description":"quote_expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapErrorResponse"},"examples":{"quote_expired, with a fresh quote":{"summary":"quote_expired, with a fresh quote","value":{"error":{"code":"quote_expired","message":"the quote has expired"},"quote":{"quoteId":"q_d985acda48c048ea","network":"eip155:5042","block":23393292,"expiresAt":"2026-09-29T16:03:03.093Z","side":"exactIn","sell":{"address":"0x3600000000000000000000000000000000000000","symbol":"USDC","decimals":6,"amount":"100","amountRaw":"100000000","verification":{"status":"verified","source":"circle_docs","trust":1},"state":null},"buy":{"address":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","symbol":"WETH","decimals":18,"verification":{"status":"verified","source":"circle_docs","trust":1},"state":"pool_only","discovered":"index"},"slippageBps":100,"routes":[{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|aerodrome_cl:0x6f302decb49fb30b2d2c609bdd16e04e7dd096fc","provider":"native","hops":[{"venue":"aerodrome_cl","poolId":"0x6f302decb49fb30b2d2c609bdd16e04e7dd096fc","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":null}],"amountOutQuoted":"0.037364994127906937","buyTaxBps":0,"costVsMidBps":0,"gasUsdc":"0.00857","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0xe68ba1ac44fe2b602ae95c05df0d3b8940e81ad16d859e63449b6fb5c64f2f8f","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0xe68ba1ac44fe2b602ae95c05df0d3b8940e81ad16d859e63449b6fb5c64f2f8f","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":29,"hooks":"0x1df2971b2dfb0e80d7061dbe5e73688ba6552800"}],"amountOutQuoted":"0.037282329350358011","buyTaxBps":0,"costVsMidBps":22,"gasUsdc":"0.003606","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v3:0x964cff2cccb9059e83d507df348f070e5257a2e0","provider":"native","hops":[{"venue":"uniswap_v3","poolId":"0x964cff2cccb9059e83d507df348f070e5257a2e0","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":30}],"amountOutQuoted":"0.037028477878735493","buyTaxBps":0,"costVsMidBps":90,"gasUsdc":"0.005201","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0x0e3778957c57c367e7ea5513122d3e300a1ee635166e22d07c284b01dcea1f95","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0x0e3778957c57c367e7ea5513122d3e300a1ee635166e22d07c284b01dcea1f95","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":25,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0x3bbec4961c22b01bf59fae55aa26bb27a09af34464c08703d732455d1cca0458","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0x3bbec4961c22b01bf59fae55aa26bb27a09af34464c08703d732455d1cca0458","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":20,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0x43d6152184604afd6b042b10581732773f38a3b78a853f162fbe22d78473da24","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0x43d6152184604afd6b042b10581732773f38a3b78a853f162fbe22d78473da24","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":15,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0xc28a1c158752bfff216957aa4a763fc6039640eb56d4a1c317d3fbbe842a84c0","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0xc28a1c158752bfff216957aa4a763fc6039640eb56d4a1c317d3fbbe842a84c0","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":1,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0xf77dcc99ff598ee0c39366c31788e879346e490614c311d337d43a4a54be3751","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0xf77dcc99ff598ee0c39366c31788e879346e490614c311d337d43a4a54be3751","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":21,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0xfb8548b4ff27561d87480be6a9eaa54ed70e4acbf0573bcc3474e791b9fc4df7","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0xfb8548b4ff27561d87480be6a9eaa54ed70e4acbf0573bcc3474e791b9fc4df7","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":29,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0xf9a7d535a7d2c0b6aa57c7a58fea5e9236f0fc3298dc0f29d45d28b6a5c13738","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0xf9a7d535a7d2c0b6aa57c7a58fea5e9236f0fc3298dc0f29d45d28b6a5c13738","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":10,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0xb975733743abcffdc62507fe36eac83ad0d3600cb6ed4731cf62d32ad12a4425","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0xb975733743abcffdc62507fe36eac83ad0d3600cb6ed4731cf62d32ad12a4425","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":23,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"direct","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0xc0254fec12d761c1297865ad969f681c0328ae687889aebe67a53be6bd16900b","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0xc0254fec12d761c1297865ad969f681c0328ae687889aebe67a53be6bd16900b","tokenIn":"USDC","tokenOut":"WETH","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":5,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v3:0x82916bee18fcef517b26c72d7cb5f13694e1db41>aerodrome_cl:0x72dff32c9c5c28758565be0a7d4e6e42fb498506","provider":"native","hops":[{"venue":"uniswap_v3","poolId":"0x82916bee18fcef517b26c72d7cb5f13694e1db41","tokenIn":"USDC","tokenOut":"cirBTC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","feeBps":1},{"venue":"aerodrome_cl","poolId":"0x72dff32c9c5c28758565be0a7d4e6e42fb498506","tokenIn":"cirBTC","tokenOut":"WETH","tokenInAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":null}],"amountOutQuoted":"0.037358031360826521","buyTaxBps":0,"costVsMidBps":1,"gasUsdc":"0.011457","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v3:0x82916bee18fcef517b26c72d7cb5f13694e1db41>uniswap_v4:0xbcb805f39d6cd6dfa1f6d71f31d5705a8313d17a161d1bf0d672ac55fdd4cac9","provider":"native","hops":[{"venue":"uniswap_v3","poolId":"0x82916bee18fcef517b26c72d7cb5f13694e1db41","tokenIn":"USDC","tokenOut":"cirBTC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","feeBps":1},{"venue":"uniswap_v4","poolId":"0xbcb805f39d6cd6dfa1f6d71f31d5705a8313d17a161d1bf0d672ac55fdd4cac9","tokenIn":"cirBTC","tokenOut":"WETH","tokenInAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":100,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v3:0x82916bee18fcef517b26c72d7cb5f13694e1db41>uniswap_v3:0xbb505c923d0ce6364b6d1769fd85bd62b0c0e9c9","provider":"native","hops":[{"venue":"uniswap_v3","poolId":"0x82916bee18fcef517b26c72d7cb5f13694e1db41","tokenIn":"USDC","tokenOut":"cirBTC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","feeBps":1},{"venue":"uniswap_v3","poolId":"0xbb505c923d0ce6364b6d1769fd85bd62b0c0e9c9","tokenIn":"cirBTC","tokenOut":"WETH","tokenInAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":30}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|aerodrome_cl:0xd945caee4635bcd7fb8a9fa74dc1d0c4c1472782>aerodrome_cl:0x72dff32c9c5c28758565be0a7d4e6e42fb498506","provider":"native","hops":[{"venue":"aerodrome_cl","poolId":"0xd945caee4635bcd7fb8a9fa74dc1d0c4c1472782","tokenIn":"USDC","tokenOut":"cirBTC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","feeBps":null},{"venue":"aerodrome_cl","poolId":"0x72dff32c9c5c28758565be0a7d4e6e42fb498506","tokenIn":"cirBTC","tokenOut":"WETH","tokenInAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":null}],"amountOutQuoted":"0.037343738764921397","buyTaxBps":0,"costVsMidBps":5,"gasUsdc":"0.016086","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|aerodrome_cl:0xd945caee4635bcd7fb8a9fa74dc1d0c4c1472782>uniswap_v4:0xbcb805f39d6cd6dfa1f6d71f31d5705a8313d17a161d1bf0d672ac55fdd4cac9","provider":"native","hops":[{"venue":"aerodrome_cl","poolId":"0xd945caee4635bcd7fb8a9fa74dc1d0c4c1472782","tokenIn":"USDC","tokenOut":"cirBTC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","feeBps":null},{"venue":"uniswap_v4","poolId":"0xbcb805f39d6cd6dfa1f6d71f31d5705a8313d17a161d1bf0d672ac55fdd4cac9","tokenIn":"cirBTC","tokenOut":"WETH","tokenInAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":100,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|aerodrome_cl:0xd945caee4635bcd7fb8a9fa74dc1d0c4c1472782>uniswap_v3:0xbb505c923d0ce6364b6d1769fd85bd62b0c0e9c9","provider":"native","hops":[{"venue":"aerodrome_cl","poolId":"0xd945caee4635bcd7fb8a9fa74dc1d0c4c1472782","tokenIn":"USDC","tokenOut":"cirBTC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","feeBps":null},{"venue":"uniswap_v3","poolId":"0xbb505c923d0ce6364b6d1769fd85bd62b0c0e9c9","tokenIn":"cirBTC","tokenOut":"WETH","tokenInAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":30}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0x85ff2b5048d26bbdf37e249333b59891605149a4a5476cea5c93050501e0f83d>aerodrome_cl:0x72dff32c9c5c28758565be0a7d4e6e42fb498506","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0x85ff2b5048d26bbdf37e249333b59891605149a4a5476cea5c93050501e0f83d","tokenIn":"USDC","tokenOut":"cirBTC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","feeBps":15,"hooks":"0x0000000000000000000000000000000000000000"},{"venue":"aerodrome_cl","poolId":"0x72dff32c9c5c28758565be0a7d4e6e42fb498506","tokenIn":"cirBTC","tokenOut":"WETH","tokenInAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":null}],"amountOutQuoted":"0.037244622717046637","buyTaxBps":0,"costVsMidBps":32,"gasUsdc":"0.010478","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0x85ff2b5048d26bbdf37e249333b59891605149a4a5476cea5c93050501e0f83d>uniswap_v4:0xbcb805f39d6cd6dfa1f6d71f31d5705a8313d17a161d1bf0d672ac55fdd4cac9","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0x85ff2b5048d26bbdf37e249333b59891605149a4a5476cea5c93050501e0f83d","tokenIn":"USDC","tokenOut":"cirBTC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","feeBps":15,"hooks":"0x0000000000000000000000000000000000000000"},{"venue":"uniswap_v4","poolId":"0xbcb805f39d6cd6dfa1f6d71f31d5705a8313d17a161d1bf0d672ac55fdd4cac9","tokenIn":"cirBTC","tokenOut":"WETH","tokenInAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":100,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0x85ff2b5048d26bbdf37e249333b59891605149a4a5476cea5c93050501e0f83d>uniswap_v3:0xbb505c923d0ce6364b6d1769fd85bd62b0c0e9c9","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0x85ff2b5048d26bbdf37e249333b59891605149a4a5476cea5c93050501e0f83d","tokenIn":"USDC","tokenOut":"cirBTC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","feeBps":15,"hooks":"0x0000000000000000000000000000000000000000"},{"venue":"uniswap_v3","poolId":"0xbb505c923d0ce6364b6d1769fd85bd62b0c0e9c9","tokenIn":"cirBTC","tokenOut":"WETH","tokenInAddress":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":30}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v3:0x5e82892d361a6c680027a97da2280064b8fc8a52>uniswap_v4:0x7b07f308dc43dd7d6fdfbfbc6456e61b88749816a998125cc1af86ac013946e0","provider":"native","hops":[{"venue":"uniswap_v3","poolId":"0x5e82892d361a6c680027a97da2280064b8fc8a52","tokenIn":"USDC","tokenOut":"XAUM","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x178b01f61cbea1d2a5581fe1621be607835ec349","feeBps":5},{"venue":"uniswap_v4","poolId":"0x7b07f308dc43dd7d6fdfbfbc6456e61b88749816a998125cc1af86ac013946e0","tokenIn":"XAUM","tokenOut":"WETH","tokenInAddress":"0x178b01f61cbea1d2a5581fe1621be607835ec349","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":9885,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0x596b558298f7398edfc6579a32354f34544b403944dd5c4b05377a5993629eb2>uniswap_v4:0x7b07f308dc43dd7d6fdfbfbc6456e61b88749816a998125cc1af86ac013946e0","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0x596b558298f7398edfc6579a32354f34544b403944dd5c4b05377a5993629eb2","tokenIn":"USDC","tokenOut":"XAUM","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x178b01f61cbea1d2a5581fe1621be607835ec349","feeBps":5,"hooks":"0x0000000000000000000000000000000000000000"},{"venue":"uniswap_v4","poolId":"0x7b07f308dc43dd7d6fdfbfbc6456e61b88749816a998125cc1af86ac013946e0","tokenIn":"XAUM","tokenOut":"WETH","tokenInAddress":"0x178b01f61cbea1d2a5581fe1621be607835ec349","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":9885,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0xc96ec046f0c094414e175ee751c1319dc2f22e685be5935e3406adbde85e6dda>uniswap_v4:0x7b07f308dc43dd7d6fdfbfbc6456e61b88749816a998125cc1af86ac013946e0","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0xc96ec046f0c094414e175ee751c1319dc2f22e685be5935e3406adbde85e6dda","tokenIn":"USDC","tokenOut":"XAUM","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x178b01f61cbea1d2a5581fe1621be607835ec349","feeBps":90,"hooks":"0x0000000000000000000000000000000000000000"},{"venue":"uniswap_v4","poolId":"0x7b07f308dc43dd7d6fdfbfbc6456e61b88749816a998125cc1af86ac013946e0","tokenIn":"XAUM","tokenOut":"WETH","tokenInAddress":"0x178b01f61cbea1d2a5581fe1621be607835ec349","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":9885,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v4:0x27b37d8ba66027716bc4bccdce7b797e4ecd9d2dc7e59df3eb5c8cf473b4081b>uniswap_v4:0x8fbdaf4c75ae7042e00e9685a4fae0f34f1a2c49a94106ed06ce3a25b4634869","provider":"native","hops":[{"venue":"uniswap_v4","poolId":"0x27b37d8ba66027716bc4bccdce7b797e4ecd9d2dc7e59df3eb5c8cf473b4081b","tokenIn":"USDC","tokenOut":"CRCL","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x2ba0f44bdfc17fba30eda9cdbecb908ca45b043b","feeBps":17,"hooks":"0x0000000000000000000000000000000000000000"},{"venue":"uniswap_v4","poolId":"0x8fbdaf4c75ae7042e00e9685a4fae0f34f1a2c49a94106ed06ce3a25b4634869","tokenIn":"CRCL","tokenOut":"WETH","tokenInAddress":"0x2ba0f44bdfc17fba30eda9cdbecb908ca45b043b","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":9885,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v3:0x64d77c65a5cbd728d891140fd5c30e07d21ee65b>uniswap_v4:0x8fbdaf4c75ae7042e00e9685a4fae0f34f1a2c49a94106ed06ce3a25b4634869","provider":"native","hops":[{"venue":"uniswap_v3","poolId":"0x64d77c65a5cbd728d891140fd5c30e07d21ee65b","tokenIn":"USDC","tokenOut":"CRCL","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x2ba0f44bdfc17fba30eda9cdbecb908ca45b043b","feeBps":30},{"venue":"uniswap_v4","poolId":"0x8fbdaf4c75ae7042e00e9685a4fae0f34f1a2c49a94106ed06ce3a25b4634869","tokenIn":"CRCL","tokenOut":"WETH","tokenInAddress":"0x2ba0f44bdfc17fba30eda9cdbecb908ca45b043b","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":9885,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v3:0x2e8180fa3967caf9abf57bbaeab9ae9063bcd7ba>uniswap_v4:0x8fbdaf4c75ae7042e00e9685a4fae0f34f1a2c49a94106ed06ce3a25b4634869","provider":"native","hops":[{"venue":"uniswap_v3","poolId":"0x2e8180fa3967caf9abf57bbaeab9ae9063bcd7ba","tokenIn":"USDC","tokenOut":"CRCL","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0x2ba0f44bdfc17fba30eda9cdbecb908ca45b043b","feeBps":100},{"venue":"uniswap_v4","poolId":"0x8fbdaf4c75ae7042e00e9685a4fae0f34f1a2c49a94106ed06ce3a25b4634869","tokenIn":"CRCL","tokenOut":"WETH","tokenInAddress":"0x2ba0f44bdfc17fba30eda9cdbecb908ca45b043b","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":9885,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v3:0x6fd5f2fb831940dcd61a98c5b3acb7d8c6f3bfc1>uniswap_v4:0x77593a92cfedc9a37f1d4f358b0c402fcc25c73149e013477a3abeb00d7b47f1","provider":"native","hops":[{"venue":"uniswap_v3","poolId":"0x6fd5f2fb831940dcd61a98c5b3acb7d8c6f3bfc1","tokenIn":"USDC","tokenOut":"EURC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","feeBps":5},{"venue":"uniswap_v4","poolId":"0x77593a92cfedc9a37f1d4f358b0c402fcc25c73149e013477a3abeb00d7b47f1","tokenIn":"EURC","tokenOut":"WETH","tokenInAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":10000,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v3:0x6fd5f2fb831940dcd61a98c5b3acb7d8c6f3bfc1>uniswap_v4:0xdc626cf9b88b9dc26fd0435ff9b27e48ad3d87a2640f4ee3ca0a58141d294326","provider":"native","hops":[{"venue":"uniswap_v3","poolId":"0x6fd5f2fb831940dcd61a98c5b3acb7d8c6f3bfc1","tokenIn":"USDC","tokenOut":"EURC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","feeBps":5},{"venue":"uniswap_v4","poolId":"0xdc626cf9b88b9dc26fd0435ff9b27e48ad3d87a2640f4ee3ca0a58141d294326","tokenIn":"EURC","tokenOut":"WETH","tokenInAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":9785,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|aerodrome_cl:0xbe080ac37ad1305dfcc9521f5e6f68cfdc41b7fa>uniswap_v4:0x77593a92cfedc9a37f1d4f358b0c402fcc25c73149e013477a3abeb00d7b47f1","provider":"native","hops":[{"venue":"aerodrome_cl","poolId":"0xbe080ac37ad1305dfcc9521f5e6f68cfdc41b7fa","tokenIn":"USDC","tokenOut":"EURC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","feeBps":null},{"venue":"uniswap_v4","poolId":"0x77593a92cfedc9a37f1d4f358b0c402fcc25c73149e013477a3abeb00d7b47f1","tokenIn":"EURC","tokenOut":"WETH","tokenInAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":10000,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|aerodrome_cl:0xbe080ac37ad1305dfcc9521f5e6f68cfdc41b7fa>uniswap_v4:0xdc626cf9b88b9dc26fd0435ff9b27e48ad3d87a2640f4ee3ca0a58141d294326","provider":"native","hops":[{"venue":"aerodrome_cl","poolId":"0xbe080ac37ad1305dfcc9521f5e6f68cfdc41b7fa","tokenIn":"USDC","tokenOut":"EURC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","feeBps":null},{"venue":"uniswap_v4","poolId":"0xdc626cf9b88b9dc26fd0435ff9b27e48ad3d87a2640f4ee3ca0a58141d294326","tokenIn":"EURC","tokenOut":"WETH","tokenInAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":9785,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v2:0xfb778eacdd10603c521e8a343f4d37f3afa41fb7>uniswap_v4:0x77593a92cfedc9a37f1d4f358b0c402fcc25c73149e013477a3abeb00d7b47f1","provider":"native","hops":[{"venue":"uniswap_v2","poolId":"0xfb778eacdd10603c521e8a343f4d37f3afa41fb7","tokenIn":"USDC","tokenOut":"EURC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","feeBps":0},{"venue":"uniswap_v4","poolId":"0x77593a92cfedc9a37f1d4f358b0c402fcc25c73149e013477a3abeb00d7b47f1","tokenIn":"EURC","tokenOut":"WETH","tokenInAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":10000,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false},{"type":"two_hop","routeId":"0x3600000000000000000000000000000000000000>0x128cc466b61f542da60c70e3aa11c10e19b84edb|uniswap_v2:0xfb778eacdd10603c521e8a343f4d37f3afa41fb7>uniswap_v4:0xdc626cf9b88b9dc26fd0435ff9b27e48ad3d87a2640f4ee3ca0a58141d294326","provider":"native","hops":[{"venue":"uniswap_v2","poolId":"0xfb778eacdd10603c521e8a343f4d37f3afa41fb7","tokenIn":"USDC","tokenOut":"EURC","tokenInAddress":"0x3600000000000000000000000000000000000000","tokenOutAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","feeBps":0},{"venue":"uniswap_v4","poolId":"0xdc626cf9b88b9dc26fd0435ff9b27e48ad3d87a2640f4ee3ca0a58141d294326","tokenIn":"EURC","tokenOut":"WETH","tokenInAddress":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","tokenOutAddress":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","feeBps":9785,"hooks":"0x0000000000000000000000000000000000000000"}],"buyTaxBps":0,"costVsMidBps":null,"gasUsdc":"0","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"partialFill":false}],"unsupportedVenues":[],"best":{"provider":"native","amountOutQuoted":"0.037364994127906937","amountOutSimulated":"0.037364994127906937","amountOutRaw":"37364994127906937","minAmountOut":"0.036991344186627867","gasUsdc":"0.00857","fee":{"bps":0,"amount":"0","token":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","collector":null},"executable":true,"providerQuoteAgeBlocks":0,"floorBasis":"simulated","type":"direct","legs":[{"routeIndex":0,"shareBps":10000,"amountIn":"100","amountOut":"0.037364994127906937","minAmountOut":"0.036991344186627867"}]},"safety":{"verdict":"pinned","method":"simulate_v1","routeId":"graph:0x3600000000000000000000000000000000000000:0x128cc466b61f542da60c70e3aa11c10e19b84edb:8b294cebb19db855561ff028","canSell":true,"buyTaxBps":null,"sellTaxBps":null,"exitSellTaxBps":null,"buyImpactBps":0,"sellImpactBps":null,"execCostBps":null,"roundTripLossBps":null,"maxBuyUsdc":null,"maxSellTokens":null,"sellDelaySec":null,"revertReason":null,"scope":{"block":23393292,"walletProfile":"fresh_eoa","sellDelaySec":null,"tokenAgeSec":9065314},"note":"Both endpoints are pinned assets; graph delivery was measured at the quote block."},"warnings":[],"attestation":null,"readiness":{"taker":"0x93595c7ac4e7e5afe5232d614041b48a6111687b","balance":{"token":"0x3600000000000000000000000000000000000000","required":"100000000","available":"1000000000","enough":true},"approval":{"mode":"permit2","needs":"approve_and_sign_permit"},"approve":{"needs":"approve"},"gas":{"estimatedUsdc":"0.01089","available":"900","enough":true},"fees":{"swapUsdc":"0.01","payer":"0x5edff82f0e7dc25968cba8b614bedd782ac2cedd","payerAvailable":null,"enough":null},"totalCostUsdc":"0.02089","ready":true}},"next":"requote"}}}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"413":{"description":"payload_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"422":{"description":"insufficient_balance / swap_reverts / cannot_sell / not_executable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapErrorResponse"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"429":{"description":"swap_attempts_exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapErrorResponse"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"500":{"description":"internal (arcgate's own handler) or an x402 middleware internal error - neither settles payment.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/SwapErrorResponse"},{"$ref":"#/components/schemas/X402MiddlewareError"}]}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"502":{"$ref":"#/components/responses/FacilitatorError"},"503":{"description":"rpc_unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapErrorResponse"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}}},"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"dynamic","currency":"USD","amount":"0.010000","min":"0.010000","max":"5.000000"}}}},"/trade/v1/swap/tx":{"post":{"operationId":"tradeSwapTx","tags":["trade"],"summary":"Sign and send the Permit2 permit a paid POST /trade/v1/swap asked for","description":"The free Permit2 second round: finishes a POST /trade/v1/swap call whose `signatures` asked the taker to sign a Permit2 `PermitSingle`.\n\n- **Cost:** free, never x402-gated - a payment header, if one is sent anyway, is ignored and nobody is charged. Only reachable once, right after the paid call that opened it.\n- **Key inputs:** the SAME `quoteId`, `taker` and `recipient` (defaults to `taker`) as the paid POST /trade/v1/swap call, plus `deadlineSec` and the required `permit: { message: signatures[0].typedData.message, signature }` (sign `typedData` with the taker's key, EIP-712, e.g. viem's `signTypedData`). `permit` accepts only `message` and `signature`, end to end - any other field, at any level, is 400 `invalid_request` at parse. The service rebuilds the Permit2 domain itself and checks the signer, spender, token, amount, nonce and both deadlines: a mismatched spender or token, or an amount below `amountIn` (a larger amount is accepted), is 400 `invalid_request`; a stale nonce, an expired `sigDeadline`/`expiration`, or an invalid signature (verified via ERC-1271 on chain for a contract taker) is 422 `swap_reverts`. A contract taker can swap, but POST /trade/v1/receipt only reads transactions the taker sends itself, so it answers `invalid_request` for a Safe, ERC-4337 or batching EIP-7702 wallet: check your own transaction receipt instead.\n- **No pending round:** 409 `no_pending_swap` when this `quoteId`/`taker`/`recipient` never paid, named a different taker or recipient, or already used its one free call - call POST /trade/v1/swap first, which is paid and returns the permit this call takes.\n- **Freshness:** re-quotes and re-simulates exactly like POST /trade/v1/swap, and can answer the SAME 410 `quote_expired`/409 `quote_stale` it would - but never with a fresh `quote` (issue #124's free re-quote is /trade/v1/swap's own paid-quote courtesy, not this free route's).\n- **Attempts:** a permit round (`quoteId`, `taker`, `recipient`) gets at most 5 failed calls; the next one is 429 `swap_attempts_exhausted` (`next: \"requote\"`), answered without running the swap pipeline. A failed call is a 400 from the permit checks above, a 409, 422, 500 or 503, or an undelivered 200; a delivered 200, a 400 at parse, a 404, a 410 or `no_pending_swap` uses none. Failed POST /trade/v1/swap calls don't count here. A new POST /trade/v1/swap permit response resets this round's attempts only once delivered (after settlement when paid).\n- **Next:** sign and send `transactions` in order, then confirm the fill with POST /trade/v1/receipt (free). This is the last call in search -> quote -> swap -> swap/tx.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapTxRequest"}}}},"responses":{"200":{"description":"Unsigned, directly sendable transactions with the permit embedded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapResponse"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"400":{"description":"invalid_request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapErrorResponse"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"404":{"description":"quote_not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapErrorResponse"},"examples":{"quote_not_found":{"summary":"quote_not_found","value":{"error":{"code":"quote_not_found","message":"no quote with that id"},"next":"requote"}}}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"409":{"description":"quote_stale / no_pending_swap","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapErrorResponse"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"410":{"description":"quote_expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapErrorResponse"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"413":{"description":"payload_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"422":{"description":"insufficient_balance / swap_reverts / cannot_sell / not_executable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapErrorResponse"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"429":{"description":"swap_attempts_exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapErrorResponse"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapErrorResponse"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"503":{"description":"rpc_unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapErrorResponse"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}}}}},"/trade/v1/receipt":{"post":{"operationId":"tradeReceipt","tags":["trade"],"summary":"Confirm a swap landed: delivered against minAmountOut, pass or fail","description":"Tells you whether the transactions POST /trade/v1/swap returned did what the quote promised, once you've sent them. It only reads the chain.\n\n- **Cost:** free, never x402-gated.\n- **Key inputs:** `quoteId` (the one you called POST /trade/v1/swap with) and `txHashes`, the 1 to 4 transactions you sent for it: the swap, and any approvals. It answers for a quote /trade/v1/swap handed transactions for in the last hour, else 404 `swap_not_found`, and only for that quote's transactions, sent from its `taker`: an approval to the input token, or a swap to ArcgateRouter whose deadline one of the quote's /trade/v1/swap or /trade/v1/swap/tx answers issued and whose output goes to its `recipient`, else 400 `invalid_request`.\n- **Smart-contract wallets:** a Safe, an ERC-4337 account or a batching EIP-7702 wallet sends its transaction from an executor or bundler, or to itself, not from the taker to ArcgateRouter, so this answers 400 `invalid_request` for it. Check that transaction's own receipt and your wallet's success event instead.\n- **Returns:** `result`, from the swap transactions. One that filled decides it: `pass` when `delivered` is at least `minAmountOut`, else `fail` (a round 1 that reverted doesn't undo a round 2 that filled). With none filled: `pending` while one is not mined yet, else `fail`: it reverted or was never mined by 60s after its deadline (status `expired`, or `not_found` when the chain never saw it). Approvals are listed but don't change the result. `delivered` is what `recipient` received of `token` (the output), read from the swap transaction's Transfer logs, in base units. Also `block`, each transaction's `status`, and `reason`, one sentence on a fail or pending. The first result from a mined swap is final: asking again returns it.\n- **Limits:** one chain read per quote every 5s (the same `txHashes` inside that get the last answer; other hashes get 429 `receipt_rate_limited` with `retryAfterSec`), and at most 132 per quote (then 429 `receipt_reads_exhausted`, for good).\n- **Next:** `pass`: tell the user what they bought (`delivered` of `token`). `fail`: follow `next`: `requote` when no swap transaction succeeded (nothing filled; quote again), `stop` when one did (tell them `reason`, and don't trade again). `pending`: ask again in a few seconds.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptRequest"}}}},"responses":{"200":{"description":"What the swap delivered, against the quote's `minAmountOut`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptResponse"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"400":{"description":"invalid_request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptErrorResponse"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"404":{"description":"swap_not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptErrorResponse"},"examples":{"swap_not_found":{"summary":"swap_not_found","value":{"error":{"code":"swap_not_found","message":"no /trade/v1/swap answer was issued for that quoteId in the last hour"},"next":"stop"}}}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"413":{"description":"payload_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"429":{"description":"receipt_rate_limited / receipt_reads_exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptErrorResponse"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptErrorResponse"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"503":{"description":"rpc_unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptErrorResponse"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}}}}},"/trade/v1/venues":{"get":{"operationId":"tradeVenues","tags":["trade"],"summary":"List supported DEX venues and hubs","description":"Lists the DEX venues, hub tokens and launchpads this deployment indexes.\n\n- **Cost:** free, never x402-gated.\n- **Returns:** each venue with an `executable` flag, hubs and launchpads.\n- **Next:** use venue ids in POST /trade/v1/quote's `venues` / `excludeVenues`.","security":[],"responses":{"200":{"description":"Configured venues, hubs and launchpads.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VenuesResponse"},"examples":{"configured":{"summary":"configured venues","value":{"venues":[{"id":"uniswap_v4","family":"v4","enabled":true,"factory":null,"deploymentBlock":1948056,"feeUnits":"hundredths_bip","quoter":{"kind":"contract","address":"0x8dc178efb8111bb0973dd9d722ebeff267c98f94","name":"V4Quoter"},"router":{"kind":"contract","address":"0x4fca4a51ab4f23a7447b3284fbd7d73289a89fb1","name":"Universal Router","executable":true},"executable":true,"verified":{"method":"eth_getCode+behavioral eth_call","evidence":"PoolManager/StateView/V4Quoter non-empty code; StateView.poolManager() and V4Quoter.poolManager() both return 0x8366a39cc670b4001a1121b8f6a443a643e40951; Universal Router non-empty code only (execution not exercised).","at":"2026-09-23"}},{"id":"uniswap_v3","family":"v3","enabled":true,"factory":"0xf0db7b58379503491d857db50ac9ece64c653918","deploymentBlock":1948019,"feeUnits":"hundredths_bip","quoter":{"kind":"contract","address":"0x7dfd4f31be6814d2906bde155c3e1b146eac1468","name":"QuoterV2"},"router":{"kind":"contract","address":"0x53bf6b0684ec7ef91e1387da3d1a1769bc5a6f77","name":"SwapRouter02","executable":true},"executable":true,"verified":{"method":"eth_getCode+behavioral eth_call","evidence":"Factory/QuoterV2/SwapRouter02 non-empty code; SwapRouter02.factory() returns the factory address; factory.getPool(WETH,USDC,500) answers without reverting (returns the zero address: no pool at that fee tier, confirming the factory is live and not the non-Uniswap contract squatting the mainnet-checksum address).","at":"2026-09-23"}},{"id":"uniswap_v2","family":"v2","enabled":true,"factory":"0x89e5db8b5aa49aa85ac63f691524311aeb649eba","deploymentBlock":1948011,"feeUnits":"hundredths_bip","quoter":null,"router":{"kind":"contract","address":"0x1f7d7550b1b028f7571e69a784071f0205fd2efa","name":"V2Router02","executable":true},"executable":true,"verified":{"method":"eth_getCode+behavioral eth_call","evidence":"Factory/V2Router02 non-empty code; V2Router02.factory() returns the factory address; factory.allPairsLength() returns 765 (non-zero, live registry).","at":"2026-09-23"}},{"id":"aerodrome_cl","family":"v3","enabled":true,"factory":"0xb89df768af2cfe637ceb352c587fe8edaf491d03","deploymentBlock":20968879,"feeUnits":"aerodrome_dynamic","quoter":{"kind":"state_override","address":"0xae20ae20ae20ae20ae20ae20ae20ae20ae20ae20","code":"aero"},"router":{"kind":"contract","address":"0x57025fb592d9832b05d11097058c475b3ed97421","name":"Slipstream SwapRouter","executable":true},"executable":true,"verified":{"method":"eth_getCode+behavioral eth_call","evidence":"Factory non-empty code; factory.getPool(WETH,USDC,50) returns 0x6f302decb49fb30b2d2c609bdd16e04e7dd096fc, the documented WETH/USDC fixture pool.","at":"2026-09-23"}}],"hubs":[{"id":"usdc","label":"USDC","assets":[{"address":"0x3600000000000000000000000000000000000000","kind":"erc20","decimals":6},{"address":"0x0000000000000000000000000000000000000000","kind":"native","decimals":18}]},{"id":"eurc","label":"EURC","assets":[{"address":"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1","kind":"erc20","decimals":6}]},{"id":"cirbtc","label":"cirBTC","assets":[{"address":"0x171a4217b86a807a64eb94757db6849fb4bdbaa0","kind":"erc20","decimals":8}]},{"id":"weth","label":"WETH","assets":[{"address":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","kind":"erc20","decimals":18}]},{"id":"argus","label":"ARGUS","assets":[{"address":"0xece5ca8bf9220718e5727754026757512212cb3c","kind":"erc20","decimals":18}],"measured":"2026-09-23"}],"launchpads":[{"id":"argus","factories":["0xb021be536808f551b31789422fd28a6c9c6e97da","0x7a17ab0106c46c0be30623f3eb7f299cc0058338","0xa36c443a797771df82533b8b4a86f0affd970862","0xa5628a11c412596e1f63b75a2c0284f843c549d6"],"state":"pool_only","quoteCurrency":"erc20_usdc"},{"id":"o1","factories":["0xee3e862efde6dcd6df5648af0e2731b9d1df4605"],"state":"pool_only","quoteCurrency":"erc20_usdc"},{"id":"minara","factories":["0xb6c6f77ee74af874a183bfd77dd0176d1ac91de6"],"state":"pool_only","quoteCurrency":"native_usdc"},{"id":"tolly","factories":["0xcad7ee36ac193bf2eddb7b3e2736c5bdb8269c8b"],"state":"pool_only","quoteCurrency":"erc20_usdc"},{"id":"foci","factories":["0xa392d6eca5242715517eecd43406aed19424fac0"],"state":"curve_excluded_graduated_supported","quoteCurrency":"erc20_usdc"}]}}}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}}}}},"/trade/v1/mcp":{"post":{"operationId":"tradeMcp","tags":["trade"],"summary":"Model Context Protocol endpoint (paid tools over x402)","description":"The trade API as MCP tools, paid per call with x402.\n\n- **Tools:** every other operation here except `openapi`, named by operationId (tradeSearch, tradeQuote, tradeSwap, tradeSwapTx, tradeReceipt, tradeVenues, health), with the same input schema and the same price.\n- **Cost:** tradeSearch, tradeQuote and tradeSwap are paid per call over Arc USDC; tradeSwapTx, tradeReceipt, tradeVenues and health are free. An unpaid `tools/call` returns a tool result with `isError: true` and the payment requirements in `structuredContent`. Sign them and retry with the payment payload in `params._meta[\"x402/payment\"]`; the receipt comes back in `result._meta[\"x402/payment-response\"]`. A result with `isError: true` never settles.\n- **Errors:** two error results are @x402/mcp's own and carry no `next`: that payment-required one, and a text-only `Internal Server Error` when the facilitator fails mid-call. Every other error result carries the HTTP route's error body, `next` included, in `structuredContent` and the text content; a call the server refuses (an unknown tool, or arguments the input schema rejects) is `invalid_request`, `next: fix_request`.\n- **Client:** use an x402-aware MCP client, e.g. `createx402MCPClient` from `@x402/mcp`.\n- **Transport:** Streamable HTTP, stateless, JSON responses. Send `Accept: application/json, text/event-stream` or the server answers 406. One JSON-RPC message per request (batches are rejected); bodies up to 16kb.","security":[],"parameters":[{"name":"Accept","in":"header","required":true,"description":"Must list both media types (MCP Streamable HTTP); anything else gets 406.","schema":{"type":"string","const":"application/json, text/event-stream"},"example":"application/json, text/event-stream"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"A JSON-RPC 2.0 request (MCP `initialize`, `tools/list`, `tools/call`, ...).","properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","integer"]},"method":{"type":"string"},"params":{"type":"object"}},"required":["jsonrpc","method"]},"examples":{"list tools":{"summary":"list tools","value":{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}},"call health (free)":{"summary":"call health (free)","value":{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"health","arguments":{}}}},"call tradeQuote (answers with its price)":{"summary":"call tradeQuote (answers with its price)","value":{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"tradeQuote","arguments":{"sell":"0x3600000000000000000000000000000000000000","buy":"0x128cc466b61f542da60c70e3aa11c10e19b84edb","amount":"100"}}}}}}}},"responses":{"200":{"description":"A JSON-RPC 2.0 response. Tool errors (including payment required) are results with `isError: true`, not HTTP errors.","content":{"application/json":{"schema":{"type":"object","properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","integer"]},"result":{"type":"object"},"error":{"type":"object"}},"required":["jsonrpc"]}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"202":{"description":"Accepted: a JSON-RPC notification (no response body).","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"400":{"description":"malformed JSON, not a valid JSON-RPC message, or a JSON-RPC batch (not supported)","content":{"application/json":{"schema":{"type":"object"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"406":{"description":"the Accept header must list both application/json and text/event-stream","content":{"application/json":{"schema":{"type":"object"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"413":{"description":"payload_too_large (over 16kb)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}}}},"get":{"operationId":"tradeMcpInfo","tags":["trade"],"summary":"What the MCP endpoint serves","description":"Describes POST /trade/v1/mcp for registries and health checks: name, MCP protocol version, transport and tool names.\n\n- **Cost:** free, never x402-gated.\n- **Event stream:** this stateless server offers none. A GET asking only for `text/event-stream` (an MCP client opening a stream) gets 405 with `Allow: POST`, which MCP clients treat as \"no stream\".","security":[],"responses":{"200":{"description":"The endpoint's description.","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The MCP server's name."},"protocolVersion":{"type":"string","description":"The newest MCP protocol revision the server negotiates."},"transport":{"const":"streamable-http"},"method":{"const":"POST","description":"The method MCP requests use."},"tools":{"type":"array","items":{"type":"string"},"description":"The tool names `tools/list` returns."}},"required":["name","protocolVersion","transport","method","tools"]}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"405":{"description":"the request asked only for an event stream, which this server doesn't offer","content":{"application/json":{"schema":{"type":"object"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}}}}},"/health":{"get":{"operationId":"health","tags":["service"],"summary":"Liveness, cache and RPC diagnostics","description":"Reports whether the service is up, with its diagnostics.\n\n- **Cost:** free, never x402-gated.\n- **Returns:** DB import health, rule set version, the deployed commit, cache/RPC/spend counters and the payer-identity mode.\n- **Next:** call before search/quote/swap to check the service is up.","security":[],"responses":{"200":{"description":"Service health.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"},"examples":{"snapshot":{"summary":"snapshot","value":{"ok":true,"db":{"ok":true,"tokens":217898,"verified":68,"importedAt":1790388601},"rulesVersion":"r2-383954828c","commit":null,"caches":{"response":{"hits":0,"misses":4,"size":2,"bytes":14867},"candidates":{"hits":0,"misses":2,"size":2,"bytes":6494806},"generations":{"keys":31,"bumps":41},"abuse":{"missCacheSize":0,"payersTracked":0,"rateLimited":0},"singleflight":{"response":{"hits":0,"leaders":2},"probe":{"hits":0,"leaders":0},"depth":{"hits":0,"leaders":2}},"quote":{"lastEthCalls":3,"lastSafetyEthCalls":0,"lastCollapsed":false}},"rpc":{"counts":{"arc_anvil_local:eth_getCode":6,"arc_anvil_local:eth_call":40,"arc_anvil_local:eth_getBlockByNumber":25,"arc_anvil_local:eth_simulateV1":33,"arc_anvil_local:eth_getBalance":15,"arc_anvil_local:eth_getTransactionByHash":9,"arc_anvil_local:eth_getTransactionReceipt":9},"total":137,"endpoints":[{"id":"arc_anvil_local","health":1,"circuit":"closed","circuits":{"logs":"closed","call":"closed","simulate":"closed","probe":"closed"},"weight":100,"priority":1,"capabilities":["logs","call","simulate","probe","backfill"],"calls":137,"budget":{"used":3232,"limit":null,"pct":0,"state":"ok"},"byCapability":{"logs":{"used":0,"limit":null,"reserveMonthly":null,"spillover":false},"call":{"used":2141,"limit":null,"reserveMonthly":null,"spillover":false},"simulate":{"used":1091,"limit":null,"reserveMonthly":null,"spillover":false}},"queue":{"waiting":0,"max":180000,"rejected":0}}]},"spend":{"counts":{"arc_anvil_local:eth_getCode":6,"arc_anvil_local:eth_call":40,"arc_anvil_local:eth_getBlockByNumber":25,"arc_anvil_local:eth_simulateV1":33,"arc_anvil_local:eth_getBalance":15,"arc_anvil_local:eth_getTransactionByHash":9,"arc_anvil_local:eth_getTransactionReceipt":9},"month":[{"provider":"arc_public","method":"eth_blockNumber","month":"2026-09","calls":8260},{"provider":"arc_public","method":"eth_getLogs","month":"2026-09","calls":191776},{"provider":"arc_public","method":"eth_call","month":"2026-09","calls":17696},{"provider":"arc_public","method":"eth_getCode","month":"2026-09","calls":156},{"provider":"chainstack","method":"eth_getBlockByNumber","month":"2026-09","calls":97},{"provider":"chainstack","method":"eth_simulateV1","month":"2026-09","calls":272},{"provider":"arc_public","method":"eth_getBlockByNumber","month":"2026-09","calls":1290},{"provider":"chainstack","method":"eth_call","month":"2026-09","calls":427},{"provider":"arc_anvil_local","method":"eth_getCode","month":"2026-09","calls":493},{"provider":"arc_anvil_local","method":"eth_call","month":"2026-09","calls":948},{"provider":"arc_anvil_local","method":"eth_getBlockByNumber","month":"2026-09","calls":577},{"provider":"arc_anvil_local","method":"eth_simulateV1","month":"2026-09","calls":857},{"provider":"arc_anvil_local","method":"eth_getBalance","month":"2026-09","calls":199},{"provider":"arc_anvil_local","method":"eth_getTransactionByHash","month":"2026-09","calls":79},{"provider":"arc_anvil_local","method":"eth_getTransactionReceipt","month":"2026-09","calls":79}],"budgets":{"arc_anvil_local":{"used":3232,"limit":null,"pct":0,"state":"ok"}}},"indexer":null,"safety":{"enqueued":2,"collapsed":0,"dropped":0,"running":0,"done":0,"failed":0,"simulateCalls":0,"skippedPinned":2},"payerIdentity":"x402","x402":{"enabled":true,"network":"eip155:5042002"}}}}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}}}}},"/openapi.json":{"get":{"operationId":"openapi","tags":["service"],"summary":"This OpenAPI 3.1 document","description":"Returns this OpenAPI 3.1 document.\n\n- **Cost:** free, never x402-gated.\n- **Returns:** the machine-readable contract for every route, including x402 payment requirements and real examples.","security":[],"responses":{"200":{"description":"OpenAPI 3.1 document.","content":{"application/json":{"schema":{"type":"object"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}}}}},"/.well-known/agent-registration.json":{"get":{"operationId":"agentRegistration","tags":["service"],"summary":"arcgate's ERC-8004 agent registration file","description":"Returns the registration file arcgate's ERC-8004 IdentityRegistry entry points at.\n\n- **Cost:** free, never x402-gated.\n- **Returns:** the spec's `type`, `name`, `description`, `image`, `services`, `x402Support`, `active`, `registrations` and `supportedTrust`, plus `arcgate`: the trading network, x402 prices per route, and links to this document, the venues, the docs and the agent skill.\n- **Next:** rate arcgate on the ReputationRegistry against the `agentId` in `registrations`.","security":[],"responses":{"200":{"description":"Registration file.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRegistration"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}}}}}},"components":{"schemas":{"SearchRequest":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":128},"limit":{"default":10,"type":"integer","minimum":1,"maximum":25}},"required":["query"],"additionalProperties":false},"QuoteRequest":{"type":"object","properties":{"sell":{"type":"string","minLength":1,"maxLength":128},"buy":{"type":"string","minLength":1,"maxLength":128},"amount":{"type":"string","minLength":1,"maxLength":80},"side":{"default":"exactIn","type":"string","enum":["exactIn","exactOut"]},"slippageBps":{"default":100,"type":"integer","minimum":0,"maximum":5000},"maxSplits":{"default":3,"type":"integer","minimum":1,"maximum":5},"allowSplits":{"default":true,"type":"boolean"},"maxHops":{"default":2,"anyOf":[{"type":"number","const":1},{"type":"number","const":2}]},"venues":{"default":null,"anyOf":[{"maxItems":16,"type":"array","items":{"type":"string","minLength":1,"maxLength":64}},{"type":"null"}]},"excludeVenues":{"default":[],"maxItems":16,"type":"array","items":{"type":"string","minLength":1,"maxLength":64}},"sources":{"default":["native"],"minItems":1,"maxItems":4,"type":"array","items":{"type":"string","minLength":1,"maxLength":32}},"taker":{"default":null,"anyOf":[{"type":"string"},{"type":"null"}]},"ttlSec":{"description":"How long the stored quote (and this response's expiresAt) stays live, in seconds (1-120, default 120). A caller may shorten it to re-quote sooner; it can never lengthen past 120s. Safe to shorten or leave at default: POST /trade/v1/swap always re-quotes and re-simulates at the current block and 409s quote_stale below the stored minAmountOut, so this bounds staleness risk, not price risk. The on-chain execution deadline is a separate parameter (deadlineSec, POST /trade/v1/swap).","default":120,"type":"integer","minimum":1,"maximum":120}},"required":["sell","buy","amount"],"additionalProperties":false},"SwapRequest":{"type":"object","properties":{"quoteId":{"type":"string","pattern":"^q_[0-9a-f]{16,}$"},"taker":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"recipient":{"default":null,"anyOf":[{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},{"type":"null"}]},"deadlineSec":{"default":60,"type":"integer","minimum":10,"maximum":600},"approval":{"default":"permit2","type":"string","enum":["permit2","approve"]}},"required":["quoteId","taker"],"additionalProperties":false},"SwapTxRequest":{"type":"object","properties":{"quoteId":{"type":"string","pattern":"^q_[0-9a-f]{16,}$"},"taker":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"recipient":{"default":null,"anyOf":[{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},{"type":"null"}]},"deadlineSec":{"default":60,"type":"integer","minimum":10,"maximum":600},"permit":{"type":"object","properties":{"message":{"type":"object","properties":{"details":{"type":"object","properties":{"token":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"},"expiration":{"type":"string","pattern":"^\\d+$"},"nonce":{"type":"string","pattern":"^\\d+$"}},"required":["token","amount","expiration","nonce"],"additionalProperties":false},"spender":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"sigDeadline":{"type":"string","pattern":"^\\d+$"}},"required":["details","spender","sigDeadline"],"additionalProperties":false},"signature":{"type":"string","pattern":"^0x[0-9a-fA-F]+$"}},"required":["message","signature"],"additionalProperties":false}},"required":["quoteId","taker","permit"],"additionalProperties":false},"ReceiptRequest":{"type":"object","properties":{"quoteId":{"type":"string","pattern":"^q_[0-9a-f]{16,}$"},"txHashes":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"}}},"required":["quoteId","txHashes"],"additionalProperties":false},"VerificationOut":{"type":"object","properties":{"status":{"type":"string","enum":["verified","unverified","stale","unfetchable"]},"source":{"type":"string","enum":["circle_docs","project_site","manual","launchpad_official","site_linked","coingecko"]},"trust":{"type":"integer","minimum":1,"maximum":4},"sourceUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"note":{"anyOf":[{"type":"string"},{"type":"null"}]},"coinId":{"anyOf":[{"type":"string"},{"type":"null"}]},"checkedAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["status"],"additionalProperties":false},"EvidenceOut":{"type":"object","properties":{"firstWithTicker":{"type":"boolean"},"creatorLinked":{"type":"boolean"},"depth2PctUsd":{"anyOf":[{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},{"type":"null"}]},"depthKind":{"anyOf":[{"type":"string","enum":["measured","lower_bound"]},{"type":"null"}]},"depthAgeSec":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"volume24hUsd":{"anyOf":[{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},{"type":"null"}]},"traders24h":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"ageHours":{"anyOf":[{"type":"number"},{"type":"null"}]},"posterior":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]}},"required":["firstWithTicker","creatorLinked","depth2PctUsd","depthKind","depthAgeSec","volume24hUsd","traders24h","ageHours","posterior"],"additionalProperties":false},"RouteOut":{"type":"object","properties":{"venue":{"type":"string"},"poolId":{"type":"string","pattern":"^0x[0-9a-f]+$"},"pair":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["venue","poolId","pair"],"additionalProperties":false},"SafetyOut":{"anyOf":[{"type":"object","properties":{"routeId":{"type":"string"},"route":{"anyOf":[{"$ref":"#/components/schemas/RouteOut"},{"type":"null"}]},"verdict":{"type":"string"},"canSell":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"buyTaxBps":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"sellTaxBps":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"buyImpactBps":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"roundTripLossBps":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"scope":{"type":"object","properties":{"block":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"walletProfile":{"type":"string"}},"required":["block","walletProfile"],"additionalProperties":false}},"required":["routeId","route","verdict","canSell","buyTaxBps","sellTaxBps","buyImpactBps","roundTripLossBps","scope"],"additionalProperties":false},{"type":"null"}]},"SafetyByRouteOut":{"type":"object","properties":{"routeId":{"type":"string"},"route":{"anyOf":[{"$ref":"#/components/schemas/RouteOut"},{"type":"null"}]},"verdict":{"anyOf":[{"type":"string"},{"type":"null"}]},"buyTaxBps":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"sellTaxBps":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"checkedBlock":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["routeId","route","verdict","buyTaxBps","sellTaxBps","checkedBlock"],"additionalProperties":false},"VenueOut":{"type":"object","properties":{"venue":{"type":"string"},"poolId":{"type":"string","pattern":"^0x[0-9a-f]+$"},"pair":{"type":"string"},"feeBps":{"anyOf":[{"type":"number"},{"type":"null"}]},"hooks":{"anyOf":[{"type":"string","pattern":"^0x[0-9a-f]{40}$"},{"type":"null"}]}},"required":["venue","poolId","pair","feeBps","hooks"],"additionalProperties":false},"SearchResult":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"symbol":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"decimals":{"anyOf":[{"type":"integer","minimum":0,"maximum":255},{"type":"null"}]},"match":{"type":"string","enum":["address","symbol","name","prefix","lookalike"]},"verification":{"$ref":"#/components/schemas/VerificationOut"},"evidence":{"$ref":"#/components/schemas/EvidenceOut"},"discovered":{"type":"string","enum":["index","live"]},"origin":{"type":"object","properties":{"launchpad":{"anyOf":[{"type":"string"},{"type":"null"}]},"creator":{"anyOf":[{"type":"string","pattern":"^0x[0-9a-f]{40}$"},{"type":"null"}]},"createdBlock":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["launchpad","creator","createdBlock","createdAt"],"additionalProperties":false},"state":{"anyOf":[{"type":"string","enum":["curve","graduated","pool_only","unsupported"]},{"type":"null"}]},"venues":{"type":"array","items":{"$ref":"#/components/schemas/VenueOut"}},"liquidityUsd":{"anyOf":[{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},{"type":"null"}]},"depth2PctUsd":{"anyOf":[{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},{"type":"null"}]},"volume24hUsd":{"anyOf":[{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},{"type":"null"}]},"holders":{"type":"null"},"safety":{"$ref":"#/components/schemas/SafetyOut"},"safetyByRoute":{"maxItems":3,"type":"array","items":{"$ref":"#/components/schemas/SafetyByRouteOut"}},"flags":{"type":"array","items":{"type":"string","enum":["impersonates_canonical","impersonates_verified","ambiguous_ticker","depth_leader","verification_conflict","verification_stale","symbol_normalized","lookalike_symbol","shared_ticker","on_curve","unsupported_launchpad","unsupported_venue","just_launched","under_6h_old","hooked_pool","no_usdc_pool","buy_tax","sell_tax","size_limited","cannot_sell","illiquid","metadata_anomaly","wash_trade_shape","serial_copier","safety_pending"]}}},"required":["address","symbol","name","decimals","match","verification","evidence","discovered","origin","state","venues","liquidityUsd","depth2PctUsd","volume24hUsd","holders","safety","safetyByRoute","flags"],"additionalProperties":false},"SearchResponse":{"type":"object","properties":{"query":{"type":"string"},"network":{"type":"string"},"block":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"resolution":{"type":"string","enum":["verified","ambiguous","none","single","clear_leader"]},"rulesVersion":{"type":"string"},"results":{"type":"array","items":{"$ref":"#/components/schemas/SearchResult"}}},"required":["query","network","block","resolution","rulesVersion","results"],"additionalProperties":false},"VenueSummaryOut":{"type":"object","properties":{"id":{"type":"string"},"family":{"type":"string"},"enabled":{"type":"boolean"},"factory":{"anyOf":[{"type":"string"},{"type":"null"}]},"deploymentBlock":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"feeUnits":{"type":"string"},"quoter":{},"router":{},"executable":{"type":"boolean"},"executableNote":{"type":"string"},"verified":{}},"required":["id","family","enabled","factory","deploymentBlock","feeUnits","quoter","router","executable","verified"],"additionalProperties":false},"VenuesResponse":{"type":"object","properties":{"venues":{"type":"array","items":{"$ref":"#/components/schemas/VenueSummaryOut"}},"hubs":{"type":"array","items":{}},"launchpads":{"type":"array","items":{}}},"required":["venues","hubs","launchpads"],"additionalProperties":false},"HealthResponse":{"type":"object","properties":{"ok":{"type":"boolean"},"db":{"type":"object","properties":{"ok":{"type":"boolean"},"tokens":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"verified":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"importedAt":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["ok","tokens","verified","importedAt"],"additionalProperties":false},"rulesVersion":{"type":"string"},"commit":{"anyOf":[{"type":"string"},{"type":"null"}]},"caches":{},"rpc":{"anyOf":[{"type":"object","properties":{"counts":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"}},"total":{"type":"number"},"endpoints":{}},"required":["counts","total","endpoints"],"additionalProperties":false},{"type":"null"}]},"spend":{},"indexer":{},"safety":{},"payerIdentity":{"type":"string","enum":["x402","ip"]},"x402":{"type":"object","properties":{"enabled":{"type":"boolean"},"network":{"type":"string"}},"required":["enabled","network"],"additionalProperties":false}},"required":["ok","db","rulesVersion","commit","caches","rpc","spend","indexer","safety","payerIdentity","x402"],"additionalProperties":false},"ErrorBody":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","token_not_found","payload_too_large","lookup_rate_limited","rpc_unavailable","internal"]},"message":{"type":"string"},"hint":{"type":"string"},"details":{"description":"Present on 400 invalid_request only: the request's validation issues.","type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"path":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"number"}]}},"message":{"type":"string"}},"required":["code","path","message"],"additionalProperties":{}}}},"required":["code"],"additionalProperties":false},"next":{"description":"What to do next. requote: get a new quote, then swap its quoteId. retry: send the same request again, after retryAfterSec when given. fix_request: the request itself is wrong; change it first. stop: don't retry; tell the user. pay: pay the 402 and send the same request again. sign_permit: sign signatures[0].typedData and call POST /trade/v1/swap/tx with `permit`.","type":"string","enum":["requote","retry","fix_request","stop","pay","sign_permit"]},"retryAfterSec":{"description":"Seconds until the same request can succeed. Only where the server knows it: lookup_rate_limited and receipt_rate_limited.","type":"integer","minimum":1,"maximum":9007199254740991}},"required":["error","next"],"additionalProperties":false},"QuoteVerificationOut":{"type":"object","properties":{"status":{"type":"string","enum":["verified","unverified","stale","unfetchable"]},"source":{"type":"string"},"trust":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["status"],"additionalProperties":false},"QuoteTokenOut":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"symbol":{"anyOf":[{"type":"string"},{"type":"null"}]},"decimals":{"type":"integer","minimum":0,"maximum":36},"amount":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"amountRaw":{"type":"string","pattern":"^\\d+$"},"verification":{"$ref":"#/components/schemas/QuoteVerificationOut"},"state":{"anyOf":[{"type":"string"},{"type":"null"}]},"discovered":{"type":"string","enum":["index","live"]}},"required":["address","symbol","decimals"],"additionalProperties":false},"QuoteFeeOut":{"type":"object","properties":{"bps":{"type":"integer","minimum":0,"maximum":9007199254740991},"amount":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"token":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"collector":{"anyOf":[{"type":"string","pattern":"^0x[0-9a-f]{40}$"},{"type":"null"}]}},"required":["bps","amount","token","collector"],"additionalProperties":false},"QuoteHopOut":{"type":"object","properties":{"venue":{"type":"string"},"poolId":{"type":"string","pattern":"^0x[0-9a-f]*$"},"tokenIn":{"type":"string"},"tokenOut":{"type":"string"},"tokenInAddress":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"tokenOutAddress":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"feeBps":{"anyOf":[{"type":"number"},{"type":"null"}]},"hooks":{"anyOf":[{"type":"string","pattern":"^0x[0-9a-f]{40}$"},{"type":"null"}]}},"required":["venue","poolId","tokenIn","tokenOut","tokenInAddress","tokenOutAddress","feeBps"],"additionalProperties":false},"QuoteRouteOut":{"type":"object","properties":{"type":{"type":"string","enum":["direct","two_hop"]},"routeId":{"type":"string"},"provider":{"type":"string","enum":["native","kyberswap"]},"hops":{"minItems":1,"maxItems":2,"type":"array","items":{"$ref":"#/components/schemas/QuoteHopOut"}},"amountOutQuoted":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"amountInQuoted":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"buyTaxBps":{"type":"integer","minimum":0,"maximum":9007199254740991},"costVsMidBps":{"anyOf":[{"type":"number"},{"type":"null"}]},"gasUsdc":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"fee":{"$ref":"#/components/schemas/QuoteFeeOut"},"executable":{"type":"boolean"},"providerQuoteAgeBlocks":{"type":"integer","minimum":0,"maximum":9007199254740991},"partialFill":{"type":"boolean"}},"required":["type","routeId","provider","hops","buyTaxBps","costVsMidBps","gasUsdc","fee","executable","providerQuoteAgeBlocks"],"additionalProperties":false},"QuoteLegOut":{"type":"object","properties":{"routeIndex":{"type":"integer","minimum":0,"maximum":9007199254740991},"shareBps":{"type":"integer","minimum":1,"maximum":10000},"amountIn":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"amountOut":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"minAmountOut":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"}},"required":["routeIndex","shareBps","amountIn","amountOut","minAmountOut"],"additionalProperties":false},"QuoteBestOut":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["native","kyberswap"]},"amountOutQuoted":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"amountOutSimulated":{"anyOf":[{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},{"type":"null"}]},"amountOutRaw":{"type":"string","pattern":"^\\d+$"},"minAmountOut":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"amountInQuoted":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"amountInSimulated":{"anyOf":[{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},{"type":"null"}]},"amountIn":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"maxAmountIn":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"gasUsdc":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"fee":{"$ref":"#/components/schemas/QuoteFeeOut"},"executable":{"type":"boolean"},"providerQuoteAgeBlocks":{"type":"integer","minimum":0,"maximum":9007199254740991},"floorBasis":{"type":"string","enum":["simulated","quoted"]},"type":{"type":"string","enum":["direct","two_hop","split"]},"graph":{"not":{}},"legs":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/QuoteLegOut"}}},"required":["provider","gasUsdc","fee","executable","providerQuoteAgeBlocks","floorBasis","type","legs"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["native","kyberswap"]},"amountOutQuoted":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"amountOutSimulated":{"anyOf":[{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},{"type":"null"}]},"amountOutRaw":{"type":"string","pattern":"^\\d+$"},"minAmountOut":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"amountInQuoted":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"amountInSimulated":{"anyOf":[{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},{"type":"null"}]},"amountIn":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"maxAmountIn":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"gasUsdc":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"fee":{"$ref":"#/components/schemas/QuoteFeeOut"},"executable":{"type":"boolean"},"providerQuoteAgeBlocks":{"type":"integer","minimum":0,"maximum":9007199254740991},"floorBasis":{"type":"string","enum":["simulated","quoted"]},"type":{"type":"string","const":"graph"},"graph":{"type":"object","properties":{"tokenIn":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"tokenOut":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"amountInRaw":{"type":"string","pattern":"^\\d+$"},"amountOutRaw":{"type":"string","pattern":"^\\d+$"},"minAmountOutRaw":{"type":"string","pattern":"^\\d+$"},"edges":{"minItems":1,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"venue":{"type":"string"},"poolId":{"type":"string","pattern":"^0x[0-9a-f]*$"},"token0":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"token1":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"fee":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"tickSpacing":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"hooks":{"anyOf":[{"type":"string","pattern":"^0x[0-9a-f]{40}$"},{"type":"null"}]},"tokenInAddress":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"tokenOutAddress":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"amountInRaw":{"type":"string","pattern":"^\\d+$"},"amountOutRaw":{"type":"string","pattern":"^\\d+$"},"amountOutGrossRaw":{"type":"string","pattern":"^\\d+$"},"minAmountOutRaw":{"type":"string","pattern":"^\\d+$"},"gasUnits":{"type":"string","pattern":"^\\d+$"}},"required":["id","venue","poolId","token0","token1","fee","tickSpacing","hooks","tokenInAddress","tokenOutAddress","amountInRaw","amountOutRaw","amountOutGrossRaw","minAmountOutRaw","gasUnits"],"additionalProperties":false}}},"required":["tokenIn","tokenOut","amountInRaw","amountOutRaw","minAmountOutRaw","edges"],"additionalProperties":false},"legs":{"maxItems":0,"type":"array","items":{"$ref":"#/components/schemas/QuoteLegOut"}}},"required":["provider","amountOutRaw","gasUsdc","fee","executable","providerQuoteAgeBlocks","floorBasis","type","graph","legs"],"additionalProperties":false}]},"QuoteSafetyOut":{"type":"object","properties":{"verdict":{"type":"string","enum":["ok","taxed","illiquid","size_limited","cannot_sell","inconclusive","pinned"]},"method":{"type":"string","enum":["simulate_v1","single_call","pinned_asset","unmeasured"]},"routeId":{"anyOf":[{"type":"string"},{"type":"null"}]},"canSell":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"buyTaxBps":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"sellTaxBps":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"exitSellTaxBps":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"buyImpactBps":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"sellImpactBps":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"execCostBps":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"roundTripLossBps":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"maxBuyUsdc":{"anyOf":[{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},{"type":"null"}]},"maxSellTokens":{"anyOf":[{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},{"type":"null"}]},"sellDelaySec":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"revertReason":{"anyOf":[{"type":"string"},{"type":"null"}]},"scope":{"type":"object","properties":{"block":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"walletProfile":{"type":"string","enum":["fresh_eoa","contract"]},"sellDelaySec":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"tokenAgeSec":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["block","walletProfile","sellDelaySec","tokenAgeSec"],"additionalProperties":false},"note":{"type":"string"}},"required":["verdict","method","routeId","canSell","buyTaxBps","sellTaxBps","exitSellTaxBps","buyImpactBps","sellImpactBps","execCostBps","roundTripLossBps","maxBuyUsdc","maxSellTokens","sellDelaySec","revertReason","scope","note"],"additionalProperties":false},"QuoteWarningOut":{"type":"object","properties":{"code":{"type":"string","enum":["impersonates_canonical","impersonates_verified","graduated_recently","partial_fill","discovered_live","thin_hub","buy_tax","sell_tax","sell_surcharge","hook_fee","round_trip_loss","high_lp_fee","illiquid","size_limited","sell_cooldown","cannot_sell","safety_inconclusive","new_token_short_cache","floor_unmeasured","gas_valuation_unavailable","graph_execution_unavailable"]},"address":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"detail":{"type":"string"}},"required":["code"],"additionalProperties":false},"QuoteUnsupportedVenueOut":{"type":"object","properties":{"venue":{"type":"string"},"poolId":{"type":"string","pattern":"^0x[0-9a-f]*$"},"pair":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"reason":{"type":"string"}},"required":["venue","poolId","pair","reason"],"additionalProperties":false},"QuoteReadinessOut":{"description":"Present only when the request names `taker`: can that wallet finish this trade, and what will it cost.","type":"object","properties":{"taker":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"balance":{"description":"The input token.","type":"object","properties":{"token":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"required":{"description":"Raw units of the input token: the amountIn POST /trade/v1/swap spends, for exactOut too (not maxAmountIn). USDC is 6 dp.","type":"string","pattern":"^\\d+$"},"available":{"description":"The taker's raw balance of the input token. For USDC, the native balance converted to 6 dp (one balance, native and ERC-20).","type":"string","pattern":"^\\d+$"},"enough":{"type":"boolean"}},"required":["token","required","available","enough"],"additionalProperties":false},"approval":{"description":"What POST /trade/v1/swap with the default `approval: \"permit2\"` needs first. approve: an ERC-20 approve to Permit2. sign_permit: a Permit2 signature (swap returns the typed data). native: the route is paid in native USDC, nothing needed.","type":"object","properties":{"mode":{"type":"string","const":"permit2"},"needs":{"type":"string","enum":["none","approve","sign_permit","approve_and_sign_permit","native"]}},"required":["mode","needs"],"additionalProperties":false},"approve":{"description":"The same for `approval: \"approve\"`: an ERC-20 approve to ArcgateRouter, or nothing.","type":"object","properties":{"needs":{"type":"string","enum":["none","approve","native"]}},"required":["needs"],"additionalProperties":false},"gas":{"description":"Gas, paid in native USDC.","type":"object","properties":{"estimatedUsdc":{"description":"best.gasUsdc plus any approve and Permit2 gas the permit2 plan needs, at the quote's base fee.","type":"string","pattern":"^\\d+(\\.\\d+)?$"},"available":{"description":"The taker's native USDC left for gas: after the trade amount for a USDC input, and after both arcgate fees when the taker pays them in USDC.","type":"string","pattern":"^\\d+(\\.\\d+)?$"},"enough":{"description":"available covers the gas with POST /trade/v1/swap's 1.3x margin, the check it runs itself; estimatedUsdc is the unmargined cost.","type":"boolean"}},"required":["estimatedUsdc","available","enough"],"additionalProperties":false},"fees":{"description":"The arcgate fee still to pay.","type":"object","properties":{"swapUsdc":{"description":"The POST /trade/v1/swap price for this quote; 0 when payment is off. This quote is already paid; POST /trade/v1/swap/tx, which takes the signed permit, is free.","type":"string","pattern":"^\\d+(\\.\\d+)?$"},"payer":{"description":"The x402 payer of this quote call; null when payment is off or the payer is unknown.","anyOf":[{"type":"string","pattern":"^0x[0-9a-f]{40}$"},{"type":"null"}]},"payerAvailable":{"description":"The payer's balance of the fee asset less this quote's own fee, which settles after this answer; null when payer is null or the fee settles on another chain.","anyOf":[{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},{"type":"null"}]},"enough":{"description":"payerAvailable >= swapUsdc; null when payerAvailable is null (not counted against `ready`).","anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["swapUsdc","payer","payerAvailable","enough"],"additionalProperties":false},"totalCostUsdc":{"description":"fees.swapUsdc + gas.estimatedUsdc: what finishing costs.","type":"string","pattern":"^\\d+(\\.\\d+)?$"},"ready":{"description":"balance.enough and gas.enough, and fees.enough is not false. When false, `next` is `stop`.","type":"boolean"}},"required":["taker","balance","approval","approve","gas","fees","totalCostUsdc","ready"],"additionalProperties":false},"QuoteResponse":{"type":"object","properties":{"quoteId":{"type":"string","pattern":"^q_[0-9a-f]{16,}$"},"network":{"type":"string"},"block":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"expiresAt":{"type":"string"},"side":{"type":"string","enum":["exactIn","exactOut"]},"sell":{"$ref":"#/components/schemas/QuoteTokenOut"},"buy":{"$ref":"#/components/schemas/QuoteTokenOut"},"slippageBps":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"routes":{"type":"array","items":{"$ref":"#/components/schemas/QuoteRouteOut"}},"unsupportedVenues":{"type":"array","items":{"$ref":"#/components/schemas/QuoteUnsupportedVenueOut"}},"best":{"$ref":"#/components/schemas/QuoteBestOut"},"safety":{"$ref":"#/components/schemas/QuoteSafetyOut"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/QuoteWarningOut"}},"attestation":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"eip712"},"signer":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"signature":{"type":"string","pattern":"^0x[0-9a-f]*$"}},"required":["type","signer","signature"],"additionalProperties":false},{"type":"null"}]},"readiness":{"$ref":"#/components/schemas/QuoteReadinessOut"},"next":{"description":"What to do next. requote: get a new quote, then swap its quoteId. retry: send the same request again, after retryAfterSec when given. fix_request: the request itself is wrong; change it first. stop: don't retry; tell the user. pay: pay the 402 and send the same request again. sign_permit: sign signatures[0].typedData and call POST /trade/v1/swap/tx with `permit`.","type":"string","enum":["requote","retry","fix_request","stop","pay","sign_permit"]}},"required":["quoteId","network","block","expiresAt","side","sell","buy","slippageBps","routes","unsupportedVenues","best","safety","warnings"],"additionalProperties":false},"QuoteErrorResponse":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","ticker_not_allowed","invalid_amount","unsupported_pair","unknown_venue","unknown_source","taker_required","token_not_found","no_route","insufficient_liquidity","unsupported_venue","buy_reverts","lookup_rate_limited","internal","rpc_unavailable"]},"message":{"type":"string"},"hint":{"type":"string"},"details":{"description":"On 400 invalid_request: an array of validation issues. On other codes: an object of code-specific context.","anyOf":[{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"path":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"number"}]}},"message":{"type":"string"}},"required":["code","path","message"],"additionalProperties":{}}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]}},"required":["code","message"],"additionalProperties":false},"next":{"description":"What to do next. requote: get a new quote, then swap its quoteId. retry: send the same request again, after retryAfterSec when given. fix_request: the request itself is wrong; change it first. stop: don't retry; tell the user. pay: pay the 402 and send the same request again. sign_permit: sign signatures[0].typedData and call POST /trade/v1/swap/tx with `permit`.","type":"string","enum":["requote","retry","fix_request","stop","pay","sign_permit"]},"retryAfterSec":{"description":"Seconds until the same request can succeed. Only where the server knows it: lookup_rate_limited and receipt_rate_limited.","type":"integer","minimum":1,"maximum":9007199254740991}},"required":["error","next"],"additionalProperties":false},"SwapTypedDataOut":{"type":"object","properties":{"domain":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"}]}},"types":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"}},"required":["name","type"],"additionalProperties":false}}},"primaryType":{"type":"string"},"message":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/SwapTypedDataOut/$defs/schema0"}}},"required":["domain","types","primaryType","message"],"additionalProperties":false,"$defs":{"schema0":{"anyOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"$ref":"#/components/schemas/SwapTypedDataOut/$defs/schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/SwapTypedDataOut/$defs/schema0"}}]}}},"SwapSignatureOut":{"type":"object","properties":{"kind":{"type":"string","const":"permit2"},"typedData":{"$ref":"#/components/schemas/SwapTypedDataOut"}},"required":["kind","typedData"],"additionalProperties":false},"SwapTransactionOut":{"type":"object","properties":{"to":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"data":{"type":"string","pattern":"^0x[0-9a-f]*$"},"value":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"gas":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"purpose":{"type":"string","enum":["approve","swap"]}},"required":["to","data","value","gas","purpose"],"additionalProperties":false},"SwapWarningOut":{"type":"object","properties":{"code":{"type":"string","enum":["route_not_executable","approval_fallback"]},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"SwapSafetyOut":{"type":"object","properties":{"verdict":{"type":"string","enum":["ok","taxed","illiquid","size_limited","cannot_sell","inconclusive","pinned"]},"scope":{"type":"object","properties":{"walletProfile":{"type":"string","enum":["taker","recipient"]},"block":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["walletProfile","block"],"additionalProperties":false}},"required":["verdict","scope"],"additionalProperties":false},"SwapAttestationOut":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"eip712"},"signer":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"signature":{"type":"string","pattern":"^0x[0-9a-f]*$"}},"required":["type","signer","signature"],"additionalProperties":false},{"type":"null"}]},"SwapResponse":{"type":"object","properties":{"quoteId":{"type":"string","pattern":"^q_[0-9a-f]{16,}$"},"block":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"expiresAt":{"type":"string"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/SwapSignatureOut"}},"transactions":{"type":"array","items":{"$ref":"#/components/schemas/SwapTransactionOut"}},"amountOutSimulated":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"minAmountOut":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"recipient":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"safety":{"$ref":"#/components/schemas/SwapSafetyOut"},"attestation":{"$ref":"#/components/schemas/SwapAttestationOut"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/SwapWarningOut"}},"next":{"description":"What to do next. requote: get a new quote, then swap its quoteId. retry: send the same request again, after retryAfterSec when given. fix_request: the request itself is wrong; change it first. stop: don't retry; tell the user. pay: pay the 402 and send the same request again. sign_permit: sign signatures[0].typedData and call POST /trade/v1/swap/tx with `permit`.","type":"string","enum":["requote","retry","fix_request","stop","pay","sign_permit"]}},"required":["quoteId","block","expiresAt","signatures","transactions","amountOutSimulated","minAmountOut","recipient","safety","attestation","warnings"],"additionalProperties":false},"SwapErrorResponse":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","quote_not_found","quote_stale","quote_expired","no_pending_swap","insufficient_balance","swap_reverts","cannot_sell","not_executable","swap_attempts_exhausted","internal","rpc_unavailable"]},"message":{"type":"string"},"hint":{"type":"string"},"details":{"description":"On a 400 invalid_request from body validation: an array of issues ({code, path, message}); other invalid_request cases carry no details. Otherwise, when present, an object of code-specific context, e.g. {requoted, min} / {call, reason} / {delivered, minAmountOut} on quote_stale, or {required, available, token} / {required, available, reason: \"gas\", swapFee?} on insufficient_balance: those are native 18-decimal amounts, whatever the input (swapFee: this call's own fee, counted when the taker is the x402 payer and pays in USDC on this chain, issue #140). Amounts are base-unit strings, except a USDC input's balance amounts, which are native 18-decimal units."}},"required":["code","message"],"additionalProperties":false},"next":{"description":"What to do next. requote: get a new quote, then swap its quoteId. retry: send the same request again, after retryAfterSec when given. fix_request: the request itself is wrong; change it first. stop: don't retry; tell the user. pay: pay the 402 and send the same request again. sign_permit: sign signatures[0].typedData and call POST /trade/v1/swap/tx with `permit`.","type":"string","enum":["requote","retry","fix_request","stop","pay","sign_permit"]},"retryAfterSec":{"description":"Seconds until the same request can succeed. Only where the server knows it: lookup_rate_limited and receipt_rate_limited.","type":"integer","minimum":1,"maximum":9007199254740991},"quote":{"description":"On 409 quote_stale or 410 quote_expired: a free, fresh quote of the original quote request (same amount, tokens, side, slippageBps and venues; the default ttlSec; when the original named a taker, the wallet calling /trade/v1/swap is the taker), exactly as POST /trade/v1/quote answers it. Nothing executes on it: check its price, safety.verdict and readiness, then swap its quoteId. One per paid quote: absent on a second 409/410 for the same quoteId, for a quote that itself came from here, for a quote expired over 5 minutes, and when the re-quote couldn't run (quote again yourself). Absent with next: stop when the fresh quote can't be traded; error.hint then says why.","$ref":"#/components/schemas/QuoteResponse"}},"required":["error","next"],"additionalProperties":false},"ReceiptTransactionOut":{"type":"object","properties":{"hash":{"type":"string","pattern":"^0x[0-9a-f]{64}$"},"purpose":{"description":"\"swap\" for a transaction to ArcgateRouter, \"approve\" for one to the input token; null while the chain doesn't know the transaction.","anyOf":[{"type":"string","enum":["approve","swap"]},{"type":"null"}]},"status":{"description":"\"expired\": a swap transaction the chain knows but never mined, now past its deadline; it can only revert. \"not_found\": a transaction the chain doesn't know, past the swap's deadline.","type":"string","enum":["success","reverted","pending","expired","not_found"]},"block":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["hash","purpose","status","block"],"additionalProperties":false},"ReceiptResponse":{"type":"object","properties":{"quoteId":{"type":"string","pattern":"^q_[0-9a-f]{16,}$"},"result":{"type":"string","enum":["pass","fail","pending"]},"token":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"recipient":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"minAmountOut":{"type":"string","pattern":"^\\d+$"},"delivered":{"description":"What `recipient` received of `token`, from the swap transactions' Transfer logs, in base units. null until every swap transaction is mined.","anyOf":[{"type":"string","pattern":"^\\d+$"},{"type":"null"}]},"block":{"description":"The highest block among the swap transactions; null until one is mined.","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"transactions":{"type":"array","items":{"$ref":"#/components/schemas/ReceiptTransactionOut"}},"reason":{"description":"One sentence on a fail or pending result; null on pass.","anyOf":[{"type":"string"},{"type":"null"}]},"next":{"description":"Issue #123: retry while pending. After a fail, requote when no swap transaction succeeded, stop when one did (don't trade again); absent on pass.","type":"string","enum":["requote","retry","fix_request","stop","pay","sign_permit"]}},"required":["quoteId","result","token","recipient","minAmountOut","delivered","block","transactions","reason"],"additionalProperties":false},"ReceiptErrorResponse":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","swap_not_found","receipt_rate_limited","receipt_reads_exhausted","internal","rpc_unavailable"]},"message":{"type":"string"},"hint":{"type":"string"},"details":{"description":"On a 400 invalid_request from body validation: an array of issues ({code, path, message}). Otherwise absent."}},"required":["code","message"],"additionalProperties":false},"next":{"description":"What to do next. requote: get a new quote, then swap its quoteId. retry: send the same request again, after retryAfterSec when given. fix_request: the request itself is wrong; change it first. stop: don't retry; tell the user. pay: pay the 402 and send the same request again. sign_permit: sign signatures[0].typedData and call POST /trade/v1/swap/tx with `permit`.","type":"string","enum":["requote","retry","fix_request","stop","pay","sign_permit"]},"retryAfterSec":{"description":"Seconds until the same request can succeed. Only where the server knows it: lookup_rate_limited and receipt_rate_limited.","type":"integer","minimum":1,"maximum":9007199254740991}},"required":["error","next"],"additionalProperties":false},"PaymentRequired":{"type":"object","properties":{"x402Version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"error":{"type":"string"},"resource":{"type":"object","properties":{"url":{"type":"string"},"description":{"type":"string"},"mimeType":{"type":"string"}},"required":["url","description","mimeType"],"additionalProperties":{}},"accepts":{"type":"array","items":{"type":"object","properties":{"scheme":{"type":"string","const":"exact"},"network":{"type":"string"},"amount":{"type":"string"},"asset":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"extra":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"],"additionalProperties":{}}},"required":["scheme","network","amount","asset","payTo","maxTimeoutSeconds","extra"],"additionalProperties":{}}}},"required":["x402Version","error","resource","accepts"],"additionalProperties":{},"examples":[{"x402Version":2,"error":"Payment required","resource":{"url":"http://127.0.0.1:19900/trade/v1/search","description":"Token search","mimeType":""},"accepts":[{"scheme":"exact","network":"eip155:5042002","amount":"5000","asset":"0x3600000000000000000000000000000000000000","payTo":"0x987F719b516f528f4080EF0853E37aD5d7E773A0","maxTimeoutSeconds":300,"extra":{"name":"USDC","version":"2"}}]}]},"PaymentRequiredBody":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","const":"payment_required"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message","hint"],"additionalProperties":false},"next":{"description":"What to do next. requote: get a new quote, then swap its quoteId. retry: send the same request again, after retryAfterSec when given. fix_request: the request itself is wrong; change it first. stop: don't retry; tell the user. pay: pay the 402 and send the same request again. sign_permit: sign signatures[0].typedData and call POST /trade/v1/swap/tx with `permit`.","type":"string","enum":["requote","retry","fix_request","stop","pay","sign_permit"]},"retryAfterSec":{"description":"Seconds until the same request can succeed. Only where the server knows it: lookup_rate_limited and receipt_rate_limited.","type":"integer","minimum":1,"maximum":9007199254740991}},"required":["error","next"],"additionalProperties":false},"PaymentPayload":{"type":"object","properties":{"x402Version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"payload":{"type":"object","properties":{"authorization":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"validAfter":{"type":"string"},"validBefore":{"type":"string"},"nonce":{"type":"string"}},"required":["from","to","value","validAfter","validBefore","nonce"],"additionalProperties":{}},"signature":{"type":"string"}},"required":["authorization","signature"],"additionalProperties":{}},"resource":{"type":"object","properties":{"url":{"type":"string"},"description":{"type":"string"},"mimeType":{"type":"string"}},"required":["url","description","mimeType"],"additionalProperties":{}},"accepted":{"type":"object","properties":{"scheme":{"type":"string","const":"exact"},"network":{"type":"string"},"amount":{"type":"string"},"asset":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"extra":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"],"additionalProperties":{}}},"required":["scheme","network","amount","asset","payTo","maxTimeoutSeconds","extra"],"additionalProperties":{}}},"required":["x402Version","payload","resource","accepted"],"additionalProperties":{}},"SettleResponse":{"type":"object","properties":{"success":{"type":"boolean"},"errorReason":{"type":"string"},"errorMessage":{"type":"string"},"payer":{"type":"string"},"transaction":{"type":"string"},"network":{"type":"string"},"amount":{"type":"string"}},"required":["success","transaction","network"],"additionalProperties":{}},"AgentRegistration":{"type":"object","properties":{"type":{"type":"string","const":"https://eips.ethereum.org/EIPS/eip-8004#registration-v1"},"name":{"type":"string"},"description":{"type":"string"},"image":{"type":"string"},"services":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"endpoint":{"type":"string"},"version":{"type":"string"},"description":{"type":"string"},"mcpTools":{"type":"array","items":{"type":"string"}}},"required":["name","endpoint","description"],"additionalProperties":false}},"x402Support":{"type":"boolean"},"active":{"type":"boolean"},"registrations":{"type":"array","items":{"type":"object","properties":{"agentId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"agentRegistry":{"type":"string"}},"required":["agentId","agentRegistry"],"additionalProperties":false}},"supportedTrust":{"type":"array","items":{"type":"string"}},"arcgate":{"type":"object","properties":{"tradingNetwork":{"type":"string"},"payment":{"type":"object","properties":{"network":{"type":"string"},"asset":{"type":"string"},"prices":{"type":"object","properties":{"search":{"type":"string","pattern":"^\\d+$"},"quote":{"type":"string","pattern":"^\\d+$"},"swap":{"type":"object","properties":{"under1000Usd":{"type":"string","pattern":"^\\d+$"},"upTo10000Usd":{"type":"string","pattern":"^\\d+$"},"above10000Usd":{"type":"object","properties":{"base":{"type":"string","pattern":"^\\d+$"},"bpsOfNotionalAbove10000Usd":{"type":"string"},"max":{"type":"string","pattern":"^\\d+$"}},"required":["base","bpsOfNotionalAbove10000Usd","max"],"additionalProperties":false}},"required":["under1000Usd","upTo10000Usd","above10000Usd"],"additionalProperties":false}},"required":["search","quote","swap"],"additionalProperties":false}},"required":["network","asset","prices"],"additionalProperties":false},"openapi":{"type":"string"},"venues":{"type":"string"},"docs":{"type":"string"},"skill":{"type":"string"}},"required":["tradingNetwork","payment","openapi","venues","docs","skill"],"additionalProperties":false}},"required":["type","name","description","image","services","x402Support","active","registrations","supportedTrust","arcgate"],"additionalProperties":false},"X402MiddlewareError":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}},"parameters":{"PaymentSignature":{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"description":"Sent on the paid retry after a 402: base64 JSON payment payload (PaymentPayload schema), the signed EIP-3009 authorization for the amount in the 402's PAYMENT-REQUIRED header.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/PaymentPayload"}},"example":"eyJ4NDAyVmVyc2lvbiI6MiwicGF5bG9hZCI6eyJhdXRob3JpemF0aW9uIjp7ImZyb20iOiIweDVFZGZmODJGMEU3REMyNTk2OGNiYThCNjE0YmVERDc4MmFjMmNFREQiLCJ0byI6IjB4OTg3RjcxOWI1MTZmNTI4ZjQwODBFRjA4NTNFMzdhRDVkN0U3NzNBMCIsInZhbHVlIjoiNTAwMCIsInZhbGlkQWZ0ZXIiOiIwIiwidmFsaWRCZWZvcmUiOiIxNzkwNjk3OTMwIiwibm9uY2UiOiIweDZhMmNlZTQyZDc0ZWMwMjgyY2EzMTJlMDAwMTBhMzg1NGRkN2M5NjJiMDM2NGViYzZlNjU4MDI0Zjk3Nzk0MGMifSwic2lnbmF0dXJlIjoiMHhkMmE3M2MzYjFjN2MyZDQ2ZGJjOTUwZjliODhmY2NhMmVkZTY3ZGI1MWUxODY1ZDIxMmEzMmNjYzYwZmUxZjA5NGEzNmUxM2I1OWM0ZjI2ODEzZWMwNWVkNDdkOThhNWI4NWNkMmE4ZGMxOTQxMDdjYTVkZjNlNWUwNWJmODdmOTFjIn0sInJlc291cmNlIjp7InVybCI6Imh0dHA6Ly8xMjcuMC4wLjE6MTk5MDAvdHJhZGUvdjEvc2VhcmNoIiwiZGVzY3JpcHRpb24iOiJUb2tlbiBzZWFyY2giLCJtaW1lVHlwZSI6IiJ9LCJhY2NlcHRlZCI6eyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJlaXAxNTU6NTA0MjAwMiIsImFtb3VudCI6IjUwMDAiLCJhc3NldCI6IjB4MzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsInBheVRvIjoiMHg5ODdGNzE5YjUxNmY1MjhmNDA4MEVGMDg1M0UzN2FENWQ3RTc3M0EwIiwibWF4VGltZW91dFNlY29uZHMiOjMwMCwiZXh0cmEiOnsibmFtZSI6IlVTREMiLCJ2ZXJzaW9uIjoiMiJ9fX0="}},"securitySchemes":{"x402":{"type":"apiKey","in":"header","name":"PAYMENT-SIGNATURE","description":"x402 v2 over Arc USDC. Call without this header first: the response is 402 with payment requirements in the `PAYMENT-REQUIRED` header (base64 JSON, see the PaymentRequired schema). Sign an EIP-3009 authorization for the quoted amount, then retry the SAME request with `PAYMENT-SIGNATURE` set to the base64 JSON payment payload (see the PaymentPayload schema). A successful call carries a `PAYMENT-RESPONSE` header with the settlement receipt (see SettleResponse). No 4xx/5xx response ever settles."}},"responses":{"PaymentRequired":{"description":"Payment required (x402 v2). Two cases: (1) no or invalid payment - the payment requirements are in the PAYMENT-REQUIRED header. With no payment (or an undecodable one) the body is `{ error: { code: \"payment_required\", message, hint }, next: \"pay\" }`, the hint saying to allow Arc USDC in your x402 client and linking the docs; a payment of the wrong amount or one that fails verification gets `{}`; (2) the payment verified and the handler succeeded, but settlement failed - the response carries a PAYMENT-RESPONSE header with `success: false` and an `errorReason`, the handler's result is discarded, the body is `{}`, and nothing was charged. Retry with a fresh payment in either case. The `{}` bodies are written by the x402 middleware itself and carry no `next`.","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PaymentRequiredBody"},{"type":"object","additionalProperties":false}]}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"PAYMENT-REQUIRED":{"description":"Case (1). Base64 JSON payment requirements (PaymentRequired schema): scheme, network, amount, asset, payTo, maxTimeoutSeconds.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/PaymentRequired"}},"example":"eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJQYXltZW50IHJlcXVpcmVkIiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cDovLzEyNy4wLjAuMToxOTkwMC90cmFkZS92MS9zZWFyY2giLCJkZXNjcmlwdGlvbiI6IlRva2VuIHNlYXJjaCIsIm1pbWVUeXBlIjoiIn0sImFjY2VwdHMiOlt7InNjaGVtZSI6ImV4YWN0IiwibmV0d29yayI6ImVpcDE1NTo1MDQyMDAyIiwiYW1vdW50IjoiNTAwMCIsImFzc2V0IjoiMHgzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwicGF5VG8iOiIweDk4N0Y3MTliNTE2ZjUyOGY0MDgwRUYwODUzRTM3YUQ1ZDdFNzczQTAiLCJtYXhUaW1lb3V0U2Vjb25kcyI6MzAwLCJleHRyYSI6eyJuYW1lIjoiVVNEQyIsInZlcnNpb24iOiIyIn19XX0="},"PAYMENT-RESPONSE":{"description":"Case (2) only. Base64 JSON settlement result (SettleResponse schema) with `success: false`.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/SettleResponse"}}}}},"FacilitatorError":{"description":"The x402 facilitator returned an error while verifying or settling payment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402MiddlewareError"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}}}},"headers":{"RequestId":{"description":"This call's id in arcgate's logs. Quote it when reporting a problem with the call.","schema":{"type":"string","pattern":"^[0-9a-f]{8}$"},"example":"3f9a1c07"}}},"externalDocs":{"description":"Guides, the API reference and its test console","url":"https://docs.arcgate.dev"}}