Démarrage rapide

Lisez la hauteur de bloc sans clé, créez une API key, envoyez votre premier appel authentifié, puis interrogez les actions tokenisées, rattrapez les logs ou recevez des Webhooks.

Les développeurs et les agents IA peuvent essayer le RPC public sans clé, puis créer une clé pour continuer.

1. Lire la hauteur de bloc sans clé

Appelez le point de terminaison JSON-RPC public pour la chaîne d'exemple robinhood_mainnet sans créer de compte ni fournir d'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":[]}'

Le champ id: 1 de la réponse correspond à cette requête ; result est une hauteur de bloc hexadécimale et peut changer entre deux appels. Si la réponse contient error, vérifiez son code et son motif. Consultez les points de terminaison RPC publics gratuits pour voir les méthodes publiques, les plages d'historique et les limites par IP.

2. Créer une API key

Rendez-vous sur la console, connectez-vous avec GitHub, Google ou un portefeuille Ethereum (votre compte est créé dès la première connexion), et créez une API key. Le secret n'est affiché qu'une seule fois : conservez-le en lieu sûr et définissez-le dans la variable d'environnement BLOCKVECTRA_API_KEY. Ne l'incluez pas dans le code navigateur côté client. Les nouveaux comptes reçoivent 30,000,000 CU à l'inscription — aucune carte bancaire requise.

Vous n'avez pas encore d'API key ?

Si vous possédez un portefeuille Ethereum : suivez le guide d'inscription programmatique pour vous inscrire et créer une API key à l'aide d'une signature de portefeuille Ethereum, sans navigateur. Si vous ne possédez pas de portefeuille : demandez à l'utilisateur de se connecter sur console.blockvectra.com, de créer une clé et de la définir comme variable d'environnement BLOCKVECTRA_API_KEY. Ne demandez pas à l'utilisateur de coller la clé dans le chat.

3. Envoyer votre premier appel authentifié

Lisez la hauteur de bloc de la même chaîne à l'aide de l'en-tête x-api-key. L'URL se termine par le nom de la chaîne, sans barre oblique finale :

: "${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 est à nouveau une hauteur de bloc hexadécimale. Cette requête consomme des CU ; consultez la référence JSON-RPC pour les pondérations des méthodes et les codes d'erreur, ainsi que les Tarifs pour les prix actuels. Une nouvelle clé prend effet en environ 5 secondes ; si vous obtenez invalid_api_key, patientez un instant et réessayez. Consultez les Erreurs courantes ci-dessous pour les autres types d'échecs.

4. Poursuivre avec une tâche métier

Référence

API keys et solde

Modèle de démarrage complet : blockvectra/agent-quickstart

Chaque clé commence par rgw_ suivi de 64 caractères hexadécimaux, par exemple rgw_1f2e... (tronqué). Gardez-la secrète — quiconque détient la clé peut dépenser votre solde.

