Blocknative's Gas API and Gas Network shut down on June 19, 2026. If you have api.blocknative.com/gasprices/blockprices anywhere in your codebase, that call starts failing in days.
This is the code-level migration guide. We published the announcement earlier; this post covers the exact request/response mapping, what's identical, and — just as important — what's not.
The 30-second migration
Swap the base URL. Drop the auth header. That's it for the core endpoint.
- curl -H "Authorization: $BLOCKNATIVE_KEY" \
- "https://api.blocknative.com/gasprices/blockprices?chainid=8453"
+ curl "https://logicnodes.io/gasprices/blockprices?chainid=8453"
No signup, no API key. Free tier is 100 calls/day per IP, tracked via the X-Free-Calls-Remaining-Today response header.
JavaScript:
// before
const r = await fetch(
"https://api.blocknative.com/gasprices/blockprices?chainid=1",
{ headers: { Authorization: process.env.BN_KEY } }
);
// after
const r = await fetch(
"https://logicnodes.io/gasprices/blockprices?chainid=1"
);
const { blockPrices } = await r.json();
const { maxFeePerGas, maxPriorityFeePerGas } =
blockPrices[0].estimatedPrices.find(p => p.confidence === 95);
Python:
import requests
r = requests.get(
"https://logicnodes.io/gasprices/blockprices",
params={"chainid": 137},
timeout=10,
)
est = r.json()["blockPrices"][0]["estimatedPrices"]
p95 = next(p for p in est if p["confidence"] == 95)
# p95["maxFeePerGas"], p95["maxPriorityFeePerGas"] — gwei floats
What you get back
Same shape your Blocknative parsing code already expects:
{
"system": "base",
"network": "main",
"unit": "gwei",
"maxPrice": 0.1131,
"currentBlockNumber": 47211781,
"msSinceLastBlock": 662,
"blockPrices": [
{
"blockNumber": 47211782,
"estimatedTransactionCount": 211,
"baseFeePerGas": 0.005,
"estimatedPrices": [
{ "confidence": 99, "price": 0.1126, "maxPriorityFeePerGas": 0.1076, "maxFeePerGas": 0.1131 },
{ "confidence": 95, "price": 0.017, "maxPriorityFeePerGas": 0.012, "maxFeePerGas": 0.0175 },
{ "confidence": 90, "price": 0.01, "maxPriorityFeePerGas": 0.005, "maxFeePerGas": 0.0105 },
{ "confidence": 80, "price": 0.0085, "maxPriorityFeePerGas": 0.0035, "maxFeePerGas": 0.009 },
{ "confidence": 70, "price": 0.0069, "maxPriorityFeePerGas": 0.0019, "maxFeePerGas": 0.0075 }
]
}
]
}
All five confidence levels (99/95/90/80/70), gwei units, maxFeePerGas / maxPriorityFeePerGas per level — code that indexes into blockPrices[0].estimatedPrices works unchanged.
What's different (read this before you ship)
We'd rather you find out here than in production:
-
One pending block only.
blockPricesalways has exactly one entry (the next block). Blocknative could return several future blocks. If you readblockPrices[1+], that needs to go. -
No
estimatedBaseFeesarray. We don't return the multi-block base-fee forecast distribution. -
Confidence is percentile math, not a simulation platform. Each confidence level maps to an
eth_feeHistoryreward percentile (99→p99, 95→p95, …) over the last 100 blocks; priority fee is the median of the most recent 20 blocks at that percentile, plus a base-fee headroom buffer derived from 100-block volatility. It's deterministic and you can recompute it from any node — but it is not Blocknative's mempool-simulation model. -
estimatedTransactionCountis the latest block's transaction count, not a pending-pool prediction.
Supported chains — only these five
| chainid | network |
|---|---|
| 1 | Ethereum |
| 137 | Polygon |
| 8453 | Base |
| 42161 | Arbitrum One |
| 10 | Optimism |
Any other chainid returns a 400 listing exactly what we serve — no silent fallbacks, no fake coverage. Blocknative served 40+ chains; we don't, and we won't pretend to. If you need a chain we're missing, email hello@logicnodes.io and we'll prioritize it.
Past the free tier
After 100 calls/day from one IP, the endpoint returns 402 with x402 payment instructions: $0.001 USDC per call on Base, passed via an X-Payment-Tx header. No account, no card, no sales call. Or just come back tomorrow.
Verify it yourself
Everything above is reproducible from a public node:
curl -s https://mainnet.base.org -X POST -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_feeHistory","params":["0x64","latest",[70,80,90,95,99]]}'
That's the entire upstream data source. The response header X-Data-Source: eth_feeHistory-100-blocks says so on every call.
Links
- Migration page with sunset countdown: https://logicnodes.io/blocknative
- Live estimator UI: https://logicnodes.io/gas-estimator
- Questions / missing chains: hello@logicnodes.io
Eight days left. The URL swap takes less time than reading this post.
Top comments (0)