Skip to content
Skill Authoring
Skill

/venice-crypto-rpc

Use Venice as a pay-per-call JSON-RPC proxy to 27 EVM, Starknet, and Solana networks. Covers the public GET /crypto/rpc/networks, POST /crypto/rpc/{network}, chain families and their explicit per-family method allowlists, the 1×/2×/4× method-tier pricing model (~$7e-7 per

BOOST
From plugin
venice
15422 skills
Install
$ npx -y skills add veniceai/skills --skill venice-crypto-rpc --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/venice-crypto-rpc

Context preview

The summary Claude sees to decide when to auto-load this skill.

Use Venice as a pay-per-call JSON-RPC proxy to 27 EVM, Starknet, and Solana networks. Covers the public GET /crypto/rpc/networks, POST /crypto/rpc/{network}, chain families and their explicit per-family method allowlists, the 1×/2×/4× method-tier pricing model (~$7e-7 per

SKILL.md

venice-crypto-rpc.SKILL.md
name: venice-crypto-rpc
description: Use Venice as a pay-per-call JSON-RPC proxy to 27 EVM, Starknet, and Solana networks. Covers the public GET /crypto/rpc/networks, POST /crypto/rpc/{network}, chain families and their explicit per-family method allowlists, the 1×/2×/4× method-tier pricing model (~$7e-7 per credit), the per-minute rate limit and per-user request serialization, idempotency keys for safe retries, single vs batch (≤100) requests, and the unsupported stateful/WebSocket methods (eth_subscribe, eth_newFilter, *Subscribe, etc.).

Venice Crypto RPC (JSON-RPC proxy)

Venice exposes a **multi-chain JSON-RPC proxy** billed per call. Same request shape as Alchemy / Infura — change the base URL and pay per credit from your Venice balance (DIEM → earned credits → bundled credits → USD) or an x402 wallet.

| Endpoint | Auth | Notes | |---|---|---| | `GET /crypto/rpc/networks` | **None** (public) | Returns `{ "networks": [...] }`, sorted alphabetically. | | `POST /crypto/rpc/{network}` | Bearer API key (`INFERENCE` or `ADMIN`) or `SIGN-IN-WITH-X` (x402 wallet) | Forward a JSON-RPC 2.0 request (single or batch). |

Supported networks

curl https://api.venice.ai/api/v1/crypto/rpc/networks

It currently returns 27 slugs (always verify — the catalog grows):

arbitrum-mainnet    arbitrum-sepolia
avalanche-mainnet   avalanche-fuji
base-mainnet        base-sepolia
blast-mainnet       blast-sepolia
bsc-mainnet         bsc-testnet
ethereum-mainnet    ethereum-sepolia    ethereum-holesky
linea-mainnet       linea-sepolia
optimism-mainnet    optimism-sepolia
polygon-mainnet     polygon-amoy
robinhood-mainnet   robinhood-testnet
solana-mainnet      solana-devnet
starknet-mainnet    starknet-sepolia
zksync-mainnet      zksync-sepolia

Use the slug as `{network}` in the proxy path. An unknown slug is a `400`. The spec's example list for `/networks` omits `blast-mainnet` / `blast-sepolia`, but the live endpoint and proxy include them — trust `GET /crypto/rpc/networks`, and don't hardcode a client-side allowlist.

Chain families

Each network speaks exactly one method family, and the allowlist is enforced per family. Sending an EVM method to a Solana network (or the reverse) is a `400`, not a pass-through.

| Family | Networks | |---|---| | `evm` | Everything except Starknet and Solana, including Robinhood Chain (an Arbitrum Orbit L2). | | `starknet` | `starknet-mainnet`, `starknet-sepolia` | | `solana` | `solana-mainnet`, `solana-devnet` |

The allowlists are **explicit method names**, not prefixes: a method in a supported namespace that isn't on the list (e.g. an unlisted `debug_*` or `trace_*` method) is rejected. The EVM list is shared by every EVM network, so a chain-specific method (`zks_*`, `linea_*`, `bor_*`) passes Venice's check on any EVM chain but only works upstream on its own chain.

Send a JSON-RPC request

Single call

curl -X POST https://api.venice.ai/api/v1/crypto/rpc/ethereum-mainnet \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}'
{ "jsonrpc": "2.0", "id": 1, "result": "0x1" }

Each request object must have a string `method`; otherwise `400`.

Batch (up to 100 calls)

curl -X POST https://api.venice.ai/api/v1/crypto/rpc/base-mainnet \
  -H "Authorization: Bearer $VENICE_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}
  ]'
  • An empty array or more than 100 items ⇒ `400`.
  • A single unsupported method in a batch ⇒ the **entire batch** fails with `400`, and the message lists every offending method. (A WebSocket-only method fails the batch immediately with its own message naming just that method.)
  • Give every item a unique `id`: billing pairs response items to requests by `id`.

Drop-in with `viem`

import { createPublicClient, http } from 'viem'
import { mainnet } from 'viem/chains'

const client = createPublicClient({
  chain: mainnet,
  transport: http('https://api.venice.ai/api/v1/crypto/rpc/ethereum-mainnet', {
    fetchOptions: { headers: { Authorization: `Bearer ${process.env.VENICE_API_KEY}` } },
  }),
})

Pricing

Credits per call = `baseCredits[chain] × methodTier`, at `$0.0000007` (7e-7) per credit.

| Base credits | Chains | |---|---| | `20` | Ethereum, Base, Optimism, Arbitrum, Polygon, Linea, Avalanche, BSC, Blast, Robinhood, Starknet (mainnets and testnets). | | `30` | zkSync Era, Solana. |

| Tier | Multiplier | Methods | |---|---|---| | **Standard** | `1×` | EVM core (`eth_call`, `eth_getBalance`, `eth_blockNumber`, `eth_chainId`, `eth_getLogs`, `eth_estimateGas`, `eth_feeHistory`, `eth_getBlockReceipts`, `eth_getProof`, `eth_simulateV1`, `eth_sendRawTransaction`, …), `net_version` / `net_listening` / `net_peerCount`, `web3_clientVersion` / `web3_sha3`, ERC-4337 bundler (`eth_sendUserOperation`, `eth_estimateUserOperationGas`, `eth_getUserOperationByHash`, `eth_getUserOperationReceipt`, `eth_supportedEntryPoints`, `pimlico_getUserOperationGasPrice`, `pimlico_getUserOperationStatus`), chain extensions (`zks_*`, `linea_*`, `bor_*` — listed methods only), all listed `starknet_*` methods, and Solana methods (`getAccountInfo`, `getBalance`, `getLatestBlockhash`, `getProgramAccounts`, `sendTransaction`, `simulateTransaction`, …). | | **Advanced** | `2×` | `trace_block`, `trace_call`, `trace_callMany`, `trace_filter`, `trace_transaction`, `trace_rawTransaction`, `debug_traceBlock`, `debug_traceBlockByHash`, `debug_traceBlockByNumber`, `debug_traceCall`, `debug_traceTransaction`, `debug_storageRangeAt`, `txpool_inspect`, `txpool_status`, `arbtrace_block` / `_call` / `_callMany` / `_filter` / `_transaction`. EVM only. | | **Large** | `4×` | `trace_replayBlockTransactions`, `trace_replayTransaction`, `txpool_content`, `arbtrace_r

Read more
Ships withvenice

Agent Skills for the Venice API. Skills are self-contained folders of instructions (one SKILL.md each) that an LLM agent loads on demand to work correctly against a specific surface area of the API.

Get the whole plugin

Other skills on venice.