# Bitvavo API
> Live spot market data from Bitvavo, the largest retail crypto exchange in the Netherlands and one of the highest-volume euro venues in Europe — served straight from its public API, no key, nothing cached. Get a market's last price, best bid/ask, 24h high/low, open, 24h change and base/quote volume (in euro, USDT or Bitcoin); rank every market for a quote currency by 24h quote volume; list trading pairs with status, order limits and precision; and read live market depth. A distinct European / euro venue, separate from other exchange feeds. Markets are BASE-QUOTE (e.g. BTC-EUR).

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/bitvavo-api/..."
```

## Pricing
- **Free** (Free) — 3,550 calls/Mo, 2 req/s
- **Starter** ($8/Mo) — 79,500 calls/Mo, 6 req/s
- **Pro** ($22/Mo) — 418,000 calls/Mo, 15 req/s
- **Business** ($53/Mo) — 2,570,000 calls/Mo, 40 req/s

## Endpoints

### Bitvavo

#### `GET /v1/book` — Live market depth — best bid/ask and spread

**Parameters:**
- `market` (query, required, string) — Market BASE-QUOTE Example: `BTC-EUR`
- `limit` (query, optional, string) — Levels per side 1-100 (default 20) Example: `20`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/bitvavo-api/v1/book?market=BTC-EUR&limit=20"
```

**Response:**
```json
{
    "data": {
        "asks": [
            {
                "price": 54282,
                "amount": 0.00066568
            },
            {
                "price": 54293,
                "amount": 0.0004606
            },
            {
                "price": 54294,
                "amount": 0.24722481
            },
            {
                "price": 54296,
                "amount": 0.04947276
            },
            {
                "price": 54300,
                "amount": 0.03508872
            },
            {
                "price": 54303,
                "amount": 0.15949205
            },
            {
                "price": 54304,
                "amount": 0.06377215
            },
            {
                "price": 54305,
                "amount": 0.75345315
            },
            {
                "price": 54306,
                "amount": 0.03127572
            },
            {
                "price": 54307,
                "amount": 0.01515276
            },
            {
                "price": 54308,
                "amount": 0.68962376
            },
            {
                "price": 54309,
                "amount": 0.38295
            },
            {
                "price": 54310,
                "amount": 0.06377215
            },
            {
                "price": 54311,
                "amount": 0.69321124
            },
            {
                "price": 54314,
                "amount": 0.24722481
            },

…(truncated, see openapi.json for full schema)
```

#### `GET /v1/markets` — List trading pairs with order limits and precision

