# Довідник Blockchain Data API

> Source: https://docs.blockvectra.com/uk/api/data/

## Огляд

Використовуйте цей довідник Blockchain Data API для побудови REST-запитів до індексованих блоків, транзакцій, адрес, токенів, NFT, активності на DEX, токенізованих акцій та свіжості наборів даних. Щоб вибрати набір даних і перевірити доступність для мереж, почніть із [каталогу наборів даних](https://docs.blockvectra.com/en/datasets/); для отримання балансів токенів і історії переказів гаманця скористайтеся [посібником з активів гаманця](https://docs.blockvectra.com/en/guides/wallet-assets/).

* **Базовий URL**: `https://api.blockvectra.com/v1/data` — кожен маршрут, крім `/chains`, має префікс з ідентифікатором мережі (наприклад, `https://api.blockvectra.com/v1/data/{chain}/…`)
* **Протокол**: HTTP `GET` (а також `POST` для пакетних запитів токенів за адресою `/{chain}/tokens:batch`), відповіді у форматі JSON
* **Автентифікація**: обов'язковий API key — передавайте ваш ключ у заголовку запиту `x-api-key`. Запити вимірюються та тарифікуються в Compute Units (CU); тарифікуються лише успішні відповіді 2xx
* **Ethereum**: покриття даних визначається параметром `coverage.from_block` у `GET /v1/data/chains` та охоплює менший набір даних — див. [Підтримувані мережі → Ethereum](https://docs.blockvectra.com/en/chains/#ethereum)

Вага методів Data API в CU наведена на сторінці [Ціни](https://blockvectra.com/en/pricing/) та повертається запитом `GET /v1/plans`. Див. [Швидкий старт → Виклик Data API](https://docs.blockvectra.com/en/quickstart/#4-call-the-data-api) для прикладів запитів і структури відповідей. Інформацію про версіонування шляхів, правила зворотної сумісності та рекомендації щодо SDK див. у розділі [Версіонування та сумісність API](https://docs.blockvectra.com/en/api/versioning/).

## Мережі

Data API надає індексовані дані з прив'язкою до кожної мережі: `https://api.blockvectra.com/v1/data/{chain}/…`.

Доступні набори даних і можливості відрізняються залежно від мережі; повну матрицю сумісності див. у розділі [Підтримувані мережі](https://docs.blockvectra.com/en/chains/). `GET https://api.blockvectra.com/v1/data/chains` повертає параметри `features`, `coverage`, `finality` та `limits` для кожної мережі. Запити за межами покриття набору даних повертають HTTP `422 no_coverage` (не тарифікується); невідома або непублічна мережа повертає HTTP `404` з `error.code` `not_found` (не тарифікується; назви мереж мають бути точними slug у нижньому регістрі).

## Помилки

Кожна відповідь із помилкою має вигляд `{"error":{"code","message"}}`; лише `409 not_indexed_yet` може містити `indexed_through` (найвищий індексований блок у цій мережі), і він відсутній, коли мережа ще не має індексованих даних. Коди, з якими клієнти стикаються найчастіше:

| Статус | `error.code`           | Значення                                                                                                                                                                                                    | Дія                                                                                                                                                                                                                                                                        |
| ------ | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `402`  | `insufficient_balance` | Платний баланс або безкоштовний кредит вичерпано; коли баланс відомий, `error.data` містить `balance_units` та `balance_cu` (не тарифікується)                                                              | Поповніть баланс ончейн на [сторінці білінгу](https://console.blockvectra.com/billing/) у консолі або дочекайтеся поповнення безкоштовного ліміту                                                                                                                          |
| `404`  | `not_found`            | Невідома або непублічна `{chain}`, або об'єкт не існує                                                                                                                                                      | Виправте запит                                                                                                                                                                                                                                                             |
| `409`  | `not_indexed_yet`      | Запит виходить за межі `as_of_block` (найновіший повністю записаний блок; включає `indexed_through`), хеш веде до блоку вище `as_of_block`, або мережа ще не має індексованих даних (без `indexed_through`) | Якщо вказано `indexed_through`, надсилайте повторні запити (poll), доки ваш блок або `to_block` не буде на цьому рівні або нижче; якщо параметр відсутній, зачекайте, доки почнеться індексація мережі (`coverage.has_data` у `GET /v1/data/chains` показує поточний стан) |
| `422`  | `no_coverage`          | Постійна відсутність даних: мережа не підтримує цю функцію, або блок знаходиться раніше за початок індексації/трасування                                                                                    | Змініть запит; повторна відправка не допоможе                                                                                                                                                                                                                              |
| `429`  | `rate_limited`         | Ліміт швидкості CU для ключа (відповідь містить `Retry-After`) або ліміт швидкості викликів акаунта (без `Retry-After`); не тарифікується                                                                   | Повторіть спробу через `Retry-After` секунд                                                                                                                                                                                                                                |
| `429`  | `cost_exceeds_burst`   | Вартість одного запиту перевищує ємність burst для ключа; без `Retry-After` (не тарифікується)                                                                                                              | Розділіть запит; повторення в такому ж вигляді ніколи не буде успішним                                                                                                                                                                                                     |
| `503`  | `unavailable`          | Тимчасово недоступно; відповідь містить `Retry-After`. Також повертається для історичних запитів у мережі, де `coverage.from_block` наразі дорівнює `null`                                                  | Повторіть спробу через `Retry-After` секунд                                                                                                                                                                                                                                |
| `503`  | `gateway_overloaded`   | Досягнуто ліміт одночасних запитів акаунта для всіх його ключів і мереж, або сервіс тимчасово перевантажений; `Retry-After: 1` (не тарифікується)                                                           | Зменшіть кількість одночасних запитів для акаунта та зачекайте `Retry-After` секунд перед повторною спробою                                                                                                                                                                |

## Індекс ендпоінтів

Нижче наведено оригінальну специфікацію англійською мовою.

<div lang="en">

### Chain

- GET /chains — List supported chains
- GET /{chain}/blocks/{number} — Get a block by number
- GET /{chain}/blocks/hash/{hash} — Get a block by hash
- GET /{chain}/blocks/{number}/transactions — List a block's transactions
- GET /{chain}/transactions/{hash} — Get a transaction by hash

### Status

- GET /{chain}/status/freshness — Freshness and lag per dataset

### Addresses

- GET /{chain}/addresses/{address}/transactions — List an address's transactions
- GET /{chain}/addresses/{address}/transfers — List an address's token transfers
- GET /{chain}/addresses/{address}/balances — List an address's ERC-20 balances

### Tokens

- GET /{chain}/tokens/{token}/transfers — List a token contract's transfers
- GET /{chain}/tokens/{token}/holders — List a token's holders
- GET /{chain}/tokens/{token} — Get token metadata
- POST /{chain}/tokens:batch — Batch get token metadata

### NFTs

- GET /{chain}/nfts/{contract}/{token_id} — Get one NFT's owner/holders
- GET /{chain}/nfts — List NFTs owned by an address

### DEX

- GET /{chain}/dex/swaps — List DEX swaps by pool or token
- GET /{chain}/dex/prices — Daily DEX token prices

### Stocks

- GET /{chain}/stocks — Daily leaderboard of tokenized stocks
- GET /{chain}/stocks/{token} — Get one tokenized stock

### Traces

- GET /{chain}/blocks/{number}/traces — Historical callTracer trace tree for a whole block
- GET /{chain}/transactions/{hash}/trace — Historical callTracer trace tree for one transaction

</div>
