# Referensi Blockchain Data API

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

## Ikhtisar

Gunakan referensi Blockchain Data API ini untuk menyusun permintaan REST untuk blok, transaksi, alamat, token, NFT, aktivitas DEX, saham tertokenisasi, dan kesegaran dataset yang diindeks. Untuk memilih dataset dan memeriksa ketersediaan rantai, mulailah dari [direktori dataset](https://docs.blockvectra.com/en/datasets/); untuk saldo token dompet dan riwayat transfer, ikuti [panduan aset dompet](https://docs.blockvectra.com/id/guides/wallet-assets/).

* **URL Dasar**: `https://api.blockvectra.com/v1/data` — setiap rute kecuali `/chains` diawali dengan pengenal rantai (misalnya `https://api.blockvectra.com/v1/data/{chain}/…`)
* **Protokol**: HTTP `GET` (ditambah `POST` untuk pencarian token batch di `/{chain}/tokens:batch`), respons JSON
* **Autentikasi**: Memerlukan API key — teruskan kunci Anda di header permintaan `x-api-key`. Permintaan diukur dan ditagih dalam Compute Unit (CU); hanya respons berhasil 2xx yang ditagih
* **Ethereum**: cakupan data ditentukan oleh `coverage.from_block` di `GET /v1/data/chains`, dan mencakup kumpulan dataset yang lebih kecil — lihat [Rantai yang Didukung → Ethereum](https://docs.blockvectra.com/id/chains/#ethereum)

Bobot CU Data API tercantum di halaman [Harga](https://blockvectra.com/id/pricing/) dan dikembalikan oleh `GET /v1/plans`. Lihat [Mulai Cepat → Panggil Data API](https://docs.blockvectra.com/id/quickstart/#4-call-the-data-api) untuk contoh permintaan dan bentuk respons. Untuk penerapan versi path, aturan kompatibilitas mundur, dan rekomendasi SDK, lihat [Penerapan versi dan kompatibilitas API](https://docs.blockvectra.com/en/api/versioning/).

## Rantai

Data API menyajikan data terindeks yang dicakupkan ke setiap rantai: `https://api.blockvectra.com/v1/data/{chain}/…`.

Dataset dan fitur yang tersedia bervariasi menurut rantai; lihat [Rantai yang Didukung](https://docs.blockvectra.com/id/chains/) untuk matriks kapabilitas lengkap. `GET https://api.blockvectra.com/v1/data/chains` melaporkan `features`, `coverage`, `finality`, dan `limits` dari setiap rantai. Permintaan di luar cakupan dataset mengembalikan HTTP `422 no_coverage` (tidak ditagih); rantai yang tidak dikenal atau tidak publik mengembalikan HTTP `404` dengan `error.code` `not_found` (tidak ditagih; nama rantai harus berupa slug huruf kecil yang persis).

## Error

Setiap respons error berupa `{"error":{"code","message"}}`; hanya `409 not_indexed_yet` yang dapat menambahkan `indexed_through` (blok terindeks tertinggi pada rantai tersebut), dan bidang ini tidak ada jika rantai tersebut belum memiliki data terindeks. Kode yang paling sering ditemui pelanggan:

| Status | `error.code`           | Arti                                                                                                                                                                                                                              | Tindakan                                                                                                                                                                                                                                   |
| ------ | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `402`  | `insufficient_balance` | Saldo berbayar atau kuota gratis habis; saat saldo diketahui, `error.data` menyertakan `balance_units` dan `balance_cu` (tidak ditagih)                                                                                           | Lakukan top up on-chain di [halaman Penagihan](https://console.blockvectra.com/billing/) konsol, atau tunggu kuota gratis diisi ulang                                                                                                      |
| `404`  | `not_found`            | `{chain}` tidak dikenal atau tidak publik, atau objek tidak ada                                                                                                                                                                   | Perbaiki permintaan                                                                                                                                                                                                                        |
| `409`  | `not_indexed_yet`      | Permintaan mencapai di atas `as_of_block` (blok terbaru yang ditulis sepenuhnya; menyertakan `indexed_through`), hash terurai di atas `as_of_block`, atau rantai tersebut belum memiliki data terindeks (tanpa `indexed_through`) | Dengan `indexed_through`, lakukan polling hingga blok Anda atau `to_block` berada pada atau di bawahnya; tanpa bidang tersebut, tunggu hingga rantai mulai mengindeks (`coverage.has_data` di `GET /v1/data/chains` menunjukkan statusnya) |
| `422`  | `no_coverage`          | Kesenjangan permanen: rantai tidak memiliki kapabilitas tersebut, atau blok berada sebelum cakupan indeks/trace                                                                                                                   | Ubah permintaan; mencoba ulang tidak akan membantu                                                                                                                                                                                         |
| `429`  | `rate_limited`         | Batas laju CU kunci (respons menyertakan `Retry-After`) atau batas laju panggilan akun (tanpa `Retry-After`); tidak ditagih                                                                                                       | Coba lagi setelah `Retry-After` detik                                                                                                                                                                                                      |
| `429`  | `cost_exceeds_burst`   | Permintaan tunggal berbiaya lebih dari kapasitas burst kunci; tanpa `Retry-After` (tidak ditagih)                                                                                                                                 | Bagi permintaan; mencoba ulang seperti yang dikirim tidak akan pernah berhasil                                                                                                                                                             |
| `503`  | `unavailable`          | Sementara tidak tersedia; respons memuat `Retry-After`. Juga dikembalikan untuk permintaan historis pada rantai yang `coverage.from_block`-nya saat ini bernilai `null`                                                           | Coba lagi setelah `Retry-After` detik                                                                                                                                                                                                      |
| `503`  | `gateway_overloaded`   | Batas konkurensi akun di seluruh kunci dan rantainya tercapai, atau layanan sedang sibuk sementara; `Retry-After: 1` (tidak ditagih)                                                                                              | Kurangi permintaan bersamaan di seluruh akun dan tunggu `Retry-After` detik sebelum mencoba lagi                                                                                                                                           |

## Indeks endpoint

Berikut adalah spesifikasi asli dalam bahasa Inggris.

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