RPC endpoints and API reference for 36 chains.

Endpoint URLs, supported networks, JSON-RPC method weights, WebSocket subscriptions, key restrictions, and copy-paste examples in JavaScript, Python and Go.

Introduction

BoltRPC is a production-grade RPC node service giving developers instant access to 36 blockchain networks through a single, unified API. Whether you're building DeFi protocols, NFT platforms, wallets, or indexers - BoltRPC handles the infrastructure so you don't have to.

Globally distributed nodes with automatic failover
Full JSON-RPC method coverage; debug_* and trace_* wherever a chain's nodes support them (see Supported Networks)
WebSocket support for real-time event subscriptions on every network
Archive data where the chain's node pool holds it, full or partial, shown per chain
Unified endpoint pattern - swap the network slug, keep your code
Operated by Matrixed.Link - ISO/IEC 27001:2022 certified, official Chainlink node operator
New to RPC infrastructure? Read What is JSON-RPC or How to Choose a Blockchain RPC Provider.

Quick Start

Get your first response in under 60 seconds.

1

Get your API key

Sign up at dashboard.boltrpc.io. Free 14-day trial with 5M request units at 100 req/s, instant key delivery, no credit card. Add a card any time to keep going with on-demand usage, no plan needed.

Get free API key
2

Make your first request

Replace YOUR_API_KEY in the endpoint URL and send a JSON-RPC request to any supported network.

Step 2: Make your first request

bash
curl -s -X POST \
  "https://endpoints.boltrpc.io/rpc/YOUR_API_KEY/ethereum" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'

Response

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": "0x14a5f3b"
}
That's it. You're live on Ethereum mainnet. Replace ethereum in the URL with any network slug from the Supported Networks table to switch chains instantly.

Authentication

Your API key is embedded directly in the endpoint URL. No extra headers required.

endpoint pattern
https://endpoints.boltrpc.io/rpc/YOUR_API_KEY/{network}
wss://endpoints.boltrpc.io/ws/YOUR_API_KEY/{network}
Keep your key private. Treat it like a password. Do not expose it in client-side code or public repositories. Use environment variables in production.
.env
BOLTRPC_URL=https://endpoints.boltrpc.io/rpc/YOUR_API_KEY/ethereum

Supported Networks

All networks below are available via both HTTPS and WebSocket unless noted. Each network name links to its page with the RPC URL, chain ID and connection examples, for example the Ethereum RPC endpoint, Base RPC and BNB Chain (BSC) RPC.

NetworkSlugChain IDHTTPSWebSocketgRPC
ApeChainape33139✓✓n/a
Aptosaptosn/a✓✓n/a
Arbitrum Onearbitrum42161✓✓n/a
Avalancheavax43114✓✓n/a
Basebase8453✓✓n/a
Bitcoinbitcoinn/a✓✓n/a
BNB Smart Chainbsc56✓✓n/a
BOBbob60808✓✓n/a
Celocelo42220✓✓n/a
Enjinn/an/apublicpublicn/a
Ethereumethereum1✓✓n/a
Ethereum Beaconethereum-beaconn/a✓✓n/a
Inkink57073✓✓n/a
Katanakatana747474✓✓n/a
Linealinea59144✓✓n/a
Mantlemantle5000✓✓n/a
MegaETHmegaeth4326✓✓n/a
Monadmonad143✓✓n/a
Optimismoptimism10✓✓n/a
Plasmaplasma9745✓✓n/a
Polygonpolygon137✓✓n/a
Robinhood Chainrobinhood4663✓✓n/a
Scrollscroll534352✓✓n/a
Solanasolana101✓✓n/a
Sonicsonic146✓✓n/a
StarknetstarknetSN_MAIN✓✓n/a
Suisui897796746✓✓native
Trontron728126428✓✓native
Unichainunichain130✓✓n/a
X Layerxlayer196✓✓n/a
zkSync Erazksync324✓✓n/a
Ethereum Hoodiethereum-hoodi560048✓✓n/a
Ethereum Hoodi Beaconethereum-hoodi-beaconn/a✓✓n/a
Ethereum Sepoliaethereum-sepolia11155111✓✓n/a
Ethereum Sepolia Beaconethereum-sepolia-beaconn/a✓✓n/a
Polygon Amoypolygon-amoy80002✓✓n/a
Enjin Relay Chainn/an/apublicpublicn/a

