> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rhinestone.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# JSON-RPC providers

> Configure per-chain JSON-RPC URLs for SDK read operations.

The SDK uses public RPC transports for EVM reads by default. Public endpoints are convenient for development but can be throttled, so configure dedicated RPC URLs for production traffic.

## Configure per-chain URLs

Set `provider.type` to `custom` and map each chain ID your integration uses to its complete RPC URL:

```ts theme={null}
import { RhinestoneSDK } from '@rhinestone/sdk'
import { arbitrum, base, mainnet } from 'viem/chains'

const rhinestone = new RhinestoneSDK({
  auth: {
    mode: 'apiKey',
    apiKey: process.env.RHINESTONE_API_KEY!,
  },
  provider: {
    type: 'custom',
    urls: {
      [mainnet.id]: process.env.ETHEREUM_RPC_URL!,
      [base.id]: process.env.BASE_RPC_URL!,
      [arbitrum.id]: process.env.ARBITRUM_RPC_URL!,
    },
  },
})
```

The SDK does not construct vendor URLs from an API key. Include the required project identifier or credential in each full URL supplied by your RPC provider.

<Warning>
  A browser can inspect every RPC URL it uses. If a URL contains a secret, run the SDK server-side or route RPC reads through an authenticated backend. If your provider supports browser keys, restrict them by origin, chain, method, and spend limit.
</Warning>

## Chain coverage

Configured chains use the custom URL. If a chain ID is omitted, SDK 2.16.1 falls back to that viem chain's default public RPC. Configure every production chain explicitly for predictable rate limits and availability, and keep production and testnet mappings separate.

This setting affects EVM JSON-RPC reads. It does not configure the Rhinestone Orchestrator, an ERC-4337 bundler, or a paymaster. Configure the latter services in [ERC-4337](/wallets/custom-signer/configuration/erc-4337).
