快速入門
先免 key 讀取區塊高度,再建立 API key 並行出首個認證請求,繼續查詢代幣化股票活動、回填日誌或接收 Webhook。
開發者與 AI Agent 都可以先呼叫免 key 公開 RPC,再建立 key 繼續使用。
1. 免 key 讀取區塊高度
無需註冊帳號或建立 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 是十六進位區塊高度,每次呼叫可能不同。若傳回 error,查看錯誤碼與原因。公開方法、歷史範圍與按 IP 限額見免費公開 RPC 節點。
2. 建立 API key
前往控制台,用 GitHub、Google 或以太坊錢包登入(首次登入自動開戶),然後建立 API key。建立時 secret 只顯示一次,請立即妥善儲存,並設定為環境變量 BLOCKVECTRA_API_KEY。不要把 key 放進瀏覽器前端程式碼。新帳戶註冊即得 30,000,000 CU,無需信用卡。
還沒有 API key?
如果有以太坊錢包:可參考程式化開戶指南透過以太坊錢包簽名自主開戶建 key,無需瀏覽器。如果沒有錢包:請用戶登入 console.blockvectra.com 建一個 key,並設定為環境變量 BLOCKVECTRA_API_KEY。不要讓用戶把 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 仍是十六進位區塊高度。此請求按 CU 計費;方法權重與錯誤碼見 JSON-RPC 參考,目前價格見定價。新建 key 約 5 秒後生效;若收到 invalid_api_key,稍等重試。其他失敗見下方常見錯誤。
4. 繼續完成業務任務
參考
API key 與餘額
完整模板倉庫:blockvectra/agent-quickstart
key 的樣子是 rgw_ 加 64 位十六進位字元,例如 rgw_1f2e...(已截斷)。請保管好,
拿到 key 的任何人都能消耗你的餘額。
餘額不足時伺服器端傳回 HTTP 402(JSON-RPC 錯誤碼為 -32020;Data API 為 error.code insufficient_balance),去控制台帳單頁查看餘額與儲值方式。
免註冊先試
無需註冊帳號或建立 API key,即可直接呼叫公開 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":[]}'
# 或使用環境變數回退寫法(未設定 BLOCKVECTRA_API_KEY 時自動回退至 public):
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 限制呼叫速率(每 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)
下面兩個公開元資料端點可查看服務狀態與各鏈設定,免鑑權、不計費。
檢查服務與各鏈健康狀態
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)、日誌單次查詢區間上限 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 | 帶 key 方法數 | 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 個區塊 | 區塊、交易、地址交易、轉帳、代幣中繼資料、資料新鮮度 | 未知 | 未知 |
| 以太坊 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 回填与轮询 |
| 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 價格、代幣化股票、Trace、資料新鮮度 | 未知 | Robinhood Chain 股票代币乘数与指标 代币化股票指标 |
| 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 個區塊 | 不支援 | 未知 | 测试网水龙头 Robinhood Chain 测试网入门 |
拿到 key 之後
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 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_getLogsData 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_getLogsData 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 · 儲值
以太坊
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 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_getLogsData 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_getLogsData 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_getLogsData 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_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'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_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'WebSocket建立 Webhook 訂閱 · 建立 Webhook 訂閱 · 用量與 CU · 儲值
HyperEVM
HyperEVM 的區塊包含 HyperCore 系統交易(傳送方地址為 0x2222…2222 或 0x20…,gasPrice 為 0)。
該鏈暫不支援傳送交易(eth_sendRawTransaction 傳回 -32601 method_not_allowed),讀取方法正常。
本頁所有範例均使用 robinhood_mainnet。
提示:先在上表中選擇支援範例所需服務、方法與歷史視窗的鏈,再把範例 URL 中的
robinhood_mainnet換成它的{chain}。同一個 API key 適用於所有支援的鏈。
其他認證方式與語言範例
JSON-RPC 端點按鏈區分:POST /v1/{chain}/{api_key}(key 放在路徑中),或 POST /v1/{chain}(key 放在 x-api-key 請求標頭中)。{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,端點設計為由後端服務呼叫,而非在瀏覽器前端程式碼中直接暴露 key。
key 有三種傳法:放在 URL 路徑中(POST /v1/{chain}/{api_key},只使用路徑中的 key,忽略兩個請求標頭)、放在 x-api-key 請求標頭中,或放在 Authorization: Bearer <api_key> 請求標頭中。
key 放在 URL 路徑中
: "${BLOCKVECTRA_API_KEY:?先設定 BLOCKVECTRA_API_KEY}"
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":[]}'key 放在請求標頭中
: "${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":[]}'不要加結尾斜槓
用請求標頭傳 key 時,請按上面的寫法原樣呼叫 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。路徑傳法忽略兩個請求標頭。
批次呼叫
傳一個陣列即可在一次請求裡發起多個呼叫(單批最多 100 個)。注意每個 API key 都有一個 CU 權杖桶(cu_per_sec 補充速率、burst_cu 突發容量——預設 400 CU/s、突發 1,600 CU;在控制台 Keys 表按 key 顯示);單個請求(包括整批 JSON-RPC 批次呼叫)若總 CU 超過該 key 的突發容量,即使未達到 100 個呼叫的上限也會被拒絕並傳回 -32022 request_exceeds_burst;需拆分為較小的批次。下面這個範例在一次往返裡
同時讀取鏈 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 計量
每個被計費的呼叫都會消耗一定的 CU(Compute Unit):便宜的呼叫比如 eth_blockNumber、
eth_chainId 最便宜;常見讀取比如 eth_getBlockByNumber 稍貴;較重的呼叫比如
eth_call、eth_getLogs 更貴;執行跟蹤方法(如 debug_traceTransaction)最貴。
結算按帳戶、按小時週期彙總扣費,無條件捨去為整數計費單位(1 計費單位 = 1,000 CU),未滿 1 單位的餘數結轉到下一期(跨期合計扣費為 floor(累計 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,空 body | 在 URL 中補全鏈名(/v1/{chain}) |
| API key 缺失、未知或被禁用 | HTTP 401,JSON-RPC 錯誤碼 -32024(missing_api_key 或 invalid_api_key) | 使用有效且處於生效中的 API key(剛新建或輪換的 key 約 5 秒內在所有實例生效;這期間可能傳回 401 invalid_api_key,或計費狀態暫未確認時傳回 503 -32021(帶 Retry-After),稍等重試即可) |
| 餘額為零或為負 | HTTP 402,JSON-RPC 錯誤碼 -32020 | 儲值或等待免費額度週期補足 |
| 請求過於頻繁(超出限流或伺服器端臨時過載) | HTTP 429(或 200),JSON-RPC 錯誤碼 -32005 | 稍後重試(若回應標頭帶 Retry-After 請按其等待) |
單個請求或整批呼叫的 CU 超過 key 突發容量(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,不計費 | 改查較新的區塊 |
| 交易或區塊未找到,或回應過大;以太坊上超出近期視窗的區塊 / 收據 / 日誌查詢亦傳回 -32000 "old data not available due to pruning"(不計費,見支援的鏈 → 以太坊) | HTTP 200,JSON-RPC 錯誤碼 -32000 | 修改請求(核對交易哈希或區塊號;格式不合法的 trace 哈希同樣傳回交易未找到) |
使用了不支援的 tracer 或超時參數(debug_trace 系列呼叫) | HTTP 200,JSON-RPC 錯誤碼 -32602,不計費 | 改用內建原生 tracer(callTracer、flatCallTracer、prestateTracer、4byteTracer、noopTracer,或預設)且超時時間 ≤ 30s |
| 呼叫了該鏈方法表不允許的方法(見支援的鏈) | HTTP 200,JSON-RPC 錯誤碼 -32601,不計費 | 僅呼叫該鏈允許的方法 |
| 請求主體不是合法 JSON | HTTP 200,JSON-RPC 錯誤碼 -32700,不計費 | 修正 JSON 請求主體語法 |
| 單批呼叫數超過 100 | HTTP 200,JSON-RPC 錯誤碼 -32600(batch too large),不計費 | 拆分為不超過 100 個呼叫的批次 |
以上這些拒絕一律不計費;每個被受理並得到應答的呼叫按公布的 CU 權重計費,不計費的情況見錯誤碼錶的「是否計費」列。
呼叫 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)。請求按 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(已索引到的最高區塊);鏈未知或暫未公開時傳回 HTTP 404,error.code 為 not_found(不計費;鏈名必須為全小寫 slug);API key 缺失、未知或被禁用時傳回 HTTP 401,error.code 為 missing_api_key 或 invalid_api_key。超出限流時傳回 HTTP 429(error.code 為 rate_limited,data.reason 為 key_rate_limit),餘額耗盡時傳回 HTTP 402(error.code 為 insufficient_balance),兩者均不計費。超過 2^53 的數值(餘額、代幣數量)一律是十進位字串,不是 JSON 數字。
按區塊號查區塊:
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"
}
}(範例已精簡:實際回應每個資料集一行,這裡只列出 blocks 這一行;traces 行還會額外帶 coverage_from_block、coverage_to_block、coverage_complete。)
如果該鏈的新鮮度資料暫時不可用,會傳回 503(error.code: "unavailable"),而不是傳回不完整的結果;回應標頭帶 Retry-After(秒)——請至少等待該時長後重試。
查詢某地址的 ERC-20 餘額(快照,只保留非零餘額,按 token 排序):
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"
}
}沒有任何非零餘額的地址仍會傳回 200 + data: []——不會是 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 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。 檢視支援的鏈列表 →
能查歷史狀態和 trace 嗎?
可以,但因鏈而異。歷史狀態保留範圍以 /v1/chains 的 state_window_blocks 欄位為準(null 表示全歷史);trace 是否開放看該鏈 methods.allow 是否包含 debug_trace 系列方法(如 debug_traceTransaction);單次 eth_getLogs 的區塊跨度上限是 max_logs_block_range。 檢視鏈目錄與逐鏈參數 →
一個 key 能用於所有鏈嗎?
可以。同一個 API key 適用於所有支援鏈的 JSON-RPC,並在已開放的鏈上呼叫 Data API;key 屬於帳戶,不綁定特定鏈。 檢視「一個 key 切鏈」指南 →
最後更新: