curl -X POST "https://api.blockdb.io/v1/evm/reserves" \
-H "Authorization: Bearer $BLOCKDB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"chain_id": 1,
"from_block": 12345678,
"to_block": 12345999,
"pool_uids": [
"88e6a0c2ddd26feeb64f039a2c41296fcb3f5640000000000000000000000000"
],
"pool_type_ids": [201, 302],
"include_adjusted_amounts": true
}'
{
"meta": {
"chain_id": 1,
"request_window": {
"from_block": 12345678,
"to_block": 12345999,
"from_timestamp": null,
"to_timestamp": null
},
"resolved_window": {
"from_block": 12345678,
"to_block": 12345999,
"from_timestamp": null,
"to_timestamp": null
},
"filters": {
"exchange_ids": null,
"pool_uids": [
"88e6a0c2ddd26feeb64f039a2c41296fcb3f5640000000000000000000000000"
],
"pool_addresses": null,
"pool_ids": null,
"pool_type_ids": [201, 302]
}
},
"data": [
{
"pool_uid": "88e6a0c2ddd26feeb64f039a2c41296fcb3f5640000000000000000000000000",
"exchange_id": 1,
"type_id": 201,
"block_number": 18934567,
"block_time": "2025-11-11T18:42:15.123Z",
"tx_index": 4,
"log_index": 2,
"reserves": [
"169649594140000000000000",
"60446403492000"
],
"reserves_decimals_adjusted": [
"169649.59414",
"60446403.492"
],
"current_tick": null,
"current_sqrt_price": null,
"current_bin": null,
"_tracing_id": "0301000000000000000000000000000000000000",
"_parent_tracing_ids": [
"0203000000000000000000000000000000000000"
],
"_created_at": "2025-11-11T18:42:15.123Z",
"_updated_at": "2025-11-11T18:42:15.123Z"
},
...
],
"cursor": null,
"page_count": 1
}
Reserves
Reserves
Read normalized pool reserve snapshots for on-chain liquidity analytics.
POST
/
v1
/
evm
/
reserves
curl -X POST "https://api.blockdb.io/v1/evm/reserves" \
-H "Authorization: Bearer $BLOCKDB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"chain_id": 1,
"from_block": 12345678,
"to_block": 12345999,
"pool_uids": [
"88e6a0c2ddd26feeb64f039a2c41296fcb3f5640000000000000000000000000"
],
"pool_type_ids": [201, 302],
"include_adjusted_amounts": true
}'
{
"meta": {
"chain_id": 1,
"request_window": {
"from_block": 12345678,
"to_block": 12345999,
"from_timestamp": null,
"to_timestamp": null
},
"resolved_window": {
"from_block": 12345678,
"to_block": 12345999,
"from_timestamp": null,
"to_timestamp": null
},
"filters": {
"exchange_ids": null,
"pool_uids": [
"88e6a0c2ddd26feeb64f039a2c41296fcb3f5640000000000000000000000000"
],
"pool_addresses": null,
"pool_ids": null,
"pool_type_ids": [201, 302]
}
},
"data": [
{
"pool_uid": "88e6a0c2ddd26feeb64f039a2c41296fcb3f5640000000000000000000000000",
"exchange_id": 1,
"type_id": 201,
"block_number": 18934567,
"block_time": "2025-11-11T18:42:15.123Z",
"tx_index": 4,
"log_index": 2,
"reserves": [
"169649594140000000000000",
"60446403492000"
],
"reserves_decimals_adjusted": [
"169649.59414",
"60446403.492"
],
"current_tick": null,
"current_sqrt_price": null,
"current_bin": null,
"_tracing_id": "0301000000000000000000000000000000000000",
"_parent_tracing_ids": [
"0203000000000000000000000000000000000000"
],
"_created_at": "2025-11-11T18:42:15.123Z",
"_updated_at": "2025-11-11T18:42:15.123Z"
},
...
],
"cursor": null,
"page_count": 1
}
Overview
- Dataset ID:
0301 - Liquidity Pool Reserves - Description: Retrieves time-series snapshots of AMM pool reserves, covering both even-distribution (constant-product, weighted, stable) and concentrated/bin liquidity models.
- CSV Sample: Download
- JSON Sample: Download
For concentrated liquidity (Uniswap v3/v4-style) tick distribution, use the dedicated
POST /v1/evm/reserves/liquidity-distribution endpoint,
which computes per-tick amounts on demand with a configurable price window.Parameters
Range Filters (mutually exclusive)
Starting block number (inclusive) for the query. Use with
to_block.Ending block number (inclusive) for the query. Use with
from_block.Starting timestamp (ISO-8601). If it falls between blocks, the next block after this timestamp is used. Use with
to_timestamp.Ending timestamp (ISO-8601). If it falls between blocks, the last block before this timestamp is used. Use with
from_timestamp.Validation rule:
You must provide either a block range, a time range, or at least one direct selector.
Providing more than one option results in HTTP 400.
Providing none results in HTTP 400.
You must provide either a block range, a time range, or at least one direct selector.
Providing more than one option results in HTTP 400.
Providing none results in HTTP 400.
Pool Selectors
Filter snapshots by exchange IDs. See the DigitalExchange enumeration for supported values.
Filter by BlockDB pool identifiers (
uid from /evm/entities/pools).Filter by pool contract addresses (hex string, 20 bytes, no
0x prefix).Filter by protocol-specific pool identifiers (e.g., Uniswap V4
pool_id).Filter snapshots by pool archetype. See the PoolType enumeration for supported values.
Amounts
Off by default. When set to
true, each snapshot includes reserves_decimals_adjusted — the same
reserve amounts scaled by ERC-20 token decimals (e.g. dividing a USDC value by 10⁶). Enabling it adds a
per-request ERC-20 decimals lookup (extra join) that increases latency, so it is opt-in; when omitted or
false, reserves_decimals_adjusted is null and only the always-present raw reserves array is populated.Pagination Controls
Recommended default
250; maximum 1000 to stay under ~10 MB responses.Pagination cursor from a prior call.
Response Fields
Meta
Echo of request metadata applied to the response.
EVM chain ID echoed from the request.
Pure echo of the window you sent (
from_block/to_block/from_timestamp/to_timestamp); unset bounds are null.The concrete window the query actually executed against, after resolving the request. For a block range on a time-bucketed endpoint (OHLC/VWAP/VWAP-aggregate/fiat VWAP),
from_timestamp/to_timestamp hold the resolved timestamp window (and from_block/to_block echo your request). For a time range on a block-keyed endpoint, from_block/to_block hold the resolved block range (and the timestamps echo your request). null for selector-only requests (no window). No extra database work is done — these are the values the query already computed.Resolved/echoed start block of the executed window.
Resolved/echoed end block of the executed window.
Resolved/echoed start timestamp (ISO-8601) of the executed window.
Resolved/echoed end timestamp (ISO-8601) of the executed window.
Filters echoed from the request (e.g., exchange IDs, pool identifiers, pool types).
Data
Array of reserve snapshot objects.
BlockDB pool identifier (
uid from /evm/entities/pools).Exchange identifier associated with the pool.
Pool type identifier.
Block height where the reserve change was observed.
Block timestamp when the event occurred.
Zero-based index of the parent transaction within the block.
Position of the log within the transaction.
Current reserves per token in pool order, as raw integer strings (base units).
null for concentrated-liquidity pools where reserves are not stored at the snapshot level.Same order as
reserves, but each value divided by 10^decimals for the corresponding ERC-20 token.
null when decimals are unavailable for at least one pool token, when reserves is null, or when
include_adjusted_amounts is false.Current tick for concentrated-liquidity pools.
null when not applicable.Q64.96 sqrt price as an integer string.
null when not applicable.Current bin id for bin-style AMMs.
null when not applicable.Row-level lineage hash for the snapshot.
Lineage references of immediate parents.
Record creation timestamp.
Record last update timestamp.
Envelope Fields
Cursor token for pagination.
Number of records returned in
data.curl -X POST "https://api.blockdb.io/v1/evm/reserves" \
-H "Authorization: Bearer $BLOCKDB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"chain_id": 1,
"from_block": 12345678,
"to_block": 12345999,
"pool_uids": [
"88e6a0c2ddd26feeb64f039a2c41296fcb3f5640000000000000000000000000"
],
"pool_type_ids": [201, 302],
"include_adjusted_amounts": true
}'
{
"meta": {
"chain_id": 1,
"request_window": {
"from_block": 12345678,
"to_block": 12345999,
"from_timestamp": null,
"to_timestamp": null
},
"resolved_window": {
"from_block": 12345678,
"to_block": 12345999,
"from_timestamp": null,
"to_timestamp": null
},
"filters": {
"exchange_ids": null,
"pool_uids": [
"88e6a0c2ddd26feeb64f039a2c41296fcb3f5640000000000000000000000000"
],
"pool_addresses": null,
"pool_ids": null,
"pool_type_ids": [201, 302]
}
},
"data": [
{
"pool_uid": "88e6a0c2ddd26feeb64f039a2c41296fcb3f5640000000000000000000000000",
"exchange_id": 1,
"type_id": 201,
"block_number": 18934567,
"block_time": "2025-11-11T18:42:15.123Z",
"tx_index": 4,
"log_index": 2,
"reserves": [
"169649594140000000000000",
"60446403492000"
],
"reserves_decimals_adjusted": [
"169649.59414",
"60446403.492"
],
"current_tick": null,
"current_sqrt_price": null,
"current_bin": null,
"_tracing_id": "0301000000000000000000000000000000000000",
"_parent_tracing_ids": [
"0203000000000000000000000000000000000000"
],
"_created_at": "2025-11-11T18:42:15.123Z",
"_updated_at": "2025-11-11T18:42:15.123Z"
},
...
],
"cursor": null,
"page_count": 1
}
Last modified on May 29, 2026
Was this page helpful?
⌘I