gRPC: native HTTP/2 on endpoints.boltrpc.io:443 plus gRPC-Web at /grpc/<slug>, see Native gRPC.

Hyperliquid support coming soon.


Connecting

EVM Networks

All EVM chains share the same URL pattern. Only the network slug changes.

HTTPS endpoint

url
https://endpoints.boltrpc.io/rpc/YOUR_API_KEY/{network}

WebSocket endpoint

url
wss://endpoints.boltrpc.io/ws/YOUR_API_KEY/{network}

One request that works across every EVM chain

bash
# Set your target network
BOLTRPC_URL="https://endpoints.boltrpc.io/rpc/YOUR_API_KEY/base"

curl -s -X POST "$BOLTRPC_URL" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'

Ethereum testnets

url
# Sepolia: dApp development & smart contract testing
https://endpoints.boltrpc.io/rpc/YOUR_API_KEY/ethereum-sepolia

# Hoodi: validator infrastructure & staking
https://endpoints.boltrpc.io/rpc/YOUR_API_KEY/ethereum-hoodi
Per-chain guides:Ethereum ·Arbitrum ·Base ·Polygon ·Optimism ·Solana

Beacon Chain REST API

The Ethereum Beacon Chain API is a REST API, not a JSON-RPC interface. It exposes consensus layer data: validators, slots, epochs, finality checkpoints, and withdrawal information. It does not support eth_* methods.

Authentication: Beacon endpoints authenticate the same way as EVM endpoints: the API key is embedded in the URL path, with the REST path appended after the network slug.

NetworkBase URL
Mainnet Beacon...boltrpc.io/rpc/YOUR_API_KEY/ethereum-beacon
Sepolia Beacon...boltrpc.io/rpc/YOUR_API_KEY/ethereum-sepolia-beacon
Hoodi Beacon...boltrpc.io/rpc/YOUR_API_KEY/ethereum-hoodi-beacon

WebSocket: the Beacon API itself is REST, but wss://endpoints.boltrpc.io/ws/YOUR_API_KEY/ethereum-beacon streams one newHeads notification per slot (subscribe with eth_subscribe), gap-free across failover.

Event stream (GET /eth/v1/events)

/eth/v1/events?topics=head (or any other topic list) streams beacon events as server-sent events. Each delivered event bills once, like a WebSocket message; a stream that opens is free to open, and the keep-alive comments sent during quiet spells are free.

The gateway checks an open stream's key again about once a minute. When the key is disabled or expires, the account is blocked, the network is paused, switched off or no longer covered by the key, the request units or the on-demand spending limit run out, a team member reaches the usage limit the owner set, or no plan pays for the key, the stream ends within about a minute. It normally ends with a comment that names the reason and a retry field, for example:

text
: stream closed: Key revoked
retry: 60000

A comment is never dispatched as an event, so an EventSource only sees the stream end; the refusal body of a reconnect says why. For the four request-unit cases the comment carries the matching WebSocket close code 4029 sentence; every other reason reads Key revoked. A reconnect is refused like any new request: 401 for a disabled or expired key, 403 for a blocked account, a paused, switched off or uncovered network, or no active plan, and 429 when the request units, the on-demand spending limit or a team member's usage limit are used up. The retry: 60000 asks clients that retry on their own to wait a minute. A browser EventSource, and libraries that follow the SSE spec, stop for good on a 401, 403 or 429 and do not reconnect by themselves: open a new stream once the cause is fixed.

Every stream also ends after about 22 to 24 hours (the exact moment varies per stream so that streams do not all reconnect at once), with the comment : stream closed: maximum stream lifetime reached, reconnect and retry: 3000. Reconnect at once.

A stream also ends, without a closing comment, when the node behind it stops or fails over, after 15 minutes without any data from the node, and when the gateway restarts. Reconnect at once; the new stream picks a healthy node. A key may hold up to 20 open event streams per network on each gateway server; a further open is refused with 429 and the body {"error":"too many concurrent event streams; close one and retry"}.

The Beacon API event stream has no replay: events carry no id and a reconnect starts at the live head, so fetch anything you missed from the REST paths (for example /eth/v1/beacon/headers/head or /eth/v2/beacon/blocks/head).

Check sync status

