Every removal, with its receipt
Amount removed, block, and transaction hash for each event — so you can verify any row on-chain instead of trusting our summary. Totals are computed over all matching rows, never over the returned page.
A simulator tells you what a token does now. This tells you what was already done to it —
and who else it was done to at the same moment.
POST /api/v1/base/liquidity-history
Anyone can read the chain as it is today. Nobody can read the chain of six months ago for events they were not watching for. true402 has been indexing Base pool creations and liquidity removals continuously and writing them to durable storage, so the observations themselves are the asset.
That number is fetched live from /v1/chain-coverage
when this page loads, not written into it — it is computed from the archive on every request, so it
cannot become a stale boast. Note the wording: liquidity-removal events, not rug pulls.
A removal is any liquidity withdrawal, and ordinary LP rebalancing emits the identical event.
Calling them rugs would be a fabricated statistic dressed as a measurement.
Amount removed, block, and transaction hash for each event — so you can verify any row on-chain instead of trusting our summary. Totals are computed over all matching rows, never over the returned page.
Other tokens whose liquidity left in the same transaction. One transaction, several pools, one actor — operator linkage with no heuristics and no clustering model behind it.
The exact block range our removal index covers, plus a complete flag. "None observed" is always scoped to a range you can see, never dressed up as a clean bill of health.
Any Base token address. First few calls a day are free, no wallet, no account.
curl -X POST https://true402.dev/api/v1/base/liquidity-history \
-H 'content-type: application/json' \
-d '{ "token": "0xTokenAddress", "limit": 10 }'
# -> { indexed: true,
# removals: { count: 16100, totalQuoteRemoved: 1644.32, distinctPools: 5,
# events: [ { pool, quoteRemoved, block, txHash } ], eventsTruncated: true },
# linkedTokens: [ { token, pool, txHash, block } ],
# coverage: { removalsIndexedFromBlock, removalsIndexedToBlock, complete: false },
# verdict: "16,100 liquidity-removal events observed across 5 pools." } Discoverable in the OpenAPI spec, the live catalog and the MCP manifest, so an agent can find and call it with no integration written by hand. If you want this folded into a single go/no-go before signing, use transaction preflight — it runs this check on the counterparty for you.
Everything true402 has observed happen to one Base token's liquidity: the pools we have indexed for it, every liquidity-removal event with the amount removed, the block and the transaction hash, and the other tokens that were drained in the same transaction. Each row carries its transaction hash, so you can verify any of it on-chain yourself rather than trusting the summary.
A honeypot check simulates a trade right now — can I buy, can I sell, at what cost. It answers whether a token is tradeable at this instant and re-derives that from live state on every call. Liquidity history answers what already happened, which live simulation structurally cannot see: a pool drained last month simulates perfectly today if someone re-seeded it. The two are complementary, and most agents should run both.
One transaction that removes liquidity from several pools is one actor acting on all of them. That linkage is read straight out of data we already hold — no address heuristics, no clustering model, no extra data source. It is the cheapest honest signal that a token belongs to an operator who has done this before, and it is the field most likely to change an agent's decision.
No, and the response refuses to imply it. Three outcomes are reported as three genuinely different things: the token is not in our index at all (we know nothing about it), it is indexed and no removal was seen inside the covered block range, or removals were observed. Every answer carries the exact block range our removal index covers, so an absence is always scoped to a window you can see rather than presented as a verdict.
Because a negative result is only as good as the range it was searched over. Our pool index and our removal index cover different windows by design — pools backfill in minutes, removals take hours — so the response reports the removal window specifically, and a complete flag that is false while the two disagree. Quoting the wider pool window would overstate how much chain we actually looked at.
Because it is a record rather than a computation. Anyone can read the chain as it is today; nobody can read the chain of six months ago for events they were not watching for. The archive exists because true402 has been indexing Base DEX pool creations and liquidity removals continuously and writing them to durable storage — the observations are the asset, and they cannot be back-filled from a public API after the fact.