# Швидкий старт

> Source: https://docs.blockvectra.com/uk/quickstart/

Розробники та AI-агенти можуть спробувати публічний RPC без ключа, а потім створити ключ для продовження роботи.

## 1. Зчитування висоти блоку без ключа

Викличте публічний ендпоінт JSON-RPC для прикладу мережі `robinhood_mainnet` без створення акаунта або надання API key:

```bash
curl -s "https://api.blockvectra.com/v1/robinhood_mainnet/public" \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
```

Значення `id: 1` у відповіді відповідає цьому запиту; `result` є шістнадцятковою висотою блоку і може змінюватися між викликами. Якщо відповідь містить `error`, перевірте її код та причину. Перегляньте [безкоштовні публічні ендпоінти RPC](https://blockvectra.com/en/free/#public-rpc) для ознайомлення з публічними методами, діапазонами історії та лімітами на IP.

## 2. Створення API key

Перейдіть до [консолі](https://console.blockvectra.com/login/?next=%2Fkeys%2F), увійдіть за допомогою GitHub, Google або гаманця Ethereum (ваш акаунт створюється під час першого входу) та створіть API key. Секрет відображається лише один раз: надійно збережіть його та встановіть як змінну середовища `BLOCKVECTRA_API_KEY`. Не додавайте його до клієнтського коду браузера. Нові акаунти отримують 30,000,000 CU під час реєстрації — без кредитної картки.

> **Ще немає API key?**
>
> Якщо у вас є гаманець Ethereum: дотримуйтесь [посібника з програмної реєстрації](https://docs.blockvectra.com/en/guides/programmatic-signup/), щоб зареєструватися та створити API key за допомогою підпису гаманця Ethereum без браузера. Якщо у вас немає гаманця: попросіть користувача увійти на [console.blockvectra.com](https://console.blockvectra.com/login/?next=%2Fkeys%2F), створити ключ і встановити його як змінну середовища `BLOCKVECTRA_API_KEY`. Не просіть користувача вставляти ключ у чат.


## 3. Відправлення першого автентифікованого виклику

Зчитайте висоту блоку тієї самої мережі із заголовком `x-api-key`. URL закінчується назвою мережі без скісної риски в кінці:

```bash
: "${BLOCKVECTRA_API_KEY:?Set BLOCKVECTRA_API_KEY first}"

curl -s "https://api.blockvectra.com/v1/robinhood_mainnet" \
  -H 'Content-Type: application/json' \
  -H "x-api-key: $BLOCKVECTRA_API_KEY" \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
```

`result` знову є шістнадцятковою висотою блоку. Цей запит споживає CU; перегляньте [довідник JSON-RPC](https://docs.blockvectra.com/en/api/json-rpc/) щодо ваги методів та кодів помилок, а також [Ціни](https://blockvectra.com/en/pricing/) для актуальних тарифів. Новий ключ набуває чинності приблизно через 5 секунд; якщо ви отримали `invalid_api_key`, зачекайте трохи та повторіть спробу. Інші можливі збої див. у розділі [Поширені помилки](#common-errors) нижче.

## 4. Продовження роботи з бізнес-завданням

* [Запит ончейн-активності токенізованих акцій на Robinhood Chain](https://docs.blockvectra.com/en/guides/stocks/)
* [Заповнення логів HyperEVM частинами](https://docs.blockvectra.com/en/guides/hyperevm-backfill/)
* [Отримання активності гаманця та переказів токенів за допомогою вебхуків](https://docs.blockvectra.com/en/guides/webhook-push/)

## Довідка

### Ключі API та баланс

Повний стартовий шаблон: [blockvectra/agent-quickstart](https://github.com/blockvectra/agent-quickstart)

Кожен ключ має вигляд `rgw_`, за яким слідують 64 шістнадцяткові символи, наприклад
`rgw_1f2e...` (скорочено). Зберігайте його в таємниці — будь-хто з цим ключем може витрачати ваш баланс.

> Якщо ваш баланс недостатній, сервер повертає HTTP 402 (код помилки JSON-RPC `-32020`; `error.code` у Data API `insufficient_balance`). Перейдіть на сторінку [Тарифікація](https://console.blockvectra.com/billing/) в консолі, щоб перевірити баланс та способи поповнення.


### Спробуйте без ключа

Ви можете викликати публічний ендпоінт JSON-RPC одразу, без створення акаунта та без надання API key. Ендпоінт у наведеному нижче прикладі має обмеження частоти запитів на IP (3 зап/с, сплеск 20, макс. пакет 10). Запити, що перевищують ліміти частоти, повертають HTTP 429 з причиною `public_rate_limit` або `public_pool_busy` (із заголовком `Retry-After`); непідтримувані методи повертають помилку JSON-RPC `-32601` (`method_not_public`).

```bash
# Прямий публічний ендпоінт:
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":[]}'

# Або за шаблоном резервного використання API key (за замовчуванням публічний, якщо BLOCKVECTRA_API_KEY не встановлено):
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":[]}'
```

#### Публічні ендпоінти за мережами

- Arbitrum One: https://api.blockvectra.com/v1/arb_mainnet/public — Читання та трансляція підписаних транзакцій (eth_sendRawTransaction)
- Base: https://api.blockvectra.com/v1/base_mainnet/public — Читання та трансляція підписаних транзакцій (eth_sendRawTransaction)
- BNB Smart Chain: https://api.blockvectra.com/v1/bsc_mainnet/public — Читання та трансляція підписаних транзакцій (eth_sendRawTransaction)
- Ethereum: https://api.blockvectra.com/v1/eth_mainnet/public — Читання та трансляція підписаних транзакцій (eth_sendRawTransaction)
- Ethereum Sepolia: https://api.blockvectra.com/v1/eth_sepolia/public — Читання та трансляція підписаних транзакцій (eth_sendRawTransaction)
- HyperEVM: https://api.blockvectra.com/v1/hyperevm_mainnet/public — Лише для читання
- Polygon: https://api.blockvectra.com/v1/polygon_mainnet/public — Читання та трансляція підписаних транзакцій (eth_sendRawTransaction)
- Robinhood Chain: https://api.blockvectra.com/v1/robinhood_mainnet/public — Читання та трансляція підписаних транзакцій (eth_sendRawTransaction)
- Robinhood Chain Testnet: https://api.blockvectra.com/v1/robinhood_testnet/public — Читання та трансляція підписаних транзакцій (eth_sendRawTransaction)

Наступні два публічні ендпоінти метаданих відображають статус сервісу та конфігурацію кожної мережі; вони не вимагають API key і не тарифікуються.

### Перевірка стану працездатності сервісу та мереж

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

Повертає мітку часу перевірки `checked_at`, робочий статус сервісу `gateway.status` та прогрес синхронізації нод кожної підтримуваної мережі `sync`, висоту останнього блоку та затримку `head`:

```json
{
  "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
      }
    }
  ]
}
```

### Запит підтримуваних мереж та політик методів

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

Повертає `chain_id` кожної підтримуваної мережі, прапорці можливостей для JSON-RPC, Data API та WebSocket, політики дозволу та заборони методів (`methods.allow` та `methods.deny`), ліміт діапазону блоків логів для одного запиту `max_logs_block_range` та вікно історичного стану `state_window_blocks`:

```json
{
  "chains": [
    {
      "chain": "bsc_mainnet",
      "name": "BNB Smart Chain",
      "chain_id": 56,
      "jsonrpc": true,
      "data": true,
      "ws": false,
      "subscriptions": [],
      "methods": {
        "allow": [
          "eth_blockNumber",
          "eth_call",
          "eth_chainId",
          "eth_getLogs"
        ],
        "deny": [
          "eth_newFilter",
          "eth_subscribe",
          "eth_unsubscribe"
        ]
      },
      "max_logs_block_range": 1000,
      "state_window_blocks": 990000,
      "info": {}
    }
  ]
}
```

### Вибір мережі

Кожен ендпоінт BlockVectra прив'язаний до певної мережі: запити JSON-RPC містять назву мережі `{chain}` у шляху URL, а запити Data API додають її префіксом до маршруту. Перегляньте [Підтримувані мережі](https://docs.blockvectra.com/en/chains/) щодо доступних наразі мереж та їхніх ідентифікаторів.

| Мережа | {chain} | Chain ID | Tracing | Публічний ендпоінт | WebSocket | Data API | Кількість методів з API key | Webhook-сповіщення | Надсилання транзакцій | Надсилання транзакцій (публічний ендпоінт без key) | Вікно історії стану | Максимальний діапазон блоків eth_getLogs | Набори даних Data API | Пов'язані тестові мережі | Пов'язані посібники |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| [arb_mainnet: RPC та Data API](https://blockvectra.com/uk/chains/arb_mainnet/) | arb_mainnet | 42161 | ✓ | `https://api.blockvectra.com/v1/arb_mainnet/public` | Не підтримується | Відкрито | 43 | [Підтримується · Підтвердження 1–1 (за замовчуванням 1)](https://blockvectra.com/uk/webhooks/), [Посібник із Webhook-сповіщень](https://docs.blockvectra.com/uk/guides/webhook-push/) | Підтримується | Підтримується | Історичний стан за останні 5,000 блоків | 1,000 блоків | Блоки, Транзакції, Транзакції адреси, Перекази токенів, Метадані токенів, Свіжість даних | Невідомо | Невідомо |
| [base_mainnet: RPC та Data API](https://blockvectra.com/uk/chains/base_mainnet/) | base_mainnet | 8453 | — | `https://api.blockvectra.com/v1/base_mainnet/public` | Не підтримується | Відкрито | 39 | [Підтримується · Підтвердження 1–1 (за замовчуванням 1)](https://blockvectra.com/uk/webhooks/), [Посібник із Webhook-сповіщень](https://docs.blockvectra.com/uk/guides/webhook-push/) | Підтримується | Підтримується | Історичний стан за останні 10,000 блоків | 1,000 блоків | Блоки, Транзакції, Транзакції адреси, Перекази токенів, Метадані токенів, Свіжість даних | Невідомо | [Base](https://docs.blockvectra.com/uk/guides/base/) |
| [bsc_mainnet: RPC та Data API](https://blockvectra.com/uk/chains/bsc_mainnet/) | bsc_mainnet | 56 | — | `https://api.blockvectra.com/v1/bsc_mainnet/public` | Не підтримується | Відкрито | 25 | [Підтримується · Підтвердження 1–1 (за замовчуванням 1)](https://blockvectra.com/uk/webhooks/), [Посібник із Webhook-сповіщень](https://docs.blockvectra.com/uk/guides/webhook-push/) | Підтримується | Підтримується | Історичний стан за останні 100 блоків | 1,000 блоків | Блоки, Транзакції, Транзакції адреси, Перекази токенів, Метадані токенів, Свіжість даних | Невідомо | Невідомо |
| [Ethereum: RPC та Data API](https://blockvectra.com/uk/chains/eth_mainnet/) | eth_mainnet | 1 | ✓ | `https://api.blockvectra.com/v1/eth_mainnet/public` | Не підтримується | Відкрито | 38 | [Підтримується · Підтвердження 1–1 (за замовчуванням 1)](https://blockvectra.com/uk/webhooks/), [Посібник із Webhook-сповіщень](https://docs.blockvectra.com/uk/guides/webhook-push/) | Підтримується | Підтримується | Історичний стан за останні 250,000 блоків | 1,000 блоків | Блоки, Транзакції, Транзакції адреси, Перекази токенів, Метадані токенів, Свіжість даних | Невідомо | Невідомо |
| [eth_sepolia: RPC та Data API](https://blockvectra.com/uk/chains/eth_sepolia/) | eth_sepolia | 11155111 | — | `https://api.blockvectra.com/v1/eth_sepolia/public` | Не підтримується | Відкрито | 29 | [Підтримується · Підтвердження 1–1 (за замовчуванням 1)](https://blockvectra.com/uk/webhooks/), [Посібник із Webhook-сповіщень](https://docs.blockvectra.com/uk/guides/webhook-push/) | Підтримується | Підтримується | Невідомо | 1,000 блоків | Блоки, Транзакції, Транзакції адреси, Перекази токенів, Метадані токенів, Свіжість даних | Невідомо | Невідомо |
| [HyperEVM: RPC та Data API](https://blockvectra.com/uk/chains/hyperevm_mainnet/) | hyperevm_mainnet | 999 | — | `https://api.blockvectra.com/v1/hyperevm_mainnet/public` | Не підтримується | Відкрито | 24 | [Підтримується · Підтвердження 1–1 (за замовчуванням 1)](https://blockvectra.com/uk/webhooks/), [Посібник із Webhook-сповіщень](https://docs.blockvectra.com/uk/guides/webhook-push/) | Не підтримується | Не підтримується | Невідомо | 1,000 блоків | Блоки, Транзакції, Транзакції адреси, Перекази токенів, Метадані токенів, Баланси, Власники, NFT, Свіжість даних | Невідомо | [Бекфіл та опитування HyperEVM](https://docs.blockvectra.com/uk/guides/hyperevm-backfill/) |
| [polygon_mainnet: RPC та Data API](https://blockvectra.com/uk/chains/polygon_mainnet/) | polygon_mainnet | 137 | ✓ | `https://api.blockvectra.com/v1/polygon_mainnet/public` | Не підтримується | Відкрито | 43 | [Підтримується · Підтвердження 1–1 (за замовчуванням 1)](https://blockvectra.com/uk/webhooks/), [Посібник із Webhook-сповіщень](https://docs.blockvectra.com/uk/guides/webhook-push/) | Підтримується | Підтримується | Історичний стан за останні 126 блоків | 1,000 блоків | Блоки, Транзакції, Транзакції адреси, Перекази токенів, Метадані токенів, Свіжість даних | Невідомо | Невідомо |
| [Robinhood Chain: RPC та Data API](https://blockvectra.com/uk/chains/robinhood_mainnet/) | robinhood_mainnet | 4663 | ✓ | `https://api.blockvectra.com/v1/robinhood_mainnet/public` | Підтримується (newHeads, logs) | Відкрито | 43 | [Підтримується · Підтвердження 1–1 (за замовчуванням 1)](https://blockvectra.com/uk/webhooks/), [Посібник із Webhook-сповіщень](https://docs.blockvectra.com/uk/guides/webhook-push/) | Підтримується | Підтримується | Історичний стан за останні 900 блоків | 1,000 блоків | Блоки, Транзакції, Транзакції адреси, Перекази токенів, Метадані токенів, Баланси, Власники, NFT, Свопи DEX, Ціни DEX, Токенізовані акції, Трасування, Свіжість даних | Невідомо | [Robinhood Chain](https://docs.blockvectra.com/uk/guides/robinhood-chain/), [Мультиплікатор токенів акцій](https://docs.blockvectra.com/uk/guides/stock-token-multiplier/), [Токенізовані акції](https://docs.blockvectra.com/uk/guides/stocks/) |
| [robinhood_testnet: RPC](https://blockvectra.com/uk/chains/robinhood_testnet/) | robinhood_testnet | 46630 | ✓ | `https://api.blockvectra.com/v1/robinhood_testnet/public` | Підтримується (newHeads, logs) | Поки недоступно | 43 | [Підтримується · Підтвердження 1–1 (за замовчуванням 1)](https://blockvectra.com/uk/webhooks/), [Посібник із Webhook-сповіщень](https://docs.blockvectra.com/uk/guides/webhook-push/) | Підтримується | Підтримується | Історичний стан за останні 1,023 блоків | 1,000 блоків | Не підтримується | Невідомо | [Кран testnet](https://docs.blockvectra.com/uk/guides/robinhood-testnet-faucet/), [Стартовий посібник Robinhood Chain Testnet](https://docs.blockvectra.com/uk/guides/robinhood-testnet-starter/) |

## Наступні кроки з API key

### 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/uk/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/uk/api/data/)

[Створити Webhook-підписку](https://blockvectra.com/uk/webhooks/) · [Створити Webhook-підписку](https://docs.blockvectra.com/uk/guides/webhook-push/) · [Використання та CU](https://console.blockvectra.com/usage/) · [Поповнити баланс](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/uk/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/uk/api/data/)

[Створити Webhook-підписку](https://blockvectra.com/uk/webhooks/) · [Створити Webhook-підписку](https://docs.blockvectra.com/uk/guides/webhook-push/) · [Використання та CU](https://console.blockvectra.com/usage/) · [Поповнити баланс](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/uk/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/uk/api/data/)

[Створити Webhook-підписку](https://blockvectra.com/uk/webhooks/) · [Створити Webhook-підписку](https://docs.blockvectra.com/uk/guides/webhook-push/) · [Використання та CU](https://console.blockvectra.com/usage/) · [Поповнити баланс](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/uk/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/uk/api/data/)

[Створити Webhook-підписку](https://blockvectra.com/uk/webhooks/) · [Створити Webhook-підписку](https://docs.blockvectra.com/uk/guides/webhook-push/) · [Використання та CU](https://console.blockvectra.com/usage/) · [Поповнити баланс](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/uk/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/uk/api/data/)

[Створити Webhook-підписку](https://blockvectra.com/uk/webhooks/) · [Створити Webhook-підписку](https://docs.blockvectra.com/uk/guides/webhook-push/) · [Використання та CU](https://console.blockvectra.com/usage/) · [Поповнити баланс](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/uk/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/uk/api/data/)

[Створити Webhook-підписку](https://blockvectra.com/uk/webhooks/) · [Створити Webhook-підписку](https://docs.blockvectra.com/uk/guides/webhook-push/) · [Використання та CU](https://console.blockvectra.com/usage/) · [Поповнити баланс](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/uk/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/uk/api/data/)

[Створити Webhook-підписку](https://blockvectra.com/uk/webhooks/) · [Створити Webhook-підписку](https://docs.blockvectra.com/uk/guides/webhook-push/) · [Використання та CU](https://console.blockvectra.com/usage/) · [Поповнити баланс](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/uk/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/uk/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/uk/guides/websocket-subscriptions/)

[Створити Webhook-підписку](https://blockvectra.com/uk/webhooks/) · [Створити Webhook-підписку](https://docs.blockvectra.com/uk/guides/webhook-push/) · [Використання та CU](https://console.blockvectra.com/usage/) · [Поповнити баланс](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/uk/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/uk/guides/websocket-subscriptions/)

[Створити Webhook-підписку](https://blockvectra.com/uk/webhooks/) · [Створити Webhook-підписку](https://docs.blockvectra.com/uk/guides/webhook-push/) · [Використання та CU](https://console.blockvectra.com/usage/) · [Поповнити баланс](https://console.blockvectra.com/billing/)

**HyperEVM**
Блоки HyperEVM містять системні транзакції HyperCore (з адреси 0x2222…2222 або 0x20…, gasPrice 0).
Надсилання транзакцій у цій мережі поки не підтримується (`eth_sendRawTransaction` повертає `-32601` `method_not_allowed`); методи читання працюють нормально.

[Переглянути статус наживо →](https://blockvectra.com/uk/status/)

Усі приклади на цій сторінці використовують `robinhood_mainnet`.

> **Порада**: виберіть мережу, яка підтримує необхідний сервіс, метод та вікно історії з матриці вище, а потім замініть `robinhood_mainnet` на її `{chain}`. Один і той самий API key працює в усіх підтримуваних мережах.

### Інші варіанти автентифікації та приклади мовами програмування

Ендпоінти JSON-RPC прив'язані до мережі: `POST /v1/{chain}/{api_key}` з ключем у
шляху, або `POST /v1/{chain}` з ключем у заголовку `x-api-key`. `{chain}` — це назва
мережі, яку також використовує Data API; для Robinhood Chain це `robinhood_mainnet`, тому ендпоінт
на цій сторінці — `https://api.blockvectra.com/v1/robinhood_mainnet`. Виклик `eth_subscribe` через HTTP повертає `-32601`; підписки WebSocket перелічені для кожної мережі в розділі [Підтримувані мережі](https://docs.blockvectra.com/en/chains/). API повертає заголовок `Access-Control-Allow-Origin: *`, проте вам слід зберігати ваш
API key у таємниці та здійснювати запити з бекенд-сервісу, а не з коду браузера на боці клієнта.

Ви можете передавати ключ одним із трьох способів: у шляху URL (`POST /v1/{chain}/{api_key}`, який використовує лише ключ у шляху та ігнорує обидва заголовки), у заголовку `x-api-key` або в заголовку `Authorization: Bearer <api_key>`.

#### Ключ у шляху URL

**cURL**

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


  **TypeScript**

```ts
import { createPublicClient, http } from "viem";

const key = process.env.BLOCKVECTRA_API_KEY!;
const client = createPublicClient({
  transport: http(`https://api.blockvectra.com/v1/robinhood_mainnet/${key}`),
});

console.log(await client.getBlockNumber());

// Run with: npx tsx example.mts
```

Повний стартовий шаблон: [blockvectra/multichain-viem](https://github.com/blockvectra/multichain-viem)


  **Python**

```python
import os

from web3 import Web3

w3 = Web3(Web3.HTTPProvider("https://api.blockvectra.com/v1/robinhood_mainnet/" + os.environ["BLOCKVECTRA_API_KEY"]))
print(w3.eth.block_number)
```


  **Go**

```go
// Run with: go mod init example && go get github.com/ethereum/go-ethereum && go mod tidy && go run .
package main

import (
	"context"
	"fmt"
	"log"
	"os"

	"github.com/ethereum/go-ethereum/ethclient"
)

func main() {
	client, err := ethclient.Dial("https://api.blockvectra.com/v1/robinhood_mainnet/" + os.Getenv("BLOCKVECTRA_API_KEY"))
	if err != nil {
		log.Fatal(err)
	}
	number, err := client.BlockNumber(context.Background())
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(number)
}
```


  **Rust**

```toml
[dependencies]
alloy = { version = "1", features = ["provider-http", "rpc-types"] }
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
```

```rust
use alloy::providers::{Provider, ProviderBuilder};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let key = std::env::var("BLOCKVECTRA_API_KEY")?;
    let url = format!("https://api.blockvectra.com/v1/robinhood_mainnet/{key}");
    let provider = ProviderBuilder::new().connect_http(url.parse()?);
    println!("{}", provider.get_block_number().await?);
    Ok(())
}
```


#### Ключ у заголовку запиту

**cURL**

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


  **TypeScript**

```ts
import { createPublicClient, http } from "viem";

const key = process.env.BLOCKVECTRA_API_KEY!;
const client = createPublicClient({
  transport: http("https://api.blockvectra.com/v1/robinhood_mainnet", {
    fetchOptions: { headers: { "x-api-key": key } },
  }),
});

console.log(await client.getBlockNumber());

// Run with: npx tsx example.mts
```


  **Python**

```python
import os

from web3 import Web3

key = os.environ["BLOCKVECTRA_API_KEY"]
# request_kwargs replaces the provider's default headers entirely, so
# Content-Type must be repeated here or the server can't parse the body.
headers = {"Content-Type": "application/json", "x-api-key": key}
w3 = Web3(Web3.HTTPProvider("https://api.blockvectra.com/v1/robinhood_mainnet", request_kwargs={"headers": headers}))
print(w3.eth.block_number)
```


  **Go**

```go
// Run with: go mod init example && go get github.com/ethereum/go-ethereum && go mod tidy && go run .
package main

import (
	"context"
	"fmt"
	"log"
	"os"

	"github.com/ethereum/go-ethereum/ethclient"
	"github.com/ethereum/go-ethereum/rpc"
)

func main() {
	ctx := context.Background()
	c, err := rpc.DialOptions(ctx, "https://api.blockvectra.com/v1/robinhood_mainnet", rpc.WithHeader("x-api-key", os.Getenv("BLOCKVECTRA_API_KEY")))
	if err != nil {
		log.Fatal(err)
	}
	number, err := ethclient.NewClient(c).BlockNumber(ctx)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(number)
}
```


  **Rust**

```toml
[dependencies]
alloy = { version = "1", features = ["provider-http", "rpc-types"] }
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
reqwest = "0.13"
```

```rust
use alloy::providers::{Provider, ProviderBuilder};
use alloy::rpc::client::RpcClient;
use reqwest::header::{HeaderMap, HeaderValue};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let key = std::env::var("BLOCKVECTRA_API_KEY")?;

    let mut headers = HeaderMap::new();
    headers.insert("x-api-key", HeaderValue::from_str(&key)?);
    let http_client = reqwest::Client::builder().default_headers(headers).build()?;

    let rpc_client = RpcClient::new_http_with_client(http_client, "https://api.blockvectra.com/v1/robinhood_mainnet".parse()?);
    let provider = ProviderBuilder::new().connect_client(rpc_client);

    println!("{}", provider.get_block_number().await?);
    Ok(())
}
```


> **Без скісної риски в кінці**
>
> Передаючи ключ у заголовку, викликайте `https://api.blockvectra.com/v1/robinhood_mainnet` точно так, як показано: URL закінчується
>   назвою мережі, **без** скісної риски в кінці. JSON-RPC обслуговується лише за шляхами `/v1/{chain}`
>   та `/v1/{chain}/{api_key}`. Скісна риска в кінці (як `/v1/{chain}/`) або запит без сегмента мережі (як `/v1` або `/v1/`) повертає `404` з порожнім тілом (empty body).


Заголовок `Authorization: Bearer <api_key>` також підтримується. У `POST /v1/{chain}` непорожній
заголовок `x-api-key` має пріоритет над Bearer, а Bearer використовується лише тоді, коли `x-api-key` відсутній
або порожній. Форма запиту зі шляхом ігнорує обидва заголовки.

### Пакетні виклики

Надішліть масив, щоб виконати кілька викликів в одному запиті (до 100 викликів у пакеті). Зверніть увагу, що кожен API key має ліміт CU (поповнення `cu_per_sec`, пікова ємність `burst_cu` — за замовчуванням 400 CU/s і burst 1,600 CU; відображається для кожного ключа в таблиці Keys консолі); один запит — включно з усім пакетом JSON-RPC — чий загальний обсяг CU перевищує пікову ємність ключа, відхиляється з помилкою `-32022 request_exceeds_burst`, навіть якщо він не перевищує ліміт 100 викликів на пакет; розділіть його на менші пакети. Цей приклад зчитує
Chain ID та баланс акаунта за один повний цикл запит-відповідь:

**cURL**

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


  **TypeScript**

```ts
import { createPublicClient, http } from "viem";

const key = process.env.BLOCKVECTRA_API_KEY!;
const client = createPublicClient({
  transport: http("https://api.blockvectra.com/v1/robinhood_mainnet", {
    batch: true,
    fetchOptions: { headers: { "x-api-key": key } },
  }),
});

// viem coalesces concurrent requests into a single JSON-RPC batch.
const [chainId, balance] = await Promise.all([
  client.getChainId(),
  client.getBalance({ address: "0x1111111111111111111111111111111111111111" }),
]);
console.log(chainId, balance);

// Run with: npx tsx example.mts
```


  **Python**

```python
import os

from web3 import Web3

key = os.environ["BLOCKVECTRA_API_KEY"]
headers = {"Content-Type": "application/json", "x-api-key": key}
w3 = Web3(Web3.HTTPProvider("https://api.blockvectra.com/v1/robinhood_mainnet", request_kwargs={"headers": headers}))

with w3.batch_requests() as batch:
    batch.add(w3.eth.chain_id)
    batch.add(w3.eth.get_balance("0x1111111111111111111111111111111111111111"))
    chain_id, balance = batch.execute()

print(chain_id, balance)
```


  **Go**

```go
// Run with: go mod init example && go get github.com/ethereum/go-ethereum && go mod tidy && go run .
package main

import (
	"context"
	"fmt"
	"log"
	"os"

	"github.com/ethereum/go-ethereum/rpc"
)

func main() {
	ctx := context.Background()
	c, err := rpc.DialOptions(ctx, "https://api.blockvectra.com/v1/robinhood_mainnet", rpc.WithHeader("x-api-key", os.Getenv("BLOCKVECTRA_API_KEY")))
	if err != nil {
		log.Fatal(err)
	}

	var chainID, balance string
	calls := []rpc.BatchElem{
		{Method: "eth_chainId", Result: &chainID},
		{Method: "eth_getBalance", Args: []any{"0x1111111111111111111111111111111111111111", "latest"}, Result: &balance},
	}
	if err := c.BatchCallContext(ctx, calls); err != nil {
		log.Fatal(err)
	}
	for _, call := range calls {
		if call.Error != nil {
			log.Fatal(call.Error)
		}
	}
	fmt.Println(chainID, balance)
}
```


  **Rust**

```toml
[dependencies]
alloy = { version = "1", features = ["provider-http", "rpc-types"] }
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
reqwest = "0.13"
```

```rust
use alloy::primitives::{Address, U256};
use alloy::rpc::client::RpcClient;
use reqwest::header::{HeaderMap, HeaderValue};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let key = std::env::var("BLOCKVECTRA_API_KEY")?;

    let mut headers = HeaderMap::new();
    headers.insert("x-api-key", HeaderValue::from_str(&key)?);
    let http_client = reqwest::Client::builder().default_headers(headers).build()?;
    let rpc_client = RpcClient::new_http_with_client(http_client, "https://api.blockvectra.com/v1/robinhood_mainnet".parse()?);

    let address: Address = "0x1111111111111111111111111111111111111111".parse()?;
    let mut batch = rpc_client.new_batch();
    let chain_id = batch.add_call::<_, U256>("eth_chainId", &())?;
    let balance = batch.add_call::<_, U256>("eth_getBalance", &(address, "latest"))?;
    batch.send().await?;

    println!("{} {}", chain_id.await?, balance.await?);
    Ok(())
}
```


Відповіді повертаються у вигляді масиву в тому самому порядку, що й запити, зіставлені за `id`.

Якщо натомість сервер відхиляє весь пакет повністю — через недостатній баланс, обмеження частоти запитів, пікову ємність або перевищення розміру пакета (див. [Поширені помилки](#common-errors) нижче) — він повертає один об'єкт помилки JSON-RPC замість масиву; режим viem `batch: true` у такому разі повертає непрозору помилку `UnknownRpcError`, тому повторіть окремий виклик, щоб побачити справжню помилку.

### Розуміння тарифікації CU

Кожен тарифікований виклик споживає **Compute Units (CU)**: прості виклики, такі як `eth_blockNumber` або
`eth_chainId`, коштують найменше, стандартні операції читання, такі як `eth_getBlockByNumber`, коштують трохи більше, важчі
виклики, такі як `eth_call` або `eth_getLogs`, коштують більше, а методи трасування виконання (такі як `debug_traceTransaction`) коштують найбільше.
Плата за використання нараховується для кожного акаунта за погодинний період із заокругленням у менший бік до цілих розрахункових одиниць (1 одиниця = 1,000 CU), а залишок переноситься на наступний період (тому за всі періоди загальна нарахована сума становить `floor(загальна кількість CU / 1,000)`); розрахунок виконується приблизно через 15 хвилин після завершення періоду. Наприклад: 508 CU перенесено + 2557 CU використано = 3065 CU, що призводить до нарахування 3 розрахункових одиниць та перенесення 65 CU на наступний період. Актуальні тарифи див. у розділі [Ціни](https://blockvectra.com/en/pricing/).

Повна таблиця ваги для кожного методу та коди помилок наведені в
[Довіднику API → JSON-RPC](https://docs.blockvectra.com/en/api/json-rpc/) — ця сторінка описує лише
структуру запиту.

#### Поширені помилки

| Що сталося                                                                                                                                                                                                                                                                              | Що повертається                                                              | Дія                                                                                                                                                                                                                                                                                                                                                   |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Невідома або ще не відкрита мережа                                                                                                                                                                                                                                                      | HTTP `404` з тілом JSON `error.data.reason: "unknown_chain"`                 | Перевірте назву мережі в URL                                                                                                                                                                                                                                                                                                                          |
| Запит без сегмента мережі (наприклад, `/v1` або `/v1/`)                                                                                                                                                                                                                                 | HTTP `404` з порожнім тілом (empty body)                                     | Вкажіть назву мережі в URL (`/v1/{chain}`)                                                                                                                                                                                                                                                                                                            |
| API key відсутній, невідомий або відключений                                                                                                                                                                                                                                            | HTTP `401`, код JSON-RPC `-32024` (`missing_api_key` або `invalid_api_key`)  | Використовуйте дійсний активний API key (абсолютно нові або замінені ключі набувають чинності на кожному екземплярі приблизно протягом 5 секунд; протягом цього часу вони можуть повертати 401 `invalid_api_key`, або 503 `-32021` (з `Retry-After`), коли стан тарифікації тимчасово неможливо підтвердити, тому зачекайте трохи і повторіть спробу) |
| Баланс дорівнює нулю або від'ємний                                                                                                                                                                                                                                                      | HTTP `402`, код JSON-RPC `-32020`                                            | Поповніть баланс або дочекайтеся безкоштовного поповнення                                                                                                                                                                                                                                                                                             |
| Запити надіслані занадто швидко (ліміт швидкості або тимчасове перевантаження)                                                                                                                                                                                                          | HTTP `429` (або `200`), код JSON-RPC `-32005`                                | Повторіть спробу пізніше (дотримуйтесь `Retry-After`, якщо заголовок присутній)                                                                                                                                                                                                                                                                       |
| Окремий запит або пакет перевищує пікову ємність ключа (`burst_cu`, за замовчуванням 1,600 CU; швидкість за замовчуванням 400 CU/s), або пакет безкоштовного плану перевищує кількість викликів/с (25 викл./с)                                                                                                                                                                                        | HTTP `429`, код JSON-RPC `-32022` (`request_exceeds_burst`)                  | Розділіть запит на менші пакети (в початковому вигляді він ніколи не буде успішним)                                                                                                                                                                                                                                                                   |
| Вузловий вузол тимчасово недоступний                                                                                                                                                                                                                                                    | HTTP `200`, код JSON-RPC `-32603` (`upstream unavailable`), не тарифікується | Повторіть запит                                                                                                                                                                                                                                                                                                                                       |
| Історичний стан за межами вікна стану цієї мережі (див. `state_window_blocks` у `GET /v1/chains`)                                                                                                                                                                                       | HTTP `200`, код JSON-RPC `-32011`, не тарифікується                          | Зробіть запит до більш пізнього блоку                                                                                                                                                                                                                                                                                                                 |
| Транзакцію або блок не знайдено, або відповідь занадто велика; на Ethereum запити блоків / квитанцій / логів за межами недавнього вікна також повертають -32000 "old data not available due to pruning" (не тарифікується; див. [Підтримувані мережі → Ethereum](https://docs.blockvectra.com/en/chains/#ethereum)) | HTTP `200`, код JSON-RPC `-32000`                                            | Змініть запит (перевірте хеш або номер блоку; некоректні хеші трасування повертають повідомлення про те, що транзакцію не знайдено)                                                                                                                                                                                                                   |
| Трейсер не дозволений або перевищено таймаут трасування (виклики `debug_trace`)                                                                                                                                                                                                         | HTTP `200`, код JSON-RPC `-32602`, не тарифікується                          | Використовуйте дозволений нативний трейсер (`callTracer`, `flatCallTracer`, `prestateTracer`, `4byteTracer`, `noopTracer`, або оминіть) та таймаут ≤ 30s                                                                                                                                                                                              |
| Метод не дозволений списком методів мережі (див. [Підтримувані мережі](https://docs.blockvectra.com/en/chains/))                                                                                                                                                                                                    | HTTP `200`, код JSON-RPC `-32601`, не тарифікується                          | Викликайте лише методи, дозволені для цієї мережі                                                                                                                                                                                                                                                                                                     |
| Некоректне тіло JSON                                                                                                                                                                                                                                                                    | HTTP `200`, код JSON-RPC `-32700`, не тарифікується                          | Виправте синтаксис JSON у запиті                                                                                                                                                                                                                                                                                                                      |
| Більше ніж 100 викликів в одному пакеті                                                                                                                                                                                                                                                 | HTTP `200`, код JSON-RPC `-32600` (`batch too large`), не тарифікується      | Розділіть пакет на щонайбільше 100 викликів                                                                                                                                                                                                                                                                                                           |

Наведені вище відхилення ніколи не тарифікуються. Кожен прийнятий виклик, який отримує відповідь, оплачується відповідно до опублікованої ваги методу в CU; у таблиці кодів помилок перелічені випадки, які не тарифікуються (див. стовпчик Billed у розділі [Коди помилок](https://docs.blockvectra.com/en/api/json-rpc/#error-codes)).

### Виклик Data API

Data API надає дані блокчейну тільки для читання (блоки, транзакції, баланси, холдери, активність
DEX тощо) у форматі REST/JSON. Кожен маршрут, крім `GET https://api.blockvectra.com/v1/data/chains`, містить префікс
з ідентифікатором мережі: `robinhood_mainnet` — це ідентифікатор мережі (поле `chain`, яке повертає `/chains` та міститься в `meta`), що використовується в усіх наведених нижче шляхах.
`GET https://api.blockvectra.com/v1/data/chains` перелічує лише публічні мережі та повертає лише `{"data": [...]}` (без
`meta`, без `next_cursor`). Запити вимірюються та тарифікуються в Compute Units (CU); тарифікуються лише успішні відповіді 2xx.

Кожен запит вимагає того самого API key, що й JSON-RPC — передавайте його в заголовку `x-api-key`.
Кожна успішна відповідь у межах мережі використовує однаковий конверт:
`data` (корисне навантаження), `next_cursor` (непрозорий рядок, присутній лише за наявності наступної сторінки — інакше
ключ повністю відсутній, ніколи не `null`), та `meta` (`chain`, `chain_slug` (верхній регістр `chain`), `chain_external_id`,
`as_of_block`, `safe_block`, `finalized_block`, `coverage`, `refreshed_at`; `refreshed_at` може бути `null`, що означає, що час оновлення даних невідомий і їх слід вважати застарілими — ендпоінти на основі блоків завжди повертають значення). Відповіді з помилками зазвичай містять `{"error":{"code","message"}}` —
`409 not_indexed_yet` додає `indexed_through` (найвищий індексований блок). Невідома або непублічна мережа повертає HTTP `404` з `error.code` `not_found` (не тарифікується; назви мереж мають бути точними слагами в нижньому регістрі); відсутній, невідомий або відключений API key повертає HTTP `401` з `error.code` `missing_api_key` або `invalid_api_key`. Запити, обмежені лімітом швидкості, повертають HTTP `429` (`error.code` `rate_limited`, `data.reason: "key_rate_limit"`), а вичерпаний баланс повертає HTTP `402` (`error.code` `insufficient_balance`); обидва випадки не тарифікуються. Значення, що можуть перевищувати 2^53 (баланси, суми токенів), передаються десятковими
рядками, ніколи числами JSON.

**Пошук блоку за номером:**

**cURL**

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


  **TypeScript**

```ts
const res = await fetch("https://api.blockvectra.com/v1/data/robinhood_mainnet/blocks/72838701", {
  headers: { "x-api-key": process.env.BLOCKVECTRA_API_KEY! },
});
const body = await res.json();
console.log(body);

// Run with: npx tsx example.mts
```


  **Python**

```python
import os, requests

res = requests.get(
    "https://api.blockvectra.com/v1/data/robinhood_mainnet/blocks/72838701",
    headers={"x-api-key": os.environ["BLOCKVECTRA_API_KEY"]},
)
print(res.json())
```


```json
{
  "data": {
    "number": 72838701,
    "hash": "0x9f2c1e7a4b6d3f805e1c9a72b4d6f1e0a3c8b5d7e2f4a1c6b9d3e7f0a2c4b6d8",
    "parent_hash": "0x1a3c5e7f9b1d3f5a7c9e1b3d5f7a9c1e3b5d7f9a1c3e5b7d9f1a3c5e7b9d1f3a",
    "timestamp": "2026-09-26T05:41:07Z",
    "miner": "0x00000000000000000000000000000000000a4b05",
    "gas_limit": 32000000,
    "gas_used": 4821932,
    "base_fee_per_gas": "100000000",
    "state_root": "0x2b4d6f8a1c3e5b7d9f1a3c5e7b9d1f3a5c7e9b1d3f5a7c9e1b3d5f7a9c1e3b5d",
    "transactions_root": "0x3c5e7b9d1f3a5c7e9b1d3f5a7c9e1b3d5f7a9c1e3b5d7f9a1c3e5b7d9f1a3c5e",
    "receipts_root": "0x4d6f8a1c3e5b7d9f1a3c5e7b9d1f3a5c7e9b1d3f5a7c9e1b3d5f7a9c1e3b5d7f",
    "tx_count": 239,
    "size": 48213,
    "l1_block_number": null,
    "extra": {}
  },
  "meta": {
    "chain": "robinhood_mainnet",
    "chain_slug": "ROBINHOOD_MAINNET",
    "chain_external_id": "eip155:4663",
    "as_of_block": 72838957,
    "safe_block": 72838800,
    "finalized_block": 72838701,
    "coverage": "full",
    "refreshed_at": "2026-09-27T02:15:03Z"
  }
}
```

Номер, що перевищує індексовану вершину (`as_of_block`), повертає `409` (`error.code: "not_indexed_yet"`) із полем `indexed_through`, де вказано найвищий індексований блок — дані ще не з'явилися, тому повторіть спробу пізніше. Номер блоку, що повністю передує охопленій історії мережі (`coverage.from_block`), повертає `422` (`error.code: "no_coverage"`). У межах покриття номер, що менший або дорівнює `as_of_block`, але не має живого рядка (ніколи не індексувався або відкочений через reorg), повертає `404` (`error.code: "not_found"`).

**Перевірка актуальності даних** (наскільки кожен відстежуваний набір даних відстає від вершини ланцюга — корисно
для сторінки статусу або попередньої перевірки перед тим, як довіряти запиту):

**cURL**

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


  **TypeScript**

```ts
const res = await fetch("https://api.blockvectra.com/v1/data/robinhood_mainnet/status/freshness", {
  headers: { "x-api-key": process.env.BLOCKVECTRA_API_KEY! },
});
const body = await res.json();
console.log(body);

// Run with: npx tsx example.mts
```


  **Python**

```python
import os, requests

res = requests.get(
    "https://api.blockvectra.com/v1/data/robinhood_mainnet/status/freshness",
    headers={"x-api-key": os.environ["BLOCKVECTRA_API_KEY"]},
)
print(res.json())
```


```json
{
  "data": [
    {
      "dataset": "blocks",
      "category": "raw",
      "max_block_number": 72838957,
      "max_day": null,
      "max_time": "2026-09-27T02:15:01Z",
      "seconds_behind": 0,
      "blocks_behind": null,
      "days_behind": null,
      "checked_at": "2026-09-27T02:15:07Z"
    }
  ],
  "meta": {
    "chain": "robinhood_mainnet",
    "chain_slug": "ROBINHOOD_MAINNET",
    "chain_external_id": "eip155:4663",
    "as_of_block": 72838957,
    "safe_block": 72838800,
    "finalized_block": 72838701,
    "coverage": "full",
    "refreshed_at": "2026-09-27T02:15:07Z"
  }
}
```

*(Скорочено: відповідь містить один рядок для кожного набору даних; показано лише рядок `blocks`. Рядок `traces` також містить поля `coverage_from_block`, `coverage_to_block` та `coverage_complete`.)*

Якщо дані актуальності для цієї мережі тимчасово недоступні, замість часткового результату повертається `503` (`error.code: "unavailable"`); відповідь містить заголовок `Retry-After` (у секундах) — зачекайте щонайменше цей час, а потім повторіть спробу.

**Список балансів ERC-20 для адреси** (знімок, відфільтрований за
ненульовими балансами, впорядкований за токенами):

**cURL**

```bash
curl -s "https://api.blockvectra.com/v1/data/robinhood_mainnet/addresses/0x1111111111111111111111111111111111111111/balances" \
  -H "x-api-key: $BLOCKVECTRA_API_KEY"
```


  **TypeScript**

```ts
const res = await fetch(
  "https://api.blockvectra.com/v1/data/robinhood_mainnet/addresses/0x1111111111111111111111111111111111111111/balances",
  { headers: { "x-api-key": process.env.BLOCKVECTRA_API_KEY! } },
);
const body = await res.json();
console.log(body);

// Run with: npx tsx example.mts
```


  **Python**

```python
import os, requests

res = requests.get(
    "https://api.blockvectra.com/v1/data/robinhood_mainnet/addresses/0x1111111111111111111111111111111111111111/balances",
    headers={"x-api-key": os.environ["BLOCKVECTRA_API_KEY"]},
)
print(res.json())
```


```json
{
  "data": [
    { "token": "0x0bd7d308f8e1639fab988df18a8011f41eacad73", "balance": "185371464119396", "symbol": "WETH", "decimals": 18 },
    { "token": "0x2295f15bd4914ae9b4685f01d52f4e6f89bf8b03", "balance": "10000000000000000", "symbol": "WNVDA", "decimals": 18 }
  ],
  "meta": {
    "chain": "robinhood_mainnet",
    "chain_slug": "ROBINHOOD_MAINNET",
    "chain_external_id": "eip155:4663",
    "as_of_block": 72838957,
    "safe_block": 72838800,
    "finalized_block": 72838701,
    "coverage": "full",
    "refreshed_at": "2026-09-27T02:10:00Z"
  }
}
```

Адреса без ненульових балансів усе одно повертає `200` з `data: []` — ніколи `404`.
Передавайте `?limit=` (за замовчуванням 50, максимум 500) та отриманий `next_cursor` для переходу між сторінками.

Повне покриття ендпоінтів — блоки, транзакції, адреси, токени, NFT, DEX, токенізовані
акції — доступне в розділі [Довідник API → Data API](https://docs.blockvectra.com/en/api/data/).

### Додаткові матеріали

* [Довідник API → JSON-RPC](https://docs.blockvectra.com/en/api/json-rpc/) — методи, вага CU, коди помилок
* [Повний довідник JSON-RPC](https://docs.blockvectra.com/en/api/json-rpc/reference/) — повні специфікації, параметри та схеми відповідей для всіх підтримуваних методів
* [Довідник API → Data API](https://docs.blockvectra.com/en/api/data/) — REST-ендпоінти для даних блокчейну
* [Набори даних](https://docs.blockvectra.com/en/datasets/) — похідні набори даних для підтримуваних мереж
* [Посібники](https://docs.blockvectra.com/en/guides/) — практичні посібники з інтеграції API, керування CU та багатомережевих робочих процесів
* [Підтримувані мережі](https://docs.blockvectra.com/en/chains/) — ідентифікатори мереж та URL ендпоінтів

## FAQ

### Які мережі підтримуються?

Підтримується 9 мереж: Arbitrum One, Base, BNB Smart Chain, Ethereum, Ethereum Sepolia, HyperEVM, Polygon, Robinhood Chain, Robinhood Chain Testnet. Список відповідає GET /v1/chains і оновлюється під час запуску нових мереж. Перегляньте [сторінку статусу](https://blockvectra.com/uk/status/) для перевірки статусу наживо. [Переглянути підтримувані мережі](https://blockvectra.com/uk/chains/)

### Чи підтримується WebSocket?

Виклик eth_subscribe через HTTP повертає -32601; у мережах, де значення ws у /v1/chains дорівнює true, eth_subscribe доступний через WebSocket. В інших випадках виконуйте опитування через eth_getLogs. [Переглянути підтримувані мережі](https://blockvectra.com/uk/chains/)

### Чи можу я запитувати історичний стан і трасування?

Так, але це залежить від мережі. Вікно історичного стану визначається полем state_window_blocks у /v1/chains (null означає повну історію); доступність трасувань залежить від того, чи містить methods.allow для цієї мережі методи debug_trace (такі як debug_traceTransaction); максимальний діапазон блоків для одного виклику eth_getLogs становить max_logs_block_range. [Переглянути каталог мереж та параметри для кожної мережі](https://blockvectra.com/uk/chains/)

### Чи можна використовувати один API key для всіх мереж?

Так. Один API key підходить для JSON-RPC у кожній підтримуваній мережі та для Data API у мережах, які його підтримують; ключ належить акаунту, а не конкретній мережі. [Читати посібник «Один ключ, багато мереж»](https://docs.blockvectra.com/en/guides/one-key-many-chains/)
