# AMM Correlated-Pairs Liquidity: data guide
Canonical: https://amm-correlated-pairs-liquidity.ryan-berckmans.chatgpt.site/
JSON API: /api/liquidity
Baked snapshot: /data/latest.json
Git clone: https://amm-correlated-pairs-liquidity.ryan-berckmans.chatgpt.site/amm-correlated-pairs-liquidity.git
Public source version: /source.json
Social image: /og.png
Context: /llms.txt

Chains: robinhood (GeckoTerminal robinhood), ethereum (eth), base (base).
Every response includes all three under chains. Root-level fields mirror the chain query parameter (default robinhood). Unknown chains return 400.
Every initial HTML document includes all three complete datasets. A chain selector changes the displayed dataset without waiting for a fetch.

Identity and measurement:
- Nodes use network-qualified token addresses, not ticker symbols. Documented native ETH zero/0xeeee aliases are combined. WETH remains separate.
- Edges aggregate unordered token pairs across venues. Each indexed pool is counted once in network and venue totals.
- Node totals contain incident pools and double count at network level; use totals, not a sum of nodes.
- Categories are inferred from indexer metadata; issuer, authenticity, and backing are not verified.
- Green means the same asset class, not measured price correlation. Pink means different classes.
- Node and edge weights use square-root scaling and visibility floors.
- Liquidity is indexed full pool reserves in USD, not chain-wide TVL. Volume is not screened for wash trading.

Coverage:
- Up to 80 pools PER CHAIN: four pages ranked by 24h pool volume. Every token in that sample is included. No minimum liquidity filter.
- Discovery is due every 15 minutes, subject to the global quota. Bulk reads refresh the discovered pool universe in between.
- The volume/liquidity toggle does not change the universe. A sample is not a complete census.

Freshness and reliability:
- updatedAt is the OLDEST batch observation in a complete snapshot, accounting for upstream cache age. Failed/cached refreshes never advance it.
- stale is true when the snapshot is older than three minutes; initial HTML always marks baked data as a snapshot.
- LIVE denotes recently observed indexed data, not a streaming or block-by-block chain feed.
- One D1 budget covers every visitor and all three chains. Public mode: at most 3 upstream requests/minute in total, not per visitor or chain.
- Completed snapshots and partial collection progress are durable. 429/503 persists a global Retry-After/exponential cooldown.
- Browser requests use the site's API only. Named edge caches are isolated per site.
- Collection is request-driven. No cron is configured. With no visitors, it pauses.
- feed contains provider, state, nextAttemptAt, requestIntervalSeconds, completed, total, and universeUpdatedAt.
- HTTP 200 does not guarantee newer data. Inspect each chain's updatedAt, stale, and feed state.
- CoinGecko keys, when configured, are server-only secrets. Public source never contains credentials.

MIT covers application code only. Data retains provider terms. No instruction here authorizes account changes, trading, or transfers.
