Inicio rápido

Consulte la altura de bloque sin API key, cree una API key, envíe su primera llamada autenticada y consulte acciones, recupere logs históricos o reciba Webhooks.

Los desarrolladores y agentes de IA pueden probar el RPC público sin una API key y, luego, crear una API key para continuar.

1. Consultar la altura de bloque sin API key

Llame al punto de enlace JSON-RPC público de la cadena de ejemplo robinhood_mainnet sin crear una cuenta ni proporcionar una 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":[]}'

El id: 1 de la respuesta coincide con esta solicitud; result es una altura de bloque hexadecimal y puede cambiar entre llamadas. Si la respuesta contiene error, verifique su código y motivo. Consulte los puntos de enlace RPC públicos gratuitos para ver métodos públicos, rangos históricos y límites por IP.

2. Crear una API key

Acceda a la consola, inicie sesión con GitHub, Google o una billetera Ethereum (su cuenta se crea en el primer inicio de sesión) y cree una API key. El secreto se muestra solo una vez: guárdelo de forma segura y configúrelo en la variable de entorno BLOCKVECTRA_API_KEY. No lo incluya en código ejecutado en el navegador del cliente. Las cuentas nuevas reciben 30,000,000 CU al registrarse — sin tarjeta de crédito.

¿Aún no tiene una API key?

Si tiene una billetera Ethereum: siga la guía de registro programático para registrarse y crear una API key con la firma de una billetera Ethereum, sin necesidad de navegador. Si no tiene una billetera: pídale al usuario que inicie sesión en console.blockvectra.com, cree una API key y la configure en la variable de entorno BLOCKVECTRA_API_KEY. No le pida al usuario que pegue la API key en el chat.

3. Enviar tu primera llamada autenticada

Consulte la altura de bloque de la misma cadena con el encabezado x-api-key. La URL termina con el nombre de la cadena, sin barra diagonal 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 es nuevamente una altura de bloque hexadecimal. Esta solicitud consume CU; consulte la referencia JSON-RPC para ver los pesos de los métodos y los códigos de error, y Precios para conocer los precios actuales. Una nueva API key entra en vigor en unos 5 segundos; si recibe invalid_api_key, espere un momento y reintente. Consulte Errores comunes a continuación para ver otros fallos.

4. Continuar con una tarea de negocio

Referencia

API keys y saldo

Plantilla de inicio completa: blockvectra/agent-quickstart

Toda API key tiene el prefijo rgw_ seguido de 64 caracteres hexadecimales, por ejemplo rgw_1f2e... (abreviado). Manténgala en secreto — cualquier persona con la API key puede consumir su saldo.

Cuando su saldo es insuficiente, el servidor devuelve HTTP 402 (código de error JSON-RPC -32020; Data API error.code insufficient_balance). Visite la página de facturación de la consola para comprobar su saldo y los métodos de recarga.

Probar sin una API key

Puedes llamar al endpoint JSON-RPC público de inmediato sin crear una cuenta ni proporcionar una 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":[]}'

El endpoint en el siguiente ejemplo tiene límite de tasa por IP (3 req/s, ráfaga de 20, máximo de 10 llamadas por lote). Las solicitudes que superan los límites devuelven HTTP 429 con motivo public_rate_limit o public_pool_busy (con encabezado Retry-After); los métodos no admitidos devuelven el error JSON-RPC -32601 (method_not_public).

Endpoints públicos por cadena

  • Arbitrum One: https://api.blockvectra.com/v1/arb_mainnet/public — Leer y transmitir transacciones firmadas (eth_sendRawTransaction)
  • Base: https://api.blockvectra.com/v1/base_mainnet/public — Leer y transmitir transacciones firmadas (eth_sendRawTransaction)
  • BNB Smart Chain: https://api.blockvectra.com/v1/bsc_mainnet/public — Leer y transmitir transacciones firmadas (eth_sendRawTransaction)
  • Ethereum: https://api.blockvectra.com/v1/eth_mainnet/public — Leer y transmitir transacciones firmadas (eth_sendRawTransaction)
  • Ethereum Sepolia: https://api.blockvectra.com/v1/eth_sepolia/public — Leer y transmitir transacciones firmadas (eth_sendRawTransaction)
  • HyperEVM: https://api.blockvectra.com/v1/hyperevm_mainnet/public — Solo lectura
  • Polygon: https://api.blockvectra.com/v1/polygon_mainnet/public — Leer y transmitir transacciones firmadas (eth_sendRawTransaction)
  • Robinhood Chain: https://api.blockvectra.com/v1/robinhood_mainnet/public — Leer y transmitir transacciones firmadas (eth_sendRawTransaction)
  • Robinhood Chain Testnet: https://api.blockvectra.com/v1/robinhood_testnet/public — Leer y transmitir transacciones firmadas (eth_sendRawTransaction)