Lorsque votre solde est insuffisant, le serveur renvoie HTTP 402 (code d'erreur JSON-RPC -32020 ; error.code de la Data API insufficient_balance). Rendez-vous sur la page Facturation de la console pour consulter votre solde et les méthodes de recharge.

Essayer sans clé

Vous pouvez appeler immédiatement l'endpoint JSON-RPC public sans créer de compte ni fournir de clé API.

# Endpoint public direct :
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":[]}'

# Ou en utilisant le modèle de repli de clé API (public par défaut si BLOCKVECTRA_API_KEY n'est pas défini) :
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":[]}'

L'endpoint dans l'exemple ci-dessous est limité en débit par IP (3 req/s, burst 20, taille de lot max 10). Les requêtes qui dépassent les limites de débit renvoient HTTP 429 avec la raison public_rate_limit ou public_pool_busy (avec un en-tête Retry-After) ; les méthodes non prises en charge renvoient l'erreur JSON-RPC -32601 (method_not_public).

Endpoints publics par chaîne

  • Arbitrum One: https://api.blockvectra.com/v1/arb_mainnet/public — Lecture et diffusion des transactions signées (eth_sendRawTransaction)
  • Base: https://api.blockvectra.com/v1/base_mainnet/public — Lecture et diffusion des transactions signées (eth_sendRawTransaction)
  • BNB Smart Chain: https://api.blockvectra.com/v1/bsc_mainnet/public — Lecture et diffusion des transactions signées (eth_sendRawTransaction)
  • Ethereum: https://api.blockvectra.com/v1/eth_mainnet/public — Lecture et diffusion des transactions signées (eth_sendRawTransaction)
  • Ethereum Sepolia: https://api.blockvectra.com/v1/eth_sepolia/public — Lecture et diffusion des transactions signées (eth_sendRawTransaction)
  • HyperEVM: https://api.blockvectra.com/v1/hyperevm_mainnet/public — Lecture seule
  • Polygon: https://api.blockvectra.com/v1/polygon_mainnet/public — Lecture et diffusion des transactions signées (eth_sendRawTransaction)
  • Robinhood Chain: https://api.blockvectra.com/v1/robinhood_mainnet/public — Lecture et diffusion des transactions signées (eth_sendRawTransaction)
  • Robinhood Chain Testnet: https://api.blockvectra.com/v1/robinhood_testnet/public — Lecture et diffusion des transactions signées (eth_sendRawTransaction)

Les deux points de terminaison de métadonnées publics suivants affichent l'état du service et la configuration de chaque chaîne ; ils ne nécessitent aucune API key et ne sont pas facturés.

Vérifier l'état de santé du service et des chaînes

curl https://api.blockvectra.com/v1/status

Renvoie l'horodatage de la vérification checked_at, l'état opérationnel du service gateway.status, ainsi que la progression de synchronisation des nœuds de chaque chaîne prise en charge sync, la hauteur du bloc de tête et la latence 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
      }
    }
  ]
}

Interroger les chaînes prises en charge et les politiques de méthodes

curl https://api.blockvectra.com/v1/chains

Renvoie le chain_id de chaque chaîne prise en charge, les indicateurs de fonctionnalités pour JSON-RPC, Data API et WebSocket, les listes d'autorisation et de refus de méthodes (methods.allow et methods.deny), la limite de plage de blocs par requête de logs max_logs_block_range, et la fenêtre d'état historique 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": {}
    }
  ]
}

Choisir une chaîne

Chaque point de terminaison BlockVectra est spécifique à une chaîne : les requêtes JSON-RPC intègrent le nom de la chaîne {chain} dans le chemin d'accès de l'URL, et les requêtes Data API le préfixent au chemin de la route. Consultez les Chaînes prises en charge pour connaître les chaînes actuellement disponibles et leurs identifiants.

