Skip to content

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.

ChainChain IDEndpoint
Ethereum1https://api.willow.tech/v1/rpc/1/{YOUR_KEY}
Base8453https://api.willow.tech/v1/rpc/8453/{YOUR_KEY}
Arbitrum One42161https://api.willow.tech/v1/rpc/42161/{YOUR_KEY}
OP Mainnet10https://api.willow.tech/v1/rpc/10/{YOUR_KEY}
Unichain130https://api.willow.tech/v1/rpc/130/{YOUR_KEY}
Ink57073https://api.willow.tech/v1/rpc/57073/{YOUR_KEY}
Robinhood Chain4663https://api.willow.tech/v1/rpc/4663/{YOUR_KEY}

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 are JSON-RPC 2.0, sent as an HTTP POST with Content-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"}

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.