bash
curl "https://endpoints.boltrpc.io/rpc/YOUR_API_KEY/ethereum-beacon/eth/v1/node/syncing"

Get finality checkpoints

bash
curl "https://endpoints.boltrpc.io/rpc/YOUR_API_KEY/ethereum-beacon/eth/v1/beacon/states/finalized/finality_checkpoints"

Common Beacon API paths

PathDescription
GET /eth/v1/node/syncingNode sync status and head slot
GET /eth/v1/beacon/headers/headLatest beacon block header
GET /eth/v2/beacon/blocks/{block_id}Full beacon block including execution payload
GET /eth/v1/beacon/states/{state_id}/finality_checkpointsJustified and finalized epochs
GET /eth/v1/beacon/states/head/validators/{index}Single validator status and balance
GET /eth/v1/beacon/states/head/validators?status=active_ongoingFiltered validator set

Starknet

EnvironmentHTTPSWebSocket
Mainnet...boltrpc.io/rpc/YOUR_API_KEY/starknet...boltrpc.io/ws/YOUR_API_KEY/starknet

Example: get block number

bash
curl -X POST "https://endpoints.boltrpc.io/rpc/YOUR_API_KEY/starknet" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"starknet_blockNumber","params":[],"id":1}'

WebSocket subscription

json
{"jsonrpc":"2.0","id":1,"method":"starknet_subscribe","params":["newHeads"]}

Enjin public · no key

Both Enjin endpoints are public. No API key required.

ChainHTTPSWebSocket
Matrix Chainhttps://enjin-matrix-chain.matrixed.linkwss://enjin-matrix-chain.matrixed.link
Relay Chainhttps://enjin-relay-chain.matrixed.linkwss://enjin-relay-chain.matrixed.link
bash
# Matrix Chain: HTTPS (node health)
curl -s -X POST "https://enjin-matrix-chain.matrixed.link" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"system_health","params":[],"id":1}'

# Relay Chain: HTTPS (finalized head)
curl -s -X POST "https://enjin-relay-chain.matrixed.link" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"chain_getFinalizedHead","params":[],"id":1}'

# Matrix Chain: WebSocket (subscribe to new heads)
wscat -c wss://enjin-matrix-chain.matrixed.link

Code Examples

javascript
const BOLTRPC_URL = "https://endpoints.boltrpc.io/rpc/YOUR_API_KEY/ethereum";

async function getBlockNumber() {
  const res = await fetch(BOLTRPC_URL, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ jsonrpc: "2.0", method: "eth_blockNumber", params: [], id: 1 }),
  });
  const data = await res.json();
  console.log("Latest block:", parseInt(data.result, 16));
}

getBlockNumber();

API Reference

Ethereum / EVM Methods

General: Web3, Net, Txpool

MethodDescriptionRU
web3_clientVersionReturns the current client version3
web3_sha3Returns Keccak-256 hash of the given data3
net_versionReturns the network/chain ID3
net_listeningWhether the client is listening for peers3
net_peerCountNumber of connected peers3
txpool_statusPending/queued tx counts (Geth only)6
txpool_inspectText summary of txpool (Geth only)6
txpool_contentWhole-mempool dump: blocked on every keyn/a
txpool_contentFromMempool dump for an address: blocked on every keyn/a

Ethereum Core

MethodDescriptionRUNotes
eth_syncingNode sync status3
eth_chainIdCurrent chain ID3Preferred over net_version for EIP-155
eth_gasPriceCurrent gas price in wei3Consider EIP-1559 fields instead
eth_maxPriorityFeePerGasSuggested tip (wei)3EIP-1559
eth_blockNumberLatest block number3
eth_getBalanceBalance of an address3
eth_getCodeContract bytecode at address3
eth_getStorageAtValue at a storage slot3Archive required for historical blocks
eth_getTransactionCountNonce / tx count for address3
eth_callRead-only call (no state change)3
eth_estimateGasGas estimate for a call/tx3
eth_sendRawTransactionBroadcast a signed transaction5Recommended for production
eth_getTransactionByHashTransaction by hash3
eth_getTransactionReceiptTransaction receipt3
eth_getBlockByNumberBlock by number3
eth_getBlockByHashBlock by hash3
eth_getLogsLogs matching filter criteria4No block-range cap; up to 250,000 logs per request, see Request limits
eth_newFilterCreate a log filter3Filter ids are pinned to the node that created them
eth_newBlockFilterFilter for new blocks3
eth_newPendingTransactionFilterFilter for pending txs3
eth_getFilterChangesPoll filter deltas3Always reaches the owning node
eth_getFilterLogsAll logs for a filter3
eth_uninstallFilterRemove a filter3
eth_subscribeSubscribe to event stream3WebSocket only; every pushed message bills once
eth_unsubscribeCancel a subscription3WebSocket only
eth_getProofAccount/storage Merkle proof3

