Call any served chain with one key
Standard JSON-RPC 2.0 over HTTPS POST at rpc.gullyrpc.xyz/public/evm/<chainId>, authenticated with your Gully RPC API key. Gully Chain also has a free public endpoint.
Quickstart
- Create an accountSign up free at app.gullyrpc.xyz. Open to everyone, no invite and no waitlist.
- Get a keyOpen API keys and create one. Keys start with
hk_live_and are shown once. - First requestAsk Gully Chain Testnet (chain
485590) for its latest block, below.
curl -s https://rpc.gullyrpc.xyz/public/evm/485590 \
-H 'content-type: application/json' \
-H 'X-ERPC-Secret-Token: hk_live_YOUR_KEY' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'Endpoint and auth
https://rpc.gullyrpc.xyz/public/evm/<chainId>
publicis the project segment. It is the same for every customer and is not your key.<chainId>picks the chain, e.g.485590for Gully Chain Testnet or1for Ethereum. Known chains also have an alias:/public/gully-testnet,/public/ethereum,/public/base,/public/robinhood.- Requests are JSON-RPC 2.0 over HTTPS POST with
content-type: application/json.
| Method | How | Notes |
|---|---|---|
| Header (preferred) | X-ERPC-Secret-Token: <key> | The key stays out of URLs and logs. |
| Query string | ?secret=<key> | Handy for quick tests; the key is visible in the URL. |
Treat a key like a password: it grants access billed to your account. Use it server-side, and rotate it in the portal if it leaks.
Public Gully Chain Testnet RPC
Gully Chain Testnet has a free, rate-limited public endpoint that needs no key: for wallets, faucets, explorers and quick tests. Production apps should use a key, which gets plan limits, failover and usage per key.
| Endpoint | Key | Limits |
|---|---|---|
https://testnet-rpc.gullychain.xyz | none | shared, rate-limited |
https://rpc.gullyrpc.xyz/public/evm/485590 | your key | your plan, per key |
https://rpc.gullyrpc.xyz/public/gully-testnet | your key | alias of the line above |
curl -s https://testnet-rpc.gullychain.xyz \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'Chain ID 485590 (0x768d6), currency ETH. Explorer: testnet-explorer.gullychain.xyz.
Code samples
curl -s https://rpc.gullyrpc.xyz/public/evm/485590 \
-H 'content-type: application/json' \
-H 'X-ERPC-Secret-Token: hk_live_YOUR_KEY' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'import { createPublicClient, http } from "viem";
const client = createPublicClient({
transport: http("https://rpc.gullyrpc.xyz/public/evm/485590", {
fetchOptions: { headers: { "X-ERPC-Secret-Token": process.env.GULLY_RPC_KEY } },
}),
});
console.log(await client.getBlockNumber());import { ethers, FetchRequest } from "ethers";
const req = new FetchRequest("https://rpc.gullyrpc.xyz/public/evm/485590");
req.setHeader("X-ERPC-Secret-Token", process.env.GULLY_RPC_KEY);
const provider = new ethers.JsonRpcProvider(req, 485590, { staticNetwork: true });
console.log(await provider.getBlockNumber());import os
from web3 import Web3
w3 = Web3(Web3.HTTPProvider(
"https://rpc.gullyrpc.xyz/public/evm/485590",
request_kwargs={"headers": {"X-ERPC-Secret-Token": os.environ["GULLY_RPC_KEY"]}},
))
print(w3.eth.block_number)Swap /evm/485590 for any served chain ID, e.g. /evm/1 for Ethereum.
Networks
Loaded from status.json, the single source for what is served.
| Network | Chain ID | Path | Status |
|---|---|---|---|
| Loading status.json | |||
Plans and limits
Every key has a plan. The plan sets a requests-per-second ceiling per key, counted across all gateway instances. Going over returns HTTP 429: back off and retry. Prices are in USD.
| Plan | Price (USD) | Requests / s per key | API keys | trace_* |
|---|---|---|---|---|
| Free | $0 | 25 | 2 | no |
| Developer | $49 / 30 days | 100 | 20 | no |
| Business | $199 / 30 days | 400 | 100 | with archive nodes |
| Enterprise | custom | 2,000 | unlimited | with archive nodes |
Methods and errors
- All standard
eth_*,net_*andweb3_*methods. trace_*on Business and Enterprise keys, once archive nodes are live (see status).- Never served:
admin_*,debug_*,engine_*,miner_*,personal_*,txpool_*,les_*. - Keep
eth_getLogsranges small and paginate; wide ranges are slow and can time out.
| HTTP | Meaning | What to do |
|---|---|---|
| 401 | Missing, unknown or disabled key (JSON-RPC code -32016) | Check the header name and the key in the portal. |
| 429 | Over your plan's requests per second | Retry with exponential backoff, or move the key to a bigger plan. |
| 400 | Malformed JSON-RPC body | Send jsonrpc, id, method and params. |
| 5xx | No healthy upstream for that chain right now | Retry; check status. |
Sign in with Gully ID Live
The portal has Sign in with Gully ID: one Gully ID with passkeys, shared by every Gully product, next to email and password at app.gullyrpc.xyz/login. An existing email account keeps working: sign in with email once, then open Settings and press Link Gully ID. After that, Sign in with Gully ID opens the same account.
Billing through Gully Pay Beta
Every Gully product bills through Gully Pay. Gully RPC plans are priced in USD and paid by card or stablecoins in prepaid 30-day periods. Nothing auto-renews: you get a reminder before a period ends, and an unpaid key returns to Free after a short grace period. Every account starts on Free.
Badges
Built on Gully RPC? Show it. Both badges are 300×80 SVGs with the fonts embedded; use them at 300×80 or 150×40 and link them to gullyrpc.xyz.
<a href="https://gullyrpc.xyz" target="_blank" rel="noopener noreferrer"><img src="https://gullyrpc.xyz/brand/badges/gullyrpc-powered-by-badge.svg" width="300" height="80" alt="Powered by GullyRPC"></a>
<a href="https://gullyrpc.xyz" target="_blank" rel="noopener noreferrer"><img src="https://gullyrpc.xyz/brand/badges/gullyrpc-secured-by-badge.svg" width="300" height="80" alt="Secured by GullyRPC"></a>