Chaîne{chain}Chain IDTracingEndpoint publicWebSocketData APIMéthodes avec une clé APINotifications WebhookEnvoyer des transactionsEnvoyer des transactions (endpoint public sans key)Fenêtre d'historique d'étatPlage maximale de blocs pour eth_getLogsJeux de données Data APIRéseaux de test associésGuides associés
RPC et Data API arb_mainnetarb_mainnet42161✓https://api.blockvectra.com/v1/arb_mainnet/publicNon pris en chargeOuvert43Pris en charge · Confirmations 1–1 (par défaut 1)
Guide des notifications Webhook
Pris en chargePris en chargeÉtat historique pour les 6,000 blocs les plus récents1,000 blocsBlocs, Transactions, Transactions d'adresses, Transferts, Métadonnées de jetons, Fraîcheur des donnéesInconnuInconnu
RPC et Data API base_mainnetbase_mainnet8453—https://api.blockvectra.com/v1/base_mainnet/publicNon pris en chargeOuvert39Pris en charge · Confirmations 1–1 (par défaut 1)
Guide des notifications Webhook
Pris en chargePris en chargeÉtat historique pour les 10,000 blocs les plus récents1,000 blocsBlocs, Transactions, Transactions d'adresses, Transferts, Métadonnées de jetons, Fraîcheur des donnéesInconnuBase
RPC et Data API bsc_mainnetbsc_mainnet56—https://api.blockvectra.com/v1/bsc_mainnet/publicNon pris en chargeOuvert25Pris en charge · Confirmations 1–1 (par défaut 1)
Guide des notifications Webhook
Pris en chargePris en chargeÉtat historique pour les 100 blocs les plus récents1,000 blocsBlocs, Transactions, Transactions d'adresses, Transferts, Métadonnées de jetons, Fraîcheur des donnéesInconnuInconnu
RPC et Data API Ethereumeth_mainnet1✓https://api.blockvectra.com/v1/eth_mainnet/publicNon pris en chargeOuvert38Pris en charge · Confirmations 1–1 (par défaut 1)
Guide des notifications Webhook
Pris en chargePris en chargeÉtat historique pour les 250,000 blocs les plus récents1,000 blocsBlocs, Transactions, Transactions d'adresses, Transferts, Métadonnées de jetons, Fraîcheur des donnéesInconnuInconnu
RPC et Data API eth_sepoliaeth_sepolia11155111—https://api.blockvectra.com/v1/eth_sepolia/publicNon pris en chargeOuvert29Pris en charge · Confirmations 1–1 (par défaut 1)
Guide des notifications Webhook
Pris en chargePris en chargeInconnu1,000 blocsBlocs, Transactions, Transactions d'adresses, Transferts, Métadonnées de jetons, Fraîcheur des donnéesInconnuInconnu
RPC et Data API HyperEVMhyperevm_mainnet999—https://api.blockvectra.com/v1/hyperevm_mainnet/publicNon pris en chargeOuvert24Pris en charge · Confirmations 1–1 (par défaut 1)
Guide des notifications Webhook
Non pris en chargeNon pris en chargeInconnu1,000 blocsBlocs, Transactions, Transactions d'adresses, Transferts, Métadonnées de jetons, Soldes, Détenteurs, NFT, Fraîcheur des donnéesInconnuHyperEVM backfill and polling
RPC et Data API polygon_mainnetpolygon_mainnet137✓https://api.blockvectra.com/v1/polygon_mainnet/publicNon pris en chargeOuvert43Pris en charge · Confirmations 1–1 (par défaut 1)
Guide des notifications Webhook
Pris en chargePris en chargeÉtat historique pour les 126 blocs les plus récents1,000 blocsBlocs, Transactions, Transactions d'adresses, Transferts, Métadonnées de jetons, Fraîcheur des donnéesInconnuInconnu
RPC et Data API Robinhood Chainrobinhood_mainnet4663✓https://api.blockvectra.com/v1/robinhood_mainnet/publicPris en charge (newHeads, logs)Ouvert43Pris en charge · Confirmations 1–1 (par défaut 1)
Guide des notifications Webhook
Pris en chargePris en chargeÉtat historique pour les 900 blocs les plus récents1,000 blocsBlocs, Transactions, Transactions d'adresses, Transferts, Métadonnées de jetons, Soldes, Détenteurs, NFT, Swaps DEX, Prix DEX, Actions tokenisées, Traces, Fraîcheur des donnéesInconnuRobinhood Chain
Stock token multiplier

Tokenized stocks
RPC robinhood_testnetrobinhood_testnet46630✓https://api.blockvectra.com/v1/robinhood_testnet/publicPris en charge (newHeads, logs)Pas encore disponible43Pris en charge · Confirmations 1–1 (par défaut 1)
Guide des notifications Webhook
Pris en chargePris en chargeÉtat historique pour les 1,023 blocs les plus récents1,000 blocsNon pris en chargeInconnuTestnet faucet
Robinhood Chain Testnet starter

Étapes suivantes avec une clé 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