Debug & Trace (per chain)

Whether a chain answers debug_* and trace_* depends on its node clients, not on your plan: the Networks page shows the trace and debug support of every chain, and every plan gets what the chain offers at the weights below. The three unbounded state-iteration methods (debug_accountRange, debug_storageRangeAt, debug_dumpBlock) walk a whole trie from one call; they are off by default and enabled per account on request from Business upward. Contact us to enable them.

MethodDescriptionRUNotes
debug_traceTransactionOpcode-level trace for a tx6
debug_traceBlockByHashTrace all txs in a block (by hash)6
debug_traceBlockByNumberTrace all txs in a block (by number)6
debug_traceCallTrace a simulated call6
debug_accountRangeIterate the account trie6On request (unbounded)
debug_storageRangeAtIterate a contract's storage6On request (unbounded)
debug_dumpBlockFull state dump at a block3On request (unbounded)
trace_callTrace a call at a given block6
trace_transactionFull trace of a transaction6
trace_blockTrace all txs in a block6
trace_replayTransactionReplay and trace a transaction12
trace_replayBlockTransactionsReplay block with traces12
trace_filterTrace logs by filter criteria6
trace_callManyBatch call traces6

Method Weighting

BoltRPC uses a request unit (RU) weighting system to fairly account for the varying cost of different RPC methods. RU weights are fixed and published, so you know the exact cost of every call before you build.

RU WeightMethods
3Standard reads: eth_blockNumber, eth_getBalance, eth_call, eth_chainId and most standard methods; every WebSocket push message
4Range and bulk queries: eth_getLogs, multi-item reads (getMultipleAccounts, sui_multiGet*), lists, simulations; a JSON-RPC batch bills each request inside it at its own weight
5Transaction broadcast: eth_sendRawTransaction, sendTransaction, sui_executeTransactionBlock, sendrawtransaction
6Traces and debug: debug_trace*, trace_*, txpool_status, txpool_inspect
12trace_replayTransaction, trace_replayBlockTransactions
20parity_listStorageKeys
BlockedNot relayed on any key, on any plan: admin_*, personal_*, miner_*, engine_*, les_*, reth_*, node-control debug_* (setHead, profiling, database access), txpool_content, txpool_contentFrom, Sui unsafe_*. Bitcoin relays a read-only allowlist; the Beacon and Aptos REST doors relay documented API paths only.

Request limits & behaviours

The bounds the gateway enforces, and what it does for you underneath. Everything here is per request and independent of your plan.

TopicBehaviour
Rate limitNo rate limit on monthly plans. The free trial and on-demand usage without a plan are limited to 100 requests per second (burst 200). Per-key limits and daily caps are yours to set in the dashboard.
eth_getLogs block rangeNo hard block-range cap. A wide range is split into chunks and fanned out across the chain's nodes server-side, then merged into one answer and billed as one request (4 RU). A single request returns at most 250,000 logs; past that it is refused with an error that names a narrower range that fits. Each request has a 60-second deadline.
History below a node's floorEvery node's real history depth is verified, not taken from its earliest claim. A block-addressed request starts on a node that has the block. A log range that begins below what any node stores is refused with -32000 and data.earliestBlock naming the first stored block, never silently clamped: a partial answer is never served as complete.
Filters (eth_newFilter family)Filter ids are node-local by nature. The gateway tags every id with the node that created it, so eth_getFilterChanges, eth_getFilterLogs and eth_uninstallFilter always reach the owning node, on HTTP and WebSocket, on every EVM chain and on Tron's /jsonrpc door.
JSON-RPC batchesA batch envelope is relayed as one HTTP request and billed per request inside it, each at its own weight. A batch is routed by its heaviest member, so [eth_chainId, eth_getLogs] gets the log-query budget.
WebSocket pingA JSON-RPC "ping" message sent over WebSocket is free.
Solana transaction v1Since mainnet epoch 1035 (2026-09-15) blocks carry v1 transactions. Pass maxSupportedTransactionVersion: 1 to getBlock and getTransaction or the node answers -32015; logsSubscribe needs no change.
FailoverA node that errors, falls behind or stops advancing is taken out of rotation automatically; requests prefer the fastest healthy nodes of each chain. WebSocket subscriptions survive a switch: the socket stays open, subscription ids stay stable, missed blocks are replayed in order and missed logs are replayed. A gap too long to replay is not sent; see failover, duplicates and gaps.

