Appearance
Endpoints
One gateway host, one path per chain:
https://rpc.nodes.koshelek.ru/<chain>All endpoints require the apikey header (Authentication). The same host also serves WebSocket subscriptions (wss://…/ws/<chain>) and gRPC (rpc.nodes.koshelek.ru:443) for the chains marked below.
Chain matrix
Every chain below is served by nodes we operate; its page (first column) has the methods, limits and examples. WS = WebSocket subscriptions (details); gRPC = native gRPC (details).
| Chain | Path | Protocol | Batch | WS | gRPC | Notes |
|---|---|---|---|---|---|---|
| Ethereum | /eth | JSON-RPC 2.0 | yes | yes | no | debug_* blocked; heavy methods guarded |
| BNB Smart Chain | /bsc | JSON-RPC 2.0 | yes | yes | no | |
| Bitcoin | /btc | JSON-RPC 1.0 (bitcoind) | yes | no | no | load-balanced across nodes |
| Litecoin | /ltc | JSON-RPC 1.0 (litecoind) | yes | no | no | |
| Bitcoin Cash | /bch | JSON-RPC 1.0 (BCHN) | see page | no | no | no estimatesmartfee (use estimatefee) |
| Dogecoin | /doge | JSON-RPC 1.0 (dogecoind) | yes | no | no | ~1 min blocks; fees are DOGE-denominated |
| Dash | /dash | JSON-RPC 1.0 (dashd) | yes | no | no | |
| Liquid | /liquid | JSON-RPC 1.0 (elementsd) | yes | no | no | Bitcoin sidechain |
| XRP Ledger | /xrp | rippled JSON-RPC | no | yes | no | rippled has no batch |
| Stellar | /xlm | stellar-core REST | no | no | no | GET only; core info endpoints |
| TRON | /tron | REST (java-tron HTTP API) | no | no | yes | POST /tron/wallet/<method> |
| TON | /ton | TonCenter HTTP (via ton-http-api) | no | no | no | JSON-RPC at /ton/jsonRPC + REST (/ton/getMasterchainInfo, …) |
| NEAR | /near | JSON-RPC 2.0 | yes | no | no | |
| Aptos | /aptos | REST (fullnode API v1) | no | no | no | GET /aptos/v1/... |
| Sui | /sui | JSON-RPC 2.0 | yes | no | no | |
| Cardano | /cardano | Ogmios JSON-RPC | yes | yes | no | queryNetwork/*, queryLedgerState/* |
Aliases: /bitcoin→/btc, /ethereum→/eth, /ripple→/xrp, /stellar→/xlm, /litecoin→/ltc (for project chain-scoping purposes; the gateway paths above are the canonical ones).
Per-location availability
The matrix above lists every chain the platform serves. A deployment location may serve a subset of it, and a chain can be temporarily withdrawn while its nodes are migrated between locations. A chain that is not served where you're connected answers with JSON-RPC error -32601"chain not available at this location" (WebSocket paths return HTTP 404 with the same message) — see Errors. Your API key is fine; retry on a location that serves the chain or check back after maintenance.
Two request styles
JSON-RPC chains — POST the JSON-RPC envelope to the chain path:
bash
curl -X POST https://rpc.nodes.koshelek.ru/eth \
-H "apikey: $YOUR_API_KEY" -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'REST chains — append the upstream API path after the chain segment:
bash
# TRON: java-tron wallet API
curl -X POST https://rpc.nodes.koshelek.ru/tron/wallet/getnowblock \
-H "apikey: $YOUR_API_KEY"
# Aptos: fullnode REST v1
curl https://rpc.nodes.koshelek.ru/aptos/v1 \
-H "apikey: $YOUR_API_KEY"Stellar (/xlm) is GET-only at the gateway: a POST returns Kong's 404 {"message":"no Route matched with those values"}.
Batch requests
JSON-RPC chains accept arrays. Responses are correlated by id (order is not guaranteed), each element is cached and metered individually:
bash
curl -X POST https://rpc.nodes.koshelek.ru/eth \
-H "apikey: $YOUR_API_KEY" -H 'Content-Type: application/json' \
-d '[{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1},
{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":2}]'Response caching
The gateway caches per method class — you can always tell from the X-Cache: HIT|MISS response header:
| Class | Examples | TTL |
|---|---|---|
| Immutable | eth_getTransactionReceipt, getrawtransaction, confirmed blocks by hash | indefinite |
| Static | eth_chainId, net_version, getnodeinfo | indefinite |
| Short | eth_blockNumber (2 s), getblockcount (10 s), eth_gasPrice (5 s), getMasterchainInfo (2 s) | 1–30 s |
| Never | every submit/broadcast, eth_estimateGas, eth_call* | — |
* eth_call uses a 2 s TTL keyed on call data; state-changing simulation is safe because nothing is executed on-chain.
If your use case needs a guaranteed-fresh value (e.g. polling chain height in tests), prefer an uncached method of the same family — e.g. getmininginfo instead of getblockcount on bitcoind chains.
WebSockets
Chains marked WS in the matrix stream native subscriptions over
wss://rpc.nodes.koshelek.ru/ws/<chain>?apikey=<YOUR_API_KEY>The key rides the ?apikey= query parameter (browser WebSocket() can't set headers) or the apikey header for everything else; the handshake is authenticated exactly like an HTTPS call, then frames pipe verbatim to the chain node (eth_subscribe, XRPL subscribe, Ogmios). The WebSocket chains are Ethereum, BNB Smart Chain, XRP Ledger and Cardano; per-chain examples + reconnect guidance: WebSockets.
gRPC
Chains marked gRPC in the matrix (TRON) are additionally served over native gRPC (TLS, key in apikey metadata, no path prefix — routing is by proto package: protocol.* → TRON). Two entries: rpc.nodes.koshelek.ru:8443 supports every call shape; rpc.nodes.koshelek.ru:443 handles unary + server-streaming. The gateway does not expose server reflection, so pass the java-tron protos explicitly:
bash
grpcurl -H "apikey: $YOUR_API_KEY" \
-import-path ./protocol -proto api/api.proto \
rpc.nodes.koshelek.ru:443 protocol.Wallet/GetNowBlockPort semantics + details: gRPC.