クイックスタート
キーなしでブロック高を取得し、API keyを作成して最初の認証付きコールを送信した後、株式の活動を照会したり、過去のログを取得したり、Webhook を受信したりします。
開発者と AI エージェントは、キーなしで公開 RPC を試してから、キーを作成して利用を続けられます。
1. キーなしでブロック高を取得する
アカウントを作成したり API keyを指定したりせずに、サンプルのチェーン robinhood_mainnet の公開 JSON-RPC エンドポイントを呼び出します:
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 エンドポイントを参照してください。
2. API keyを作成する
コンソールにアクセスし、GitHub、Google、または Ethereum ウォレットでログインして(初回ログイン時にアカウントが作成されます)、API keyを作成します。シークレットは一度だけ表示されます。安全に保管し、環境変数 BLOCKVECTRA_API_KEY として設定してください。クライアント側のブラウザコードには含めないでください。新規アカウントは登録時に 30,000,000 CU を受け取れます。クレジットカードは不要です。
No API key yet?
Ethereum ウォレットをお持ちの場合:プログラムによる登録ガイドに従い、ブラウザを使わずに Ethereum ウォレットの署名で登録し、API keyを作成してください。ウォレットをお持ちでない場合:ユーザーに console.blockvectra.com でログインし、キーを作成して環境変数 BLOCKVECTRA_API_KEY として設定するよう依頼してください。チャットにキーを貼り付けるようユーザーに求めないでください。
3. 最初の認証付きコールを送信する
x-api-key ヘッダーを使用して、同じチェーンのブロック高を取得します。URL はチェーン名で終わり、末尾にスラッシュは付けません:
: "${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 リファレンス、現在の料金は料金を参照してください。新しいキーは約 5 秒で有効になります。invalid_api_key が返された場合は、少し待ってから再試行してください。その他のエラーについては、以下のよくあるエラーを参照してください。
4. 業務タスクに進む
リファレンス
API keyと残高
完全なスターターテンプレート:blockvectra/agent-quickstart
すべてのキーは rgw_ に続く 64 文字の 16 進数で構成されます。例えば
rgw_1f2e...(省略)です。秘密にしておいてください。キーを持つ人は誰でも残高を使用できます。
残高が不足している場合、サーバーは HTTP 402 を返します(JSON-RPC エラーコード -32020、Data API の error.code は insufficient_balance)。コンソールの請求ページで残高とチャージ方法を確認してください。
API key なしで試す
アカウントの作成や API key の指定なしで、公開 JSON-RPC エンドポイントをすぐに呼び出せます。
# 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":[]}'以下の例のエンドポイントには IP ごとのレート制限があります(3 req/s、バースト上限 20、バッチ上限 10)。上限を超えたリクエストは HTTP 429 を返し、reason は public_rate_limit または public_pool_busy です(Retry-After ヘッダー付き)。非対応のメソッドは JSON-RPC エラー -32601 (method_not_public) を返します。
チェーン別の公開エンドポイント
- 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は不要で、課金されません。
サービスとチェーンの稼働状況を確認する
curl https://api.blockvectra.com/v1/status確認時刻 checked_at、サービスの稼働状況 gateway.status、および各対応チェーンのノードの同期進捗 sync、最新ブロック高と遅延 head を返します:
{
"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
}
}
]
}対応チェーンとメソッドポリシーを照会する
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 を返します:
{
"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 リクエストはルートの先頭にチェーン名を付けます。現在利用できるチェーンとその識別子については、対応チェーンを参照してください。
| チェーン | {chain} | Chain ID | Tracing | 公開エンドポイント | WebSocket | Data API | API キーで利用できるメソッド数 | Webhook プッシュ | トランザクション送信 | トランザクション送信(key 不要の公開エンドポイント) | 状態履歴ウィンドウ | eth_getLogs 最大ブロック範囲 | Data API データセット | 関連テストネット | 関連ガイド |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| arb_mainnet RPC および Data API | arb_mainnet | 42161 | ✓ | https://api.blockvectra.com/v1/arb_mainnet/public | 非対応 | 利用可能 | 43 | 対応 · 確認数 1–1(デフォルト 1) Webhook プッシュガイド | 対応 | 対応 | 直近 6,000 ブロックの過去状態 | 1,000 ブロック | ブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、データ鮮度 | 不明 | 不明 |
| base_mainnet RPC および Data API | base_mainnet | 8453 | — | https://api.blockvectra.com/v1/base_mainnet/public | 非対応 | 利用可能 | 39 | 対応 · 確認数 1–1(デフォルト 1) Webhook プッシュガイド | 対応 | 対応 | 直近 10,000 ブロックの過去状態 | 1,000 ブロック | ブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、データ鮮度 | 不明 | Base |
| bsc_mainnet RPC および Data API | bsc_mainnet | 56 | — | https://api.blockvectra.com/v1/bsc_mainnet/public | 非対応 | 利用可能 | 25 | 対応 · 確認数 1–1(デフォルト 1) Webhook プッシュガイド | 対応 | 対応 | 直近 100 ブロックの過去状態 | 1,000 ブロック | ブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、データ鮮度 | 不明 | 不明 |
| Ethereum RPC および Data API | eth_mainnet | 1 | ✓ | https://api.blockvectra.com/v1/eth_mainnet/public | 非対応 | 利用可能 | 38 | 対応 · 確認数 1–1(デフォルト 1) Webhook プッシュガイド | 対応 | 対応 | 直近 250,000 ブロックの過去状態 | 1,000 ブロック | ブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、データ鮮度 | 不明 | 不明 |
| eth_sepolia RPC および Data API | eth_sepolia | 11155111 | — | https://api.blockvectra.com/v1/eth_sepolia/public | 非対応 | 利用可能 | 29 | 対応 · 確認数 1–1(デフォルト 1) Webhook プッシュガイド | 対応 | 対応 | 不明 | 1,000 ブロック | ブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、データ鮮度 | 不明 | 不明 |
| HyperEVM RPC および Data API | hyperevm_mainnet | 999 | — | https://api.blockvectra.com/v1/hyperevm_mainnet/public | 非対応 | 利用可能 | 24 | 対応 · 確認数 1–1(デフォルト 1) Webhook プッシュガイド | 非対応 | 非対応 | 不明 | 1,000 ブロック | ブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、残高、保有者、NFT、データ鮮度 | 不明 | HyperEVM backfill and polling |
| polygon_mainnet RPC および Data API | polygon_mainnet | 137 | ✓ | https://api.blockvectra.com/v1/polygon_mainnet/public | 非対応 | 利用可能 | 43 | 対応 · 確認数 1–1(デフォルト 1) Webhook プッシュガイド | 対応 | 対応 | 直近 126 ブロックの過去状態 | 1,000 ブロック | ブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、データ鮮度 | 不明 | 不明 |
| Robinhood Chain RPC および Data API | robinhood_mainnet | 4663 | ✓ | https://api.blockvectra.com/v1/robinhood_mainnet/public | 対応 (newHeads, logs) | 利用可能 | 43 | 対応 · 確認数 1–1(デフォルト 1) Webhook プッシュガイド | 対応 | 対応 | 直近 900 ブロックの過去状態 | 1,000 ブロック | ブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、残高、保有者、NFT、DEX スワップ、DEX 価格、トークン化株式、トレース、データ鮮度 | 不明 | Robinhood Chain Stock token multiplier Tokenized stocks |
| robinhood_testnet RPC | robinhood_testnet | 46630 | ✓ | https://api.blockvectra.com/v1/robinhood_testnet/public | 対応 (newHeads, logs) | まだ利用できません | 43 | 対応 · 確認数 1–1(デフォルト 1) Webhook プッシュガイド | 対応 | 対応 | 直近 1,023 ブロックの過去状態 | 1,000 ブロック | 非対応 | 不明 | Testnet faucet Robinhood Chain Testnet starter |
API キー取得後の次のステップ
arb_mainnet
eth_getLogs
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_getLogsData API
curl -fsS 'https://api.blockvectra.com/v1/data/arb_mainnet/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"Data APIWebhook サブスクリプションを作成 · Webhook サブスクリプションを作成 · 使用量と CU · チャージ
base_mainnet
eth_getLogs
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_getLogsData API
curl -fsS 'https://api.blockvectra.com/v1/data/base_mainnet/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"Data APIWebhook サブスクリプションを作成 · Webhook サブスクリプションを作成 · 使用量と CU · チャージ
bsc_mainnet
eth_getLogs
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_getLogsData API
curl -fsS 'https://api.blockvectra.com/v1/data/bsc_mainnet/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"Data APIWebhook サブスクリプションを作成 · Webhook サブスクリプションを作成 · 使用量と CU · チャージ
Ethereum
eth_getLogs
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_getLogsData API
curl -fsS 'https://api.blockvectra.com/v1/data/eth_mainnet/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"Data APIWebhook サブスクリプションを作成 · Webhook サブスクリプションを作成 · 使用量と CU · チャージ
eth_sepolia
eth_getLogs
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_getLogsData API
curl -fsS 'https://api.blockvectra.com/v1/data/eth_sepolia/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"Data APIWebhook サブスクリプションを作成 · Webhook サブスクリプションを作成 · 使用量と CU · チャージ
HyperEVM
eth_getLogs
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_getLogsData API
curl -fsS 'https://api.blockvectra.com/v1/data/hyperevm_mainnet/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"Data APIWebhook サブスクリプションを作成 · Webhook サブスクリプションを作成 · 使用量と CU · チャージ
polygon_mainnet
eth_getLogs
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_getLogsData API
curl -fsS 'https://api.blockvectra.com/v1/data/polygon_mainnet/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"Data APIWebhook サブスクリプションを作成 · Webhook サブスクリプションを作成 · 使用量と CU · チャージ
Robinhood Chain
eth_getLogs
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_getLogsData API
curl -fsS 'https://api.blockvectra.com/v1/data/robinhood_mainnet/status/freshness' -H "x-api-key: $BLOCKVECTRA_API_KEY"Data APIWebSocket
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'WebSocketWebhook サブスクリプションを作成 · Webhook サブスクリプションを作成 · 使用量と CU · チャージ
robinhood_testnet
eth_getLogs
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_getLogsWebSocket
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'WebSocketWebhook サブスクリプションを作成 · Webhook サブスクリプションを作成 · 使用量と CU · チャージ
HyperEVM
HyperEVM のブロックには HyperCore システムトランザクション(送信元アドレス 0x2222…2222 または 0x20…、gasPrice 0)が含まれます。
このチェーンではまだトランザクションの送信に対応していません(eth_sendRawTransaction は -32601 method_not_allowed を返します)。読み取りメソッドは通常どおり利用できます。
このページのすべての例では 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 の購読は対応チェーンにチェーンごとに記載されています。API は Access-Control-Allow-Origin: * を返しますが、API keyは秘密にしておき、クライアント側のブラウザコードではなくバックエンドサービスからリクエストを送信してください。
キーは次の 3 通りの方法で渡せます:URL パス(POST /v1/{chain}/{api_key}。パス内のキーだけを使用し、両方のヘッダーを無視します)、x-api-key ヘッダー、または Authorization: Bearer <api_key> ヘッダーです。
URL パスにキーを指定する
: "${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":[]}'リクエストヘッダーにキーを指定する
: "${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":[]}'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 -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"]}
]'レスポンスは、リクエストと同じ順序の配列で返され、id で対応付けられます。
残高不足、レート制限、バースト容量、またはバッチサイズの超過によりサーバーがバッチ全体を拒否した場合(以下のよくあるエラーを参照)、配列ではなく単一の 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 が次の期間に繰り越されます。 現在の料金は料金を参照してください。
メソッドごとの重み付け一覧とエラーコードは、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を参照) | HTTP 200、JSON-RPC コード -32000 | リクエストを変更する(ハッシュやブロック番号を確認してください。トレースのハッシュ形式が不正な場合は、トランザクションが見つからないというエラーになります) |
トレーサーが許可されていない、またはトレースのタイムアウトが許可されていない(debug_trace コール) | HTTP 200、JSON-RPC コード -32602、課金なし | 許可されたネイティブトレーサー(callTracer、flatCallTracer、prestateTracer、4byteTracer、noopTracer、または省略)を使用し、タイムアウトを 30s 以下にする |
| チェーンのメソッド一覧で許可されていないメソッド(対応チェーンを参照) | HTTP 200、JSON-RPC コード -32601、課金なし | チェーンで許可されているメソッドのみを呼び出す |
| JSON ボディの形式が不正 | HTTP 200、JSON-RPC コード -32700、課金なし | リクエストの JSON 構文を修正する |
| 1 バッチに 100 コールを超えて含めている | HTTP 200、JSON-RPC コード -32600(batch too large)、課金なし | バッチを最大 100 コールに分割する |
上記の拒否には課金されません。受け付けられ、レスポンスを得たすべてのコールには、公開されているメソッドの CU 重み付けに基づいて課金されます。課金されないケースはエラーコード表に記載されています(エラーコードの 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 -s "https://api.blockvectra.com/v1/data/robinhood_mainnet/blocks/72838701" \
-H "x-api-key: $BLOCKVECTRA_API_KEY"{
"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 -s "https://api.blockvectra.com/v1/data/robinhood_mainnet/status/freshness" \
-H "x-api-key: $BLOCKVECTRA_API_KEY"{
"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 -s "https://api.blockvectra.com/v1/data/robinhood_mainnet/addresses/0x1111111111111111111111111111111111111111/balances" \
-H "x-api-key: $BLOCKVECTRA_API_KEY"{
"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に記載されています。
関連資料
- API リファレンス → JSON-RPC — メソッド、CU 重み付け、エラーコード
- JSON-RPC 完全リファレンス — 対応するすべてのメソッドの完全な仕様、パラメーター、戻り値のスキーマ
- API リファレンス → Data API — チェーンデータの REST エンドポイント
- データセット — 対応チェーン全体の派生データセット
- ガイド — API 連携、CU 管理、マルチチェーンのワークフローに関する実践ガイド
- 対応チェーン — ネットワーク識別子とエンドポイント URL
よくある質問
どのチェーンに対応していますか?
9 チェーンに対応しています:Arbitrum One、Base、BNB Smart Chain、Ethereum、Ethereum Sepolia、HyperEVM、Polygon、Robinhood Chain、Robinhood Chain Testnet。一覧は GET /v1/chains に準拠し、新しいチェーンがローンチされると自動的に更新されます。リアルタイムの稼働状況はステータスページをご確認ください。 対応チェーン一覧を見る →
WebSocket は対応していますか?
HTTP 経由で eth_subscribe を呼び出すと -32601 が返されます。/v1/chains で ws が true のチェーンでは、WebSocket 経由で eth_subscribe を利用できます。それ以外の場合は eth_getLogs のポーリングをご利用ください。 対応チェーン一覧を見る →
過去の状態やトレースを照会できますか?
はい、可能ですが、チェーンごとに異なります。状態履歴の保持期間は /v1/chains の state_window_blocks フィールドで示されます(null は全履歴を意味します)。トレースが利用可能かどうかは、そのチェーンの methods.allow に debug_trace 系のメソッド(debug_traceTransaction など)が含まれているかによります。単一の eth_getLogs リクエストにおける最大ブロック範囲は max_logs_block_range です。 チェーン一覧とチェーンごとのパラメータを見る →
単一の API キーをすべてのチェーンで使用できますか?
はい、使用できます。単一の API キーで、対応しているすべてのチェーンの JSON-RPC、および対応チェーンにおける Data API を利用できます。API キーはチェーン個別ではなくアカウントに紐づきます。 複数チェーン利用ガイドを読む →
最終更新: