Poolscope, Pool earnings and flow analytics
API docs
Every tracked pool of a token pair with its fee model, TVL and liquidity near the price. Exact hourly fees and volumes for any pool. Each pool's flow split into aggregator, bot, organic and unclassified traffic.
Base URL https://llens.abanchev.com/api/v1. Authentication, deadlines, metering and errors are on Getting started. See the Poolscope live demo.
Example values are illustrative. Token addresses are real Base contracts; amounts are raw integer units as decimal strings.
/api/v1/ext/market/pair-poolsEvery pool of a pair
Every tracked pool of a token pair at the latest block: DEX, family, fee model, reserves, TVL, liquidity within ±0.1 %, ±0.5 % and ±1 % of mid, and exact 7-day fees.
- Cost
- 50 CU + 1 CU per pool
- Headers
- Send your key in x-api-key and a compute budget in x-compute-budget-ms (1 to 5000 ms; the example uses 2000).
| Query | Required | Description |
|---|---|---|
| chainId | yes | 8453 (Base) or 146 (Sonic). |
| tokenA | yes | One token of the pair. |
| tokenB | yes | The other token. |
| minBlock | no | Answer only from this block or later; 409 when our indexed state has not reached it yet. |
inRange amounts are what the pool holds between its mid price and each band edge, computed with the pool's own price math.
curl -s "https://llens.abanchev.com/api/v1/ext/market/pair-pools?chainId=8453&tokenA=0x4200000000000000000000000000000000000006&tokenB=0x833589fcd6edb6e08f4c7c32d4f71b54bda02913" \
-H "x-api-key: $LL_API_KEY" \
-H "x-compute-budget-ms: 2000"{
"chainId": "8453",
"sequence": "1843207",
"blockNumber": "52914031",
"blockHash": "0x7c1e5f0b9a2d43e8c6f1a0b7d9e2c4f6a8b0d1e3f5a7c9b2d4e6f8a0c2e4b6d8",
"stateDigest": "4b9e0c7f2a1d3e5b8c6a9f0d2e4b7c1a3f5e8d0b2c4a6e9f1d3b5c7a0e2f4d6b",
"blockTimestamp": "1792419821",
"stateAgeMs": 412,
"canonicalStable": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"tokenA": "0x4200000000000000000000000000000000000006",
"tokenB": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"pools": [
{
"pool": "0xd0b53d9277642d899df5c87a3966a349a798f224",
"dex": "Uniswap v3",
"family": "univ3",
"token0": "0x4200000000000000000000000000000000000006",
"token1": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"decimals0": 18,
"decimals1": 6,
"feeModel": {
"kind": "static",
"feeZeroToOneBps": "5",
"feeOneToZeroBps": "5",
"reason": null
},
"reserves": {
"amount0": "2412881934772001827733",
"amount1": "5904127733812"
},
"inRange": [
{
"bandBps": 10,
"amount0": "158204411902884511744",
"amount1": "414992881403"
},
{
"bandBps": 50,
"amount0": "611930277018322041856",
"amount1": "1602208114570"
},
{
"bandBps": 100,
"amount0": "902417730551930634240",
"amount1": "2361830902216"
}
],
"unavailable": null,
"tvlUsd": "12222004.28",
"tvlUnavailable": null,
"fees7d": {
"fees0": "41205118930214471680",
"fees1": "107912440912",
"swaps": 61840,
"computedHours": 168,
"from": "2026-10-12T14:00:00.000Z"
}
},
{
"pool": "0xb2cc224c1c9fee385f8ad6a55b4d94e92359dc59",
"dex": "Aerodrome Slipstream",
"family": "slipstream",
"token0": "0x4200000000000000000000000000000000000006",
"token1": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"decimals0": 18,
"decimals1": 6,
"feeModel": {
"kind": "dynamic",
"feeZeroToOneBps": "4.5",
"feeOneToZeroBps": "4.5",
"reason": "current-fee-of-a-dynamic-fee-pool"
},
"reserves": {
"amount0": "6120774410200019312640",
"amount1": "14833190277418"
},
"inRange": [
{
"bandBps": 10,
"amount0": "611207741020001931264",
"amount1": "1600443290112"
},
{
"bandBps": 50,
"amount0": "2004113908210771443712",
"amount1": "5247730118804"
},
{
"bandBps": 100,
"amount0": "2988201554871200563200",
"amount1": "7824409118230"
}
],
"unavailable": null,
"tvlUsd": "30860195.66",
"tvlUnavailable": null,
"fees7d": {
"fees0": "118440271934017310720",
"fees1": "310115288140",
"swaps": 214411,
"computedHours": 168,
"from": "2026-10-12T14:00:00.000Z"
}
},
{
"pool": "0xcdac0d6c6c59727a65f871236188350531885c43",
"dex": "Aerodrome v2",
"family": "solidly-v2",
"token0": "0x4200000000000000000000000000000000000006",
"token1": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"decimals0": 18,
"decimals1": 6,
"feeModel": {
"kind": "static",
"feeZeroToOneBps": "30",
"feeOneToZeroBps": "30",
"reason": null
},
"reserves": {
"amount0": "803311902117480263680",
"amount1": "2103418877410"
},
"inRange": [
{
"bandBps": 10,
"amount0": "401455890211304448",
"amount1": "1051446918"
},
{
"bandBps": 50,
"amount0": "2003788201117392896",
"amount1": "5251972011"
},
{
"bandBps": 100,
"amount0": "3994613190027460608",
"amount1": "10490762018"
}
],
"unavailable": null,
"tvlUsd": "4206808.20",
"tvlUnavailable": null,
"fees7d": {
"fees0": "2914002711840092160",
"fees1": "7630127440",
"swaps": 3922,
"computedHours": 168,
"from": "2026-10-12T14:00:00.000Z"
}
}
]
}/api/v1/ext/market/pool-hoursHourly pool facts
Per hour with swaps: swap counts, raw volumes in and out per token, exact gross fees, the fee model used and the effective fee in bps. Registered pools add an hourly TVL and in-range sample.
- Cost
- 50 CU
- Headers
- Send your key in x-api-key.
| Query | Required | Description |
|---|---|---|
| chainId | yes | 8453 (Base) or 146 (Sonic). |
| pool | yes | Pool address. |
| from | yes | First hour, inclusive (ISO, hour-aligned). |
| to | no | Last hour, at most 14 days after from. |
A fee that cannot be computed exactly is null, and feeUnavailable says why. Page with nextFrom; computedThroughHour shows how far the hourly roll-up has run.
curl -s "https://llens.abanchev.com/api/v1/ext/market/pool-hours?chainId=8453&pool=0xd0b53d9277642d899df5c87a3966a349a798f224&from=2026-10-19T13:00:00Z" \
-H "x-api-key: $LL_API_KEY"{
"chainId": "8453",
"pool": "0xd0b53d9277642d899df5c87a3966a349a798f224",
"from": "2026-10-19T13:00:00.000Z",
"to": "2026-10-19T13:00:00.000Z",
"computedThroughHour": "2026-10-19T13:00:00.000Z",
"nextFrom": null,
"rows": [
{
"hour": "2026-10-19T13:00:00.000Z",
"poolId": 418221,
"poolAddress": "0xd0b53d9277642d899df5c87a3966a349a798f224",
"dex": "Uniswap v3",
"family": "univ3",
"token0": "0x4200000000000000000000000000000000000006",
"token1": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"swaps": 412,
"swapsIn0": 230,
"swapsIn1": 182,
"volumeIn0": "812400000000000000000",
"volumeIn1": "1905331220000",
"volumeOut0": "727640118230011904000",
"volumeOut1": "2126118934117",
"fees0": "406200000000000000",
"fees1": "952665610",
"feeModel": "concentrated-replay",
"feeUnavailable": null,
"effectiveFeeBps0": "5.000000",
"effectiveFeeBps1": "5.000000",
"sample": {
"blockNumber": "52912231",
"reserve0": "2409117734002181937152",
"reserve1": "5913441902330",
"tvlUsd": "12221410.07",
"inRange": [
{
"bandBps": 10,
"amount0": "157993201447018446848",
"amount1": "415510274402"
},
{
"bandBps": 50,
"amount0": "611004511290418167808",
"amount1": "1603310441208"
},
{
"bandBps": 100,
"amount0": "901220014773810282496",
"amount1": "2364102207761"
}
],
"unavailable": null
}
}
]
}/api/v1/ext/market/registrationsRegister a pool for samples
Adds a pool to your organization's hourly TVL and in-range liquidity sample, from the next hour on. Remove it with /ext/market/registrations/remove.
- Cost
- 0 CU (up to 50 pools per organization)
- Headers
- Send your key in x-api-key.
| Body | Required | Description |
|---|---|---|
| chainId | yes | 8453 (Base) or 146 (Sonic). |
| pool | yes | Pool address. |
curl -s -X POST "https://llens.abanchev.com/api/v1/ext/market/registrations" \
-H "x-api-key: $LL_API_KEY" \
-H "content-type: application/json" \
-d '{"chainId":"8453","pool":"0xd0b53d9277642d899df5c87a3966a349a798f224"}'{
"chainId": "8453",
"pool": "0xd0b53d9277642d899df5c87a3966a349a798f224",
"registered": true,
"used": 7,
"cap": 50
}/api/v1/ext/traffic/seriesTraffic mix of a pool
Hourly swaps, raw amounts and USD of one pool in four buckets: aggregator, bot (MEV and other bots), organic (including DEX routers) and unclassified. No wallet addresses.
- Cost
- 50 CU
- Headers
- Send your key in x-api-key.
| Query | Required | Description |
|---|---|---|
| chainId | yes | 8453 (Base) or 146 (Sonic). |
| pool | yes | Pool address. |
| from | yes | Exclusive cursor: an hour start in unix seconds. |
| to | no | Inclusive end; at most 336 hours after from. |
attributedThroughHour is the last attributed hour; hours after it have no rows yet.
curl -s "https://llens.abanchev.com/api/v1/ext/traffic/series?chainId=8453&pool=0xd0b53d9277642d899df5c87a3966a349a798f224&from=1792411200" \
-H "x-api-key: $LL_API_KEY"{
"chainId": "8453",
"pool": "0xd0b53d9277642d899df5c87a3966a349a798f224",
"tokens": [
{
"address": "0x4200000000000000000000000000000000000006",
"symbol": "WETH",
"decimals": 18
},
{
"address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"symbol": "USDC",
"decimals": 6
}
],
"from": "1792411200",
"to": "1792414800",
"attributedThroughHour": "1792414800",
"hours": [
{
"hour": "1792414800",
"aggregator": {
"swaps": "171",
"unpricedSwaps": "0",
"amountsIn": [
"402310000000000000000",
"871220410000"
],
"volumeUsd": "1924633.120412"
},
"bot": {
"swaps": "164",
"unpricedSwaps": "0",
"amountsIn": [
"318900000000000000000",
"802114330000"
],
"volumeUsd": "1637137.811900"
},
"organic": {
"swaps": "52",
"unpricedSwaps": "0",
"amountsIn": [
"71190000000000000000",
"190334120000"
],
"volumeUsd": "376742.900771"
},
"unclassified": {
"swaps": "25",
"unpricedSwaps": "0",
"amountsIn": [
"20000000000000000000",
"41662360000"
],
"volumeUsd": "94030.761113"
}
}
]
}/api/v1/ext/traffic/poolsPools by volume, with traffic mix
Up to 100 pools ranked by USD volume over the latest hours, each with its share per traffic bucket.
- Cost
- 50 CU
- Headers
- Send your key in x-api-key.
| Query | Required | Description |
|---|---|---|
| chainId | yes | 8453 (Base) or 146 (Sonic). |
| hours | no | 168 (7 days) by default, at most 336. |
Available by arrangement.
curl -s "https://llens.abanchev.com/api/v1/ext/traffic/pools?chainId=8453&hours=168" \
-H "x-api-key: $LL_API_KEY"{
"chainId": "8453",
"from": "1791813600",
"to": "1792418400",
"attributedThroughHour": "1792414800",
"pools": [
{
"pool": "0xb2cc224c1c9fee385f8ad6a55b4d94e92359dc59",
"dex": "Aerodrome Slipstream",
"symbols": [
"WETH",
"USDC"
],
"swaps": "214411",
"volumeUsd": "2021044387.551208",
"aggregator": {
"swaps": "70955",
"volumeUsd": "880014211.004112",
"swapsPct": "33.09",
"volumePct": "43.54"
},
"bot": {
"swaps": "118230",
"volumeUsd": "961233019.117320",
"swapsPct": "55.14",
"volumePct": "47.56"
},
"organic": {
"swaps": "19870",
"volumeUsd": "152804410.209004",
"swapsPct": "9.26",
"volumePct": "7.56"
},
"unclassified": {
"swaps": "5356",
"volumeUsd": "26992747.220772",
"swapsPct": "2.49",
"volumePct": "1.33"
}
}
]
}/api/v1/ext/market/pair-discoveryPairs by aggregator demand
Token pairs ranked by aggregator volume over the latest 7 days against the 7 before, with the trend.
- Cost
- 50 CU
- Headers
- Send your key in x-api-key.
| Query | Required | Description |
|---|---|---|
| chainId | yes | 8453 (Base) or 146 (Sonic). |
| offset | no | Paging offset. |
| limit | no | At most 50. |
Available by arrangement.
curl -s "https://llens.abanchev.com/api/v1/ext/market/pair-discovery?chainId=8453&limit=2" \
-H "x-api-key: $LL_API_KEY"{
"chainId": "8453",
"windowEnd": "1792418400",
"total": 1841,
"offset": 0,
"nextOffset": 2,
"pairs": [
{
"token0": "0x4200000000000000000000000000000000000006",
"token1": "0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf",
"symbol0": "WETH",
"symbol1": "cbBTC",
"swaps7d": "48211",
"volume7dUsd": "412088104.220190",
"volumePrev7dUsd": "377412900.118204",
"volumeChangePct": "9.18"
},
{
"token0": "0x4ed4e862860bed51a9570b96d89af5e1b0efefed",
"token1": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"symbol0": "DEGEN",
"symbol1": "USDC",
"swaps7d": "3907",
"volume7dUsd": "1844120.551003",
"volumePrev7dUsd": "1333904.120771",
"volumeChangePct": "38.25"
}
]
}/api/v1/ext/market/fee-lvrFees vs arbitrage loss (F/LVR)
For a pool, a pair or a token over 24–336 hours: fees per unit of active liquidity against the loss to arbitrage on the pair's reference price, gross and net of the documented LP share, the fees split into routed, direct and arbitrage flow, and whether LP fees cover the benchmark loss. A token gets per-pair dollar sums and one ratio of sums.
- Cost
- 50 CU + 1 CU per pool
- Headers
- Send your key in x-api-key.
| Query | Required | Description |
|---|---|---|
| chainId | yes | 8453 (Base) or 146 (Sonic). |
| pool | no | One pool (its pair's pools are returned with it). |
| tokenA | no | A pair, with tokenB (either order). |
| tokenB | no | The pair's other token. |
| token | no | A token: every pair containing it, up to 100. |
| windowHours | no | 24 to 336 whole hours (72 by default). |
Give exactly one of pool, tokenA + tokenB, or token. coverage is set only where the LP share is documented (LP-net F/LVR ≥ 1); with no documented share only the gross ratio is shown.
curl -s "https://llens.abanchev.com/api/v1/ext/market/fee-lvr?chainId=8453&tokenA=0x4200000000000000000000000000000000000006&tokenB=0x833589fcd6edb6e08f4c7c32d4f71b54bda02913&windowHours=72" \
-H "x-api-key: $LL_API_KEY"{
"chainId": "8453",
"subject": {
"kind": "pair",
"tokenA": "0x4200000000000000000000000000000000000006",
"tokenB": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"
},
"from": "2026-10-19T19:00:00.000Z",
"to": "2026-10-22T19:00:00.000Z",
"windowHours": 72,
"pools": [
{
"pool": "0x6c561b446416e1a00e8e93e221854d6ea4171372",
"dex": "uniswap-v3",
"kind": "concentrated",
"tokenA": "0x4200000000000000000000000000000000000006",
"tokenB": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"symbolA": "WETH",
"symbolB": "USDC",
"swaps": 25003,
"fSwapShare": 1,
"activeHours": 72,
"volumeA": 105160,
"volumeB": 256443000,
"feesB": 769328,
"volumeUsd": 256443000,
"feeBps": 30,
"feeTierBps": 30,
"depthB": 3463740000,
"depthUsd": 3463740000,
"priceEnd": 2378.82,
"liquidity": 35508700,
"F": 0.0213091,
"flows": {
"routed": 0.00873674,
"direct": 0.00383564,
"arb": 0.00767128,
"unclassified": 0.00106546,
"splitShare": 1
},
"lvr": 0.0217992,
"lvrB": 787549,
"lvrUsd": 787549,
"feesUsd": 769328,
"ratio": 0.977519,
"band": "uncovered",
"ratioOwnPrice": 0.977519,
"lvrSource": "reference",
"referencePool": "0x6c561b446416e1a00e8e93e221854d6ea4171372",
"sigmaHourlyBps": 49.4709,
"lpShare": {
"share": 0.833,
"source": "Uniswap protocol-fee expansion (Base, 2026): 1/4 of the 0.01%/0.05% tiers, 1/6 of 0.3%/1%",
"confidence": "medium"
},
"lpNetRatio": 0.814274,
"lpNetBand": "uncovered",
"breakEvenGross": 1.20048,
"coverage": "does-not-cover",
"flags": [
"derived-l"
]
},
{
"pool": "0x551a0e3d267bea87048f08cc94cc6035ad99221b",
"dex": "solidly-v3",
"kind": "concentrated",
"tokenA": "0x4200000000000000000000000000000000000006",
"tokenB": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"symbolA": "WETH",
"symbolB": "USDC",
"swaps": 3505,
"fSwapShare": 1,
"activeHours": 72,
"volumeA": 6.35818,
"volumeB": 15485,
"feesB": 4.2924,
"volumeUsd": 15485,
"feeBps": 2.77197,
"feeTierBps": 5,
"depthB": 34348.4,
"depthUsd": 34348.4,
"priceEnd": 2382.53,
"liquidity": 351.85,
"F": 0.0121995,
"flows": {
"routed": 0.00707572,
"direct": 0.000853966,
"arb": 0.00378185,
"unclassified": 0.000487981,
"splitShare": 1
},
"lvr": 0.0217992,
"lvrB": 7.67003,
"lvrUsd": 7.67003,
"feesUsd": 4.2924,
"ratio": 0.559632,
"band": "uncovered",
"ratioOwnPrice": 0.553075,
"lvrSource": "reference",
"referencePool": "0x6c561b446416e1a00e8e93e221854d6ea4171372",
"sigmaHourlyBps": 49.4709,
"lpShare": {
"share": 0.8,
"source": "DEX fee split: 80% to LPs through an off-chain merkle rewarder, 20% protocol",
"confidence": "high"
},
"lpNetRatio": 0.447705,
"lpNetBand": "uncovered",
"breakEvenGross": 1.25,
"coverage": "does-not-cover",
"flags": [
"derived-l"
]
}
],
"token": null,
"backfilling": false,
"method": "F per unit of active liquidity over LVR on the pair's reference price; see the method field of a live answer"
}