Errors you can fix in the dashboard

When the gateway refuses a key for a reason you can fix yourself, the plain-text body says what happened and where to fix it. The status codes never change, so branch on the status, not on the text.

StatusSituationBody
401A free trial's key reached its end dateUnauthorized: this key's free trial has ended. Add a card or choose a plan to re-enable the same key: https://dashboard.boltrpc.io/dashboard/billing
429A free trial's request units are used upToo Many Requests: your free trial's request units are used up. Add a card for pay-as-you-go usage or choose a plan to continue on the same key: https://dashboard.boltrpc.io/dashboard/billing
429On-demand usage is on and its spending limit is reachedToo Many Requests: your on-demand spending limit is reached. Raise it in the dashboard to continue on the same key: https://dashboard.boltrpc.io/dashboard/billing
429A plan's request units are used up and on-demand usage is offToo Many Requests: your plan's request units are used up. Upgrade, or turn on on-demand usage, at https://dashboard.boltrpc.io/dashboard/billing
429On-demand usage without a plan is over its rate limitToo Many Requests: rate limit of 100 requests/second exceeded (account limit). On-demand usage without a plan is limited; choose a plan for no rate limit: https://dashboard.boltrpc.io/dashboard/billing
403No plan pays for the keyForbidden: no active plan pays for this key. Start a free trial, add a card, or choose a plan at https://dashboard.boltrpc.io

Every other refusal (a wrong or disabled key, IP or origin allowlists, chain scope, per-key rate limits, daily caps, team member caps) keeps its existing body. The 429 rate-limit headers (Retry-After, X-RateLimit-*) are the same in every case.


WebSocket Subscriptions

WebSocket connections enable real-time event streaming without polling. Available on all paid plans.

Connect

bash
wscat -c "wss://endpoints.boltrpc.io/ws/YOUR_API_KEY/ethereum"

Subscribe to new block headers

json
{"jsonrpc":"2.0","id":1,"method":"eth_subscribe","params":["newHeads"]}

Subscribe to logs (e.g. ERC-20 Transfer events)

json
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "eth_subscribe",
  "params": [
    "logs",
    {
      "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
      "topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]
    }
  ]
}

Subscribe to pending transactions

json
{"jsonrpc":"2.0","id":3,"method":"eth_subscribe","params":["newPendingTransactions"]}

Unsubscribe

json
{"jsonrpc":"2.0","id":4,"method":"eth_unsubscribe","params":["YOUR_SUBSCRIPTION_ID"]}

Each subscription is tied to the active connection and closes automatically when the socket disconnects.

Failover, duplicates and gaps

When a node fails, the gateway moves your socket to another node of the same chain. The socket stays open and your subscription ids stay the same. Blocks you missed during the switch are replayed in order. Missed logs are replayed too, in block order, but a replayed log can arrive after a newer live log, so do not assume log block numbers only go up. On EVM chains the replay covers up to 128 blocks for newHeads and up to 5,000 blocks for logs. Solana logsSubscribe replays up to 1,500 slots and Starknet subscribeEvents up to 100 blocks. A Solana replay also delivers at most 200 transactions. When a gap on a very busy address holds more than that, the gateway either keeps the newest 200 and does not send the older ones (the default), or, on chains where close code 4013 is enabled, sends none of them and closes the socket with the whole gap in the reason. Fetch the missing transactions with getSignaturesForAddress and getTransaction if you need every one.

Deduplicate logs and events. A new logs subscription, or a Starknet subscribeEvents subscription, may deliver events from the block in which it was created or from a few blocks before it. Deduplicate by block hash and log index, as you already do for reorgs (removed: true). Starknet events carry no index: use the transaction hash together with the event's address, keys and data.

