Solana
Calling the Solana Mainnet RPC gateway — HTTP JSON-RPC + WebSocket, auth, finalized-immutable caching, and code samples for @solana/web3.js / cURL.
Solana speaks standard JSON-RPC over HTTP, plus a WebSocket subscription API. Hermod fronts it with one HTTP endpoint and one WebSocket endpoint per network — your key embedded in the path, header, or query — and a response cache tuned to Solana's finalized-immutable data.
If you're migrating from another provider, the win is drop-in compatibility: the request/response shape is vanilla Solana RPC, so usually only the host changes.
Endpoints
| Transport | URL |
|---|---|
| HTTP | https://infra.originstake.com/v1/solana/<network>/<KEY> |
| WebSocket | wss://infra.originstake.com/v1/solana/<network>/<KEY> |
<network> is mainnet. (The segment is informational — all Solana traffic
routes to the same mainnet upstream pool today.)
The key can also be passed by header or query instead of the path — see Authentication.
Quick start
@solana/web3.js
Prefer the header form? Pass it via httpHeaders and keep the key out of the
URL:
Migrating from Helius (one-line swap)
We accept the same ?api-key= query shape, so a Helius URL migrates by
changing only the host:
cURL
Authentication
Four accepted forms, in priority order:
- Header:
X-OriginRPC-Token: <key>(recommended for SDKs) - Bearer:
Authorization: Bearer <key> - Path: a segment matching
originrpc_live_…oros_live_… - Query:
?api-key=<key>(Helius-compatible)
The key must be entitled to Solana. Grant it in the dashboard (Keys → New key → tick Solana) — no config or SQL needed.
WebSocket connections authenticate via the key in the path (browsers can't set custom headers on a WS handshake).
Methods
Standard Solana JSON-RPC is forwarded as-is — getAccountInfo,
getBalance, getMultipleAccounts, getProgramAccounts,
getTokenAccountsByOwner, getLatestBlockhash, getSlot, getBlock,
getTransaction, getSignaturesForAddress, getEpochInfo,
getRecentPrioritizationFees, sendTransaction, simulateTransaction, and
the rest of the official RPC API.
Batch requests are supported when your upstream plan allows them.
Caching
The gateway caches only data that is immutable once finalized — never hot-account reads (which change every ~400 ms slot) and never writes. This cuts latency and upstream cost without ever serving you stale state.
| Method | TTL | Why |
|---|---|---|
getBlock (finalized) | 7 days | Immutable once finalized |
getTransaction (finalized) | 7 days | Immutable once finalized |
getBlockTime | 24h | Immutable |
getGenesisHash, getEpochSchedule | 24h | Static |
getEpochInfo | 5s | Slow-changing |
getRecentPrioritizationFees | 2s | Fast-changing but burst-absorbing |
getAccountInfo, getBalance, getMultipleAccounts | no cache | Change every slot |
sendTransaction, simulateTransaction | no cache | Writes |
Caching applies only when the request's commitment is finalized (or
unspecified — the default for getBlock/getTransaction is finalized).
A confirmed/processed request always goes to the upstream live.
Responses carry an X-Origin-Cache: HIT or MISS header. To force a fresh
fetch, send X-Cache-Bypass: true.
WebSocket subscriptions
Connect to the wss:// endpoint and use the standard Solana subscription
methods — slotSubscribe, accountSubscribe, logsSubscribe,
programSubscribe, signatureSubscribe, blockSubscribe, rootSubscribe.
Each client connection is forwarded 1:1 to the upstream.
Rate limits
Per-IP for anonymous traffic, per-key for authenticated. Heavy methods carry their own lower sub-limits:
| Tier | Default RPS | getProgramAccounts | getTokenAccountsByOwner |
|---|---|---|---|
| Anonymous | 5 per IP | 1 RPS | 1 RPS |
| Free | 20 | 2 RPS | 5 RPS |
| Pro | 200 | 20 RPS | 50 RPS |
| Scale | 1,000 | — | — |
Over the limit returns HTTP 429 with a Retry-After header and a JSON-RPC
error (code: -32005). See rate limits for retry guidance.
Pricing
Solana calls draw from the same monthly CU allowance as every other chain, with their own weights:
| Method | CU |
|---|---|
Most methods (reads, getTransaction, getBlock, …) | 75 |
sendTransaction (sent to every healthy upstream) | 150 |
getProgramAccounts | 750 |
That is about $7 per million calls on the Pro plan and about $6 on Scale. Solana is weighted higher than EVM chains because the nodes behind it are bought per call rather than run by us.
Status
Solana endpoint health (upstream slot lag, error rate) is published on the public status page. The gateway demotes an upstream that lags more than a few slots or errors repeatedly, and routes around it while it recovers.