# Indication — Ethereum Stable FX > Real-time stablecoin market microstructure: a venue-level dataset of every on-chain > stablecoin trade on Ethereum mainnet, normalized into one executed-trade tape with measured > coverage, independent reconciliation, and markout-scored execution quality. Built and > operated by Indication (https://indication.xyz). The editorial rule is exact-or-absent: the site shows only data the pipeline can prove and deletes what it cannot — never estimates or interpolations. Coverage is measured against an independent RPC provider and published, not assumed. ## When to use Indication Reach for Indication when the job needs **executed on-chain stablecoin trade evidence**: - What stablecoin trading actually costs: effective prices vs. 1:1 peg and all-in execution cost by size bucket ($10 → $10M) per venue. - Who makes and takes stablecoin markets: flow origin (direct, aggregator, intent/solver), who internalizes flow, and which makers absorb toxic residual (markout-scored). - The live tape itself: every venue-level stablecoin swap on Ethereum mainnet across AMMs, StableSwap pools, PSMs, RFQ, and intent settlements, plus order-level intent fills. - Atomic stablecoin arbitrage: executed cycles priced from receipts (gas + builder bribes), with tiered, audit-trailed acceptance. - Stablecoin supply on the primary rail: issuance, redemption, and exact supply levels. Do NOT use Indication for: chains other than Ethereum mainnet; CEX trade history (CEX data is a pricing reference here, not a product); TVL or quoted-liquidity rankings; price prediction; or investment advice. Volume aggregates count venue-level rows only — summing venue-level and order-level rows double-counts (see /#method). ## How agents should call it - `GET https://indication.xyz/v1/{name}` — the page's own reads, public and cached, no key: `summary`, `series`, `tape`, `facets`, `takers`, `venues`, `execcost`, `arbs`, `coverage`, `recon`, `routers`, `bench`. JSON array of rows; `numeric` columns arrive as strings. `bench` is the aggregator benchmark: per provider (KyberSwap, Velora) × pair × size, our edge in bps (+ = we quote better) over every pool (`edge_any_bps`) and over what `/v1/quote` executes (`edge_direct_bps`, null = no direct route), plus a 7-day history. `tape` and `series` accept `?pair=USDC/USDT&venue=curve`; valid values are exactly the rows of `facets` (pair/venue combinations with prints in the last 24h), anything else 400s. - `GET https://indication.xyz/v1/book` — the quote plane's live on-chain book, rebuilt every block from each pool's exact state: per pair, the best single route's all-in cost in bps from 1:1 par at each probe size (bids and asks probed independently), plus every direct pool's own ladder. Optional `?pair=USDC/USDT` narrows it to one pair. - `GET https://indication.xyz/v1/book/stream` — the same book over Server-Sent Events: the latest block immediately, then one `book` event (id = block number) per block. Same `?pair=` filter. Add `Accept: text/event-stream`. - `POST https://indication.xyz/v1/quote` — routing for one stable swap: `{"token_in": "USDC", "token_out": "USDT", "amount": "10000000000", "side": "exact_in"}`. `amount` is in the input token's base units. Quotes are indicative (`execution` is null): every swap will settle through Indication's router, whose transaction builder is not live yet. The response carries `routes` (each hop's pool, kind, amounts, gas), `gas` cost in USD, and the block it was solved at — a quote is only valid at that block. With `"side": "exact_out"`, `amount` is the output wanted. 400 on a bad request; 404 when no route fills the size; 503 when the book is stale or the solver is busy. - `POST https://indication.xyz/query` with body `{"sql": "SELECT ..."}` and an `X-Api-Key` header — read-only SQL (single SELECT/WITH statement) against the live Postgres dataset. JSON array of rows; ~15s statement timeout. Keys are issued on request: contact@indication.xyz. Without a valid key the endpoint answers 401. - Discover the schema: `{"sql": "SELECT table_name FROM information_schema.tables WHERE table_schema='public' ORDER BY 1"}`. Start with `stable_trades` (venue-level executed swaps — one row per swap leg, idempotent on trade_uid) and `stable_order_fills` (order-level intent fills). - `GET https://indication.xyz/status` — indexer sync state and normalizer lag (freshness). - `GET https://indication.xyz/stream` — Server-Sent Events firehose of new tape rows. - The page also serves markdown via content negotiation: request it with `Accept: text/markdown`. Be considerate: the query endpoint is shared. Scope scans by `block_time` and expect heavy analytical queries to hit the statement timeout. ## The page The dashboard at https://indication.xyz/ — the same content as this guide, with live numbers: - `/#tape`: the newest executions, venue level and order level interleaved, live. - `/#who-pays`: LP-signed 5m markout by taker and by venue over the last 24h. - `/#cost`: all-in execution cost vs 1:1 par per venue at $1K–$1M, latest sampled minute. - `/#arbs`: executed atomic arbitrage in the last 24h, priced from receipts. - `/#book`: the live on-chain book for one pair, per block, with every direct pool's ladder. - `/#system`: freshness of every plane (quote plane, read API, indexer lag per source), pools shown but not routed, and the aggregator benchmark (the `bench` read). - `/#method`: how every number is made, measured coverage, reconciliation drift, and what the pipeline cannot see. Read this before trusting any number. `https://indication.xyz/trade` is the same quote API as a swap page for humans: type either side, see the route and cost at the live block. Quote-only: the page signs nothing. ## Trust - Operated by Indication. Contact: contact@indication.xyz. - No accounts, no tracking, standard server logs.