---
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), -32602 (invalid params or eth_getLogs block span too large), -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).
      - `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), -32602 (invalid params or eth_getLogs block span too large), -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).
      - `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)

---

[API](https://skmtc.net/routemesh/apis/routemesh-api.md) · [All operations](https://skmtc.net/routemesh/apis/routemesh-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/routemesh/routemesh-api/versions/6590c9d7229d/schema)