A gap too long to replay. If a gap is longer than the replay limit, or its replay keeps failing, the missed range may not be sent and the stream continues with new blocks. On newHeads this shows as a jump in block numbers, or the stream stalls briefly first. Fetch the missing range yourself with eth_getBlockByNumber or eth_getLogs.

Close code 4013: stream gap. Instead of continuing past a gap it cannot deliver, the gateway may close that one socket with code 4013 and a reason that names the range, for example stream gap newHeads 101 to 228 not delivered, reconnect and resubscribe. The kind is newHeads, logs (also Solana logsSubscribe) or events (Starknet), and the numbers are decimal block numbers, or slots on Solana. Reconnect with a short backoff, subscribe again, and fetch the named range with a historical query (eth_getLogs or eth_getBlockByNumber on EVM chains; on Solana, getSignaturesForAddress then getTransaction for the named slots). Your other sockets stay open. A reconnected subscription starts fresh and is not closed again for the old gap.
Close code 4029: request units used up. When your account runs out of request units and on-demand usage cannot cover it, open WebSocket connections are closed with code 4029 within about a minute on each network. The reason says which limit was reached and is one of:
  • Your plan's request units are used up. Upgrade or turn on on-demand usage in the dashboard
  • On-demand spending limit reached. Raise it in the dashboard
  • Your team owner's usage limit for this member is reached
  • No active plan for this key. Choose a plan in the dashboard

A new connection is refused the same way as a new HTTP request (429, or 403 when no plan pays for the key) until request units are available again, so do not reconnect in a tight loop.


Native gRPC (Sui Beta, Tron)

Two networks expose their native gRPC APIs on the same endpoint as everything else: Sui's sui.rpc.v2 and Tron's protocol.Wallet / protocol.WalletSolidity. Use the official generated clients unchanged.

DoorAddressNotes
Native gRPCendpoints.boltrpc.io:443HTTP/2; standard method paths (/sui.rpc.v2.LedgerService/GetCheckpoint, /protocol.Wallet/GetNowBlock); API key in the x-api-key metadata header
gRPC-Web (Sui)https://endpoints.boltrpc.io/grpc/suiBrowser dapps, no proxy library
gRPC-Web (Tron)https://endpoints.boltrpc.io/grpc/tronSame allowlist as the HTTP wallet API

Billing: a unary gRPC call costs the same request units as the matching JSON-RPC or HTTP method. A Sui BatchGetTransactions / BatchGetObjects call bills once, whatever the item count. Sui server streams (Subscribe*, List*) bill by delivered data: 1 RU per 24 KB, rounded up once when the stream closes; opening a stream is free; five concurrent streams per key. Tron's gRPC is unary-only. Every weight is in the calculator under the Sui and Tron gRPC groups.


Chain IDs

Use these when configuring wallets (MetaMask, Rabby) or EVM SDKs (ethers.js, viem, web3.py).

NetworkChain ID (decimal)Chain ID (hex)
ApeChain331390x8173
Arbitrum One421610xa4b1
Avalanche431140xa86a
Base84530x2105
BNB Smart Chain560x38
BOB608080xed88
Celo422200xa4ec
Ethereum10x1
Ink570730xdef1
Katana7474740xb67d2
Linea591440xe708
Mantle50000x1388
MegaETH43260x10e6
Monad1430x8f
Optimism100xa
Plasma97450x2611
Polygon1370x89
Robinhood Chain46630x1237
Scroll5343520x82750
Solana1010x65
Sonic1460x92
Sui8977967460x35834a8a
Tron7281264280x2b6653dc
Unichain1300x82
X Layer1960xc4
zkSync Era3240x144
Ethereum Hoodi5600480x88bb0
Ethereum Sepolia111551110xaa36a7
Polygon Amoy800020x13882

Key Restrictions

Every API key can be scoped to exactly one job, self-serve on every plan. Changes are enforced at the edge within about 30 seconds.