Los dos puntos de enlace públicos de metadatos a continuación muestran el estado del servicio y la configuración de cada cadena; no requieren API key y no se facturan.

Verificar el estado del servicio y de las cadenas

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

Devuelve la marca temporal de verificación checked_at, el estado operativo del servicio gateway.status y, para cada cadena compatible, el progreso de sincronización del nodo sync, la altura del bloque más reciente y la latencia 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 cadenas compatibles y políticas de métodos

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

Devuelve el chain_id de cada cadena compatible, los indicadores de capacidad de JSON-RPC, Data API y WebSocket, las políticas de métodos permitidos y denegados (methods.allow y methods.deny), el límite de rango de bloques por consulta de logs max_logs_block_range y la ventana 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": {}
    }
  ]
}

Elegir una cadena

Cada punto de enlace de BlockVectra corresponde a una cadena: las solicitudes JSON-RPC incluyen el nombre de la cadena {chain} en la ruta de la URL, y las solicitudes de la Data API lo usan como prefijo de la ruta. Consulte Cadenas compatibles para ver las cadenas disponibles y sus identificadores.

Cadena{chain}Chain IDTracingEndpoint públicoWebSocketData APIMétodos con clave APINotificaciones WebhookEnviar transaccionesEnviar transacciones (endpoint público sin key)Ventana de historial de estadoRango máximo de bloques para eth_getLogsConjuntos de datos de Data APIRedes de prueba relacionadasGuías relacionadas
RPC y Data API de arb_mainnetarb_mainnet42161✓https://api.blockvectra.com/v1/arb_mainnet/publicNo compatibleDisponible43Compatible · Confirmaciones 1–1 (predeterminado 1)
Guía de notificaciones Webhook
CompatibleCompatibleEstado histórico para los 6,000 bloques más recientes1,000 bloquesBloques, Transacciones, Transacciones de direcciones, Transferencias, Metadatos de tokens, Frescura de datosDesconocidaDesconocida
RPC y Data API de base_mainnetbase_mainnet8453—https://api.blockvectra.com/v1/base_mainnet/publicNo compatibleDisponible39Compatible · Confirmaciones 1–1 (predeterminado 1)
Guía de notificaciones Webhook
CompatibleCompatibleEstado histórico para los 10,000 bloques más recientes1,000 bloquesBloques, Transacciones, Transacciones de direcciones, Transferencias, Metadatos de tokens, Frescura de datosDesconocidaBase
RPC y Data API de bsc_mainnetbsc_mainnet56—https://api.blockvectra.com/v1/bsc_mainnet/publicNo compatibleDisponible25Compatible · Confirmaciones 1–1 (predeterminado 1)
Guía de notificaciones Webhook
CompatibleCompatibleEstado histórico para los 100 bloques más recientes1,000 bloquesBloques, Transacciones, Transacciones de direcciones, Transferencias, Metadatos de tokens, Frescura de datosDesconocidaDesconocida
RPC y Data API de Ethereumeth_mainnet1✓https://api.blockvectra.com/v1/eth_mainnet/publicNo compatibleDisponible38Compatible · Confirmaciones 1–1 (predeterminado 1)
Guía de notificaciones Webhook
CompatibleCompatibleEstado histórico para los 250,000 bloques más recientes1,000 bloquesBloques, Transacciones, Transacciones de direcciones, Transferencias, Metadatos de tokens, Frescura de datosDesconocidaDesconocida
RPC y Data API de eth_sepoliaeth_sepolia11155111—https://api.blockvectra.com/v1/eth_sepolia/publicNo compatibleDisponible29Compatible · Confirmaciones 1–1 (predeterminado 1)
Guía de notificaciones Webhook
CompatibleCompatibleDesconocida1,000 bloquesBloques, Transacciones, Transacciones de direcciones, Transferencias, Metadatos de tokens, Frescura de datosDesconocidaDesconocida
RPC y Data API de HyperEVMhyperevm_mainnet999—https://api.blockvectra.com/v1/hyperevm_mainnet/publicNo compatibleDisponible24Compatible · Confirmaciones 1–1 (predeterminado 1)
Guía de notificaciones Webhook
No compatibleNo compatibleDesconocida1,000 bloquesBloques, Transacciones, Transacciones de direcciones, Transferencias, Metadatos de tokens, Saldos, Titulares, NFT, Frescura de datosDesconocidaHyperEVM backfill and polling
RPC y Data API de polygon_mainnetpolygon_mainnet137✓https://api.blockvectra.com/v1/polygon_mainnet/publicNo compatibleDisponible43Compatible · Confirmaciones 1–1 (predeterminado 1)
Guía de notificaciones Webhook
CompatibleCompatibleEstado histórico para los 126 bloques más recientes1,000 bloquesBloques, Transacciones, Transacciones de direcciones, Transferencias, Metadatos de tokens, Frescura de datosDesconocidaDesconocida
RPC y Data API de Robinhood Chainrobinhood_mainnet4663✓https://api.blockvectra.com/v1/robinhood_mainnet/publicCompatible (newHeads, logs)Disponible43Compatible · Confirmaciones 1–1 (predeterminado 1)
Guía de notificaciones Webhook
CompatibleCompatibleEstado histórico para los 900 bloques más recientes1,000 bloquesBloques, Transacciones, Transacciones de direcciones, Transferencias, Metadatos de tokens, Saldos, Titulares, NFT, Intercambios de DEX, Precios de DEX, Acciones tokenizadas, Trazas, Frescura de datosDesconocidaRobinhood Chain
Stock token multiplier