Créer un abonnement Webhook · Créer un abonnement Webhook · Utilisation et CU · Recharger

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

Créer un abonnement Webhook · Créer un abonnement Webhook · Utilisation et CU · Recharger

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

Créer un abonnement Webhook · Créer un abonnement Webhook · Utilisation et CU · Recharger

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

Créer un abonnement Webhook · Créer un abonnement Webhook · Utilisation et CU · Recharger

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

Créer un abonnement Webhook · Créer un abonnement Webhook · Utilisation et CU · Recharger

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

Créer un abonnement Webhook · Créer un abonnement Webhook · Utilisation et CU · Recharger

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

Créer un abonnement Webhook · Créer un abonnement Webhook · Utilisation et CU · Recharger

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

Créer un abonnement Webhook · Créer un abonnement Webhook · Utilisation et CU · Recharger

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

Créer un abonnement Webhook · Créer un abonnement Webhook · Utilisation et CU · Recharger

HyperEVM

Les blocs HyperEVM incluent des transactions système HyperCore (provenant de l'adresse 0x2222…2222 ou 0x20…, gasPrice 0).

L'envoi de transactions n'est pas encore pris en charge sur cette chaîne (eth_sendRawTransaction renvoie -32601 method_not_allowed) ; les méthodes de lecture fonctionnent normalement.

Voir l'état en direct →

Besoin d'une autre chaîne ? Dites-le-nous →

Tous les exemples de cette page utilisent robinhood_mainnet.

Astuce : choisissez une chaîne qui prend en charge le service, la méthode et la fenêtre d'historique de l'exemple dans la matrice ci-dessus, puis remplacez robinhood_mainnet par son {chain}. La même API key fonctionne sur toutes les chaînes prises en charge.

Autres options d'authentification et exemples par langage

Les points de terminaison JSON-RPC sont ciblés sur une chaîne : POST /v1/{chain}/{api_key} avec la clé dans le chemin, ou POST /v1/{chain} avec la clé dans l'en-tête x-api-key. {chain} est le nom de chaîne que la Data API utilise également ; pour Robinhood Chain, il s'agit de robinhood_mainnet, donc le point de terminaison sur cette page est https://api.blockvectra.com/v1/robinhood_mainnet. L'appel de eth_subscribe via HTTP renvoie -32601 ; les abonnements WebSocket sont répertoriés par chaîne dans les Chaînes prises en charge. L'API transmet Access-Control-Allow-Origin: *, mais vous devez garder votre API key secrète et effectuer vos requêtes depuis un service back-end plutôt que depuis du code navigateur côté client.

Vous pouvez transmettre la clé de trois façons : dans le chemin de l'URL (POST /v1/{chain}/{api_key}, qui utilise uniquement la clé présente dans le chemin et ignore les deux en-têtes), dans l'en-tête x-api-key, ou dans un en-tête Authorization: Bearer <api_key>.

Clé dans le chemin de l'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":[]}'

Clé dans un en-tête de requête

: "${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":[]}'

Pas de barre oblique finale

Lorsque vous transmettez la clé dans un en-tête, appelez https://api.blockvectra.com/v1/robinhood_mainnet exactement comme indiqué : l'URL se termine par le nom de la chaîne, sans barre oblique finale. Le JSON-RPC est servi uniquement sur /v1/{chain} et /v1/{chain}/{api_key}. Une barre oblique finale (comme /v1/{chain}/) ou une requête sans segment de chaîne (comme /v1 ou /v1/) renvoie 404 avec un corps vide.

Un en-tête Authorization: Bearer <api_key> fonctionne également. Sur POST /v1/{chain}, un en-tête x-api-key non vide a la priorité sur Bearer, et Bearer n'est utilisé que lorsque x-api-key est absent ou vide. La forme utilisant le chemin ignore les deux en-têtes.

Appels groupés (batch)