RestrictionWhat it does
Chain scopeLimit a key to specific chains, or allow all of them.
IP allowlistOne IP or CIDR range per line. Requests from anywhere else are refused.
Origin allowlistLock a key to browser origins, wildcards included (https://*.example.com). Requests without a matching Origin or Referer are refused.
Method policyAllow or deny individual methods or whole families like debug_*. Applies to HTTP and WebSocket.
Rate limit & daily capA per-key requests-per-second limit with burst budget, plus a hard daily request cap that resets at 00:00 UTC.
ExpiryAn optional expiry date, or never.

Key rotation. Rolling a key issues a new secret immediately while the old one keeps working for a grace period you pick: revoke now, 1 hour, 24 hours or 7 days. Deploys never break mid-rotation.


Usage, Alerts & Export

The dashboard's Usage & Logs view breaks traffic down by method, network, key and status, with human-readable labels for every JSON-RPC error code. History is retained for 18 months.

Export. Request logs export as CSV or NDJSON (up to 92 days and 1M rows per file); usage summaries export as CSV or JSON.

Alerts. Email alerts fire at 80%, 90% and 100% of your included request units, plus one custom threshold you pick. If you enable on-demand usage, separate alerts fire at 80, 90 and 100% of what your spending limit covers.


Teams

Invite teammates by email or link. Per member you decide:

PolicyEffect
Billing modeThe member rides on your plan, or pays for their own subscription.
Chain allowancePin which chains the member's keys may use.
Usage capA request-unit budget per billing period; requests past it return 429.
Key managementWhether the member creates their own keys, or only you do.

An organization-wide default policy applies to invites without their own. When a member leaves, their keys are disabled automatically.


Management API

Everything the dashboard does with keys is also available programmatically over a documented REST API: create, scope, restrict, rotate and revoke keys from your own tooling. The OpenAPI specification ships with your account; contact us for access details and examples.


Plans & Request Units

PlanPriceRUs / MonthRate limitUnbounded debug methodsSupport
TrialFree5M RUs over 14 days100 req/sn/aCommunity
On-demand$25 per 15M RUsPay per use100 req/sn/aEmail support
Builder$49/mo30M RUsNonen/aEmail support
ProPopular$199/mo150M RUsNonen/aPriority support
Business$699/mo500M RUsNoneOn requestDedicated support
Enterprise$1,499/mo1B RUsNoneOn requestSLA & dedicated support
CustomContact salesCustomNoneOn requestSLA & dedicated support

Monthly plans are flat and fixed; on-demand usage (with or without a plan) is $25 per 15M request units, capped by a spending limit you set. Plans accept card or crypto; on-demand usage without a plan is card only and has the same methods as Builder (how it works). Archive depth and trace/debug support are per chain (see Supported Networks), not per plan; "unbounded debug methods" are debug_accountRange, debug_storageRangeAt and debug_dumpBlock. See full pricing →


On-demand usage: how it works

Pay only for what you use, with no plan and no monthly fee. Add a card in the dashboard (Billing) and your key keeps working, whether you are on the free trial, your trial has ended, or you never had a plan.

  • Price. $25 per 15M request units, charged per started block. Request units are the same as on every plan (see Method Weighting). Unused units from your free trial are used first.
  • Spending limit. You set a monthly limit in steps of $25, and it pays for whole blocks: $50 covers 2 blocks (30M request units). On-demand usage is served until those are used, then stops. New accounts start at $50. Change it any time under Billing.
  • Alerts. We email you at 80, 90 and 100% of what your limit covers, once per threshold each billing period.
  • Your first invoice. Until your first invoice with a charge is paid, the limit can be at most $100 (60M request units). This lifts automatically once that invoice is paid. Need more sooner? Contact support and we can raise it.
  • Rate limit. On-demand usage on its own is limited to 100 requests per second (burst 200). Monthly plans have no rate limit.
  • Methods. The same methods as the Builder plan.
  • When the limit is reached. Requests get HTTP 429 with the body "Too Many Requests: your on-demand spending limit is reached. Raise it in the dashboard to continue on the same key". Raise the limit and the same key works again within seconds; nothing in your integration changes.
  • Billing. Usage is invoiced to your card once a month. Invoices and payment methods are in the dashboard under Billing, Manage billing.
  • Moving to a plan. Choose a plan any time: you get a monthly allowance and no rate limit, on the same key and the same card.
  • Stopping. Turn on-demand usage off under Billing to stop new charges right away (your key stops serving), or cancel the subscription: it stays on until the end of the period, and usage up to then is invoiced as usual.

Support

© 2026 BoltRPC, operated by Matrixed.Link. ISO/IEC 27001:2022 certified.