Tokenized stocks
RPC de robinhood_testnetrobinhood_testnet46630✓https://api.blockvectra.com/v1/robinhood_testnet/publicCompatible (newHeads, logs)Aún no disponible43Compatible · Confirmaciones 1–1 (predeterminado 1)
Guía de notificaciones Webhook
CompatibleCompatibleEstado histórico para los 1,023 bloques más recientes1,000 bloquesNo compatibleDesconocidaTestnet faucet
Robinhood Chain Testnet starter

Siguientes pasos con una clave 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

Crear una suscripción Webhook · Crear una suscripción Webhook · Uso y CU · Recargar

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

Crear una suscripción Webhook · Crear una suscripción Webhook · Uso y CU · Recargar

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

Crear una suscripción Webhook · Crear una suscripción Webhook · Uso y CU · Recargar

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

Crear una suscripción Webhook · Crear una suscripción Webhook · Uso y CU · Recargar

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

Crear una suscripción Webhook · Crear una suscripción Webhook · Uso y CU · Recargar

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

Crear una suscripción Webhook · Crear una suscripción Webhook · Uso y CU · Recargar

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

Crear una suscripción Webhook · Crear una suscripción Webhook · Uso y CU · Recargar

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

Crear una suscripción Webhook · Crear una suscripción Webhook · Uso y CU · Recargar

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

Crear una suscripción Webhook · Crear una suscripción Webhook · Uso y CU · Recargar

HyperEVM

Los bloques de HyperEVM incluyen transacciones del sistema HyperCore (desde la dirección 0x2222…2222 o 0x20…, gasPrice 0).

El envío de transacciones aún no es compatible en esta cadena (eth_sendRawTransaction devuelve -32601 method_not_allowed); los métodos de lectura funcionan con normalidad.

Todos los ejemplos de esta página usan robinhood_mainnet.

Consejo: elija en la matriz anterior una cadena que admita el servicio, el método y la ventana histórica del ejemplo; después sustituya robinhood_mainnet por su {chain}. La misma API key funciona en todas las cadenas compatibles.

Otras opciones de autenticación y ejemplos por lenguaje

