# Netherlands Statistics API
> Official Dutch statistics from Statistics Netherlands (Centraal Bureau voor de Statistiek, CBS) as a clean, keyless JSON API. Get the latest Dutch consumer price index and inflation — index level (base 2015 = 100), month-on-month and year-on-year change — pull any table in the vast CBS StatLine OpenData catalogue as observations (prices, population, labour, trade, energy, housing and thousands more) without hand-writing OData queries, look up a table's metadata (title, period range, frequency), and search the catalogue by title. A thin gateway over the CBS StatLine OData v3 API: you supply a table identifier (e.g. 83131NED) with optional filter / select / paging, we return tidy JSON rows. Period codes are normalised (YYYYMMnn = month, YYYYKWnn = quarter, YYYYJJ00 = year). Ideal for inflation trackers, Dutch macro research and economic dashboards.

## 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/netherlands-stats-api/..."
```

## Pricing
- **Free** (Free) — 2,800 calls/Mo, 3 req/s
- **Basic** ($11/Mo) — 53,000 calls/Mo, 10 req/s
- **Pro** ($30/Mo) — 196,000 calls/Mo, 25 req/s
- **Mega** ($67/Mo) — 805,000 calls/Mo, 60 req/s

## Endpoints

### Inflation

#### `GET /v1/cpi` — Latest Dutch CPI and inflation

**Parameters:**
- `periods` (query, optional, string) — Number of recent months (1-60) Example: `12`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/netherlands-stats-api/v1/cpi?periods=12"
```

**Response:**
```json
{
    "data": {
        "base": "2015 = 100",
        "table": "83131NED",
        "latest": {
            "period": "2025MM12",
            "cpi_index": 135.27,
            "period_iso": "2025-12",
            "cpi_derived": 132.49,
            "change_annual_pct": 2.8,
            "change_monthly_pct": 0
        },
        "series": [
            {
                "period": "2025MM12",
                "cpi_index": 135.27,
                "period_iso": "2025-12",
                "cpi_derived": 132.49,
                "change_annual_pct": 2.8,
                "change_monthly_pct": 0
            },
            {
                "period": "2025MM11",
                "cpi_index": 135.26,
                "period_iso": "2025-11",
                "cpi_derived": 132.48,
                "change_annual_pct": 2.9,
                "change_monthly_pct": -0.8
            },
            {
                "period": "2025MM10",
                "cpi_index": 136.38,
                "period_iso": "2025-10",
                "cpi_derived": 133.58,
                "change_annual_pct": 3.1,
                "change_monthly_pct": 0.3
            },
            {
                "period": "2025MM09",
                "cpi_index": 135.92,
                "period_iso": "2025-09",
                "cpi_derived": 133.13,
                "change_annual_pct": 3.3,
                "change_monthly_pct": -0.1
            },
            {
                "period": "2025MM08",
                "cpi_index": 135.99,

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

### Data

#### `GET /v1/dataset` — Observations from any CBS StatLine table

**Parameters:**
- `table` (query, required, string) — CBS table identifier Example: `83131NED`
- `top` (query, optional, string) — Max rows (1-1000) Example: `10`
- `filter` (query, optional, string) — OData $filter expression Example: `substringof('2025',Perioden)`
- `select` (query, optional, string) — OData $select fields Example: `Perioden,CPI_1`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/netherlands-stats-api/v1/dataset?table=83131NED&top=10&filter=substringof%28%272025%27%2CPerioden%29&select=Perioden%2CCPI_1"
```

**Response:**
```json
{
    "data": {
        "rows": [
            {
                "CPI_1": 131.35,
                "Perioden": "2025MM01"
            },
            {
                "CPI_1": 132.8,
                "Perioden": "2025MM02"
            },
            {
                "CPI_1": 133.33,
                "Perioden": "2025MM03"
            },
            {
                "CPI_1": 134.72,
                "Perioden": "2025MM04"
            },
            {
                "CPI_1": 134,
                "Perioden": "2025MM05"
            },
            {
                "CPI_1": 133.96,
                "Perioden": "2025MM06"
            },
            {
                "CPI_1": 135.69,
                "Perioden": "2025MM07"
            },
            {
                "CPI_1": 135.99,
                "Perioden": "2025MM08"
            },
            {
                "CPI_1": 135.92,
                "Perioden": "2025MM09"
            },
            {
                "CPI_1": 136.38,
                "Perioden": "2025MM10"
            }
        ],
        "count": 10,
        "table": "83131NED"
    },
    "meta": {
        "timestamp": "2026-06-15T11:14:37.240Z",
        "request_id": "c615b161-88cb-4b36-832b-2116c738206a"
    },
    "status": "ok",
    "message": "Dataset retrieved successfully",
    "success": true
}
```