Envoyez un tableau pour effectuer plusieurs appels en une seule requête (jusqu'à 100 par batch). Notez que chaque API key dispose d'un bucket de CU (recharge cu_per_sec, capacité burst_cu — les valeurs par défaut sont 400 CU/s et un burst de 1,600 CU ; affiché par clé dans le tableau Clés de la console) ; une requête unique — y compris un batch JSON-RPC complet — dont le coût total en CU dépasse la capacité de burst de la clé est rejetée avec -32022 request_exceeds_burst, même sous la limite de 100 appels par batch ; découpez-la en batches plus petits. Cet exemple lit le chain ID et le solde d'un compte en un seul aller-retour :

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"]}
  ]'

Les réponses reviennent sous la forme d'un tableau, dans le même ordre que les requêtes, associées par id.

Si le serveur rejette l'ensemble du batch — solde insuffisant, limitation de débit, dépassement de burst ou batch trop volumineux (voir les Erreurs courantes ci-dessous) — il renvoie un objet d'erreur JSON-RPC unique au lieu d'un tableau ; le mode batch: true de viem le signale alors sous la forme d'une erreur opaque UnknownRpcError, réessayez donc un appel unique pour identifier l'erreur réelle.

Comprendre la facturation des CU

Chaque appel facturé consomme des Compute Units (CU) : les appels légers comme eth_blockNumber ou eth_chainId coûtent le moins cher, les lectures courantes comme eth_getBlockByNumber coûtent un peu plus, les appels plus lourds comme eth_call ou eth_getLogs coûtent davantage, et les méthodes de trace d'exécution (telles que debug_traceTransaction) coûtent le plus cher. L'utilisation est facturée par compte et par période d'une heure, arrondie à l'unité de facturation inférieure entière (1 unité = 1,000 CU), le solde restant étant reporté sur la période suivante (ainsi, sur l'ensemble des périodes, le total facturé est floor(total CU / 1,000)) ; le règlement a lieu environ 15 minutes après la fin de la période. Par exemple : 508 CU reportées + 2557 CU consommées = 3065 CU, soit 3 unités de facturation débitées et 65 CU reportées sur la période suivante. Consultez les Tarifs pour connaître les prix actuels.

Le tableau complet des pondérations méthode par méthode et les codes d'erreur figurent dans la Référence de l'API → JSON-RPC — cette page traite uniquement du format d'une requête.

Erreurs courantes

Ce que vous avez faitCe qui est renvoyéAction
Chaîne inconnue ou pas encore publiqueHTTP 404 avec corps JSON error.data.reason: "unknown_chain"Vérifiez le nom de la chaîne dans l'URL
Requête sans segment de chaîne (par ex. /v1 ou /v1/)HTTP 404 avec un corps videIncluez le nom de la chaîne dans l'URL (/v1/{chain})
API key manquante, inconnue ou désactivéeHTTP 401, code JSON-RPC -32024 (missing_api_key ou invalid_api_key)Utilisez une API key valide et active (les clés nouvellement créées ou renouvelées prennent effet sur chaque instance en environ 5 secondes ; durant ce laps de temps, elles peuvent renvoyer 401 invalid_api_key, ou 503 -32021 (avec Retry-After) lorsque l'état de facturation ne peut pas être confirmé pour le moment, patientez donc un instant puis réessayez)
Solde nul ou négatifHTTP 402, code JSON-RPC -32020Rechargez votre solde ou attendez la recharge gratuite
Envoi de requêtes trop rapide (limite de débit ou surcharge temporaire)HTTP 429 (ou 200), code JSON-RPC -32005Réessayez plus tard (respectez Retry-After lorsqu'il est présent)
Requête unique ou batch dépassant la capacité de burst de la clé (burst_cu, par défaut 1,600 CU ; débit par défaut 400 CU/s), ou le lot du forfait gratuit dépasse les appels/sec (25 appels/s)HTTP 429, code JSON-RPC -32022 (request_exceeds_burst)Découpez la requête en batches plus petits (ne pourra jamais aboutir sous cette forme)
Nœud en amont temporairement indisponibleHTTP 200, code JSON-RPC -32603 (upstream unavailable), non facturéRéessayez la requête
État historique situé en dehors de la fenêtre d'état de cette chaîne (voir state_window_blocks dans GET /v1/chains)HTTP 200, code JSON-RPC -32011, non facturéInterrogez un bloc plus récent
Transaction ou bloc non trouvé, ou réponse trop volumineuse ; sur Ethereum, les requêtes de blocs / reçus / logs hors de la fenêtre récente renvoient également -32000 "old data not available due to pruning" (non facturé ; voir Chaînes prises en charge → Ethereum)HTTP 200, code JSON-RPC -32000Modifiez la requête (vérifiez le hash ou le numéro de bloc ; les hashs de trace mal formés renvoient transaction not found)
Traceur non autorisé, ou délai d'expiration de trace non autorisé (appels debug_trace)HTTP 200, code JSON-RPC -32602, non facturéUtilisez un traceur natif autorisé (callTracer, flatCallTracer, prestateTracer, 4byteTracer, noopTracer, ou omettez) et un délai ≤ 30s
Une méthode que la liste des méthodes de la chaîne n'autorise pas (voir Chaînes prises en charge)HTTP 200, code JSON-RPC -32601, non facturéN'appelez que des méthodes autorisées par la chaîne
Corps JSON mal forméHTTP 200, code JSON-RPC -32700, non facturéCorrigez la syntaxe JSON de la requête
Plus de 100 appels dans un seul batchHTTP 200, code JSON-RPC -32600 (batch too large), non facturéDécoupez le batch en 100 appels au maximum

Les rejets ci-dessus ne sont jamais facturés. Chaque appel accepté qui reçoit une réponse est facturé selon la pondération en CU publiée de la méthode ; le tableau des codes d'erreur énumère les cas qui ne sont pas facturés (voir la colonne Facturé dans les Codes d'erreur).

Appeler la Data API

La Data API expose les données de la chaîne en lecture seule (blocs, transactions, soldes, détenteurs, activité DEX, et plus encore) au format REST/JSON. Chaque route, à l'exception de GET https://api.blockvectra.com/v1/data/chains, est préfixée par un identifiant de chaîne : robinhood_mainnet est l'identifiant de chaîne (le champ chain renvoyé par /chains et dans meta) utilisé dans chaque chemin ci-dessous. GET https://api.blockvectra.com/v1/data/chains répertorie uniquement les chaînes publiques et renvoie seulement {"data": [...]} (pas de meta, pas de next_cursor). Les requêtes sont mesurées et facturées en Compute Units (CU) ; seules les réponses 2xx réussies sont facturées.

Chaque requête nécessite la même API key que pour le JSON-RPC — transmettez-la dans l'en-tête x-api-key. Chaque réponse réussie ciblée sur une chaîne utilise la même enveloppe : data (la charge utile), next_cursor (une chaîne opaque, présente uniquement lorsqu'il existe une page suivante — sinon la clé est totalement absente, jamais null), et meta (chain, chain_slug (forme en majuscules de chain), chain_external_id, as_of_block, safe_block, finalized_block, coverage, refreshed_at ; refreshed_at peut être null, ce qui signifie que l'heure de mise à jour des données est inconnue et qu'elles doivent être considérées comme obsolètes — les points de terminaison basés sur les blocs renvoient toujours une valeur). Les réponses d'erreur contiennent généralement {"error":{"code","message"}} — 409 not_indexed_yet ajoute indexed_through (le bloc indexé le plus élevé). Une chaîne inconnue ou non publique renvoie HTTP 404 avec error.code not_found (non facturé ; les noms de chaînes doivent être des slugs exacts en minuscules) ; une API key manquante, inconnue ou désactivée renvoie HTTP 401 avec error.code missing_api_key ou invalid_api_key. Les requêtes soumises à une limitation de débit renvoient HTTP 429 (error.code rate_limited, data.reason: "key_rate_limit"), et un solde épuisé renvoie HTTP 402 (error.code insufficient_balance) ; les deux ne sont pas facturés. Les valeurs pouvant dépasser 2^53 (soldes, montants de tokens) sont des chaînes décimales, jamais des nombres JSON.

Consulter un bloc par numéro :

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"
  }
}