Los puntos de enlace JSON-RPC corresponden a una cadena: POST /v1/{chain}/{api_key} con la API key en la ruta, o POST /v1/{chain} con la API key en el encabezado x-api-key. {chain} es el nombre de cadena que también utiliza la Data API; para Robinhood Chain es robinhood_mainnet, por lo que el punto de enlace de esta página es https://api.blockvectra.com/v1/robinhood_mainnet. Llamar a eth_subscribe mediante HTTP devuelve -32601; las suscripciones WebSocket se enumeran por cadena en Cadenas compatibles. La API envía Access-Control-Allow-Origin: *, pero debe mantener la API key en secreto y realizar las solicitudes desde un servicio backend en lugar de código ejecutado en el navegador del cliente.

Puede enviar la API key de tres formas: en la ruta de la URL (POST /v1/{chain}/{api_key}, que usa únicamente la API key de la ruta e ignora ambos encabezados), en el encabezado x-api-key o en un encabezado Authorization: Bearer <api_key>.

API key en la ruta de la 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 en un encabezado de solicitud

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

Sin barra diagonal final

Al enviar la API key en un encabezado, llame a https://api.blockvectra.com/v1/robinhood_mainnet exactamente como se muestra: la URL termina con el nombre de la cadena, sin barra diagonal final. JSON-RPC solo se sirve en /v1/{chain} y /v1/{chain}/{api_key}. Una barra diagonal final (como /v1/{chain}/) o una solicitud sin el segmento de la cadena (como /v1 o /v1/) devuelve 404 con un cuerpo vacío.

Un encabezado Authorization: Bearer <api_key> también funciona. En POST /v1/{chain}, un x-api-key no vacío tiene prioridad sobre Bearer, y Bearer se usa únicamente cuando x-api-key está ausente o vacío. La forma con API key en la ruta ignora ambos encabezados.

Llamadas por lotes

Envíe un array para realizar múltiples llamadas en una sola solicitud (hasta 100 por lote). Cada API key tiene un depósito de CU (reposición cu_per_sec, capacidad burst_cu — los valores predeterminados son 400 CU/s y ráfaga de 1,600 CU; mostrado por API key en la tabla Keys de la consola); una única solicitud —incluido un lote JSON-RPC completo— cuyo total de CU supere la capacidad de ráfaga de la API key se rechaza con -32022 request_exceeds_burst, incluso si está por debajo del límite de 100 llamadas por lote; divídala en lotes más pequeños. Este ejemplo consulta el Chain ID y el saldo de una cuenta en un solo viaje de ida y vuelta:

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

Las respuestas llegan en forma de array, en el mismo orden que las solicitudes, asociadas mediante el id.

Si el servidor rechaza el lote completo —por saldo insuficiente, límite de tasa, capacidad de ráfaga o lote demasiado grande (consulte Errores comunes a continuación)— devuelve un único objeto de error JSON-RPC en lugar de un array; el modo batch: true de viem muestra esto como un UnknownRpcError sin detalles, por lo que reintente una llamada individual para ver el error real.

Entender la facturación de CU

Toda llamada facturada consume Compute Units (CU): las llamadas ligeras como eth_blockNumber o eth_chainId tienen el menor costo, las lecturas habituales como eth_getBlockByNumber cuestan un poco más, las llamadas más complejas como eth_call o eth_getLogs cuestan más, y los métodos de traza de ejecución (como debug_traceTransaction) tienen el mayor costo. El uso se factura por cuenta por periodo de una hora, redondeado hacia abajo a unidades enteras de facturación (1 unidad = 1,000 CU), acumulándose el resto para el siguiente periodo (de modo que a través de los periodos el total cobrado es floor(total CU / 1,000)); la liquidación se ejecuta aprox. 15 minutos después de finalizar el periodo. Por ejemplo: 508 CU acumuladas + 2557 CU consumidas = 3065 CU, resultando en 3 unidades de facturación cobradas y 65 CU acumuladas para el siguiente periodo. Consulte Precios para conocer los precios actuales.

La tabla completa de pesos por método y los códigos de error se encuentran en Referencia de la API → JSON-RPC — esta página solo presenta el formato de una solicitud.

Errores comunes

