クイックスタート

キーなしでブロック高を取得し、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 IDTracing公開エンドポイントWebSocketData APIAPI キーで利用できるメソッド数Webhook プッシュトランザクション送信トランザクション送信(key 不要の公開エンドポイント)状態履歴ウィンドウeth_getLogs 最大ブロック範囲Data API データセット関連テストネット関連ガイド
arb_mainnet RPC および Data APIarb_mainnet42161✓https://api.blockvectra.com/v1/arb_mainnet/public非対応利用可能43対応 · 確認数 1–1(デフォルト 1)
Webhook プッシュガイド
対応対応直近 6,000 ブロックの過去状態1,000 ブロックブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、データ鮮度不明不明
base_mainnet RPC および Data APIbase_mainnet8453—https://api.blockvectra.com/v1/base_mainnet/public非対応利用可能39対応 · 確認数 1–1(デフォルト 1)
Webhook プッシュガイド
対応対応直近 10,000 ブロックの過去状態1,000 ブロックブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、データ鮮度不明Base
bsc_mainnet RPC および Data APIbsc_mainnet56—https://api.blockvectra.com/v1/bsc_mainnet/public非対応利用可能25対応 · 確認数 1–1(デフォルト 1)
Webhook プッシュガイド
対応対応直近 100 ブロックの過去状態1,000 ブロックブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、データ鮮度不明不明
Ethereum RPC および Data APIeth_mainnet1✓https://api.blockvectra.com/v1/eth_mainnet/public非対応利用可能38対応 · 確認数 1–1(デフォルト 1)
Webhook プッシュガイド
対応対応直近 250,000 ブロックの過去状態1,000 ブロックブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、データ鮮度不明不明
eth_sepolia RPC および Data APIeth_sepolia11155111—https://api.blockvectra.com/v1/eth_sepolia/public非対応利用可能29対応 · 確認数 1–1(デフォルト 1)
Webhook プッシュガイド
対応対応不明1,000 ブロックブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、データ鮮度不明不明
HyperEVM RPC および Data APIhyperevm_mainnet999—https://api.blockvectra.com/v1/hyperevm_mainnet/public非対応利用可能24対応 · 確認数 1–1(デフォルト 1)
Webhook プッシュガイド
非対応非対応不明1,000 ブロックブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、残高、保有者、NFT、データ鮮度不明HyperEVM backfill and polling
polygon_mainnet RPC および Data APIpolygon_mainnet137✓https://api.blockvectra.com/v1/polygon_mainnet/public非対応利用可能43対応 · 確認数 1–1(デフォルト 1)
Webhook プッシュガイド
対応対応直近 126 ブロックの過去状態1,000 ブロックブロック、トランザクション、アドレスのトランザクション、転送履歴、トークンメタデータ、データ鮮度不明不明
Robinhood Chain RPC および Data APIrobinhood_mainnet4663✓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 RPCrobinhood_testnet46630✓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_getLogs

Data API

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

Webhook サブスクリプションを作成 · 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_getLogs

Data API

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

Webhook サブスクリプションを作成 · 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_getLogs

Data API

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

Webhook サブスクリプションを作成 · 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_getLogs

Data API

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

Webhook サブスクリプションを作成 · 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_getLogs

Data API

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

Webhook サブスクリプションを作成 · 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_getLogs

Data API

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

Webhook サブスクリプションを作成 · 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_getLogs

Data API

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

Webhook サブスクリプションを作成 · 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_getLogs

Data API

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

WebSocket

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

Webhook サブスクリプションを作成 · 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_getLogs

WebSocket

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

Webhook サブスクリプションを作成 · 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に記載されています。

関連資料

よくある質問

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

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 キーはチェーン個別ではなくアカウントに紐づきます。 複数チェーン利用ガイドを読む →

最終更新:

このページの目次