Un numéro supérieur à la tête indexée (as_of_block) renvoie 409 (error.code: "not_indexed_yet") avec indexed_through indiquant le bloc indexé le plus élevé — les données ne sont pas encore disponibles, réessayez donc plus tard. Un numéro de bloc entièrement antérieur à l'historique couvert de la chaîne (coverage.from_block) renvoie 422 (error.code: "no_coverage"). Dans la zone de couverture, un numéro inférieur ou égal à as_of_block sans enregistrement actif (jamais indexé ou annulé lors d'une réorganisation) renvoie 404 (error.code: "not_found").

Vérifier la fraîcheur des données (dans quelle mesure chaque jeu de données suivi accuse un retard par rapport à la tête de la chaîne — utile pour une page de statut ou un contrôle préalable avant de faire confiance à une requête) :

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"
  }
}

(Abrégé : la réponse comporte une ligne par jeu de données ; seule la ligne blocks est affichée. La ligne traces comporte également coverage_from_block, coverage_to_block et coverage_complete.)

Si les données de fraîcheur sont temporairement indisponibles pour cette chaîne, cette requête renvoie 503 (error.code: "unavailable") au lieu d'un résultat partiel ; la réponse comprend un en-tête Retry-After (en secondes) — attendez au moins cette durée avant de réessayer.

