Skip to content

Solana RPC

Venum runs a free Solana JSON-RPC service at https://rpc.venum.dev. It's a drop-in replacement for any Solana RPC URL — @solana/web3.js, solana-py, raw curl, anything that speaks Solana JSON-RPC.

Endpoint

HTTP : https://rpc.venum.dev/?apiKey=<YOUR_API_KEY>
WS   : wss://rpc.venum.dev/?apiKey=<YOUR_API_KEY>

Both transports run on the same hostname. WebSocket subscriptions (accountSubscribe, slotSubscribe, signatureSubscribe, logsSubscribe, programSubscribe, etc.) are fully supported.

Authentication

Every request needs a Venum API key. Two equivalent ways to pass it:

  • Query string: ?apiKey=<YOUR_API_KEY> — works for HTTP and WebSocket. Required for WebSocket because browsers can't set custom headers on the WebSocket constructor.
  • HTTP header: X-API-Key: <YOUR_API_KEY> — works for HTTP only.

Get a free API key in 30 seconds at app.venum.dev (Google sign-in, no card).

Anonymous requests return 401 Unauthorized with a message pointing at the dashboard.

Drop-in usage

js
import { Connection } from '@solana/web3.js';

const connection = new Connection(
  `https://rpc.venum.dev/?apiKey=${process.env.VENUM_API_KEY}`,
  'confirmed',
);

const slot = await connection.getSlot();
js
import { Connection } from '@solana/web3.js';

// web3.js derives wsEndpoint from endpoint by default (https → wss)
const connection = new Connection(
  `https://rpc.venum.dev/?apiKey=${process.env.VENUM_API_KEY}`,
);

const subId = await connection.onSlotChange((info) => {
  console.log('slot', info.slot);
});
bash
curl -X POST https://rpc.venum.dev/ \
  -H "X-API-Key: $VENUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"getSlot","params":[{"commitment":"processed"}]}'

Rate limits

Limits are per API key, sliding-window. Headers X-RateLimit-Limit and X-RateLimit-Remaining come back on every response; a 429 carries Retry-After in seconds.

TierRequests / minConcurrent WS connections
Free602
Starter60010
Pro3,00040

When you hit a 429, the response body includes the next-tier limit and a link to upgrade:

json
{
  "error": "Rate limit exceeded",
  "limit": 60,
  "tier": "free",
  "retryAfterSeconds": 17,
  "nextTier": "starter",
  "nextTierLimit": 600,
  "upgradeUrl": "https://app.venum.dev",
  "message": "free tier allows 60 rpc req/min. Upgrade to starter for 600/min at https://app.venum.dev"
}

If your client follows Retry-After, you'll get clean back-pressure without losing requests.

Method support

All standard Solana RPC methods are forwarded — read and write, including sendTransaction, simulateTransaction, getProgramAccounts, getMultipleAccounts, the full *Subscribe family on WebSocket, and so on.

Two methods return -32601 Method not found:

  • getIdentity
  • getClusterNodes

Reason: both leak validator-cluster identifiers that don't reflect anything actionable for application traffic. If you need either method for a specific use case, open a ticket and we can scope it.

When to use this vs the Venum API

The RPC service is the right call when you need stateful read patterns or write paths that map cleanly to Solana RPC: tx submission, signature subscriptions, custom on-chain reads, anything that already works with a Solana RPC URL.

For repeated polling patterns — token prices, pool state, account portfolios, quotes — the Venum API is purpose-built and dramatically cheaper per call. A token-balance walk that costs you ~50 getMultipleAccounts calls on RPC is one call to /v1/balances/:wallet. See Reduce RPC Costs.

Error responses

401 Unauthorized — missing or invalid API key.

429 Too Many Requests — over your tier limit. Retry after Retry-After seconds.

502 / 503 — service degraded. Generic JSON-RPC error in the body (code: -32603). Retry with backoff.

Standard JSON-RPC errors (parse error, invalid request, method not found) come back with the proper -32700/-32600/-32601 codes.

Status

Liveness: GET https://rpc.venum.dev/health (no auth required).