Início rápido
Consulte a altura de bloco sem API key, crie uma API key, envie sua primeira chamada autenticada e consulte ações, recupere logs históricos ou receba Webhooks.
Desenvolvedores e agentes de IA podem testar o RPC público sem API key e, depois, criar uma API key para continuar.
1. Consultar a altura de bloco sem API key
Chame o endpoint JSON-RPC público da rede de exemplo robinhood_mainnet sem criar uma conta nem fornecer uma API key:
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":[]}'O id: 1 da resposta corresponde a esta requisição; result é uma altura de bloco hexadecimal e pode mudar entre chamadas. Se a resposta contiver error, verifique seu código e motivo. Consulte os endpoints RPC públicos gratuitos para métodos públicos, intervalos históricos e limites por IP.
2. Criar uma API key
Acesse o console, entre com GitHub, Google ou uma carteira Ethereum (sua conta é criada no primeiro login) e crie uma API key. O segredo é exibido apenas uma vez: armazene-o com segurança e defina-o na variável de ambiente BLOCKVECTRA_API_KEY. Não o inclua em código executado no navegador do cliente. Novas contas recebem 30,000,000 CU no cadastro — sem cartão de crédito.
No API key yet?
Se você tem uma carteira Ethereum: siga o guia de cadastro programático para se cadastrar e criar uma API key com uma assinatura da carteira Ethereum, sem navegador. Se não tem uma carteira: peça ao usuário que entre em console.blockvectra.com, crie uma API key e a defina na variável de ambiente BLOCKVECTRA_API_KEY. Não peça ao usuário que cole a API key no chat.
3. Enviar sua primeira chamada autenticada
Consulte a altura de bloco da mesma rede com o cabeçalho x-api-key. A URL termina com o nome da rede, sem barra final:
: "${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 é novamente uma altura de bloco hexadecimal. Esta requisição consome CU; consulte a referência JSON-RPC para pesos dos métodos e códigos de erro e Preços para os preços atuais. Uma API key nova entra em vigor em cerca de 5 segundos; se receber invalid_api_key, aguarde um momento e tente novamente. Consulte Erros comuns abaixo para outras falhas.
4. Continuar com uma tarefa de negócio
- Consultar a atividade de ações tokenizadas on-chain na Robinhood Chain
- Recuperar logs históricos da HyperEVM em partes
- Receber atividade de carteiras e transferências de tokens com Webhooks
Referência
API keys e saldo
Template inicial completo: blockvectra/agent-quickstart
Toda API key tem o prefixo rgw_ seguido de 64 caracteres hexadecimais, por exemplo
rgw_1f2e... (abreviado). Mantenha-a em segredo — qualquer pessoa com a API key pode gastar seu saldo.
Quando seu saldo é insuficiente, o servidor retorna HTTP 402 (código de erro JSON-RPC -32020; Data API error.code insufficient_balance). Acesse a página de cobrança do console para verificar seu saldo e os métodos de recarga.
Teste sem API key
Você pode chamar o endpoint JSON-RPC público imediatamente sem criar uma conta nem fornecer uma API key.
# 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":[]}'O endpoint do exemplo abaixo tem limite de taxa por IP (3 req/s, burst 20, máximo de 10 chamadas por lote). Requisições que ultrapassam os limites retornam HTTP 429 com o motivo public_rate_limit ou public_pool_busy (com um cabeçalho Retry-After); métodos não compatíveis retornam o erro JSON-RPC -32601 (method_not_public).
Endpoints públicos por rede
- Arbitrum One:
https://api.blockvectra.com/v1/arb_mainnet/public— Ler e transmitir transações assinadas (eth_sendRawTransaction) - Base:
https://api.blockvectra.com/v1/base_mainnet/public— Ler e transmitir transações assinadas (eth_sendRawTransaction) - BNB Smart Chain:
https://api.blockvectra.com/v1/bsc_mainnet/public— Ler e transmitir transações assinadas (eth_sendRawTransaction) - Ethereum:
https://api.blockvectra.com/v1/eth_mainnet/public— Ler e transmitir transações assinadas (eth_sendRawTransaction) - Ethereum Sepolia:
https://api.blockvectra.com/v1/eth_sepolia/public— Ler e transmitir transações assinadas (eth_sendRawTransaction) - HyperEVM:
https://api.blockvectra.com/v1/hyperevm_mainnet/public— Somente leitura - Polygon:
https://api.blockvectra.com/v1/polygon_mainnet/public— Ler e transmitir transações assinadas (eth_sendRawTransaction) - Robinhood Chain:
https://api.blockvectra.com/v1/robinhood_mainnet/public— Ler e transmitir transações assinadas (eth_sendRawTransaction) - Robinhood Chain Testnet:
https://api.blockvectra.com/v1/robinhood_testnet/public— Ler e transmitir transações assinadas (eth_sendRawTransaction)
Os dois endpoints públicos de metadados abaixo mostram o status do serviço e a configuração de cada rede; não exigem API key e não são cobrados.
Verificar o status do serviço e das redes
curl https://api.blockvectra.com/v1/statusRetorna o horário da verificação checked_at, o status operacional do serviço gateway.status e, para cada rede compatível, o progresso de sincronização do nó sync, a altura do bloco mais recente e a latência 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
}
}
]
}Consultar redes compatíveis e políticas de métodos
curl https://api.blockvectra.com/v1/chainsRetorna o chain_id de cada rede compatível, indicadores de recursos para JSON-RPC, Data API e WebSocket, políticas de métodos permitidos e negados (methods.allow e methods.deny), limite do intervalo de blocos por consulta de logs max_logs_block_range e janela de estado histórico 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": {}
}
]
}Escolher uma rede
Todo endpoint BlockVectra é específico de uma rede: requisições JSON-RPC levam o nome da rede {chain} no caminho da URL, e requisições Data API usam esse nome como prefixo da rota. Consulte Redes compatíveis para as redes atualmente disponíveis e seus identificadores.
| Rede | {chain} | Chain ID | Tracing | Endpoint público | WebSocket | Data API | Métodos com chave API | Notificações Webhook | Enviar transações | Enviar transações (endpoint público sem key) | Janela de histórico de estado | Intervalo máximo de blocos para eth_getLogs | Conjuntos de dados da Data API | Redes de teste relacionadas | Guias relacionados |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| RPC e Data API de arb_mainnet | arb_mainnet | 42161 | ✓ | https://api.blockvectra.com/v1/arb_mainnet/public | Não compatível | Disponível | 43 | Compatível · Confirmações 1–1 (padrão 1) Guia de notificações Webhook | Compatível | Compatível | Estado histórico para os 6,000 blocos mais recentes | 1,000 blocos | Blocos, Transações, Transações de endereços, Transferências, Metadados de tokens, Atualidade dos dados | Desconhecida | Desconhecida |
| RPC e Data API de base_mainnet | base_mainnet | 8453 | — | https://api.blockvectra.com/v1/base_mainnet/public | Não compatível | Disponível | 39 | Compatível · Confirmações 1–1 (padrão 1) Guia de notificações Webhook | Compatível | Compatível | Estado histórico para os 10,000 blocos mais recentes | 1,000 blocos | Blocos, Transações, Transações de endereços, Transferências, Metadados de tokens, Atualidade dos dados | Desconhecida | Base |
| RPC e Data API de bsc_mainnet | bsc_mainnet | 56 | — | https://api.blockvectra.com/v1/bsc_mainnet/public | Não compatível | Disponível | 25 | Compatível · Confirmações 1–1 (padrão 1) Guia de notificações Webhook | Compatível | Compatível | Estado histórico para os 100 blocos mais recentes | 1,000 blocos | Blocos, Transações, Transações de endereços, Transferências, Metadados de tokens, Atualidade dos dados | Desconhecida | Desconhecida |
| RPC e Data API de Ethereum | eth_mainnet | 1 | ✓ | https://api.blockvectra.com/v1/eth_mainnet/public | Não compatível | Disponível | 38 | Compatível · Confirmações 1–1 (padrão 1) Guia de notificações Webhook | Compatível | Compatível | Estado histórico para os 250,000 blocos mais recentes | 1,000 blocos | Blocos, Transações, Transações de endereços, Transferências, Metadados de tokens, Atualidade dos dados | Desconhecida | Desconhecida |
| RPC e Data API de eth_sepolia | eth_sepolia | 11155111 | — | https://api.blockvectra.com/v1/eth_sepolia/public | Não compatível | Disponível | 29 | Compatível · Confirmações 1–1 (padrão 1) Guia de notificações Webhook | Compatível | Compatível | Desconhecida | 1,000 blocos | Blocos, Transações, Transações de endereços, Transferências, Metadados de tokens, Atualidade dos dados | Desconhecida | Desconhecida |
| RPC e Data API de HyperEVM | hyperevm_mainnet | 999 | — | https://api.blockvectra.com/v1/hyperevm_mainnet/public | Não compatível | Disponível | 24 | Compatível · Confirmações 1–1 (padrão 1) Guia de notificações Webhook | Não compatível | Não compatível | Desconhecida | 1,000 blocos | Blocos, Transações, Transações de endereços, Transferências, Metadados de tokens, Saldos, Detentores, NFT, Atualidade dos dados | Desconhecida | HyperEVM backfill and polling |
| RPC e Data API de polygon_mainnet | polygon_mainnet | 137 | ✓ | https://api.blockvectra.com/v1/polygon_mainnet/public | Não compatível | Disponível | 43 | Compatível · Confirmações 1–1 (padrão 1) Guia de notificações Webhook | Compatível | Compatível | Estado histórico para os 126 blocos mais recentes | 1,000 blocos | Blocos, Transações, Transações de endereços, Transferências, Metadados de tokens, Atualidade dos dados | Desconhecida | Desconhecida |
| RPC e Data API de Robinhood Chain | robinhood_mainnet | 4663 | ✓ | https://api.blockvectra.com/v1/robinhood_mainnet/public | Compatível (newHeads, logs) | Disponível | 43 | Compatível · Confirmações 1–1 (padrão 1) Guia de notificações Webhook | Compatível | Compatível | Estado histórico para os 900 blocos mais recentes | 1,000 blocos | Blocos, Transações, Transações de endereços, Transferências, Metadados de tokens, Saldos, Detentores, NFT, Swaps de DEX, Preços de DEX, Ações tokenizadas, Traces, Atualidade dos dados | Desconhecida | Robinhood Chain Stock token multiplier Tokenized stocks |
| RPC de robinhood_testnet | robinhood_testnet | 46630 | ✓ | https://api.blockvectra.com/v1/robinhood_testnet/public | Compatível (newHeads, logs) | Ainda indisponível | 43 | Compatível · Confirmações 1–1 (padrão 1) Guia de notificações Webhook | Compatível | Compatível | Estado histórico para os 1,023 blocos mais recentes | 1,000 blocos | Não compatível | Desconhecida | Testnet faucet Robinhood Chain Testnet starter |
Próximos passos com uma chave 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 APICriar uma assinatura Webhook · Criar uma assinatura Webhook · Uso e CU · Recarregar
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 APICriar uma assinatura Webhook · Criar uma assinatura Webhook · Uso e CU · Recarregar
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 APICriar uma assinatura Webhook · Criar uma assinatura Webhook · Uso e CU · Recarregar
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 APICriar uma assinatura Webhook · Criar uma assinatura Webhook · Uso e CU · Recarregar
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 APICriar uma assinatura Webhook · Criar uma assinatura Webhook · Uso e CU · Recarregar
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 APICriar uma assinatura Webhook · Criar uma assinatura Webhook · Uso e CU · Recarregar
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 APICriar uma assinatura Webhook · Criar uma assinatura Webhook · Uso e CU · Recarregar
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'WebSocketCriar uma assinatura Webhook · Criar uma assinatura Webhook · Uso e CU · Recarregar
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'WebSocketCriar uma assinatura Webhook · Criar uma assinatura Webhook · Uso e CU · Recarregar
HyperEVM
Os blocos da HyperEVM incluem transações do sistema HyperCore (do endereço 0x2222…2222 ou 0x20…, gasPrice 0).
O envio de transações ainda não é compatível com esta rede (eth_sendRawTransaction retorna -32601 method_not_allowed); métodos de leitura funcionam normalmente.
Precisa de outra rede? Fale conosco →
Todos os exemplos nesta página usam robinhood_mainnet.
Dica: escolha uma rede que ofereça o serviço, o método e a janela histórica do exemplo na matriz acima e substitua
robinhood_mainnetpor seu{chain}. A mesma API key funciona em todas as redes compatíveis.
Outras opções de autenticação e exemplos por linguagem
Os endpoints JSON-RPC são específicos de uma rede: POST /v1/{chain}/{api_key} com a API key no caminho ou POST /v1/{chain} com a API key no cabeçalho x-api-key. {chain} é o nome da rede também usado pela Data API; para Robinhood Chain, é robinhood_mainnet, portanto o endpoint nesta página é https://api.blockvectra.com/v1/robinhood_mainnet. Chamar eth_subscribe por HTTP retorna -32601; as assinaturas WebSocket estão listadas por rede em Redes compatíveis. A API envia Access-Control-Allow-Origin: *, mas você deve manter a API key em segredo e fazer requisições a partir de um serviço de backend, em vez de código no navegador do cliente.
Você pode enviar a API key de três formas: no caminho da URL (POST /v1/{chain}/{api_key}, que usa apenas a API key do caminho e ignora os dois cabeçalhos), no cabeçalho x-api-key ou em um cabeçalho Authorization: Bearer <api_key>.
API key no caminho da 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":[]}'API key em um cabeçalho de requisição
: "${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
Ao enviar a API key em um cabeçalho, chame https://api.blockvectra.com/v1/robinhood_mainnet exatamente como mostrado: a URL termina com o nome da rede, sem barra final. JSON-RPC é servido apenas em /v1/{chain} e /v1/{chain}/{api_key}. Uma barra final (como /v1/{chain}/) ou uma requisição sem o segmento da rede (como /v1 ou /v1/) retorna 404 com corpo vazio.
Um cabeçalho Authorization: Bearer <api_key> também funciona. Em POST /v1/{chain}, um x-api-key não vazio tem precedência sobre Bearer, e Bearer é usado apenas quando x-api-key está ausente ou vazio. A forma com API key no caminho ignora os dois cabeçalhos.
Chamadas em lote
Envie um array para fazer várias chamadas em uma requisição (até 100 por lote). Cada API key tem um bucket de CU (reposição cu_per_sec, capacidade burst_cu — os padrões são 400 CU/s e burst de 1,600 CU; exibido por API key na tabela Keys do console); uma única requisição — incluindo um lote JSON-RPC inteiro — cujo total de CU ultrapasse a capacidade de burst da API key é rejeitada com -32022 request_exceeds_burst, mesmo abaixo do limite de 100 chamadas por lote; divida-a em lotes menores. Este exemplo consulta o Chain ID e o saldo de uma conta em uma única ida e volta:
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"]}
]'As respostas chegam como um array, na mesma ordem das requisições, associadas pelo id.
Se o servidor rejeitar o lote inteiro — por saldo insuficiente, limite de taxa, capacidade de burst ou lote muito grande (consulte Erros comuns abaixo) — ele retorna um único objeto de erro JSON-RPC em vez de um array; o modo batch: true do viem apresenta isso como um UnknownRpcError sem detalhes, então repita uma chamada individual para ver o erro real.
Entender a cobrança em CU
Toda chamada cobrada consome Compute Units (CU): chamadas leves como eth_blockNumber ou eth_chainId têm o menor custo, leituras comuns como eth_getBlockByNumber custam um pouco mais, chamadas mais pesadas como eth_call ou eth_getLogs custam mais, e métodos de trace de execução (como debug_traceTransaction) têm o maior custo.
O uso é cobrado por conta por período de uma hora, arredondado para baixo em unidades inteiras de cobrança (1 unidade = 1,000 CU), com o restante transferido para o próximo período (portanto, entre períodos, o total cobrado é floor(total CU / 1,000)); a liquidação ocorre cerca de 15 minutos após o fim do período. Por exemplo: 508 CU transferidas + 2557 CU consumidas = 3065 CU, resultando em 3 unidades de cobrança e 65 CU transferidas para o próximo período. Consulte Preços para os preços atuais.
A tabela completa de pesos por método e os códigos de erro estão em Referência da API → JSON-RPC — esta página apresenta apenas o formato de uma requisição.
Erros comuns
| O que você fez | O que retorna | Ação |
|---|---|---|
| Rede desconhecida ou ainda não pública | HTTP 404 com corpo JSON error.data.reason: "unknown_chain" | Verifique o nome da rede na URL |
Requisição sem o segmento da rede (por exemplo, /v1 ou /v1/) | HTTP 404 com corpo vazio | Inclua o nome da rede na URL (/v1/{chain}) |
| API key ausente, desconhecida ou desativada | HTTP 401, código JSON-RPC -32024 (missing_api_key ou invalid_api_key) | Use uma API key válida e ativa (API keys novas ou rotacionadas entram em vigor em todas as instâncias em cerca de 5 segundos; nesse período, podem retornar 401 invalid_api_key ou 503 -32021 (com Retry-After) quando não é possível confirmar o estado de cobrança no momento, então aguarde um momento e tente novamente) |
| Saldo zero ou negativo | HTTP 402, código JSON-RPC -32020 | Recarregue seu saldo ou aguarde a renovação gratuita |
| Requisições enviadas muito rapidamente (limite de taxa ou sobrecarga temporária) | HTTP 429 (ou 200), código JSON-RPC -32005 | Tente novamente mais tarde (respeite Retry-After quando presente) |
Requisição individual ou lote ultrapassa a capacidade de burst da API key (burst_cu, padrão 1,600 CU; taxa padrão 400 CU/s), ou lote do plano gratuito ultrapassa chamadas/s (25 chamadas/s) | HTTP 429, código JSON-RPC -32022 (request_exceeds_burst) | Divida a requisição em lotes menores (ela nunca terá sucesso como foi enviada) |
| Nó upstream temporariamente indisponível | HTTP 200, código JSON-RPC -32603 (upstream unavailable), sem cobrança | Repita a requisição |
Estado histórico fora da janela de estado da rede (consulte state_window_blocks em GET /v1/chains) | HTTP 200, código JSON-RPC -32011, sem cobrança | Consulte um bloco mais recente |
| Transação ou bloco não encontrado, ou resposta muito grande; na Ethereum, consultas de blocos / recibos / logs fora da janela recente também retornam -32000 "old data not available due to pruning" (sem cobrança; consulte Redes compatíveis → Ethereum) | HTTP 200, código JSON-RPC -32000 | Altere a requisição (verifique o hash ou número do bloco; hashes de trace malformados retornam transação não encontrada) |
Tracer não permitido ou timeout de trace não permitido (chamadas debug_trace) | HTTP 200, código JSON-RPC -32602, sem cobrança | Use um tracer nativo permitido (callTracer, flatCallTracer, prestateTracer, 4byteTracer, noopTracer ou omita) e timeout ≤ 30s |
| Método não permitido pela lista de métodos da rede (consulte Redes compatíveis) | HTTP 200, código JSON-RPC -32601, sem cobrança | Chame apenas os métodos permitidos pela rede |
| Corpo JSON malformado | HTTP 200, código JSON-RPC -32700, sem cobrança | Corrija a sintaxe JSON da requisição |
| Mais de 100 chamadas em um lote | HTTP 200, código JSON-RPC -32600 (batch too large), sem cobrança | Divida o lote em no máximo 100 chamadas |
As rejeições acima nunca são cobradas. Toda chamada aceita que recebe uma resposta é cobrada pelo peso público de CU do método; a tabela de códigos de erro lista os casos sem cobrança (consulte a coluna de cobrança em Códigos de erro).
Chamar a Data API
A Data API expõe dados de rede somente de leitura (blocos, transações, saldos, detentores, atividade em DEX e muito mais) como REST/JSON. Toda rota, exceto GET https://api.blockvectra.com/v1/data/chains, tem um identificador de rede como prefixo: robinhood_mainnet é o identificador da rede (o campo chain retornado por /chains e em meta) usado em todos os caminhos abaixo. GET https://api.blockvectra.com/v1/data/chains lista apenas redes públicas e retorna somente {"data": [...]} (sem meta, sem next_cursor). As requisições são medidas e cobradas em Compute Units (CU); apenas respostas 2xx bem-sucedidas são cobradas.
Toda requisição exige a mesma API key usada no JSON-RPC — envie-a no cabeçalho x-api-key. Toda resposta bem-sucedida específica de uma rede usa o mesmo envelope: data (os dados), next_cursor (uma string opaca, presente apenas quando há outra página — caso contrário, a chave fica totalmente ausente, nunca null) e meta (chain, chain_slug (forma de chain em letras maiúsculas), chain_external_id, as_of_block, safe_block, finalized_block, coverage, refreshed_at; refreshed_at pode ser null, indicando que o horário de atualização dos dados é desconhecido e eles devem ser tratados como desatualizados — endpoints baseados em blocos sempre retornam um valor). Respostas de erro normalmente contêm {"error":{"code","message"}} — 409 not_indexed_yet adiciona indexed_through (o bloco mais recente indexado). Uma rede desconhecida ou não pública retorna HTTP 404 com error.code not_found (sem cobrança; os nomes de rede devem ser slugs exatos em letras minúsculas); uma API key ausente, desconhecida ou desativada retorna HTTP 401 com error.code missing_api_key ou invalid_api_key. Requisições limitadas por taxa retornam HTTP 429 (error.code rate_limited, data.reason: "key_rate_limit"), e saldo esgotado retorna HTTP 402 (error.code insufficient_balance); ambos sem cobrança. Valores que podem ultrapassar 2^53 (saldos, quantidades de tokens) são strings decimais, nunca números JSON.
Consultar um bloco pelo número:
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"
}
}Um número acima do bloco mais recente indexado (as_of_block) retorna 409 (error.code: "not_indexed_yet"), com indexed_through informando o bloco mais recente indexado — os dados ainda não estão disponíveis, então tente novamente mais tarde. Um número de bloco anterior a todo o histórico coberto da rede (coverage.from_block) retorna 422 (error.code: "no_coverage"). Dentro da cobertura, um número igual ou inferior a as_of_block sem registro ativo (nunca indexado ou revertido por reorg) retorna 404 (error.code: "not_found").
Verificar a atualização dos dados (quanto cada conjunto de dados acompanhado está atrasado em relação ao bloco mais recente da rede — útil para uma página de status ou verificação antes de confiar em uma consulta):
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"
}
}(Abreviado: a resposta tem uma linha por conjunto de dados; apenas a linha blocks é exibida. A linha traces também contém coverage_from_block, coverage_to_block e coverage_complete.)
Se os dados de atualização estiverem temporariamente indisponíveis para essa rede, a resposta será 503 (error.code: "unavailable") em vez de um resultado parcial; a resposta inclui um cabeçalho Retry-After (segundos) — aguarde pelo menos esse tempo e tente novamente.
Listar os saldos ERC-20 de um endereço (um snapshot filtrado para saldos diferentes de zero, ordenado por 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"
}
}Um endereço sem saldos diferentes de zero ainda retorna 200 com data: [] — nunca 404. Envie ?limit= (padrão 50, máximo 500) e o next_cursor retornado para consultar as próximas páginas.
A cobertura completa dos endpoints — blocos, transações, endereços, tokens, NFTs, DEX e ações tokenizadas — está em Referência da API → Data API.
Leitura adicional
- Referência da API → JSON-RPC — métodos, pesos em CU e códigos de erro
- Referência completa de JSON-RPC — especificações completas, parâmetros e esquemas de retorno de todos os métodos compatíveis
- Referência da API → Data API — endpoints REST para dados de rede
- Conjuntos de dados — conjuntos de dados derivados nas redes compatíveis
- Guias — guias práticos para integração com APIs, gestão de CU e fluxos multichain
- Redes compatíveis — identificadores de rede e URLs de endpoints
FAQ
Quais redes têm suporte?
9 redes têm suporte: Arbitrum One, Base, BNB Smart Chain, Ethereum, Ethereum Sepolia, HyperEVM, Polygon, Robinhood Chain, Robinhood Chain Testnet. A lista segue GET /v1/chains e é atualizada quando novas redes são lançadas. Consulte a página de status para ver o status em tempo real. Ver redes com suporte →
O WebSocket tem suporte?
Chamar eth_subscribe via HTTP retorna -32601; nas redes onde ws for true em /v1/chains, eth_subscribe está disponível via WebSocket. Caso contrário, consulte eth_getLogs periodicamente. Ver redes com suporte →
Posso consultar estados históricos e traces?
Sim, mas varia por rede. A janela de estado histórico é o campo state_window_blocks de /v1/chains (null significa histórico completo); a disponibilidade de traces depende se methods.allow para essa rede inclui métodos debug_trace (como debug_traceTransaction); o intervalo máximo de blocos para uma só requisição eth_getLogs é max_logs_block_range. Ver diretório de redes e parâmetros por rede →
Uma só chave de API pode ser usada em todas as redes?
Sim. Uma só chave de API funciona para JSON-RPC em todas as redes com suporte e para a Data API nas redes que a oferecem; uma chave pertence à conta, não a uma rede específica. Guia: uma chave, muitas redes →
Última atualização:
Referência de erros
Códigos de erro BlockVectra, cobrança e orientações de novas tentativas para JSON-RPC, Data API, Push Webhooks, console e faucet, incluindo intervalos de blocos de eth_getLogs e erros de replay de Webhook.
JSON-RPC
Métodos JSON-RPC compatíveis, pesos em CU e códigos de erro. Configure um endpoint, escolha uma rede e consulte disponibilidade, preços e regras de cobrança.