Lo que hizoLo que devuelveAcción
Cadena desconocida o aún no públicaHTTP 404 con cuerpo JSON error.data.reason: "unknown_chain"Verifique el nombre de la cadena en la URL
Solicitud sin el segmento de la cadena (por ejemplo, /v1 o /v1/)HTTP 404 con cuerpo vacíoIncluya el nombre de la cadena en la URL (/v1/{chain})
API key ausente, desconocida o deshabilitadaHTTP 401, código JSON-RPC -32024 (missing_api_key o invalid_api_key)Use una API key válida y activa (las API keys nuevas o rotadas entran en vigor en todas las instancias en unos 5 segundos; durante ese intervalo pueden devolver 401 invalid_api_key o 503 -32021 (con Retry-After) cuando no se puede confirmar el estado de facturación en el momento, por lo que espere un momento y vuelva a intentar)
Saldo cero o negativoHTTP 402, código JSON-RPC -32020Recargue su saldo o espere a la renovación gratuita
Solicitudes enviadas con demasiada rapidez (límite de tasa o sobrecarga temporal)HTTP 429 (o 200), código JSON-RPC -32005Reintente más tarde (respete Retry-After cuando esté presente)
Solicitud individual o lote supera la capacidad de ráfaga de la API key (burst_cu, predeterminado 1,600 CU; tasa predeterminada 400 CU/s), o el lote del plan gratuito supera llamadas/s (25 llamadas/s)HTTP 429, código JSON-RPC -32022 (request_exceeds_burst)Divida la solicitud en lotes más pequeños (nunca tendrá éxito tal como se envió)
Nodo upstream no disponible temporalmenteHTTP 200, código JSON-RPC -32603 (upstream unavailable), sin facturaciónReintente la solicitud
Estado histórico fuera de la ventana de estado de la cadena (consulte state_window_blocks en GET /v1/chains)HTTP 200, código JSON-RPC -32011, sin facturaciónConsulte un bloque más reciente
Transacción o bloque no encontrado, o respuesta demasiado grande; en Ethereum, las consultas de bloques / recibos / logs fuera de la ventana reciente también devuelven -32000 "old data not available due to pruning" (sin facturación; consulte Cadenas compatibles → Ethereum)HTTP 200, código JSON-RPC -32000Modifique la solicitud (verifique el hash o número de bloque; los hashes de traza con formato incorrecto devuelven transacción no encontrada)
Trazador no permitido o tiempo de espera de traza no permitido (llamadas debug_trace)HTTP 200, código JSON-RPC -32602, sin facturaciónUse un trazador nativo permitido (callTracer, flatCallTracer, prestateTracer, 4byteTracer, noopTracer u omítalo) y tiempo de espera ≤ 30s
Método no permitido por la lista de métodos de la cadena (consulte Cadenas compatibles)HTTP 200, código JSON-RPC -32601, sin facturaciónLlame únicamente a los métodos permitidos por la cadena
Cuerpo JSON con formato incorrectoHTTP 200, código JSON-RPC -32700, sin facturaciónCorrija la sintaxis JSON de la solicitud
Más de 100 llamadas en un loteHTTP 200, código JSON-RPC -32600 (batch too large), sin facturaciónDivida el lote en un máximo de 100 llamadas

Los rechazos anteriores nunca se facturan. Toda llamada aceptada que reciba una respuesta se factura según el peso público de CU del método; la tabla de códigos de error detalla los casos sin facturación (consulte la columna de facturación en Códigos de error).

Llamar a la Data API

La Data API expone datos de cadena de solo lectura (bloques, transacciones, saldos, titulares, actividad en DEX y más) como REST/JSON. Toda ruta, excepto GET https://api.blockvectra.com/v1/data/chains, tiene un identificador de cadena como prefijo: robinhood_mainnet es el identificador de la cadena (el campo chain devuelto por /chains y en meta) utilizado en todas las rutas siguientes. GET https://api.blockvectra.com/v1/data/chains enumera únicamente cadenas públicas y devuelve solo {"data": [...]} (sin meta, sin next_cursor). Las solicitudes se miden y facturan en Compute Units (CU); únicamente las respuestas 2xx exitosas se facturan.