**Parameters:**
- `quote` (query, optional, string) — Filter by quote currency e.g. EUR (omit for all) Example: `EUR`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/bitvavo-api/v1/markets?quote=EUR"
```

**Response:**
```json
{
    "data": {
        "count": 430,
        "quote": "EUR",
        "source": "Bitvavo",
        "markets": [
            {
                "base": "FUN",
                "quote": "EUR",
                "market": "FUN-EUR",
                "status": "trading",
                "min_order_base": 131.4727,
                "min_order_quote": 5,
                "price_precision": null
            },
            {
                "base": "MON",
                "quote": "EUR",
                "market": "MON-EUR",
                "status": "trading",
                "min_order_base": 265.4282,
                "min_order_quote": 5,
                "price_precision": null
            },
            {
                "base": "LIGHTER",
                "quote": "EUR",
                "market": "LIGHTER-EUR",
                "status": "trading",
                "min_order_base": 3.979076,
                "min_order_quote": 5,
                "price_precision": null
            },
            {
                "base": "APT",
                "quote": "EUR",
                "market": "APT-EUR",
                "status": "trading",
                "min_order_base": 9.07473837,
                "min_order_quote": 5,
                "price_precision": null
            },
            {
                "base": "VANRY",
                "quote": "EUR",
                "market": "VANRY-EUR",
                "status": "trading",
                "min_order_base": 1689.59764214,
                "min_o
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/meta` — Service metadata and endpoint list

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/bitvavo-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "note": "Markets are BASE-QUOTE (e.g. BTC-EUR). volume_quote_24h is the 24h volume in the quote currency.",
        "source": "Bitvavo API (api.bitvavo.com/v2, live)",
        "service": "bitvavo-api",
        "endpoints": {
            "GET /v1/book": "Live market depth — best bid/ask and spread (market=BTC-EUR, limit=20).",
            "GET /v1/meta": "This document.",
            "GET /v1/ticker": "Ticker for one market (market=BTC-EUR or symbol=BTC&quote=EUR).",
            "GET /v1/markets": "List trading pairs with order limits and precision (quote=EUR optional).",
            "GET /v1/tickers": "All markets for a quote ranked by 24h quote volume (quote=EUR, limit=50)."
        },
        "description": "Live spot market data from Bitvavo, the largest retail crypto exchange in the Netherlands and one of the highest-volume euro venues in Europe. The ticker endpoint returns a market's last price, best bid/ask, 24h high/low, open, 24h change and base/quote volume (in euro, USDT or Bitcoin); the tickers endpoint ranks every market for a quote currency by 24h quote volume; the markets endpoint lists trading pairs with status, order limits and precision; the book endpoint returns live market depth. Live, no key, nothing stored. A distinct European / euro venue, separate from other exchange feeds.",
        "market_count": 440,
        "upstream_status": "ok"
    },
    "meta": {
        "timestamp": "2026-06-11T07:49:29.719Z",
        "request_id": "
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/ticker` — Ticker for one market

**Parameters:**
- `market` (query, required, string) — Market BASE-QUOTE (or use symbol & quote) Example: `BTC-EUR`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/bitvavo-api/v1/ticker?market=BTC-EUR"
```

**Response:**
```json
{
    "data": {
        "ask": 54276,
        "bid": 54275,
        "base": "BTC",
        "last": 54291,
        "quote": "EUR",
        "market": "BTC-EUR",
        "source": "Bitvavo",
        "spread": 1,
        "low_24h": 52553,
        "high_24h": 54525,
        "open_24h": 53369,
        "timestamp": 1781164167057,
        "volume_24h": 818.74314866,
        "change_24h_pct": 1.7276,
        "volume_quote_24h": 43860525.29
    },
    "meta": {
        "timestamp": "2026-06-11T07:49:29.883Z",
        "request_id": "a93ac654-b3a1-45c3-bf41-4993601412d7"
    },
    "status": "ok",
    "message": "Ticker retrieved successfully",
    "success": true
}
```

#### `GET /v1/tickers` — All markets for a quote ranked by 24h volume

**Parameters:**
- `quote` (query, optional, string) — Quote currency e.g. EUR, USDT (default EUR) Example: `EUR`
- `limit` (query, optional, string) — Max results 1-300 (default 50) Example: `50`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/bitvavo-api/v1/tickers?quote=EUR&limit=50"
```

**Response:**
```json
{
    "data": {
        "count": 50,
        "quote": "EUR",
        "source": "Bitvavo",
        "tickers": [
            {
                "ask": 54276,
                "bid": 54275,
                "base": "BTC",
                "last": 54291,
                "quote": "EUR",
                "market": "BTC-EUR",
                "spread": 1,
                "low_24h": 52553,
                "high_24h": 54525,
                "open_24h": 53369,
                "timestamp": 1781164167057,
                "volume_24h": 818.74314866,
                "change_24h_pct": 1.7276,
                "volume_quote_24h": 43860525.29
            },
            {
                "ask": 1431.55,
                "bid": 1431.42,
                "base": "ETH",
                "last": 1431.76,
                "quote": "EUR",
                "market": "ETH-EUR",
                "spread": 0.13,
                "low_24h": 1389.78,
                "high_24h": 1441.02,
                "open_24h": 1417.64,
                "timestamp": 1781164164094,
                "volume_24h": 15792.10426911,
                "change_24h_pct": 0.996,
                "volume_quote_24h": 22362328.32
            },
            {
                "ask": 56.266,
                "bid": 56.263,
                "base": "SOL",
                "last": 56.271,
                "quote": "EUR",
                "market": "SOL-EUR",
                "spread": 0.003,
                "low_24h": 54.002,
                "high_24h": 58.055,
…(truncated, see openapi.json for full schema)
```


---
Marketplace page: https://www.oanor.com/api/bitvavo-api
OpenAPI spec: https://www.oanor.com/api/bitvavo-api/openapi.json
