Proxy a JSON-RPC request to a supported blockchain node and bill per credit.
{ "jsonrpc":"2.0", "method":"…", "params":[…], "id":1 }).Methods are classified into three pricing tiers:
eth_call, eth_getBalance, eth_blockNumber, eth_sendRawTransaction, eth_getLogs, net_version, web3_clientVersion, ERC-4337 bundler methods (eth_sendUserOperation, etc.), and chain-family extensions (zks_*, linea_*, bor_*, starknet_*).trace_*, debug_*, txpool_inspect, txpool_status, arbtrace_*.trace_replayBlockTransactions, trace_replayTransaction, txpool_content, arbtrace_replay*.Stateful filter methods (eth_newFilter, eth_getFilterChanges, eth_uninstallFilter, etc.) are not supported — they break on a load-balanced HTTP proxy because filter state is pinned to a single upstream backend. Use eth_getLogs instead.
WebSocket-only methods (eth_subscribe, eth_unsubscribe) return 400 because this proxy is HTTP-only.
Credits consumed per call = baseCredits[chain] × methodTier. baseCredits is 20 for most EVM chains (Ethereum, Base, Optimism, Arbitrum, Polygon, Linea, Avalanche, BSC, Blast) and Starknet; 30 for zkSync Era. The USD price per credit is ~7e-7 — a single standard EVM call costs ≈ 0.000056.
Per-request errors at the JSON-RPC layer (HTTP 200 with an error field in a response item) are billed at 5 credits instead of the full method tier — a small concession for methods not supported on a given chain or bad-parameter responses.
Two caps apply per caller:
customMessage identifying which cap tripped. The per-minute cap also sets the X-RateLimit-* response headers.Set the Idempotency-Key request header to any string matching [A-Za-z0-9_-]{1,255} to enable safe retries. The response is cached for 24 hours keyed on (user, idempotency-key); replaying the same key with the same body returns the cached response with Idempotent-Replayed: true. Reusing the same key with a different body returns 400 to prevent silent corruption.
Authentication: This endpoint accepts either a Bearer API key or an X-Sign-In-With-X header for x402 wallet-based authentication. When using x402, a 402 Payment Required response indicates insufficient balance and includes top-up instructions.
Authorization: Bearer <key> header.GET /crypto/rpc/networks for the live, authoritative list. Current coverage:
| Family | Mainnet | Testnets |
|---|---|---|
| Ethereum | ethereum-mainnet | ethereum-sepolia, ethereum-holesky |
| Polygon | polygon-mainnet | polygon-amoy |
| Arbitrum | arbitrum-mainnet | arbitrum-sepolia |
| Optimism | optimism-mainnet | optimism-sepolia |
| Base | base-mainnet | base-sepolia |
| Linea | linea-mainnet | linea-sepolia |
| Avalanche C-Chain | avalanche-mainnet | avalanche-fuji |
| BNB Smart Chain | bsc-mainnet | bsc-testnet |
| Blast | blast-mainnet | blast-sepolia |
| zkSync Era | zksync-mainnet | zksync-sepolia |
| Starknet | starknet-mainnet | starknet-sepolia |
400 and every offending method name is listed in the error message.
baseCredits[chain] × methodTier.
| Tier | Multiplier | Example methods |
|---|---|---|
| Standard | 1× | eth_call, eth_getBalance, eth_blockNumber, eth_sendRawTransaction, eth_getLogs, eth_getTransactionReceipt, eth_estimateGas, net_version, web3_clientVersion, ERC-4337 bundler methods (eth_sendUserOperation, eth_estimateUserOperationGas, etc.), chain-family extensions (zks_*, linea_*, bor_*, starknet_*) |
| Advanced | 2× | trace_block, trace_call, trace_transaction, debug_traceCall, debug_traceTransaction, debug_traceBlockByHash, txpool_inspect, txpool_status, arbtrace_* |
| Large | 4× | trace_replayBlockTransactions, trace_replayTransaction, txpool_content, arbtrace_replayTransaction, arbtrace_replayBlockTransactions |
| baseCredits | Chains |
|---|---|
| 20 | Ethereum + all EVM L2s above (Base, Optimism, Arbitrum, Polygon, Linea, Avalanche, BSC, Blast) and Starknet |
| 30 | zkSync Era |
~$6.25 × 10⁻⁷ per credit:
| Call | Credits | USD cost |
|---|---|---|
eth_call on Ethereum (20 × 1×) | 20 | $0.0000125 |
trace_transaction on Ethereum (20 × 2×) | 40 | $0.0000250 |
trace_replayTransaction on Ethereum (20 × 4×) | 80 | $0.0000500 |
eth_call on zkSync (30 × 1×) | 30 | $0.0000188 |
eth_subscribe, eth_unsubscribe) — this proxy is HTTP-only. Poll instead, or upgrade to a direct WebSocket provider.eth_newFilter, eth_getFilterChanges, eth_getFilterLogs, eth_uninstallFilter, eth_newBlockFilter, eth_newPendingTransactionFilter) — filter state is pinned to a single upstream backend and silently breaks on a load-balanced HTTP proxy. Use eth_getLogs (stateless) instead.eth_sign, eth_accounts, eth_mining, eth_hashrate, eth_getWork, eth_submitWork) — hosted provider endpoints don’t hold user private keys, so these always error. Sign transactions client-side and submit via eth_sendRawTransaction.400. Contact support to request additions.200, individual batch items can come back with a JSON-RPC error field (for example, a bad-params error or a method not supported on the target chain). Venice bills these items at 5 credits each rather than the full method tier — a small concession for normal “exploring the API” mistakes.
= 25.
| Tier | Requests/minute | Credits per 24h |
|---|---|---|
| Standard | 100 | 10,000,000 (~$6.25 cap) |
| Staff | 1,000 | 100,000,000 |
429 with a customMessage identifying which cap tripped. The per-minute cap also sets the standard X-RateLimit-* response headers.
Idempotency-Key request header to any string matching [A-Za-z0-9_-]{1,255} to enable safe retries. The response is cached for 24 hours keyed on (user, idempotency-key):
Idempotent-Replayed: true response header. The upstream is not touched and no new credits are charged.400 to prevent silent state corruption. Pick a fresh key for distinct requests.| Header | Description |
|---|---|
X-Venice-RPC-Credits | Credits charged for this request. On batch requests, this is the sum across items. |
X-Venice-RPC-Cost-USD | Dollar cost to 8 decimal places. Equal to X-Venice-RPC-Credits × price per credit. |
X-Request-ID | 32-character correlation ID. Include in any support correspondence. |
Idempotent-Replayed | Present with value "true" when the response came from the idempotency cache. |
X-RateLimit-Limit / X-RateLimit-Remaining / X-RateLimit-Reset | Set only on 429 responses. |
eth_sendRawTransaction is logged server-side with the tx hash (keccak256 of the raw bytes), the network slug, the request ID, and the calling user ID. We do not retain the signed payload itself — the hash is recoverable from the on-chain receipt. This audit trail exists so that if a customer’s API key is compromised and used to relay illicit transactions through our infrastructure, we can correlate on-chain activity back to the responsible account.
X-Venice-RPC-Credits: 20, X-Venice-RPC-Cost-USD: 0.00001250, X-Request-ID: <nanoid>.
apiKey collection variable to your Venice API key and start sending requests immediately.Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Optional idempotency key for safe retries. Pattern: [A-Za-z0-9_-]{1,255}. Retrying within 24 hours with the same key + same body replays the cached response with Idempotent-Replayed: true. Same key + different body returns 400.
^[A-Za-z0-9_-]{1,255}$"a1b2c3d4-e5f6-7890-abcd-ef1234567890"
Venice-side network slug. Call GET /api/v1/crypto/rpc/networks for the current list.
"ethereum-mainnet"
JSON-RPC method name. See the "Supported methods" section of the endpoint description for the classification into 1×/2×/4× pricing tiers.
"eth_chainId"
2.0 "2.0"
Method parameters. Shape depends on the method; see the upstream chain documentation.
[]Caller-supplied request ID echoed back in the response. Required for batch request correlation.
1
JSON-RPC response forwarded from the upstream node. Content-Type is forced to application/json regardless of upstream headers.