Plain HTTP. Every chain.
JSON-RPC over HTTPS to Tron, BSC, and opBNB. Tron keys also get the Tron Native HTTP API. Use the official @znd/sdk or plain fetch — your key lives in the URL path, no signing.
Sign up, copy the URL, POST.
That's the whole flow. Replace <region> with the one closest to your users.
# Replace <region> with one of:
# us-east · us-west · eu-west · asia-southeast · sa-east · me-south · af-south
export ZNODE_KEY=brpc_xxxxxxxxxxxxxxxxxx
curl https://us-east-rpc.znode.dev/v1/$ZNODE_KEY/jsonrpc \
-H "content-type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'Three live, more on the way.
Each key is pinned to one chain and one region. Create more keys for more pairs.
Tron
LiveMainnet with JSON-RPC (eth_*) and the full Tron HTTP API proxied through the same key.
BNB Smart Chain
LiveBSC mainnet (chain ID 56) with archive node access. Standard EVM JSON-RPC methods.
opBNB
LiveBNB Chain's OP-Stack L2 (chain ID 204). EVM-compatible, same surface as BSC.
Ethereum
SoonMainnet, Sepolia, and Holesky on the roadmap.
Solana
SoonMainnet and devnet on the roadmap.
Avalanche
SoonC-Chain mainnet and Fuji testnet on the roadmap.
Edge in 7 places.
Pick a region when you create a key — the gateway URL becomes https://<region>-rpc.znode.dev.
US East · Virginia
US West · California
Europe · Frankfurt
Asia Pacific · Singapore
South America · São Paulo
Middle East · Dubai
Africa · Cape Town
Copy. Paste. Ship.
No SDK to install — every example is plain fetch.
EVM JSON-RPC
Standard EVM call on BSC, opBNB, or Tron.
// With @znd/sdk — typed, BigInt-aware
import { ZNodeClient } from "@znd/sdk";
const client = new ZNodeClient({
apiKey: process.env.ZNODE_KEY!,
region: "us-east",
});
const balance = await client.getBalance("0x742d35Cc...");
console.log("balance (wei):", balance);
// Or with plain fetch — no install
const r = await fetch(
`https://us-east-rpc.znode.dev/v1/${process.env.ZNODE_KEY}/jsonrpc`,
{
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "eth_getBalance",
params: ["0x742d35Cc...", "latest"],
}),
},
);
const { result } = await r.json();Tron Native API
Tron HTTP API proxied — wallet, contract, transaction.
// Tron Native HTTP API — TRON-prefixed keys only
import { ZNodeClient } from "@znd/sdk";
const client = new ZNodeClient({
apiKey: process.env.TRON_KEY!,
region: "us-east",
});
// Typed Tron helpers
const block = await client.tron_getNowBlock();
const account = await client.tron_getAccount("TXYZopYRdj2D9XRtbG411XZZ3kM5VkAeBf");
const balance = await client.tron_getAccountBalance("TXYZop...");Batch requests
Send an array of JSON-RPC calls in one POST.
// Batch JSON-RPC — same /jsonrpc endpoint, body is an array
const batch = [
{ jsonrpc: "2.0", id: 1, method: "eth_blockNumber", params: [] },
{ jsonrpc: "2.0", id: 2, method: "eth_gasPrice", params: [] },
];
const r = await fetch(
`https://us-east-rpc.znode.dev/v1/${process.env.ZNODE_KEY}/jsonrpc`,
{
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify(batch),
},
);
const [block, gas] = await r.json();Everything else.
Documentation
Per-chain reference, auth, rate limits, error codes.
Read docsRate limits
Per-key, per-workspace, per-user quotas + X-RateLimit-* headers.
SDK · @znd/sdk
Official TypeScript/JavaScript SDK with typed EVM & Tron methods. Python and Go on the roadmap.
View on GitHubChangelog
What shipped, what's next, and what we're fixing.
See releases