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": [
"00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640"
],
"pool_type_ids": [201, 302],
"include_adjusted_amounts": true
}'
#include <curl/curl.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
CURL *curl = curl_easy_init();
if (!curl) return 1;
const char *token = getenv("BLOCKDB_API_KEY");
char auth_header[256];
snprintf(auth_header, sizeof(auth_header), "Authorization: Bearer %s", token ? token : "");
const char *payload = "{\"chain_id\":1,\"from_block\":12345678,\"to_block\":12345999,\"pool_uids\":[\"00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640\"],\"pool_type_ids\":[201,302],\"include_adjusted_amounts\":true}";
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, auth_header);
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL, "https://api.blockdb.io/v1/evm/reserves");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
CURLcode res = curl_easy_perform(curl);
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
return res == CURLE_OK ? 0 : 1;
}
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("BLOCKDB_API_KEY"));
var payload = new StringContent(
"{\"chain_id\":1,\"from_block\":12345678,\"to_block\":12345999,\"pool_uids\":[\"00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640\"],\"pool_type_ids\":[201,302],\"include_adjusted_amounts\":true}",
Encoding.UTF8,
"application/json"
);
var response = await client.PostAsync("https://api.blockdb.io/v1/evm/reserves", payload);
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
import os
import requests
response = requests.post(
"https://api.blockdb.io/v1/evm/reserves",
headers={
"Authorization": f"Bearer {os.getenv('BLOCKDB_API_KEY')}",
"Content-Type": "application/json"
},
json={
"chain_id": 1,
"from_block": 12345678,
"to_block": 12345999,
"pool_uids": ["00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640"],
"pool_type_ids": [201, 302],
"include_adjusted_amounts": True
}
)
data = response.json()
print(data)
const response = await fetch("https://api.blockdb.io/v1/evm/reserves", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.BLOCKDB_API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"chain_id": 1,
"from_block": 12345678,
"to_block": 12345999,
"pool_uids": [
"00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640"
],
"pool_type_ids": [201, 302],
"include_adjusted_amounts": true
})
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
"os"
"strings"
)
func main() {
payload := strings.NewReader(`{
"chain_id": 1,
"from_block": 12345678,
"to_block": 12345999,
"pool_uids": [
"00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640"
],
"pool_type_ids": [201, 302],
"include_adjusted_amounts": true
}`)
req, _ := http.NewRequest("POST", "https://api.blockdb.io/v1/evm/reserves", payload)
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", os.Getenv("BLOCKDB_API_KEY")))
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
// Handle response
}
{
"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": [
"00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640"
],
"pool_addresses": null,
"pool_ids": null,
"pool_type_ids": [201, 302]
}
},
"data": [
{
"pool_uid": "00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640",
"exchange_id": 3,
"type_id": 302,
"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": "030100000000000000000000000000000000",
"_parent_tracing_ids": ["020300000000000000000000000000000000"],
"_created_at": "2025-11-11T18:42:15.123Z",
"_updated_at": "2025-11-11T18:42:15.123Z"
},
...
],
"cursor": null,
"page_count": 1
}
{
"error": {
"code": "BAD_REQUEST",
"http_status": 400,
"message": "The request contains invalid or missing parameters.",
"hint": "Validate all required parameters against the endpoint specification before retrying.",
"severity": "error",
"retryable": false,
"details": {
"invalid_parameters": [
{
"name": "chain_id",
"location": "query",
"reason": "missing",
"expected": "positive integer, e.g. 1"
}
]
},
"docs_url": "https://docs.blockdb.io/api-reference/overview/home"
}
}
{
"error": {
"code": "UNAUTHORIZED",
"http_status": 401,
"message": "Invalid or missing API key.",
"hint": "Ensure you send 'Authorization: Bearer <API_KEY>' in every request to this endpoint.",
"severity": "error",
"retryable": false,
"details": {
"auth_scheme": "bearer",
"expected_header": "Authorization: Bearer <API_KEY>",
"provided_header": "Authorization: <REDACTED_OR_MISSING>",
"token_status": "invalid_or_missing",
"recommendation": "Regenerate the API key if you suspect it is expired or compromised."
},
"docs_url": "https://docs.blockdb.io/api-reference/overview/authorization"
}
}
{
"error": {
"code": "FORBIDDEN",
"http_status": 403,
"message": "Your API key does not have permission to access this endpoint.",
"hint": "Upgrade your subscription tier or request additional access.",
"severity": "warning",
"retryable": false,
"details": {
"required_plan": "production",
"your_plan": null,
"contact": "support@blockdb.io"
},
"docs_url": "https://docs.blockdb.io/api-reference/overview/error-codes"
}
}
{
"error": {
"code": "CHAIN_NOT_SUPPORTED",
"http_status": 422,
"message": "chain_id=137 is not supported.",
"hint": "Use a supported chain_id. Consult the documentation for the list of available chains.",
"severity": "error",
"retryable": false,
"docs_url": "https://docs.blockdb.io/api-reference/overview/error-codes"
}
}
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"http_status": 429,
"message": "You have exceeded the allowed request rate.",
"hint": "Introduce client-side throttling or exponential backoff and respect the retry_after_seconds value.",
"details": {
"retry_after_seconds": 2,
"limit_scope": "api_key"
},
"docs_url": "https://docs.blockdb.io/api-reference/overview/rate-limiting"
}
}
{
"error": {
"code": "INTERNAL_SERVER_ERROR",
"http_status": 500,
"message": "An unexpected server error occurred.",
"hint": "This error is not caused by your request. You may retry after a short delay.",
"severity": "critical",
"retryable": true,
"docs_url": "https://docs.blockdb.io/api-reference/overview/error-codes"
}
}
{
"error": {
"code": "SERVICE_UNAVAILABLE",
"http_status": 503,
"message": "The service is temporarily unable to handle the request.",
"hint": "The database connection pool is briefly saturated. Retry after a short delay.",
"severity": "warning",
"retryable": true,
"details": null,
"docs_url": "https://docs.blockdb.io/api-reference/overview/error-codes"
}
}
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": [
"00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640"
],
"pool_type_ids": [201, 302],
"include_adjusted_amounts": true
}'
#include <curl/curl.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
CURL *curl = curl_easy_init();
if (!curl) return 1;
const char *token = getenv("BLOCKDB_API_KEY");
char auth_header[256];
snprintf(auth_header, sizeof(auth_header), "Authorization: Bearer %s", token ? token : "");
const char *payload = "{\"chain_id\":1,\"from_block\":12345678,\"to_block\":12345999,\"pool_uids\":[\"00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640\"],\"pool_type_ids\":[201,302],\"include_adjusted_amounts\":true}";
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, auth_header);
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL, "https://api.blockdb.io/v1/evm/reserves");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
CURLcode res = curl_easy_perform(curl);
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
return res == CURLE_OK ? 0 : 1;
}
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("BLOCKDB_API_KEY"));
var payload = new StringContent(
"{\"chain_id\":1,\"from_block\":12345678,\"to_block\":12345999,\"pool_uids\":[\"00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640\"],\"pool_type_ids\":[201,302],\"include_adjusted_amounts\":true}",
Encoding.UTF8,
"application/json"
);
var response = await client.PostAsync("https://api.blockdb.io/v1/evm/reserves", payload);
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
import os
import requests
response = requests.post(
"https://api.blockdb.io/v1/evm/reserves",
headers={
"Authorization": f"Bearer {os.getenv('BLOCKDB_API_KEY')}",
"Content-Type": "application/json"
},
json={
"chain_id": 1,
"from_block": 12345678,
"to_block": 12345999,
"pool_uids": ["00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640"],
"pool_type_ids": [201, 302],
"include_adjusted_amounts": True
}
)
data = response.json()
print(data)
const response = await fetch("https://api.blockdb.io/v1/evm/reserves", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.BLOCKDB_API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"chain_id": 1,
"from_block": 12345678,
"to_block": 12345999,
"pool_uids": [
"00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640"
],
"pool_type_ids": [201, 302],
"include_adjusted_amounts": true
})
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
"os"
"strings"
)
func main() {
payload := strings.NewReader(`{
"chain_id": 1,
"from_block": 12345678,
"to_block": 12345999,
"pool_uids": [
"00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640"
],
"pool_type_ids": [201, 302],
"include_adjusted_amounts": true
}`)
req, _ := http.NewRequest("POST", "https://api.blockdb.io/v1/evm/reserves", payload)
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", os.Getenv("BLOCKDB_API_KEY")))
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
// Handle response
}
{
"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": [
"00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640"
],
"pool_addresses": null,
"pool_ids": null,
"pool_type_ids": [201, 302]
}
},
"data": [
{
"pool_uid": "00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640",
"exchange_id": 3,
"type_id": 302,
"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": "030100000000000000000000000000000000",
"_parent_tracing_ids": ["020300000000000000000000000000000000"],
"_created_at": "2025-11-11T18:42:15.123Z",
"_updated_at": "2025-11-11T18:42:15.123Z"
},
...
],
"cursor": null,
"page_count": 1
}
{
"error": {
"code": "BAD_REQUEST",
"http_status": 400,
"message": "The request contains invalid or missing parameters.",
"hint": "Validate all required parameters against the endpoint specification before retrying.",
"severity": "error",
"retryable": false,
"details": {
"invalid_parameters": [
{
"name": "chain_id",
"location": "query",
"reason": "missing",
"expected": "positive integer, e.g. 1"
}
]
},
"docs_url": "https://docs.blockdb.io/api-reference/overview/home"
}
}
{
"error": {
"code": "UNAUTHORIZED",
"http_status": 401,
"message": "Invalid or missing API key.",
"hint": "Ensure you send 'Authorization: Bearer <API_KEY>' in every request to this endpoint.",
"severity": "error",
"retryable": false,
"details": {
"auth_scheme": "bearer",
"expected_header": "Authorization: Bearer <API_KEY>",
"provided_header": "Authorization: <REDACTED_OR_MISSING>",
"token_status": "invalid_or_missing",
"recommendation": "Regenerate the API key if you suspect it is expired or compromised."
},
"docs_url": "https://docs.blockdb.io/api-reference/overview/authorization"
}
}
{
"error": {
"code": "FORBIDDEN",
"http_status": 403,
"message": "Your API key does not have permission to access this endpoint.",
"hint": "Upgrade your subscription tier or request additional access.",
"severity": "warning",
"retryable": false,
"details": {
"required_plan": "production",
"your_plan": null,
"contact": "support@blockdb.io"
},
"docs_url": "https://docs.blockdb.io/api-reference/overview/error-codes"
}
}
{
"error": {
"code": "CHAIN_NOT_SUPPORTED",
"http_status": 422,
"message": "chain_id=137 is not supported.",
"hint": "Use a supported chain_id. Consult the documentation for the list of available chains.",
"severity": "error",
"retryable": false,
"docs_url": "https://docs.blockdb.io/api-reference/overview/error-codes"
}
}
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"http_status": 429,
"message": "You have exceeded the allowed request rate.",
"hint": "Introduce client-side throttling or exponential backoff and respect the retry_after_seconds value.",
"details": {
"retry_after_seconds": 2,
"limit_scope": "api_key"
},
"docs_url": "https://docs.blockdb.io/api-reference/overview/rate-limiting"
}
}
{
"error": {
"code": "INTERNAL_SERVER_ERROR",
"http_status": 500,
"message": "An unexpected server error occurred.",
"hint": "This error is not caused by your request. You may retry after a short delay.",
"severity": "critical",
"retryable": true,
"docs_url": "https://docs.blockdb.io/api-reference/overview/error-codes"
}
}
{
"error": {
"code": "SERVICE_UNAVAILABLE",
"http_status": 503,
"message": "The service is temporarily unable to handle the request.",
"hint": "The database connection pool is briefly saturated. Retry after a short delay.",
"severity": "warning",
"retryable": true,
"details": null,
"docs_url": "https://docs.blockdb.io/api-reference/overview/error-codes"
}
}
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)
number
Starting block number (inclusive) for the query. Use with
to_block.number
Ending block number (inclusive) for the query. Use with
from_block.string
Starting timestamp (ISO-8601). If it falls between blocks, the next block after this timestamp is used. Use with
to_timestamp.string
Ending timestamp (ISO-8601). If it falls between blocks, the last block before this timestamp is used. Use with
from_timestamp.Scoping rule: Provide exactly one of:
- Block range —
from_blockandto_block - Time range —
from_timestampandto_timestamp - Direct selectors — presented below
Pool Selectors
number[]
Filter snapshots by exchange IDs. See the DigitalExchange enumeration for supported values.
string[]
Filter by BlockDB pool identifiers (
uid from /evm/entities/pools).string[]
Filter by pool contract addresses (hex string, 20 bytes, no
0x prefix).string[]
Filter by protocol-specific pool identifiers (e.g., Uniswap V4
pool_id).Amounts
boolean
default:"false"
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
number
default:"250"
Recommended default
250; maximum 1000 to stay under ~10 MB responses.string
Pagination cursor from a prior call.
Response Fields
Meta
object
Echo of request metadata applied to the response.
number
EVM chain ID echoed from the request.
object
Pure echo of the window you sent (
from_block/to_block/from_timestamp/to_timestamp); unset bounds are null.object | 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.number | null
Resolved/echoed start block of the executed window.
number | null
Resolved/echoed end block of the executed window.
string | null
Resolved/echoed start timestamp (ISO-8601) of the executed window.
string | null
Resolved/echoed end timestamp (ISO-8601) of the executed window.
object
Filters echoed from the request (e.g., exchange IDs, pool identifiers, pool types).
Data
object[]
Array of reserve snapshot objects.
string
BlockDB pool identifier (
uid from /evm/entities/pools).number
Exchange identifier associated with the pool.
number
Pool type identifier.
number
Block height where the reserve change was observed.
string
Block timestamp when the event occurred.
number
Zero-based index of the parent transaction within the block.
number
Position of the log within the transaction.
string[] | null
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.string[] | null
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.number | null
Current tick for concentrated-liquidity pools.
null when not applicable.string | null
Q64.96 sqrt price as an integer string.
null when not applicable.number | null
Current bin id for bin-style AMMs.
null when not applicable.string
Row-level lineage hash for the snapshot.
string[]
Lineage references of immediate parents.
string
Record creation timestamp.
string
Record last update timestamp.
Envelope Fields
string | null
Cursor token for pagination.
number
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": [
"00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640"
],
"pool_type_ids": [201, 302],
"include_adjusted_amounts": true
}'
#include <curl/curl.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
CURL *curl = curl_easy_init();
if (!curl) return 1;
const char *token = getenv("BLOCKDB_API_KEY");
char auth_header[256];
snprintf(auth_header, sizeof(auth_header), "Authorization: Bearer %s", token ? token : "");
const char *payload = "{\"chain_id\":1,\"from_block\":12345678,\"to_block\":12345999,\"pool_uids\":[\"00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640\"],\"pool_type_ids\":[201,302],\"include_adjusted_amounts\":true}";
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, auth_header);
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL, "https://api.blockdb.io/v1/evm/reserves");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
CURLcode res = curl_easy_perform(curl);
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
return res == CURLE_OK ? 0 : 1;
}
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("BLOCKDB_API_KEY"));
var payload = new StringContent(
"{\"chain_id\":1,\"from_block\":12345678,\"to_block\":12345999,\"pool_uids\":[\"00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640\"],\"pool_type_ids\":[201,302],\"include_adjusted_amounts\":true}",
Encoding.UTF8,
"application/json"
);
var response = await client.PostAsync("https://api.blockdb.io/v1/evm/reserves", payload);
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
import os
import requests
response = requests.post(
"https://api.blockdb.io/v1/evm/reserves",
headers={
"Authorization": f"Bearer {os.getenv('BLOCKDB_API_KEY')}",
"Content-Type": "application/json"
},
json={
"chain_id": 1,
"from_block": 12345678,
"to_block": 12345999,
"pool_uids": ["00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640"],
"pool_type_ids": [201, 302],
"include_adjusted_amounts": True
}
)
data = response.json()
print(data)
const response = await fetch("https://api.blockdb.io/v1/evm/reserves", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.BLOCKDB_API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"chain_id": 1,
"from_block": 12345678,
"to_block": 12345999,
"pool_uids": [
"00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640"
],
"pool_type_ids": [201, 302],
"include_adjusted_amounts": true
})
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
"os"
"strings"
)
func main() {
payload := strings.NewReader(`{
"chain_id": 1,
"from_block": 12345678,
"to_block": 12345999,
"pool_uids": [
"00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640"
],
"pool_type_ids": [201, 302],
"include_adjusted_amounts": true
}`)
req, _ := http.NewRequest("POST", "https://api.blockdb.io/v1/evm/reserves", payload)
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", os.Getenv("BLOCKDB_API_KEY")))
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
// Handle response
}
{
"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": [
"00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640"
],
"pool_addresses": null,
"pool_ids": null,
"pool_type_ids": [201, 302]
}
},
"data": [
{
"pool_uid": "00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640",
"exchange_id": 3,
"type_id": 302,
"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": "030100000000000000000000000000000000",
"_parent_tracing_ids": ["020300000000000000000000000000000000"],
"_created_at": "2025-11-11T18:42:15.123Z",
"_updated_at": "2025-11-11T18:42:15.123Z"
},
...
],
"cursor": null,
"page_count": 1
}
{
"error": {
"code": "BAD_REQUEST",
"http_status": 400,
"message": "The request contains invalid or missing parameters.",
"hint": "Validate all required parameters against the endpoint specification before retrying.",
"severity": "error",
"retryable": false,
"details": {
"invalid_parameters": [
{
"name": "chain_id",
"location": "query",
"reason": "missing",
"expected": "positive integer, e.g. 1"
}
]
},
"docs_url": "https://docs.blockdb.io/api-reference/overview/home"
}
}
{
"error": {
"code": "UNAUTHORIZED",
"http_status": 401,
"message": "Invalid or missing API key.",
"hint": "Ensure you send 'Authorization: Bearer <API_KEY>' in every request to this endpoint.",
"severity": "error",
"retryable": false,
"details": {
"auth_scheme": "bearer",
"expected_header": "Authorization: Bearer <API_KEY>",
"provided_header": "Authorization: <REDACTED_OR_MISSING>",
"token_status": "invalid_or_missing",
"recommendation": "Regenerate the API key if you suspect it is expired or compromised."
},
"docs_url": "https://docs.blockdb.io/api-reference/overview/authorization"
}
}
{
"error": {
"code": "FORBIDDEN",
"http_status": 403,
"message": "Your API key does not have permission to access this endpoint.",
"hint": "Upgrade your subscription tier or request additional access.",
"severity": "warning",
"retryable": false,
"details": {
"required_plan": "production",
"your_plan": null,
"contact": "support@blockdb.io"
},
"docs_url": "https://docs.blockdb.io/api-reference/overview/error-codes"
}
}
{
"error": {
"code": "CHAIN_NOT_SUPPORTED",
"http_status": 422,
"message": "chain_id=137 is not supported.",
"hint": "Use a supported chain_id. Consult the documentation for the list of available chains.",
"severity": "error",
"retryable": false,
"docs_url": "https://docs.blockdb.io/api-reference/overview/error-codes"
}
}
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"http_status": 429,
"message": "You have exceeded the allowed request rate.",
"hint": "Introduce client-side throttling or exponential backoff and respect the retry_after_seconds value.",
"details": {
"retry_after_seconds": 2,
"limit_scope": "api_key"
},
"docs_url": "https://docs.blockdb.io/api-reference/overview/rate-limiting"
}
}
{
"error": {
"code": "INTERNAL_SERVER_ERROR",
"http_status": 500,
"message": "An unexpected server error occurred.",
"hint": "This error is not caused by your request. You may retry after a short delay.",
"severity": "critical",
"retryable": true,
"docs_url": "https://docs.blockdb.io/api-reference/overview/error-codes"
}
}
{
"error": {
"code": "SERVICE_UNAVAILABLE",
"http_status": 503,
"message": "The service is temporarily unable to handle the request.",
"hint": "The database connection pool is briefly saturated. Retry after a short delay.",
"severity": "warning",
"retryable": true,
"details": null,
"docs_url": "https://docs.blockdb.io/api-reference/overview/error-codes"
}
}
Last modified on July 19, 2026
Was this page helpful?
⌘I