# BlazePhoenix — agent-readable integration guide
> On-chain DEX aggregator on Base (8453), Ethereum (1), Optimism (10) and
> Arbitrum (42161). Every quote is computed ON-CHAIN by the Quoter contract
> (previewPlan) — the public API is a thin mirror of the chain. No API key,
> no signup, open CORS. Execution surplus is returned to the user.
> Token: BZPX (Base) 0x23113e72165a034265Ab8Bf2277CCB7a85Cb7483
## Quote a swap
GET https://blazephoenix.xyz/api/quote?chain=base&in=WETH&out=USDC&amountIn=1000000000000000000
- chain: 8453/base · 1/eth · 10/optimism · 42161/arbitrum
- in / out: 0x-token-address, ETH / WETH / USDC / BZPX, or ANY traded symbol —
unknown tickers are resolved to the deepest-liquidity token on that chain and
the resolution is echoed back in `resolved` (addresses recommended for
precision; the batch endpoint takes addresses/built-in symbols only)
- amountIn: integer in the token's base units (wei-style)
- optional recipient=0x… → the response includes tx {to,data,value} — ready to
sign and send to the Router (approve tokenIn for the router first)
- optional slippageBps (0–5000), deadlineSec (10–3600, default 120), exact=1
- `amountOut` in the response is the net output after the 0.28% protocol fee —
compare that number across aggregators.
- errors: 400 bad_* · 422 no_route · 502 rpc_unreachable (stable JSON codes;
502 carries retry-after: 3)
- poll freely: identical concurrent requests coalesce into ONE on-chain call
and previews are edge-cached for ~1 block — meta.cache tells you which
(miss | coalesced | hit). exact=1 and recipient requests are never TTL-cached.
## Batch (max 10 per call)
POST https://blazephoenix.xyz/api/quote/batch
{"requests":[{"chain":"base","in":"WETH","out":"USDC","amountIn":"1000000000000000000"}]}
## Pool X-Ray (phantom-liquidity scanner)
GET https://blazephoenix.xyz/api/xray?chain=base&token=BZPX
For any token, compares its deepest pools' Dexscreener-reported reserves against
a live balanceOf(pair) read on-chain. Returns per-pool + summary:
reportedLiquidityUsd vs realLiquidityUsd, phantomPct (advertised depth NOT in the
pool contracts), maxSafeTradeUsd (≤1% impact), and a verdict
(healthy | elevated | high | insufficient_data). Every figure is reproducible
with one `cast call ... balanceOf(address)`. Interactive: /?tab=xray
## Start here (discovery + monitoring)
- Discovery root (the API describes itself): https://blazephoenix.xyz/api
- Health (no upstream calls — poll freely): https://blazephoenix.xyz/api/health
- Live stats (fills/traders per chain, from on-chain events, reproducible):
https://blazephoenix.xyz/api/stats
- Every 200 quote response is self-describing: `units` states the amount
format and `links` carries docs/openapi/manifest/sdk — an agent that sees
one response can bootstrap the whole integration.
## Machine-readable references
- OpenAPI 3.1 spec: https://blazephoenix.xyz/api/openapi.json
- Protocol manifest: https://blazephoenix.xyz/api/manifest
(contracts per chain, token, Swap/Surplus event topic0s for indexers)
- Human docs + live playground: https://blazephoenix.xyz/?tab=api
## SDK
npm i @blazephoenix/sdk (TypeScript, ESM+CJS; viem optional)
repo: https://github.com/blazephoenixxyz-crypto/SDK
## Deep links (open the site pre-filled)
https://blazephoenix.xyz/?tab=swap&chain=base&in=ETH&out=BZPX&amt=0.5
## Index our fills (data platforms)
One `Swap` event per fill on the Router of each chain
(topic0 0xd6d34547c69c5ee3d2667625c188acf1006abb93e0ee7cf03925c67cf7760413).
Re-run any fill's quote at its block and compare with the executed amount to
verify our quoted-vs-executed record — no permission needed.
## Verified contract addresses (searchable)
Base (8453): Router 0x2a779f9Be49aac57495A8B6467Cc325a8a47Eb9f ·
Quoter 0x4cEF0615614B212895F45Aa1D4833B16666E18d3 ·
Staking 0x3f60C7aa0c36a78D200405feBE143d2Cf3fA0c77 ·
BZPX 0x23113e72165a034265Ab8Bf2277CCB7a85Cb7483
Ethereum (1): Router 0xE1aE5f49013920CF71De8CED4043e14C4d63416b ·
Quoter 0x4a20AA0912388ff7A9221Ab6BFC224cc20Baa0c3
Optimism (10) &
Arbitrum (42161): Router 0x7262e7483ab6f0db7b8f90eC3a9de3B02Ab36F6A ·
Quoter 0xfB18EF6f62A0278A273Af4b7A46b454F9E482dc2
## Proof of solvency (live, reproducible)
- Full report (HTML, refreshed from chain ~10 min, every solvency() field):
https://blazephoenix.xyz/solvency
- README badge (shields.io endpoint, live isSolvent()):

- Reproduce: `cast call 0x3f60C7aa0c36a78D200405feBE143d2Cf3fA0c77 "isSolvent()(bool)" --rpc-url https://mainnet.base.org`
## Embeddable solvency badge (live isSolvent() from chain)
## Long-tail swap pages
Curated pair landing pages exist at /swap/--, e.g.
https://blazephoenix.xyz/swap/base-eth-bzpx — all listed in /sitemap.xml.
Contact: contact@blazephoenix.xyz · X: @blazephoenyx