### Catalog

#### `GET /v1/catalog` — Search the StatLine catalogue by title

**Parameters:**
- `q` (query, optional, string) — Title search term Example: `prijs`
- `top` (query, optional, string) — Max results (1-100) Example: `20`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/netherlands-stats-api/v1/catalog?q=prijs&top=20"
```

**Response:**
```json
{
    "data": {
        "count": 20,
        "query": "prijs",
        "tables": [
            {
                "title": "Productie gebouwen, prijsindex 2015=100",
                "period": "1e kwartaal 2015 - 1e kwartaal 2026",
                "updated": "2026-04-30T02:00:00",
                "frequency": "Perkwartaal",
                "identifier": "83547NED"
            },
            {
                "title": "Grond-, weg- en waterbouw (GWW); inputprijsindex 2020=100",
                "period": "januari 2020 - april 2026",
                "updated": "2026-05-29T02:00:00",
                "frequency": "Perdriemaanden",
                "identifier": "86049NED"
            },
            {
                "title": "Grond-, weg- en waterbouw (GWW); inputprijsindex 2000 = 100, vanaf 1979",
                "period": "februari 1979 - april 2026",
                "updated": "2026-05-29T02:00:00",
                "frequency": "Perdriemaanden",
                "identifier": "81139ned"
            },
            {
                "title": "Nieuwbouwwoningen; inputprijsindex bouwkosten 2021=100",
                "period": "januari 2018 - april 2026",
                "updated": "2026-05-29T02:00:00",
                "frequency": "Permaand",
                "identifier": "85728NED"
            },
            {
                "title": "Nieuwbouwwoningen; inputprijsindex bouwkosten 2000=100, vanaf 1990",
                "period": "januari 1990 - April 2026",
                "updated":
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/tableinfo` — Table metadata (title, period, frequency)

**Parameters:**
- `table` (query, required, string) — CBS table identifier Example: `83131NED`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/netherlands-stats-api/v1/tableinfo?table=83131NED"
```

**Response:**
```json
{
    "data": {
        "table": "83131NED",
        "title": "Consumentenprijzen; prijsindex 2015=100, 1996-2025",
        "period": "–",
        "source": "CBS.",
        "summary": "Consumentenprijsindex alle huishoudens naar consumentenbestedingen\nPrijsindex, maand en jaar ontwikkeling en wegingscoëfficiënt",
        "updated": "2026-02-12T06:30:00",
        "frequency": "Stopgezet",
        "short_title": "CPI; prijsindex 2015=100"
    },
    "meta": {
        "timestamp": "2026-06-15T11:14:37.404Z",
        "request_id": "8fb35147-86ce-473e-8d02-853e80baa382"
    },
    "status": "ok",
    "message": "Table info retrieved successfully",
    "success": true
}
```

### Meta

#### `GET /v1/meta` — Service metadata

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

**Response:**
```json
{
    "data": {
        "note": "Dataset/tableinfo take a CBS table identifier, e.g. 83131NED (consumer prices). Period codes: YYYYMMnn = month, YYYYKWnn = quarter, YYYYJJ00 = year.",
        "source": "Statistics Netherlands (Centraal Bureau voor de Statistiek, CBS)",
        "upstream": "https://opendata.cbs.nl/ODataApi/odata",
        "cpi_table": "83131NED",
        "endpoints": [
            "/v1/cpi",
            "/v1/dataset",
            "/v1/tableinfo",
            "/v1/catalog",
            "/v1/meta"
        ],
        "description": "Keyless gateway over the CBS StatLine OpenData (OData v3) API. /v1/cpi gives the latest Dutch consumer price index and inflation; /v1/dataset pulls any StatLine table's observations; /v1/tableinfo and /v1/catalog discover the catalogue.",
        "documentation": "https://netherlands-stats-api.oanor.dev"
    },
    "meta": {
        "timestamp": "2026-06-15T11:14:37.465Z",
        "request_id": "eb7a8175-7d4f-43a0-8d64-0b49e57bd896"
    },
    "status": "ok",
    "message": "Meta",
    "success": true
}
```


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