Lister les soldes ERC-20 d'une adresse (un instantané filtré sur les soldes non nuls, ordonné par 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"
  }
}

Une adresse sans aucun solde non nul renvoie tout de même 200 avec data: [] — jamais 404. Transmettez ?limit= (50 par défaut, max 500) ainsi que le next_cursor renvoyé pour parcourir les pages suivantes.

La couverture complète des points de terminaison — blocs, transactions, adresses, tokens, NFT, DEX, actions tokenisées — est disponible dans la Référence de l'API → Data API.

Pour aller plus loin

FAQ

Quelles chaînes sont prises en charge ?

9 chaînes sont prises en charge : Arbitrum One, Base, BNB Smart Chain, Ethereum, Ethereum Sepolia, HyperEVM, Polygon, Robinhood Chain, Robinhood Chain Testnet. La liste suit GET /v1/chains et se met à jour lors du lancement de nouvelles chaînes. Consultez la page d'état pour connaître l'état en direct. Voir les chaînes prises en charge →

WebSocket est-il pris en charge ?

L'appel de eth_subscribe via HTTP renvoie -32601 ; sur les chaînes où ws est true dans /v1/chains, eth_subscribe est disponible via WebSocket. Sinon, interrogez eth_getLogs. Voir les chaînes prises en charge →

Puis-je interroger l'état historique et les traces ?

Oui, mais cela varie selon la chaîne. La fenêtre d'état historique est définie par le champ state_window_blocks de /v1/chains (null signifie historique complet) ; la disponibilité des traces dépend du fait que methods.allow pour cette chaîne inclut des méthodes debug_trace (telles que debug_traceTransaction) ; la plage maximale de blocs pour une seule requête eth_getLogs est max_logs_block_range. Voir le répertoire des chaînes et les paramètres par chaîne →

Une seule clé API peut-elle être utilisée sur toutes les chaînes ?

Oui. Une seule clé API fonctionne pour le JSON-RPC sur chaque chaîne prise en charge et pour la Data API sur les chaînes qui la proposent ; une clé appartient au compte, pas à une chaîne spécifique. Lire le guide « Une clé, plusieurs chaînes » →

Dernière mise à jour :

Sur cette page