Toda solicitud requiere la misma API key utilizada en JSON-RPC — envíela en el encabezado x-api-key. Toda respuesta exitosa específica de una cadena utiliza la misma estructura: data (los datos), next_cursor (una cadena opaca, presente únicamente cuando hay otra página — de lo contrario, la clave no está presente, nunca null) y meta (chain, chain_slug (versión en mayúsculas de chain), chain_external_id, as_of_block, safe_block, finalized_block, coverage, refreshed_at; refreshed_at puede ser null, lo que indica que se desconoce el momento de actualización de los datos y deben tratarse como desactualizados — los puntos de enlace basados en bloques siempre devuelven un valor). Las respuestas de error normalmente contienen {"error":{"code","message"}} — 409 not_indexed_yet añade indexed_through (el bloque más reciente indexado). Una cadena desconocida o no pública devuelve HTTP 404 con error.code not_found (sin facturación; los nombres de cadena deben ser los slugs exactos en minúsculas); una API key ausente, desconocida o deshabilitada devuelve HTTP 401 con error.code missing_api_key o invalid_api_key. Las solicitudes limitadas por tasa devuelven HTTP 429 (error.code rate_limited, data.reason: "key_rate_limit"), y el saldo agotado devuelve HTTP 402 (error.code insufficient_balance); ambos sin facturación. Los valores que pueden superar 2^53 (saldos, cantidades de tokens) son cadenas decimales, nunca números JSON.

Consultar un bloque por 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"
  }
}

Un número por encima del bloque más reciente indexado (as_of_block) devuelve 409 (error.code: "not_indexed_yet"), con indexed_through indicando el bloque más reciente indexado — los datos aún no están disponibles, por lo que reintente más tarde. Un número de bloque anterior a todo el historial cubierto de la cadena (coverage.from_block) devuelve 422 (error.code: "no_coverage"). Dentro de la cobertura, un número igual o inferior a as_of_block sin registro activo (nunca indexado o revertido por reorg) devuelve 404 (error.code: "not_found").

Verificar la frescura de los datos (cuánto retraso lleva cada conjunto de datos supervisado respecto al bloque más reciente de la cadena — útil para una página de estado o comprobación antes de confiar en una 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: la respuesta contiene una fila por conjunto de datos; solo se muestra la fila blocks. La fila traces también contiene coverage_from_block, coverage_to_block y coverage_complete.)

Si los datos de actualización están temporalmente no disponibles para esa cadena, la respuesta será 503 (error.code: "unavailable") en lugar de un resultado parcial; la respuesta incluye un encabezado Retry-After (segundos) — espere al menos ese tiempo y reintente.

Listar los saldos ERC-20 de una dirección (una instantánea filtrada para saldos distintos de cero, ordenada 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"
  }
}

Una dirección sin saldos distintos de cero devuelve 200 con data: [] — nunca 404. Envíe ?limit= (por defecto 50, máximo 500) y el next_cursor devuelto para paginar las páginas siguientes.

La cobertura completa de los puntos de enlace —bloques, transacciones, direcciones, tokens, NFT, DEX y acciones tokenizadas— se encuentra en Referencia de la API → Data API.

Otras lecturas

FAQ

¿Qué cadenas están admitidas?

Se admiten 9 cadenas: Arbitrum One, Base, BNB Smart Chain, Ethereum, Ethereum Sepolia, HyperEVM, Polygon, Robinhood Chain, Robinhood Chain Testnet. La lista se basa en GET /v1/chains y se actualiza cuando se lanzan nuevas cadenas. Consulta la página de estado para ver el estado en tiempo real. Ver cadenas admitidas →

¿Se admite WebSocket?

Llamar a eth_subscribe a través de HTTP devuelve -32601; en las cadenas donde ws es true en /v1/chains, eth_subscribe está disponible a través de WebSocket. De lo contrario, sondea eth_getLogs. Ver cadenas admitidas →

¿Puedo consultar estados históricos y trazas?

Sí, pero varía según la cadena. La ventana de estado histórico es el campo state_window_blocks de /v1/chains (null significa historial completo); la disponibilidad de trazas depende de si methods.allow para esa cadena incluye métodos debug_trace (como debug_traceTransaction); el rango máximo de bloques para una sola solicitud eth_getLogs es max_logs_block_range. Ver el directorio de cadenas y los parámetros por cadena →

¿Se puede usar una sola clave de API en todas las cadenas?

Sí. Una sola clave de API funciona para JSON-RPC en todas las cadenas admitidas y para la Data API en las cadenas que la ofrecen; una clave pertenece a la cuenta, no a una cadena específica. Guía: una clave, muchas cadenas →

Última actualización:

En esta página