---
title: "JSON-RPC proxy"
method: POST
path: "/rpc/{chainId}/{apiKey}"
tags: ["RPC"]
---

# JSON-RPC proxy

`POST /rpc/{chainId}/{apiKey}`

Send a single JSON-RPC request or a JSON-RPC batch (array). Replace {apiKey} with your actual API key.

## Path parameters

- `chainId` string, required
- `apiKey` string, password, required

## Request body

- union
  - JsonRpcRequest
    - `jsonrpc` '2.0', required
    - `method` string, required — JSON-RPC method name (e.g. eth_blockNumber, eth_call).
    - `params` union — Method parameters (varies by method).
      - unknown[]
        - unknown
      - object
    - `id` unknown, required
  - JsonRpcRequest[]
    - `jsonrpc` '2.0', required
    - `method` string, required — JSON-RPC method name (e.g. eth_blockNumber, eth_call).
    - `params` union — Method parameters (varies by method).
      - unknown[]
        - unknown
      - object
    - `id` unknown, required

## Response `200`

JSON-RPC response (single or batch)

- union
  - JsonRpcResponse
    - `jsonrpc` '2.0', required
    - `id` unknown, required
    - `result` unknown
    - `error` JsonRpcError — JSON-RPC error object. See [RPC Error Codes](/rpc-error-codes) for full code → meaning and when each occurs.
      - `code` integer, required — Router error codes: -32700 (parse error), -32600 (invalid request), -32601 (insufficient credits), -32602 (invalid params), -32603 (internal error), -32000 (server error), -32001 (chain not supported), -32002 (method not supported), -32003 (all nodes on cooldown), -32005 (eth_getLogs query limit exceeded), -32007 (no block-param capable nodes), -32008 (no providers available), -32009 (all nodes failed), -32011 (no opcode-capable nodes), -32012 (insufficient historical state depth), -32013 (no single provider satisfies all constraints), -32029 (public per-IP rate limit exceeded), -32030 (public free-tier capacity exhausted). See the RPC error codes guide for details.
      - `message` string, required — Human-readable error message. eth_getLogs limit errors may include a block-range hint suffix: "; try a block range of at most N blocks".
      - `data` unknown
  - JsonRpcResponse[]
    - `jsonrpc` '2.0', required
    - `id` unknown, required
    - `result` unknown
    - `error` JsonRpcError — JSON-RPC error object. See [RPC Error Codes](/rpc-error-codes) for full code → meaning and when each occurs.
      - `code` integer, required — Router error codes: -32700 (parse error), -32600 (invalid request), -32601 (insufficient credits), -32602 (invalid params), -32603 (internal error), -32000 (server error), -32001 (chain not supported), -32002 (method not supported), -32003 (all nodes on cooldown), -32005 (eth_getLogs query limit exceeded), -32007 (no block-param capable nodes), -32008 (no providers available), -32009 (all nodes failed), -32011 (no opcode-capable nodes), -32012 (insufficient historical state depth), -32013 (no single provider satisfies all constraints), -32029 (public per-IP rate limit exceeded), -32030 (public free-tier capacity exhausted). See the RPC error codes guide for details.
      - `message` string, required — Human-readable error message. eth_getLogs limit errors may include a block-range hint suffix: "; try a block range of at most N blocks".
      - `data` unknown

## Other responses

- `400` — Bad request (e.g. invalid JSON or invalid JSON-RPC payload)
- `401` — Unauthorized (invalid API key)
- `403` — Forbidden (domain not allowed)
- `422` — Unprocessable entity (e.g. chain not supported or method not supported)
- `424` — Failed dependency (all upstream providers failed with non-2xx responses)
- `429` — Too many requests (all upstream providers rate limited / on cooldown)
- `500` — Internal server error
- `504` — Gateway timeout (router timed out waiting for upstream providers)

## Changes

- **2026-07-06** `81fbe32d2100` — 7 breaking, 8 warning
  - removed the media type `application/json` for the response with the status `400`
  - removed the media type `application/json` for the response with the status `422`
  - removed the media type `application/json` for the response with the status `424`
  - removed the media type `application/json` for the response with the status `429`
  - …11 more
- **2026-02-11** `f0a06d728c7b` — 1 info
  - endpoint added
- **2026-02-10** `919eb7a392aa` — 1 breaking
  - api path removed without deprecation

[Change history](https://skmtc.dev/routemesh/apis/routemesh-api/changes/rpc/:chainId/:apiKey/post.md)

---

[API](https://skmtc.dev/routemesh/apis/routemesh-api.md) · [All operations](https://skmtc.dev/routemesh/apis/routemesh-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/routemesh/routemesh-api/revisions/ec927412b199/schema)
