Chains and URLs
Willow RPC serves seven chains. The same key is valid on every chain, and every
chain supports the same methods and proofs, except eth_call,
which is served on Ethereum only (see State methods).
The chain ID is part of the URL.
| Chain | Chain ID | Endpoint |
|---|---|---|
| Ethereum | 1 | https://api.willow.tech/v1/rpc/1/{YOUR_KEY} |
| Base | 8453 | https://api.willow.tech/v1/rpc/8453/{YOUR_KEY} |
| Arbitrum One | 42161 | https://api.willow.tech/v1/rpc/42161/{YOUR_KEY} |
| OP Mainnet | 10 | https://api.willow.tech/v1/rpc/10/{YOUR_KEY} |
| Unichain | 130 | https://api.willow.tech/v1/rpc/130/{YOUR_KEY} |
| Ink | 57073 | https://api.willow.tech/v1/rpc/57073/{YOUR_KEY} |
| Robinhood Chain | 4663 | https://api.willow.tech/v1/rpc/4663/{YOUR_KEY} |
Authentication
Section titled “Authentication”In the path. The key is the final segment of the URL:
POST https://api.willow.tech/v1/rpc/{chainId}/{YOUR_KEY}In a header. The key is omitted from the path and sent as
Authorization: Bearer {YOUR_KEY} or X-API-Key: {YOUR_KEY}:
POST https://api.willow.tech/v1/rpc/{chainId}Authorization: Bearer {YOUR_KEY}Both forms are accepted on every chain and are metered identically. Guidance on choosing between them is in API keys.
Requests
Section titled “Requests”- Requests are JSON-RPC 2.0, sent as an HTTP
POSTwithContent-Type: application/json. Single requests and batches of up to 100 are accepted. - Send
Accept-Encoding: gzip. Responses are metered by their gzipped size (see Units and pricing), and some proof responses are large. - CORS is enabled, so browsers can call the endpoint from any origin. Keys should nonetheless be kept on a server or restricted to specific origins (see API keys).
A request for a chain ID that Willow does not serve is refused:
{"error":{"code":-32000,"message":"chain 99999 not found: no blocks of it are served here"},"id":1,"jsonrpc":"2.0"}Freshness
Section titled “Freshness”eth_blockNumber and the latest tag track the head of each chain. When a
chain is healthy, its newest block is a few seconds old. If a chain’s newest
stored block becomes older than 15 of its block times, and at least 10 seconds
(10 seconds on Robinhood Chain and Arbitrum One, 15 on Unichain and Ink, 30 on
Base and OP Mainnet, and 180 on Ethereum), requests for latest are refused
with -32000 instead of returning a stale block, which allows a router to fail
over to another provider.
The current status of every chain is published at
/v1/rpc/health.