# Redes compatíveis

> Source: https://docs.blockvectra.com/pt-br/chains/

BlockVectra é um provedor de dados de blockchain multichain: JSON-RPC em todas as redes compatíveis e Data API onde ela está disponível.

## Uma API key, todas as redes

* **API key universal**: a mesma API key funciona em todas as redes blockchain compatíveis com a BlockVectra — sem chaves separadas por rede.
* **Rede na URL**: cada requisição identifica explicitamente a rede no segmento `{chain}` do caminho.
* **Uso agregado**: saldo da conta, buckets de limite de Compute Units (CU) e limites de requisições por segundo do plano gratuito são compartilhados entre todas as redes.
* **Preços**: consulte [Preços](https://blockvectra.com/en/pricing/).

## Teste sem uma API key

Escolha um [endpoint RPC público gratuito](https://blockvectra.com/en/free/#public-rpc) para usar métodos de carteira sem uma API key. Os métodos públicos e limites por IP estão listados por rede; consulte [Início rápido](https://docs.blockvectra.com/en/quickstart/) para um exemplo de chamada.

## Templates de URL

Estruturas de URL padrão para chamadas JSON-RPC e Data API:

| Serviço  | Modo                    | Template de URL              | Observações                                                                     |
| -------- | ----------------------- | ---------------------------- | ------------------------------------------------------------------------------- |
| JSON-RPC | API key no caminho      | `POST /v1/{chain}/{api_key}` | Forma mais simples; recomendada para curl e clientes HTTP                       |
| JSON-RPC | API key em um cabeçalho | `POST /v1/{chain}`           | Envie a API key no cabeçalho de requisição `x-api-key: {api_key}`               |
| Data API | Endpoints REST          | `GET /v1/data/{chain}/…`     | Envie a API key no cabeçalho de requisição `x-api-key`                          |
| Status   | Status público          | `GET /v1/status`             | Não exige API key; retorna o status e o bloco mais recente de cada rede pública |

> **Observação**: uma requisição sem o segmento da rede (por exemplo, `POST /v1` ou `POST /v1/`) retorna HTTP 404 com corpo vazio. Consulte [Início rápido](https://docs.blockvectra.com/en/quickstart/) para detalhes de configuração.

## Matriz de redes compatíveis

As redes blockchain atualmente disponíveis na BlockVectra e os recursos de seus serviços:

Endpoints, métodos com API key, assinaturas, envio de transações, limites de estado e logs, conjuntos de dados, testnets relacionadas e guias são apresentados por rede. Informações desconhecidas permanecem desconhecidas. Expanda uma rede abaixo da matriz para ver requisições compatíveis com ela.

| 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](https://blockvectra.com/pt-br/chains/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)](https://blockvectra.com/pt-br/webhooks/), [Guia de notificações Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) | 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](https://blockvectra.com/pt-br/chains/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)](https://blockvectra.com/pt-br/webhooks/), [Guia de notificações Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) | 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](https://docs.blockvectra.com/en/guides/base/) |
| [RPC e Data API de bsc_mainnet](https://blockvectra.com/pt-br/chains/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)](https://blockvectra.com/pt-br/webhooks/), [Guia de notificações Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) | 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](https://blockvectra.com/pt-br/chains/eth_mainnet/) | 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)](https://blockvectra.com/pt-br/webhooks/), [Guia de notificações Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) | 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](https://blockvectra.com/pt-br/chains/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)](https://blockvectra.com/pt-br/webhooks/), [Guia de notificações Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) | 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](https://blockvectra.com/pt-br/chains/hyperevm_mainnet/) | 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)](https://blockvectra.com/pt-br/webhooks/), [Guia de notificações Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) | 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](https://docs.blockvectra.com/en/guides/hyperevm-backfill/) |
| [RPC e Data API de polygon_mainnet](https://blockvectra.com/pt-br/chains/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)](https://blockvectra.com/pt-br/webhooks/), [Guia de notificações Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) | 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](https://blockvectra.com/pt-br/chains/robinhood_mainnet/) | 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)](https://blockvectra.com/pt-br/webhooks/), [Guia de notificações Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) | 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](https://docs.blockvectra.com/en/guides/robinhood-chain/), [Stock token multiplier](https://docs.blockvectra.com/en/guides/stock-token-multiplier/), [Tokenized stocks](https://docs.blockvectra.com/en/guides/stocks/) |
| [RPC de robinhood_testnet](https://blockvectra.com/pt-br/chains/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)](https://blockvectra.com/pt-br/webhooks/), [Guia de notificações Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) | Compatível | Compatível | Estado histórico para os 1,023 blocos mais recentes | 1,000 blocos | Não compatível | Desconhecida | [Testnet faucet](https://docs.blockvectra.com/en/guides/robinhood-testnet-faucet/), [Robinhood Chain Testnet starter](https://docs.blockvectra.com/en/guides/robinhood-testnet-starter/) |

## Próximos passos com uma chave API

### arb_mainnet

#### eth_getLogs

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

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

#### Data API

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

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

[Criar uma assinatura Webhook](https://blockvectra.com/pt-br/webhooks/) · [Criar uma assinatura Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) · [Uso e CU](https://console.blockvectra.com/usage/) · [Recarregar](https://console.blockvectra.com/billing/)

### base_mainnet

#### eth_getLogs

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

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

#### Data API

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

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

[Criar uma assinatura Webhook](https://blockvectra.com/pt-br/webhooks/) · [Criar uma assinatura Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) · [Uso e CU](https://console.blockvectra.com/usage/) · [Recarregar](https://console.blockvectra.com/billing/)

### bsc_mainnet

#### eth_getLogs

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

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

#### Data API

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

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

[Criar uma assinatura Webhook](https://blockvectra.com/pt-br/webhooks/) · [Criar uma assinatura Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) · [Uso e CU](https://console.blockvectra.com/usage/) · [Recarregar](https://console.blockvectra.com/billing/)

### Ethereum

#### eth_getLogs

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

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

#### Data API

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

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

[Criar uma assinatura Webhook](https://blockvectra.com/pt-br/webhooks/) · [Criar uma assinatura Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) · [Uso e CU](https://console.blockvectra.com/usage/) · [Recarregar](https://console.blockvectra.com/billing/)

### eth_sepolia

#### eth_getLogs

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

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

#### Data API

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

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

[Criar uma assinatura Webhook](https://blockvectra.com/pt-br/webhooks/) · [Criar uma assinatura Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) · [Uso e CU](https://console.blockvectra.com/usage/) · [Recarregar](https://console.blockvectra.com/billing/)

### HyperEVM

#### eth_getLogs

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

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

#### Data API

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

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

[Criar uma assinatura Webhook](https://blockvectra.com/pt-br/webhooks/) · [Criar uma assinatura Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) · [Uso e CU](https://console.blockvectra.com/usage/) · [Recarregar](https://console.blockvectra.com/billing/)

### polygon_mainnet

#### eth_getLogs

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

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

#### Data API

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

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

[Criar uma assinatura Webhook](https://blockvectra.com/pt-br/webhooks/) · [Criar uma assinatura Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) · [Uso e CU](https://console.blockvectra.com/usage/) · [Recarregar](https://console.blockvectra.com/billing/)

### Robinhood Chain

#### eth_getLogs

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

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

#### Data API

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

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

#### WebSocket

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

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

[Criar uma assinatura Webhook](https://blockvectra.com/pt-br/webhooks/) · [Criar uma assinatura Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) · [Uso e CU](https://console.blockvectra.com/usage/) · [Recarregar](https://console.blockvectra.com/billing/)

### robinhood_testnet

#### eth_getLogs

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

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

#### WebSocket

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

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

[Criar uma assinatura Webhook](https://blockvectra.com/pt-br/webhooks/) · [Criar uma assinatura Webhook](https://docs.blockvectra.com/en/guides/webhook-push/) · [Uso e CU](https://console.blockvectra.com/usage/) · [Recarregar](https://console.blockvectra.com/billing/)

**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.

[Ver status em tempo real →](https://blockvectra.com/pt-br/status/)

## Ethereum

* **Chain ID**: `1`
* **Nome da rede (`{chain}` nas URLs)**: `eth_mainnet`, por exemplo, `POST /v1/eth_mainnet/{api_key}` ou `GET /v1/data/eth_mainnet/…`.

### JSON-RPC

* **Métodos**: os métodos disponíveis por rede são definidos por `methods.allow` / `deny` em `GET /v1/chains` (consulte [Política de métodos](https://docs.blockvectra.com/en/api/json-rpc/#method-policy)); métodos fora desse escopo retornam `-32601`.
* **Apenas dados recentes**: a janela de estado histórico é definida por `state_window_blocks` em `GET /v1/chains`. Consultas de estado histórico fora da janela retornam `-32011` (sem cobrança); consultas de blocos, recibos e logs fora da janela retornam `-32000 old data not available due to pruning` (sem cobrança); uma transação consultada por hash fora da janela retorna `result: null`.
* **`eth_getLogs`**: o intervalo máximo de blocos por requisição é `max_logs_block_range` em `GET /v1/chains`.

### Data API

* **Apenas dados recentes**: a cobertura de dados da Ethereum é definida por `coverage.from_block` em `GET /v1/data/chains`. Um número de bloco ou uma janela abaixo do início retorna `422 no_coverage`; o hash de uma transação que saiu da janela retorna `404`.
* **Quando `from_block` é `null`**: o início está temporariamente desconhecido. Não o trate como `0` ou como histórico completo e não envie requisições históricas (por número de bloco, janela ou hash) para Ethereum até que ele volte a ser um inteiro; elas retornam `503 unavailable`.
* **`503 gateway_overloaded`**: tente novamente com backoff (`Retry-After: 1`).
* **Conjuntos de dados**: os conjuntos de dados disponíveis para Ethereum estão listados em `features` de `GET /v1/data/chains`; os demais retornam `422 no_coverage` (sem cobrança). Transações e transferências de endereços cobrem apenas a janela: uma resposta que ultrapassa seu início é marcada com `meta.coverage: "partial"`.

## Descobrir redes de forma programática

Use estes endpoints públicos para descobrir as redes compatíveis e seu status:

### 1. Status do serviço (`GET /v1/status`)

Um endpoint público que não exige API key (CORS `*`). Lista apenas as redes disponíveis publicamente e retorna seu status e o bloco mais recente indexado:

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

Exemplo de resposta:

```json
{
  "checked_at": "2026-09-28T07:40:00Z",
  "gateway": { "status": "ok" },
  "chains": [
    {
      "chain": "robinhood_mainnet",
      "name": "Robinhood Chain",
      "chain_id": 4663,
      "jsonrpc": true,
      "data": true,
      "status": "ok",
      "data_status": "ok",
      "sync": { "stage": "synced", "node_block": 74600000, "target_block": null },
      "head": {
        "block": 74600000,
        "time": "2026-09-28T07:39:58Z",
        "lag_seconds": 3
      }
    },
    {
      "chain": "eth_mainnet",
      "name": "Ethereum",
      "chain_id": 1,
      "jsonrpc": true,
      "data": true,
      "status": "ok",
      "data_status": "ok",
      "sync": { "stage": "synced", "node_block": 26010000, "target_block": null },
      "head": {
        "block": 26010000,
        "time": "2026-09-28T07:39:59Z",
        "lag_seconds": 1
      }
    }
  ]
}
```

O campo `name` de cada entrada é sempre o nome de exibição da rede em inglês. `jsonrpc` e `data` indicam se a rede está disponível para JSON-RPC e Data API, respectivamente; `status` é `"ok"` ou `"unavailable"`. Se uma rede estiver sincronizando, chamadas para ela retornam `-32010`. Em `/v1/status`, `status` informa se o JSON-RPC está funcionando e `data_status` informa se a Data API está funcionando (`"ok"`, `"syncing"` ou `"unavailable"`); em `/v1/data/chains`, `coverage.has_data` igual a `false` significa que a rede ainda não tem dados indexados.

### 2. Redes da Data API (`GET /v1/data/chains`)

Exige API key no cabeçalho `x-api-key` (com cobrança). Retorna as redes públicas atendidas pela Data API, cada uma com os recursos disponíveis (`features`), os blocos cobertos (`coverage`), os marcadores de consenso `safe`/`finalized` do nó e seu status (`finality`) e os limites por requisição (`limits`):

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

Exemplo de resposta:

```json
{
  "data": [
    {
      "chain": "robinhood_mainnet",
      "chain_slug": "ROBINHOOD_MAINNET",
      "name": "Robinhood Chain",
      "chain_id": 4663,
      "chain_external_id": "eip155:4663",
      "features": [
        "blocks", "transactions", "address_transactions", "transfers", "token_metadata",
        "balances", "holders", "nfts", "dex_swaps", "dex_prices", "stocks", "traces", "freshness"
      ],
      "coverage": { "from_block": 0, "traces_from_block": 1000000, "has_data": true },
      "finality": { "model": "node_tags", "status": "ok", "safe_block": 74599400, "finalized_block": 74598900 },
      "limits": { "max_page_size": 500, "max_window_blocks": 100000, "max_pools_for_token": 200, "max_batch_addresses": 100 }
    },
    {
      "chain": "eth_mainnet",
      "chain_slug": "ETH_MAINNET",
      "name": "Ethereum",
      "chain_id": 1,
      "chain_external_id": "eip155:1",
      "features": ["blocks", "transactions", "address_transactions", "transfers", "token_metadata", "freshness"],
      "coverage": { "from_block": 1000000, "traces_from_block": null, "has_data": true },
      "finality": { "model": "node_tags", "status": "stale", "safe_block": 26009950, "finalized_block": 26009900 },
      "limits": { "max_page_size": 500, "max_window_blocks": 100000, "max_pools_for_token": 200, "max_batch_addresses": 100 }
    }
  ]
}
```

`finality` informa os marcadores de consenso do nó (`model` é `"node_tags"`), o estado dos marcadores (`status` é `"ok"`, `"stale"` ou `"unavailable"`) e os valores atuais de `safe_block` e `finalized_block` (`safe_block >= finalized_block`, e ambos são `null` apenas quando o status é `"unavailable"`).

`coverage.from_block` é o menor bloco indexado, consultado em tempo real. É `0` quando o histórico da rede chega ao bloco gênese. Pode ser `null` apenas quando a rede ainda não tem nenhum bloco indexado (`has_data = false`) ou quando não é possível determinar o início: trate `null` como desconhecido — não como histórico completo nem como `0` — e requisições históricas nesse caso retornam `503 unavailable`. Sempre consulte esse endpoint em tempo de execução, em vez de fixar o valor no código. `coverage.traces_from_block` é o primeiro bloco com dados de trace; uma requisição de trace anterior a ele ou dentro de uma lacuna retorna `422 no_coverage` (sem cobrança).

Chamar `/v1/data/{chain}/…` com uma rede desconhecida ou não pública retorna HTTP `404` com `error.code` `not_found` (sem cobrança; o nome da rede deve ser o slug exato em letras minúsculas).
