# クイックスタート

> Source: https://docs.blockvectra.com/ja/quickstart/

開発者と AI エージェントは、キーなしで公開 RPC を試してから、キーを作成して利用を続けられます。

## 1. キーなしでブロック高を取得する

アカウントを作成したり API keyを指定したりせずに、サンプルのチェーン `robinhood_mainnet` の公開 JSON-RPC エンドポイントを呼び出します：

```bash
curl -s "https://api.blockvectra.com/v1/robinhood_mainnet/public" \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
```

レスポンスの `id: 1` はこのリクエストに対応します。`result` は 16 進数のブロック高で、呼び出しごとに変わることがあります。レスポンスに `error` が含まれている場合は、そのコードと理由を確認してください。公開メソッド、履歴の範囲、IP ごとの制限については、[無料の公開 RPC エンドポイント](https://blockvectra.com/en/free/#public-rpc)を参照してください。

## 2. API keyを作成する

[コンソール](https://console.blockvectra.com/login/?next=%2Fkeys%2F)にアクセスし、GitHub、Google、または Ethereum ウォレットでログインして（初回ログイン時にアカウントが作成されます）、API keyを作成します。シークレットは一度だけ表示されます。安全に保管し、環境変数 `BLOCKVECTRA_API_KEY` として設定してください。クライアント側のブラウザコードには含めないでください。新規アカウントは登録時に 30,000,000 CU を受け取れます。クレジットカードは不要です。

> **No API key yet?**
>
> Ethereum ウォレットをお持ちの場合：[プログラムによる登録ガイド](https://docs.blockvectra.com/en/guides/programmatic-signup/)に従い、ブラウザを使わずに Ethereum ウォレットの署名で登録し、API keyを作成してください。ウォレットをお持ちでない場合：ユーザーに [console.blockvectra.com](https://console.blockvectra.com/login/?next=%2Fkeys%2F) でログインし、キーを作成して環境変数 `BLOCKVECTRA_API_KEY` として設定するよう依頼してください。チャットにキーを貼り付けるようユーザーに求めないでください。


## 3. 最初の認証付きコールを送信する

`x-api-key` ヘッダーを使用して、同じチェーンのブロック高を取得します。URL はチェーン名で終わり、末尾にスラッシュは付けません：

```bash
: "${BLOCKVECTRA_API_KEY:?Set BLOCKVECTRA_API_KEY first}"

curl -s "https://api.blockvectra.com/v1/robinhood_mainnet" \
  -H 'Content-Type: application/json' \
  -H "x-api-key: $BLOCKVECTRA_API_KEY" \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
```

`result` はここでも 16 進数のブロック高です。このリクエストは CU を消費します。メソッドの重み付けとエラーコードは [JSON-RPC リファレンス](https://docs.blockvectra.com/en/api/json-rpc/)、現在の料金は[料金](https://blockvectra.com/en/pricing/)を参照してください。新しいキーは約 5 秒で有効になります。`invalid_api_key` が返された場合は、少し待ってから再試行してください。その他のエラーについては、以下の[よくあるエラー](#common-errors)を参照してください。

## 4. 業務タスクに進む

* [Robinhood Chain 上のトークン化株式のオンチェーン活動を照会する](https://docs.blockvectra.com/en/guides/stocks/)
* [HyperEVM の過去のログを分割して取得する](https://docs.blockvectra.com/en/guides/hyperevm-backfill/)
* [Webhook でウォレットの活動やトークン転送を受信する](https://docs.blockvectra.com/en/guides/webhook-push/)

## リファレンス

### API keyと残高

完全なスターターテンプレート：[blockvectra/agent-quickstart](https://github.com/blockvectra/agent-quickstart)

すべてのキーは `rgw_` に続く 64 文字の 16 進数で構成されます。例えば
`rgw_1f2e...`（省略）です。秘密にしておいてください。キーを持つ人は誰でも残高を使用できます。

> 残高が不足している場合、サーバーは HTTP 402 を返します（JSON-RPC エラーコード `-32020`、Data API の `error.code` は `insufficient_balance`）。コンソールの[請求ページ](https://console.blockvectra.com/billing/)で残高とチャージ方法を確認してください。


### API key なしで試す

アカウントの作成や API key の指定なしで、公開 JSON-RPC エンドポイントをすぐに呼び出せます。 以下の例のエンドポイントには IP ごとのレート制限があります（3 req/s、バースト上限 20、バッチ上限 10）。上限を超えたリクエストは HTTP 429 を返し、reason は `public_rate_limit` または `public_pool_busy` です（`Retry-After` ヘッダー付き）。非対応のメソッドは JSON-RPC エラー `-32601`（`method_not_public`）を返します。

```bash
# Direct public endpoint:
curl -s "https://api.blockvectra.com/v1/robinhood_mainnet/public" \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'

# Or using the API key fallback pattern (defaults to public when BLOCKVECTRA_API_KEY is unset):
curl -s "https://api.blockvectra.com/v1/robinhood_mainnet/${BLOCKVECTRA_API_KEY:-public}" \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
```

#### チェーン別の公開エンドポイント

- Arbitrum One: https://api.blockvectra.com/v1/arb_mainnet/public — 読み取りと署名済みトランザクションの送信（eth_sendRawTransaction）
- Base: https://api.blockvectra.com/v1/base_mainnet/public — 読み取りと署名済みトランザクションの送信（eth_sendRawTransaction）
- BNB Smart Chain: https://api.blockvectra.com/v1/bsc_mainnet/public — 読み取りと署名済みトランザクションの送信（eth_sendRawTransaction）
- Ethereum: https://api.blockvectra.com/v1/eth_mainnet/public — 読み取りと署名済みトランザクションの送信（eth_sendRawTransaction）
- Ethereum Sepolia: https://api.blockvectra.com/v1/eth_sepolia/public — 読み取りと署名済みトランザクションの送信（eth_sendRawTransaction）
- HyperEVM: https://api.blockvectra.com/v1/hyperevm_mainnet/public — 読み取り専用
- Polygon: https://api.blockvectra.com/v1/polygon_mainnet/public — 読み取りと署名済みトランザクションの送信（eth_sendRawTransaction）
- Robinhood Chain: https://api.blockvectra.com/v1/robinhood_mainnet/public — 読み取りと署名済みトランザクションの送信（eth_sendRawTransaction）
- Robinhood Chain Testnet: https://api.blockvectra.com/v1/robinhood_testnet/public — 読み取りと署名済みトランザクションの送信（eth_sendRawTransaction）

以下の 2 つの公開メタデータエンドポイントは、サービスの稼働状況と各チェーンの設定を表示します。API keyは不要で、課金されません。

### サービスとチェーンの稼働状況を確認する

```bash
curl https://api.blockvectra.com/v1/status
```

確認時刻 `checked_at`、サービスの稼働状況 `gateway.status`、および各対応チェーンのノードの同期進捗 `sync`、最新ブロック高と遅延 `head` を返します：

```json
{
  "checked_at": "2026-10-03T13:30:47Z",
  "gateway": {
    "status": "ok"
  },
  "chains": [
    {
      "chain": "bsc_mainnet",
      "name": "BNB Smart Chain",
      "chain_id": 56,
      "jsonrpc": true,
      "data": true,
      "data_features": [
        "blocks",
        "transactions",
        "address_transactions",
        "transfers",
        "token_metadata",
        "freshness"
      ],
      "data_status": "ok",
      "data_head_block": 125492675,
      "data_head_age_seconds": 3,
      "status": "ok",
      "sync": {
        "stage": "synced",
        "node_block": 125492676,
        "target_block": null
      },
      "head": {
        "block": 125492676,
        "time": "2026-10-03T13:30:45Z",
        "lag_seconds": 2
      }
    }
  ]
}
```

### 対応チェーンとメソッドポリシーを照会する

```bash
curl https://api.blockvectra.com/v1/chains
```

各対応チェーンの `chain_id`、JSON-RPC、Data API、WebSocket の機能フラグ、メソッドの許可・拒否ポリシー（`methods.allow` と `methods.deny`）、1 回のログクエリのブロック範囲上限 `max_logs_block_range`、および過去の状態を参照できる範囲 `state_window_blocks` を返します：

```json
{
  "chains": [
    {
      "chain": "bsc_mainnet",
      "name": "BNB Smart Chain",
      "chain_id": 56,
      "jsonrpc": true,
      "data": true,
      "ws": false,
      "subscriptions": [],
      "methods": {
        "allow": [
          "eth_blockNumber",
          "eth_call",
          "eth_chainId",
          "eth_getLogs"
        ],
        "deny": [
          "eth_newFilter",
          "eth_subscribe",
          "eth_unsubscribe"
        ]
      },
      "max_logs_block_range": 1000,
      "state_window_blocks": 990000,
      "info": {}
    }
  ]
}
```

### チェーンを選ぶ

BlockVectra のすべてのエンドポイントはチェーンごとに指定します。JSON-RPC リクエストは URL パスにチェーン名 `{chain}` を含み、Data API リクエストはルートの先頭にチェーン名を付けます。現在利用できるチェーンとその識別子については、[対応チェーン](https://docs.blockvectra.com/en/chains/)を参照してください。

| チェーン | {chain} | Chain ID | Tracing | 公開エンドポイント | WebSocket | Data API | API キーで利用できるメソッド数 | Webhook プッシュ | トランザクション送信 | トランザクション送信（key 不要の公開エンドポイント） | 状態履歴ウィンドウ | eth_getLogs 最大ブロック範囲 | Data API データセット | 関連テストネット | 関連ガイド |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| [arb_mainnet RPC および Data API](https://blockvectra.com/ja/chains/arb_mainnet/) | arb_mainnet | 42161 | ✓ | `https://api.blockvectra.com/v1/arb_mainnet/public` | 非対応 | 利用可能 | 43 | [対応 · 確認数 1–1（デフォルト 1）](https://blockvectra.com/ja/webhooks/), [Webhook プッシュガイド](https://docs.blockvectra.com/en/guides/webhook-push/) | 対応 | 対応 | 直近 6,000 ブロックの過去状態 | 1,000 ブロック | ブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、データ鮮度 | 不明 | 不明 |
| [base_mainnet RPC および Data API](https://blockvectra.com/ja/chains/base_mainnet/) | base_mainnet | 8453 | — | `https://api.blockvectra.com/v1/base_mainnet/public` | 非対応 | 利用可能 | 39 | [対応 · 確認数 1–1（デフォルト 1）](https://blockvectra.com/ja/webhooks/), [Webhook プッシュガイド](https://docs.blockvectra.com/en/guides/webhook-push/) | 対応 | 対応 | 直近 10,000 ブロックの過去状態 | 1,000 ブロック | ブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、データ鮮度 | 不明 | [Base](https://docs.blockvectra.com/en/guides/base/) |
| [bsc_mainnet RPC および Data API](https://blockvectra.com/ja/chains/bsc_mainnet/) | bsc_mainnet | 56 | — | `https://api.blockvectra.com/v1/bsc_mainnet/public` | 非対応 | 利用可能 | 25 | [対応 · 確認数 1–1（デフォルト 1）](https://blockvectra.com/ja/webhooks/), [Webhook プッシュガイド](https://docs.blockvectra.com/en/guides/webhook-push/) | 対応 | 対応 | 直近 100 ブロックの過去状態 | 1,000 ブロック | ブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、データ鮮度 | 不明 | 不明 |
| [Ethereum RPC および Data API](https://blockvectra.com/ja/chains/eth_mainnet/) | eth_mainnet | 1 | ✓ | `https://api.blockvectra.com/v1/eth_mainnet/public` | 非対応 | 利用可能 | 38 | [対応 · 確認数 1–1（デフォルト 1）](https://blockvectra.com/ja/webhooks/), [Webhook プッシュガイド](https://docs.blockvectra.com/en/guides/webhook-push/) | 対応 | 対応 | 直近 250,000 ブロックの過去状態 | 1,000 ブロック | ブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、データ鮮度 | 不明 | 不明 |
| [eth_sepolia RPC および Data API](https://blockvectra.com/ja/chains/eth_sepolia/) | eth_sepolia | 11155111 | — | `https://api.blockvectra.com/v1/eth_sepolia/public` | 非対応 | 利用可能 | 29 | [対応 · 確認数 1–1（デフォルト 1）](https://blockvectra.com/ja/webhooks/), [Webhook プッシュガイド](https://docs.blockvectra.com/en/guides/webhook-push/) | 対応 | 対応 | 不明 | 1,000 ブロック | ブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、データ鮮度 | 不明 | 不明 |
| [HyperEVM RPC および Data API](https://blockvectra.com/ja/chains/hyperevm_mainnet/) | hyperevm_mainnet | 999 | — | `https://api.blockvectra.com/v1/hyperevm_mainnet/public` | 非対応 | 利用可能 | 24 | [対応 · 確認数 1–1（デフォルト 1）](https://blockvectra.com/ja/webhooks/), [Webhook プッシュガイド](https://docs.blockvectra.com/en/guides/webhook-push/) | 非対応 | 非対応 | 不明 | 1,000 ブロック | ブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、残高、保有者、NFT、データ鮮度 | 不明 | [HyperEVM backfill and polling](https://docs.blockvectra.com/en/guides/hyperevm-backfill/) |
| [polygon_mainnet RPC および Data API](https://blockvectra.com/ja/chains/polygon_mainnet/) | polygon_mainnet | 137 | ✓ | `https://api.blockvectra.com/v1/polygon_mainnet/public` | 非対応 | 利用可能 | 43 | [対応 · 確認数 1–1（デフォルト 1）](https://blockvectra.com/ja/webhooks/), [Webhook プッシュガイド](https://docs.blockvectra.com/en/guides/webhook-push/) | 対応 | 対応 | 直近 126 ブロックの過去状態 | 1,000 ブロック | ブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、データ鮮度 | 不明 | 不明 |
| [Robinhood Chain RPC および Data API](https://blockvectra.com/ja/chains/robinhood_mainnet/) | robinhood_mainnet | 4663 | ✓ | `https://api.blockvectra.com/v1/robinhood_mainnet/public` | 対応 (newHeads, logs) | 利用可能 | 43 | [対応 · 確認数 1–1（デフォルト 1）](https://blockvectra.com/ja/webhooks/), [Webhook プッシュガイド](https://docs.blockvectra.com/en/guides/webhook-push/) | 対応 | 対応 | 直近 900 ブロックの過去状態 | 1,000 ブロック | ブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、残高、保有者、NFT、DEX スワップ、DEX 価格、トークン化株式、トレース、データ鮮度 | 不明 | [Robinhood Chain](https://docs.blockvectra.com/en/guides/robinhood-chain/), [Stock token multiplier](https://docs.blockvectra.com/en/guides/stock-token-multiplier/), [Tokenized stocks](https://docs.blockvectra.com/en/guides/stocks/) |
| [robinhood_testnet RPC](https://blockvectra.com/ja/chains/robinhood_testnet/) | robinhood_testnet | 46630 | ✓ | `https://api.blockvectra.com/v1/robinhood_testnet/public` | 対応 (newHeads, logs) | まだ利用できません | 43 | [対応 · 確認数 1–1（デフォルト 1）](https://blockvectra.com/ja/webhooks/), [Webhook プッシュガイド](https://docs.blockvectra.com/en/guides/webhook-push/) | 対応 | 対応 | 直近 1,023 ブロックの過去状態 | 1,000 ブロック | 非対応 | 不明 | [Testnet faucet](https://docs.blockvectra.com/en/guides/robinhood-testnet-faucet/), [Robinhood Chain Testnet starter](https://docs.blockvectra.com/en/guides/robinhood-testnet-starter/) |

## API キー取得後の次のステップ

### arb_mainnet

#### eth_getLogs

```bash
set -eu
MAX_LOGS_BLOCK_RANGE=1000
head=$(curl -fsS 'https://api.blockvectra.com/v1/arb_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}' | python3 -c 'import json,sys; print(int(json.load(sys.stdin)["result"],16))')
from=$((head >= MAX_LOGS_BLOCK_RANGE ? head - MAX_LOGS_BLOCK_RANGE + 1 : 0))
from_hex=$(printf '0x%x' "$from")
to_hex=$(printf '0x%x' "$head")
curl -fsS 'https://api.blockvectra.com/v1/arb_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' \
  -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getLogs\",\"params\":[{\"fromBlock\":\"$from_hex\",\"toBlock\":\"$to_hex\"}]}"
```

[eth_getLogs](https://docs.blockvectra.com/en/guides/getlogs-block-range/)

#### Data API

```bash
curl -fsS 'https://api.blockvectra.com/v1/data/arb_mainnet/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"
```

[Data API](https://docs.blockvectra.com/en/api/data/)

[Webhook サブスクリプションを作成](https://blockvectra.com/ja/webhooks/) · [Webhook サブスクリプションを作成](https://docs.blockvectra.com/en/guides/webhook-push/) · [使用量と CU](https://console.blockvectra.com/usage/) · [チャージ](https://console.blockvectra.com/billing/)

### base_mainnet

#### eth_getLogs

```bash
set -eu
MAX_LOGS_BLOCK_RANGE=1000
head=$(curl -fsS 'https://api.blockvectra.com/v1/base_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}' | python3 -c 'import json,sys; print(int(json.load(sys.stdin)["result"],16))')
from=$((head >= MAX_LOGS_BLOCK_RANGE ? head - MAX_LOGS_BLOCK_RANGE + 1 : 0))
from_hex=$(printf '0x%x' "$from")
to_hex=$(printf '0x%x' "$head")
curl -fsS 'https://api.blockvectra.com/v1/base_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' \
  -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getLogs\",\"params\":[{\"fromBlock\":\"$from_hex\",\"toBlock\":\"$to_hex\"}]}"
```

[eth_getLogs](https://docs.blockvectra.com/en/guides/getlogs-block-range/)

#### Data API

```bash
curl -fsS 'https://api.blockvectra.com/v1/data/base_mainnet/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"
```

[Data API](https://docs.blockvectra.com/en/api/data/)

[Webhook サブスクリプションを作成](https://blockvectra.com/ja/webhooks/) · [Webhook サブスクリプションを作成](https://docs.blockvectra.com/en/guides/webhook-push/) · [使用量と CU](https://console.blockvectra.com/usage/) · [チャージ](https://console.blockvectra.com/billing/)

### bsc_mainnet

#### eth_getLogs

```bash
set -eu
MAX_LOGS_BLOCK_RANGE=1000
head=$(curl -fsS 'https://api.blockvectra.com/v1/bsc_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}' | python3 -c 'import json,sys; print(int(json.load(sys.stdin)["result"],16))')
from=$((head >= MAX_LOGS_BLOCK_RANGE ? head - MAX_LOGS_BLOCK_RANGE + 1 : 0))
from_hex=$(printf '0x%x' "$from")
to_hex=$(printf '0x%x' "$head")
curl -fsS 'https://api.blockvectra.com/v1/bsc_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' \
  -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getLogs\",\"params\":[{\"fromBlock\":\"$from_hex\",\"toBlock\":\"$to_hex\"}]}"
```

[eth_getLogs](https://docs.blockvectra.com/en/guides/getlogs-block-range/)

#### Data API

```bash
curl -fsS 'https://api.blockvectra.com/v1/data/bsc_mainnet/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"
```

[Data API](https://docs.blockvectra.com/en/api/data/)

[Webhook サブスクリプションを作成](https://blockvectra.com/ja/webhooks/) · [Webhook サブスクリプションを作成](https://docs.blockvectra.com/en/guides/webhook-push/) · [使用量と CU](https://console.blockvectra.com/usage/) · [チャージ](https://console.blockvectra.com/billing/)

### Ethereum

#### eth_getLogs

```bash
set -eu
MAX_LOGS_BLOCK_RANGE=1000
head=$(curl -fsS 'https://api.blockvectra.com/v1/eth_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}' | python3 -c 'import json,sys; print(int(json.load(sys.stdin)["result"],16))')
from=$((head >= MAX_LOGS_BLOCK_RANGE ? head - MAX_LOGS_BLOCK_RANGE + 1 : 0))
from_hex=$(printf '0x%x' "$from")
to_hex=$(printf '0x%x' "$head")
curl -fsS 'https://api.blockvectra.com/v1/eth_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' \
  -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getLogs\",\"params\":[{\"fromBlock\":\"$from_hex\",\"toBlock\":\"$to_hex\"}]}"
```

[eth_getLogs](https://docs.blockvectra.com/en/guides/getlogs-block-range/)

#### Data API

```bash
curl -fsS 'https://api.blockvectra.com/v1/data/eth_mainnet/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"
```

[Data API](https://docs.blockvectra.com/en/api/data/)

[Webhook サブスクリプションを作成](https://blockvectra.com/ja/webhooks/) · [Webhook サブスクリプションを作成](https://docs.blockvectra.com/en/guides/webhook-push/) · [使用量と CU](https://console.blockvectra.com/usage/) · [チャージ](https://console.blockvectra.com/billing/)

### eth_sepolia

#### eth_getLogs

```bash
set -eu
MAX_LOGS_BLOCK_RANGE=1000
head=$(curl -fsS 'https://api.blockvectra.com/v1/eth_sepolia' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}' | python3 -c 'import json,sys; print(int(json.load(sys.stdin)["result"],16))')
from=$((head >= MAX_LOGS_BLOCK_RANGE ? head - MAX_LOGS_BLOCK_RANGE + 1 : 0))
from_hex=$(printf '0x%x' "$from")
to_hex=$(printf '0x%x' "$head")
curl -fsS 'https://api.blockvectra.com/v1/eth_sepolia' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' \
  -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getLogs\",\"params\":[{\"fromBlock\":\"$from_hex\",\"toBlock\":\"$to_hex\"}]}"
```

[eth_getLogs](https://docs.blockvectra.com/en/guides/getlogs-block-range/)

#### Data API

```bash
curl -fsS 'https://api.blockvectra.com/v1/data/eth_sepolia/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"
```

[Data API](https://docs.blockvectra.com/en/api/data/)

[Webhook サブスクリプションを作成](https://blockvectra.com/ja/webhooks/) · [Webhook サブスクリプションを作成](https://docs.blockvectra.com/en/guides/webhook-push/) · [使用量と CU](https://console.blockvectra.com/usage/) · [チャージ](https://console.blockvectra.com/billing/)

### HyperEVM

#### eth_getLogs

```bash
set -eu
MAX_LOGS_BLOCK_RANGE=1000
head=$(curl -fsS 'https://api.blockvectra.com/v1/hyperevm_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}' | python3 -c 'import json,sys; print(int(json.load(sys.stdin)["result"],16))')
from=$((head >= MAX_LOGS_BLOCK_RANGE ? head - MAX_LOGS_BLOCK_RANGE + 1 : 0))
from_hex=$(printf '0x%x' "$from")
to_hex=$(printf '0x%x' "$head")
curl -fsS 'https://api.blockvectra.com/v1/hyperevm_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' \
  -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getLogs\",\"params\":[{\"fromBlock\":\"$from_hex\",\"toBlock\":\"$to_hex\"}]}"
```

[eth_getLogs](https://docs.blockvectra.com/en/guides/getlogs-block-range/)

#### Data API

```bash
curl -fsS 'https://api.blockvectra.com/v1/data/hyperevm_mainnet/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"
```

[Data API](https://docs.blockvectra.com/en/api/data/)

[Webhook サブスクリプションを作成](https://blockvectra.com/ja/webhooks/) · [Webhook サブスクリプションを作成](https://docs.blockvectra.com/en/guides/webhook-push/) · [使用量と CU](https://console.blockvectra.com/usage/) · [チャージ](https://console.blockvectra.com/billing/)

### polygon_mainnet

#### eth_getLogs

```bash
set -eu
MAX_LOGS_BLOCK_RANGE=1000
head=$(curl -fsS 'https://api.blockvectra.com/v1/polygon_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}' | python3 -c 'import json,sys; print(int(json.load(sys.stdin)["result"],16))')
from=$((head >= MAX_LOGS_BLOCK_RANGE ? head - MAX_LOGS_BLOCK_RANGE + 1 : 0))
from_hex=$(printf '0x%x' "$from")
to_hex=$(printf '0x%x' "$head")
curl -fsS 'https://api.blockvectra.com/v1/polygon_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' \
  -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getLogs\",\"params\":[{\"fromBlock\":\"$from_hex\",\"toBlock\":\"$to_hex\"}]}"
```

[eth_getLogs](https://docs.blockvectra.com/en/guides/getlogs-block-range/)

#### Data API

```bash
curl -fsS 'https://api.blockvectra.com/v1/data/polygon_mainnet/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"
```

[Data API](https://docs.blockvectra.com/en/api/data/)

[Webhook サブスクリプションを作成](https://blockvectra.com/ja/webhooks/) · [Webhook サブスクリプションを作成](https://docs.blockvectra.com/en/guides/webhook-push/) · [使用量と CU](https://console.blockvectra.com/usage/) · [チャージ](https://console.blockvectra.com/billing/)

### Robinhood Chain

#### eth_getLogs

```bash
set -eu
MAX_LOGS_BLOCK_RANGE=1000
head=$(curl -fsS 'https://api.blockvectra.com/v1/robinhood_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}' | python3 -c 'import json,sys; print(int(json.load(sys.stdin)["result"],16))')
from=$((head >= MAX_LOGS_BLOCK_RANGE ? head - MAX_LOGS_BLOCK_RANGE + 1 : 0))
from_hex=$(printf '0x%x' "$from")
to_hex=$(printf '0x%x' "$head")
curl -fsS 'https://api.blockvectra.com/v1/robinhood_mainnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' \
  -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getLogs\",\"params\":[{\"fromBlock\":\"$from_hex\",\"toBlock\":\"$to_hex\"}]}"
```

[eth_getLogs](https://docs.blockvectra.com/en/guides/getlogs-block-range/)

#### Data API

```bash
curl -fsS 'https://api.blockvectra.com/v1/data/robinhood_mainnet/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"
```

[Data API](https://docs.blockvectra.com/en/api/data/)

#### WebSocket

```bash
echo '{"jsonrpc":"2.0","id":1,"method":"eth_subscribe","params":["newHeads"]}' | websocat --no-close -H="x-api-key: $BLOCKVECTRA_API_KEY" 'wss://api.blockvectra.com/v1/robinhood_mainnet'
```

[WebSocket](https://docs.blockvectra.com/en/guides/websocket-subscriptions/)

[Webhook サブスクリプションを作成](https://blockvectra.com/ja/webhooks/) · [Webhook サブスクリプションを作成](https://docs.blockvectra.com/en/guides/webhook-push/) · [使用量と CU](https://console.blockvectra.com/usage/) · [チャージ](https://console.blockvectra.com/billing/)

### robinhood_testnet

#### eth_getLogs

```bash
set -eu
MAX_LOGS_BLOCK_RANGE=1000
head=$(curl -fsS 'https://api.blockvectra.com/v1/robinhood_testnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}' | python3 -c 'import json,sys; print(int(json.load(sys.stdin)["result"],16))')
from=$((head >= MAX_LOGS_BLOCK_RANGE ? head - MAX_LOGS_BLOCK_RANGE + 1 : 0))
from_hex=$(printf '0x%x' "$from")
to_hex=$(printf '0x%x' "$head")
curl -fsS 'https://api.blockvectra.com/v1/robinhood_testnet' -H "x-api-key: $BLOCKVECTRA_API_KEY" -H 'Content-Type: application/json' \
  -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"eth_getLogs\",\"params\":[{\"fromBlock\":\"$from_hex\",\"toBlock\":\"$to_hex\"}]}"
```

[eth_getLogs](https://docs.blockvectra.com/en/guides/getlogs-block-range/)

#### WebSocket

```bash
echo '{"jsonrpc":"2.0","id":1,"method":"eth_subscribe","params":["newHeads"]}' | websocat --no-close -H="x-api-key: $BLOCKVECTRA_API_KEY" 'wss://api.blockvectra.com/v1/robinhood_testnet'
```

[WebSocket](https://docs.blockvectra.com/en/guides/websocket-subscriptions/)

[Webhook サブスクリプションを作成](https://blockvectra.com/ja/webhooks/) · [Webhook サブスクリプションを作成](https://docs.blockvectra.com/en/guides/webhook-push/) · [使用量と CU](https://console.blockvectra.com/usage/) · [チャージ](https://console.blockvectra.com/billing/)

**HyperEVM**
HyperEVM のブロックには HyperCore システムトランザクション（送信元アドレス 0x2222…2222 または 0x20…、gasPrice 0）が含まれます。
このチェーンではまだトランザクションの送信に対応していません（`eth_sendRawTransaction` は `-32601` `method_not_allowed` を返します）。読み取りメソッドは通常どおり利用できます。

[稼働状況を確認 →](https://blockvectra.com/ja/status/)

このページのすべての例では `robinhood_mainnet` を使用しています。

> **ヒント**：上の一覧から、例で使用するサービス、メソッド、履歴の範囲に対応するチェーンを選び、`robinhood_mainnet` をそのチェーンの `{chain}` に置き換えてください。同じ API keyをすべての対応チェーンで使用できます。

### その他の認証方法と言語別の例

JSON-RPC エンドポイントはチェーンごとに指定します。キーをパスに含める場合は `POST /v1/{chain}/{api_key}`、`x-api-key` ヘッダーに含める場合は `POST /v1/{chain}` です。`{chain}` は Data API でも使用するチェーン名です。Robinhood Chain では `robinhood_mainnet` なので、このページのエンドポイントは `https://api.blockvectra.com/v1/robinhood_mainnet` です。HTTP 経由で `eth_subscribe` を呼び出すと `-32601` が返されます。WebSocket の購読は[対応チェーン](https://docs.blockvectra.com/en/chains/)にチェーンごとに記載されています。API は `Access-Control-Allow-Origin: *` を返しますが、API keyは秘密にしておき、クライアント側のブラウザコードではなくバックエンドサービスからリクエストを送信してください。

キーは次の 3 通りの方法で渡せます：URL パス（`POST /v1/{chain}/{api_key}`。パス内のキーだけを使用し、両方のヘッダーを無視します）、`x-api-key` ヘッダー、または `Authorization: Bearer <api_key>` ヘッダーです。

#### URL パスにキーを指定する

**cURL**

```bash
: "${BLOCKVECTRA_API_KEY:?Set BLOCKVECTRA_API_KEY first}"

curl -s "https://api.blockvectra.com/v1/robinhood_mainnet/$BLOCKVECTRA_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
```


  **TypeScript**

```ts
import { createPublicClient, http } from "viem";

const key = process.env.BLOCKVECTRA_API_KEY!;
const client = createPublicClient({
  transport: http(`https://api.blockvectra.com/v1/robinhood_mainnet/${key}`),
});

console.log(await client.getBlockNumber());

// Run with: npx tsx example.mts
```

完全なスターターテンプレート：[blockvectra/multichain-viem](https://github.com/blockvectra/multichain-viem)


  **Python**

```python
import os

from web3 import Web3

w3 = Web3(Web3.HTTPProvider("https://api.blockvectra.com/v1/robinhood_mainnet/" + os.environ["BLOCKVECTRA_API_KEY"]))
print(w3.eth.block_number)
```


  **Go**

```go
// Run with: go mod init example && go get github.com/ethereum/go-ethereum && go mod tidy && go run .
package main

import (
	"context"
	"fmt"
	"log"
	"os"

	"github.com/ethereum/go-ethereum/ethclient"
)

func main() {
	client, err := ethclient.Dial("https://api.blockvectra.com/v1/robinhood_mainnet/" + os.Getenv("BLOCKVECTRA_API_KEY"))
	if err != nil {
		log.Fatal(err)
	}
	number, err := client.BlockNumber(context.Background())
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(number)
}
```


  **Rust**

```toml
[dependencies]
alloy = { version = "1", features = ["provider-http", "rpc-types"] }
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
```

```rust
use alloy::providers::{Provider, ProviderBuilder};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let key = std::env::var("BLOCKVECTRA_API_KEY")?;
    let url = format!("https://api.blockvectra.com/v1/robinhood_mainnet/{key}");
    let provider = ProviderBuilder::new().connect_http(url.parse()?);
    println!("{}", provider.get_block_number().await?);
    Ok(())
}
```


#### リクエストヘッダーにキーを指定する

**cURL**

```bash
: "${BLOCKVECTRA_API_KEY:?Set BLOCKVECTRA_API_KEY first}"

curl -s "https://api.blockvectra.com/v1/robinhood_mainnet" \
  -H 'Content-Type: application/json' \
  -H "x-api-key: $BLOCKVECTRA_API_KEY" \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
```


  **TypeScript**

```ts
import { createPublicClient, http } from "viem";

const key = process.env.BLOCKVECTRA_API_KEY!;
const client = createPublicClient({
  transport: http("https://api.blockvectra.com/v1/robinhood_mainnet", {
    fetchOptions: { headers: { "x-api-key": key } },
  }),
});

console.log(await client.getBlockNumber());

// Run with: npx tsx example.mts
```


  **Python**

```python
import os

from web3 import Web3

key = os.environ["BLOCKVECTRA_API_KEY"]
# request_kwargs replaces the provider's default headers entirely, so
# Content-Type must be repeated here or the server can't parse the body.
headers = {"Content-Type": "application/json", "x-api-key": key}
w3 = Web3(Web3.HTTPProvider("https://api.blockvectra.com/v1/robinhood_mainnet", request_kwargs={"headers": headers}))
print(w3.eth.block_number)
```


  **Go**

```go
// Run with: go mod init example && go get github.com/ethereum/go-ethereum && go mod tidy && go run .
package main

import (
	"context"
	"fmt"
	"log"
	"os"

	"github.com/ethereum/go-ethereum/ethclient"
	"github.com/ethereum/go-ethereum/rpc"
)

func main() {
	ctx := context.Background()
	c, err := rpc.DialOptions(ctx, "https://api.blockvectra.com/v1/robinhood_mainnet", rpc.WithHeader("x-api-key", os.Getenv("BLOCKVECTRA_API_KEY")))
	if err != nil {
		log.Fatal(err)
	}
	number, err := ethclient.NewClient(c).BlockNumber(ctx)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(number)
}
```


  **Rust**

```toml
[dependencies]
alloy = { version = "1", features = ["provider-http", "rpc-types"] }
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
reqwest = "0.13"
```

```rust
use alloy::providers::{Provider, ProviderBuilder};
use alloy::rpc::client::RpcClient;
use reqwest::header::{HeaderMap, HeaderValue};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let key = std::env::var("BLOCKVECTRA_API_KEY")?;

    let mut headers = HeaderMap::new();
    headers.insert("x-api-key", HeaderValue::from_str(&key)?);
    let http_client = reqwest::Client::builder().default_headers(headers).build()?;

    let rpc_client = RpcClient::new_http_with_client(http_client, "https://api.blockvectra.com/v1/robinhood_mainnet".parse()?);
    let provider = ProviderBuilder::new().connect_client(rpc_client);

    println!("{}", provider.get_block_number().await?);
    Ok(())
}
```


> **No trailing slash**
>
> ヘッダーでキーを渡す場合は、例のとおり `https://api.blockvectra.com/v1/robinhood_mainnet` を呼び出してください。URL はチェーン名で終わり、末尾にスラッシュを**付けません**。JSON-RPC は `/v1/{chain}` と `/v1/{chain}/{api_key}` でのみ提供されます。末尾にスラッシュを付けた場合（`/v1/{chain}/` など）、またはチェーンのセグメントがないリクエスト（`/v1` や `/v1/` など）は、空のボディとともに `404` を返します。


`Authorization: Bearer <api_key>` ヘッダーも使用できます。`POST /v1/{chain}` では、空でない `x-api-key` が Bearer より優先され、`x-api-key` がない場合または空の場合にのみ Bearer が使用されます。パス形式では両方のヘッダーが無視されます。

### バッチコール

配列を送信すると、1 回のリクエストで複数のコールを実行できます（1 バッチあたり最大 100 コール）。各 API keyには CU バケットがあります（補充レート `cu_per_sec`、容量 `burst_cu` — デフォルトは 400 CU/s、バースト容量は 1,600 CU。コンソールの Keys テーブルにキーごとに表示されます）。JSON-RPC バッチ全体を含め、1 回のリクエストの合計 CU がキーのバースト容量を超えると、1 バッチあたり 100 コール以内でも `-32022 request_exceeds_burst` で拒否されます。より小さいバッチに分割してください。この例では、1 回の往復でチェーン ID とアカウント残高を取得します：

**cURL**

```bash
curl -s "https://api.blockvectra.com/v1/robinhood_mainnet" \
  -H 'Content-Type: application/json' \
  -H "x-api-key: $BLOCKVECTRA_API_KEY" \
  -d '[
    {"jsonrpc":"2.0","id":1,"method":"eth_chainId"},
    {"jsonrpc":"2.0","id":2,"method":"eth_getBalance","params":["0x1111111111111111111111111111111111111111","latest"]}
  ]'
```


  **TypeScript**

```ts
import { createPublicClient, http } from "viem";

const key = process.env.BLOCKVECTRA_API_KEY!;
const client = createPublicClient({
  transport: http("https://api.blockvectra.com/v1/robinhood_mainnet", {
    batch: true,
    fetchOptions: { headers: { "x-api-key": key } },
  }),
});

// viem coalesces concurrent requests into a single JSON-RPC batch.
const [chainId, balance] = await Promise.all([
  client.getChainId(),
  client.getBalance({ address: "0x1111111111111111111111111111111111111111" }),
]);
console.log(chainId, balance);

// Run with: npx tsx example.mts
```


  **Python**

```python
import os

from web3 import Web3

key = os.environ["BLOCKVECTRA_API_KEY"]
headers = {"Content-Type": "application/json", "x-api-key": key}
w3 = Web3(Web3.HTTPProvider("https://api.blockvectra.com/v1/robinhood_mainnet", request_kwargs={"headers": headers}))

with w3.batch_requests() as batch:
    batch.add(w3.eth.chain_id)
    batch.add(w3.eth.get_balance("0x1111111111111111111111111111111111111111"))
    chain_id, balance = batch.execute()

print(chain_id, balance)
```


  **Go**

```go
// Run with: go mod init example && go get github.com/ethereum/go-ethereum && go mod tidy && go run .
package main

import (
	"context"
	"fmt"
	"log"
	"os"

	"github.com/ethereum/go-ethereum/rpc"
)

func main() {
	ctx := context.Background()
	c, err := rpc.DialOptions(ctx, "https://api.blockvectra.com/v1/robinhood_mainnet", rpc.WithHeader("x-api-key", os.Getenv("BLOCKVECTRA_API_KEY")))
	if err != nil {
		log.Fatal(err)
	}

	var chainID, balance string
	calls := []rpc.BatchElem{
		{Method: "eth_chainId", Result: &chainID},
		{Method: "eth_getBalance", Args: []any{"0x1111111111111111111111111111111111111111", "latest"}, Result: &balance},
	}
	if err := c.BatchCallContext(ctx, calls); err != nil {
		log.Fatal(err)
	}
	for _, call := range calls {
		if call.Error != nil {
			log.Fatal(call.Error)
		}
	}
	fmt.Println(chainID, balance)
}
```


  **Rust**

```toml
[dependencies]
alloy = { version = "1", features = ["provider-http", "rpc-types"] }
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
reqwest = "0.13"
```

```rust
use alloy::primitives::{Address, U256};
use alloy::rpc::client::RpcClient;
use reqwest::header::{HeaderMap, HeaderValue};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let key = std::env::var("BLOCKVECTRA_API_KEY")?;

    let mut headers = HeaderMap::new();
    headers.insert("x-api-key", HeaderValue::from_str(&key)?);
    let http_client = reqwest::Client::builder().default_headers(headers).build()?;
    let rpc_client = RpcClient::new_http_with_client(http_client, "https://api.blockvectra.com/v1/robinhood_mainnet".parse()?);

    let address: Address = "0x1111111111111111111111111111111111111111".parse()?;
    let mut batch = rpc_client.new_batch();
    let chain_id = batch.add_call::<_, U256>("eth_chainId", &())?;
    let balance = batch.add_call::<_, U256>("eth_getBalance", &(address, "latest"))?;
    batch.send().await?;

    println!("{} {}", chain_id.await?, balance.await?);
    Ok(())
}
```


レスポンスは、リクエストと同じ順序の配列で返され、`id` で対応付けられます。

残高不足、レート制限、バースト容量、またはバッチサイズの超過によりサーバーがバッチ全体を拒否した場合（以下の[よくあるエラー](#common-errors)を参照）、配列ではなく単一の JSON-RPC エラーオブジェクトが返されます。この場合、viem の `batch: true` モードでは詳細のわからない `UnknownRpcError` として表示されるため、単一のコールを再試行して実際のエラーを確認してください。

### CU 課金を理解する

課金対象のすべてのコールは **Compute Units (CU)** を消費します。`eth_blockNumber` や `eth_chainId` などの軽量なコールは最も低コストで、`eth_getBlockByNumber` などの一般的な読み取りは少し高くなります。`eth_call` や `eth_getLogs` などの負荷の高いコールはさらに高く、実行トレースメソッド（`debug_traceTransaction` など）が最も高コストです。
利用量はアカウントごとに 1 時間単位で集計され、整数の請求ユニットに切り捨てて請求されます（1 ユニット = 1,000 CU）。端数は次の期間に繰り越されるため、期間をまたぐ合計請求額は `floor(total CU / 1,000)` になります。決済は期間終了から約 15 分後に実行されます。例：繰越 508 CU + 消費 2557 CU = 3065 CU の場合、3 請求ユニットが請求され、65 CU が次の期間に繰り越されます。 現在の料金は[料金](https://blockvectra.com/en/pricing/)を参照してください。

メソッドごとの重み付け一覧とエラーコードは、[API リファレンス → JSON-RPC](https://docs.blockvectra.com/en/api/json-rpc/)に記載されています。このページではリクエストの形式のみを説明しています。

#### よくあるエラー

| リクエストの状況                                                                                                                                                                              | 返されるレスポンス                                                                 | 対処方法                                                                                                                                                                                |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 不明なチェーン、またはまだ公開されていないチェーン                                                                                                                                                             | HTTP `404`、JSON ボディに `error.data.reason: "unknown_chain"`                 | URL 内のチェーン名を確認する                                                                                                                                                                    |
| チェーンのセグメントがないリクエスト（`/v1` や `/v1/` など）                                                                                                                                                 | HTTP `404`、空のボディ                                                          | URL にチェーン名を含める（`/v1/{chain}`）                                                                                                                                                       |
| API keyがない、不明、または無効化されている                                                                                                                                                             | HTTP `401`、JSON-RPC コード `-32024`（`missing_api_key` または `invalid_api_key`） | 有効な API keyを使用する（新規作成またはローテーションしたキーは、約 5 秒以内にすべてのインスタンスで有効になります。その間は 401 `invalid_api_key` が返される場合や、課金状態を一時的に確認できないときに 503 `-32021`（`Retry-After` 付き）が返される場合があるため、少し待ってから再試行してください） |
| 残高がゼロまたはマイナス                                                                                                                                                                          | HTTP `402`、JSON-RPC コード `-32020`                                          | 残高をチャージするか、無料クレジットの補充を待つ                                                                                                                                                            |
| リクエストの送信が速すぎる（レート制限または一時的な過負荷）                                                                                                                                                        | HTTP `429`（または `200`）、JSON-RPC コード `-32005`                               | 後で再試行する（`Retry-After` がある場合は従う）                                                                                                                                                     |
| 単一リクエストまたはバッチがキーのバースト容量を超えている （`burst_cu`、デフォルト 1,600 CU、デフォルトのレート 400 CU/s）、または無料プランのバッチが毎秒の呼び出し上限を超過（25 回/秒）                                                                                                               | HTTP `429`、JSON-RPC コード `-32022`（`request_exceeds_burst`）                 | リクエストをより小さいバッチに分割する（そのままでは成功しません）                                                                                                                                                   |
| 上流ノードが一時的に利用できない                                                                                                                                                                      | HTTP `200`、JSON-RPC コード `-32603`（`upstream unavailable`）、課金なし             | リクエストを再試行する                                                                                                                                                                         |
| 過去の状態がチェーンの参照可能な範囲外（`GET /v1/chains` の `state_window_blocks` を参照）                                                                                                                     | HTTP `200`、JSON-RPC コード `-32011`、課金なし                                     | より新しいブロックを照会する                                                                                                                                                                      |
| トランザクションやブロックが見つからない、またはレスポンスが大きすぎる。Ethereum では、最近の参照可能な範囲外のブロック・レシート・ログのクエリも -32000 "old data not available due to pruning" を返します（課金なし。[対応チェーン → Ethereum](https://docs.blockvectra.com/en/chains/#ethereum)を参照） | HTTP `200`、JSON-RPC コード `-32000`                                          | リクエストを変更する（ハッシュやブロック番号を確認してください。トレースのハッシュ形式が不正な場合は、トランザクションが見つからないというエラーになります）                                                                                                      |
| トレーサーが許可されていない、またはトレースのタイムアウトが許可されていない（`debug_trace` コール）                                                                                                                             | HTTP `200`、JSON-RPC コード `-32602`、課金なし                                     | 許可されたネイティブトレーサー（`callTracer`、`flatCallTracer`、`prestateTracer`、`4byteTracer`、`noopTracer`、または省略）を使用し、タイムアウトを 30s 以下にする                                                              |
| チェーンのメソッド一覧で許可されていないメソッド（[対応チェーン](https://docs.blockvectra.com/en/chains/)を参照）                                                                                                                                    | HTTP `200`、JSON-RPC コード `-32601`、課金なし                                     | チェーンで許可されているメソッドのみを呼び出す                                                                                                                                                             |
| JSON ボディの形式が不正                                                                                                                                                                        | HTTP `200`、JSON-RPC コード `-32700`、課金なし                                     | リクエストの JSON 構文を修正する                                                                                                                                                                 |
| 1 バッチに 100 コールを超えて含めている                                                                                                                                                               | HTTP `200`、JSON-RPC コード `-32600`（`batch too large`）、課金なし                  | バッチを最大 100 コールに分割する                                                                                                                                                                 |

上記の拒否には課金されません。受け付けられ、レスポンスを得たすべてのコールには、公開されているメソッドの CU 重み付けに基づいて課金されます。課金されないケースはエラーコード表に記載されています（[エラーコード](https://docs.blockvectra.com/en/api/json-rpc/#error-codes)の Billed 列を参照）。

### Data API を呼び出す

Data API は、読み取り専用のチェーンデータ（ブロック、トランザクション、残高、保有者、DEX の活動など）を REST/JSON として提供します。`GET https://api.blockvectra.com/v1/data/chains` を除くすべてのルートはチェーン識別子で始まります。以下のすべてのパスで使用する `robinhood_mainnet` は、チェーン識別子（`/chains` と `meta` で返される `chain` フィールド）です。
`GET https://api.blockvectra.com/v1/data/chains` は公開チェーンのみを一覧表示し、`{"data": [...]}` のみを返します（`meta` も `next_cursor` もありません）。リクエストは Compute Units (CU) で計測・課金され、成功した 2xx レスポンスのみが課金対象です。

すべてのリクエストで JSON-RPC と同じ API keyが必要です。`x-api-key` ヘッダーで渡してください。
チェーンを指定した成功レスポンスは、すべて同じエンベロープを使用します：
`data`（ペイロード）、`next_cursor`（不透明な文字列。次のページがある場合のみ存在し、それ以外ではキー自体がなく、`null` にはなりません）、`meta`（`chain`、`chain_slug`（`chain` を大文字にしたもの）、`chain_external_id`、`as_of_block`、`safe_block`、`finalized_block`、`coverage`、`refreshed_at`。`refreshed_at` は `null` の場合があり、データの更新時刻が不明で、古いデータとして扱うべきことを意味します。ブロックベースのエンドポイントは常に値を返します）。エラーレスポンスは通常 `{"error":{"code","message"}}` を含み、`409 not_indexed_yet` には `indexed_through`（インデックス済みの最大ブロック）が追加されます。不明なチェーンまたは公開されていないチェーンは、`error.code` が `not_found` の HTTP `404` を返します（課金なし。チェーン名は正確な小文字の slug でなければなりません）。API keyがない、不明、または無効化されている場合は、`error.code` が `missing_api_key` または `invalid_api_key` の HTTP `401` を返します。レート制限されたリクエストは HTTP `429`（`error.code` は `rate_limited`、`data.reason: "key_rate_limit"`）、残高がなくなった場合は HTTP `402`（`error.code` は `insufficient_balance`）を返し、どちらも課金されません。2^53 を超える可能性のある値（残高、トークン数量）は、JSON の数値ではなく 10 進数の文字列です。

**ブロック番号でブロックを検索する：**

**cURL**

```bash
curl -s "https://api.blockvectra.com/v1/data/robinhood_mainnet/blocks/72838701" \
  -H "x-api-key: $BLOCKVECTRA_API_KEY"
```


  **TypeScript**

```ts
const res = await fetch("https://api.blockvectra.com/v1/data/robinhood_mainnet/blocks/72838701", {
  headers: { "x-api-key": process.env.BLOCKVECTRA_API_KEY! },
});
const body = await res.json();
console.log(body);

// Run with: npx tsx example.mts
```


  **Python**

```python
import os, requests

res = requests.get(
    "https://api.blockvectra.com/v1/data/robinhood_mainnet/blocks/72838701",
    headers={"x-api-key": os.environ["BLOCKVECTRA_API_KEY"]},
)
print(res.json())
```


```json
{
  "data": {
    "number": 72838701,
    "hash": "0x9f2c1e7a4b6d3f805e1c9a72b4d6f1e0a3c8b5d7e2f4a1c6b9d3e7f0a2c4b6d8",
    "parent_hash": "0x1a3c5e7f9b1d3f5a7c9e1b3d5f7a9c1e3b5d7f9a1c3e5b7d9f1a3c5e7b9d1f3a",
    "timestamp": "2026-09-26T05:41:07Z",
    "miner": "0x00000000000000000000000000000000000a4b05",
    "gas_limit": 32000000,
    "gas_used": 4821932,
    "base_fee_per_gas": "100000000",
    "state_root": "0x2b4d6f8a1c3e5b7d9f1a3c5e7b9d1f3a5c7e9b1d3f5a7c9e1b3d5f7a9c1e3b5d",
    "transactions_root": "0x3c5e7b9d1f3a5c7e9b1d3f5a7c9e1b3d5f7a9c1e3b5d7f9a1c3e5b7d9f1a3c5e",
    "receipts_root": "0x4d6f8a1c3e5b7d9f1a3c5e7b9d1f3a5c7e9b1d3f5a7c9e1b3d5f7a9c1e3b5d7f",
    "tx_count": 239,
    "size": 48213,
    "l1_block_number": null,
    "extra": {}
  },
  "meta": {
    "chain": "robinhood_mainnet",
    "chain_slug": "ROBINHOOD_MAINNET",
    "chain_external_id": "eip155:4663",
    "as_of_block": 72838957,
    "safe_block": 72838800,
    "finalized_block": 72838701,
    "coverage": "full",
    "refreshed_at": "2026-09-27T02:15:03Z"
  }
}
```

インデックス済みの最新ブロック（`as_of_block`）より大きい番号は `409`（`error.code: "not_indexed_yet"`）となり、`indexed_through` でインデックス済みの最大ブロックが示されます。データがまだないため、後で再試行してください。チェーンの履歴の対応範囲（`coverage.from_block`）より前のブロック番号は `422`（`error.code: "no_coverage"`）を返します。対応範囲内で `as_of_block` 以下の番号でも、有効な行がない場合（一度もインデックスされていない、または reorg によりロールバックされた場合）は `404`（`error.code: "not_found"`）となります。

**データの鮮度を確認する**（追跡している各データセットがチェーンの最新ブロックからどの程度遅れているか。ステータスページやクエリ結果を信頼する前の事前確認に役立ちます）：

**cURL**

```bash
curl -s "https://api.blockvectra.com/v1/data/robinhood_mainnet/status/freshness" \
  -H "x-api-key: $BLOCKVECTRA_API_KEY"
```


  **TypeScript**

```ts
const res = await fetch("https://api.blockvectra.com/v1/data/robinhood_mainnet/status/freshness", {
  headers: { "x-api-key": process.env.BLOCKVECTRA_API_KEY! },
});
const body = await res.json();
console.log(body);

// Run with: npx tsx example.mts
```


  **Python**

```python
import os, requests

res = requests.get(
    "https://api.blockvectra.com/v1/data/robinhood_mainnet/status/freshness",
    headers={"x-api-key": os.environ["BLOCKVECTRA_API_KEY"]},
)
print(res.json())
```


```json
{
  "data": [
    {
      "dataset": "blocks",
      "category": "raw",
      "max_block_number": 72838957,
      "max_day": null,
      "max_time": "2026-09-27T02:15:01Z",
      "seconds_behind": 0,
      "blocks_behind": null,
      "days_behind": null,
      "checked_at": "2026-09-27T02:15:07Z"
    }
  ],
  "meta": {
    "chain": "robinhood_mainnet",
    "chain_slug": "ROBINHOOD_MAINNET",
    "chain_external_id": "eip155:4663",
    "as_of_block": 72838957,
    "safe_block": 72838800,
    "finalized_block": 72838701,
    "coverage": "full",
    "refreshed_at": "2026-09-27T02:15:07Z"
  }
}
```

*（省略版：レスポンスにはデータセットごとに 1 行あり、ここでは `blocks` の行のみを表示しています。`traces` の行には `coverage_from_block`、`coverage_to_block`、`coverage_complete` も含まれます。）*

このチェーンの鮮度データが一時的に利用できない場合、部分的な結果ではなく `503`（`error.code: "unavailable"`）を返します。レスポンスには `Retry-After` ヘッダー（秒）が含まれます。少なくともその時間待ってから再試行してください。

**アドレスの ERC-20 残高を一覧表示する**（ゼロでない残高に絞り込み、トークン順に並べたスナップショット）：

**cURL**

```bash
curl -s "https://api.blockvectra.com/v1/data/robinhood_mainnet/addresses/0x1111111111111111111111111111111111111111/balances" \
  -H "x-api-key: $BLOCKVECTRA_API_KEY"
```


  **TypeScript**

```ts
const res = await fetch(
  "https://api.blockvectra.com/v1/data/robinhood_mainnet/addresses/0x1111111111111111111111111111111111111111/balances",
  { headers: { "x-api-key": process.env.BLOCKVECTRA_API_KEY! } },
);
const body = await res.json();
console.log(body);

// Run with: npx tsx example.mts
```


  **Python**

```python
import os, requests

res = requests.get(
    "https://api.blockvectra.com/v1/data/robinhood_mainnet/addresses/0x1111111111111111111111111111111111111111/balances",
    headers={"x-api-key": os.environ["BLOCKVECTRA_API_KEY"]},
)
print(res.json())
```


```json
{
  "data": [
    { "token": "0x0bd7d308f8e1639fab988df18a8011f41eacad73", "balance": "185371464119396", "symbol": "WETH", "decimals": 18 },
    { "token": "0x2295f15bd4914ae9b4685f01d52f4e6f89bf8b03", "balance": "10000000000000000", "symbol": "WNVDA", "decimals": 18 }
  ],
  "meta": {
    "chain": "robinhood_mainnet",
    "chain_slug": "ROBINHOOD_MAINNET",
    "chain_external_id": "eip155:4663",
    "as_of_block": 72838957,
    "safe_block": 72838800,
    "finalized_block": 72838701,
    "coverage": "full",
    "refreshed_at": "2026-09-27T02:10:00Z"
  }
}
```

ゼロでない残高がないアドレスでも、`data: []` とともに `200` を返し、`404` は返しません。
`?limit=`（デフォルト 50、最大 500）と返された `next_cursor` を渡して、続きのページを取得してください。

ブロック、トランザクション、アドレス、トークン、NFT、DEX、トークン化株式など、エンドポイントの全対応範囲は [API リファレンス → Data API](https://docs.blockvectra.com/en/api/data/)に記載されています。

### 関連資料

* [API リファレンス → JSON-RPC](https://docs.blockvectra.com/en/api/json-rpc/) — メソッド、CU 重み付け、エラーコード
* [JSON-RPC 完全リファレンス](https://docs.blockvectra.com/en/api/json-rpc/reference/) — 対応するすべてのメソッドの完全な仕様、パラメーター、戻り値のスキーマ
* [API リファレンス → Data API](https://docs.blockvectra.com/en/api/data/) — チェーンデータの REST エンドポイント
* [データセット](https://docs.blockvectra.com/en/datasets/) — 対応チェーン全体の派生データセット
* [ガイド](https://docs.blockvectra.com/en/guides/) — API 連携、CU 管理、マルチチェーンのワークフローに関する実践ガイド
* [対応チェーン](https://docs.blockvectra.com/en/chains/) — ネットワーク識別子とエンドポイント URL

## よくある質問

### どのチェーンに対応していますか？

9 チェーンに対応しています：Arbitrum One、Base、BNB Smart Chain、Ethereum、Ethereum Sepolia、HyperEVM、Polygon、Robinhood Chain、Robinhood Chain Testnet。一覧は GET /v1/chains に準拠し、新しいチェーンがローンチされると自動的に更新されます。リアルタイムの稼働状況は[ステータスページ](https://blockvectra.com/ja/status/)をご確認ください。 [対応チェーン一覧を見る](https://blockvectra.com/ja/chains/)

### WebSocket は対応していますか？

HTTP 経由で eth_subscribe を呼び出すと -32601 が返されます。/v1/chains で ws が true のチェーンでは、WebSocket 経由で eth_subscribe を利用できます。それ以外の場合は eth_getLogs のポーリングをご利用ください。 [対応チェーン一覧を見る](https://blockvectra.com/ja/chains/)

### 過去の状態やトレースを照会できますか？

はい、可能ですが、チェーンごとに異なります。状態履歴の保持期間は /v1/chains の state_window_blocks フィールドで示されます（null は全履歴を意味します）。トレースが利用可能かどうかは、そのチェーンの methods.allow に debug_trace 系のメソッド（debug_traceTransaction など）が含まれているかによります。単一の eth_getLogs リクエストにおける最大ブロック範囲は max_logs_block_range です。 [チェーン一覧とチェーンごとのパラメータを見る](https://blockvectra.com/ja/chains/)

### 単一の API キーをすべてのチェーンで使用できますか？

はい、使用できます。単一の API キーで、対応しているすべてのチェーンの JSON-RPC、および対応チェーンにおける Data API を利用できます。API キーはチェーン個別ではなくアカウントに紐づきます。 [複数チェーン利用ガイドを読む](https://docs.blockvectra.com/en/guides/one-key-many-chains/)
