# Bundestag API
> German parliaments as an API, powered by the official abgeordnetenwatch.de service. Search politicians across the Bundestag, the 16 state Landtage and the German seats in the EU Parliament; read a politician's profile (party, year of birth, education, residence, occupation and how many citizen questions they have received and answered); list the parliaments; browse the recorded votes (Abstimmungen) with their date and whether the motion was accepted, newest first and filterable by parliament; read a single vote with its committees and topics; and list parliamentary committees. The transparency database that tracks German federal and state politics. Ideal for civic-tech and transparency apps, political journalism and dashboards, election and voting-record tools, and research on German politics. Data is CC BY-SA from abgeordnetenwatch.de.

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

## Pricing
- **Free** (Free) — 800 calls/Mo, 2 req/s
- **Starter** ($6/Mo) — 26,000 calls/Mo, 8 req/s
- **Pro** ($18/Mo) — 110,000 calls/Mo, 20 req/s
- **Mega** ($51/Mo) — 420,000 calls/Mo, 50 req/s

## Endpoints

### Politicians

#### `GET /v1/politician` — A politician's profile

**Parameters:**
- `id` (query, required, string) — Politician id, e.g. 79475 Example: `79475`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/bundestag-api/v1/politician?id=79475"
```

**Response:**
```json
{
    "data": {
        "politician": {
            "id": 79475,
            "sex": "f",
            "url": "https://www.abgeordnetenwatch.de/profile/annalena-baerbock",
            "name": "Annalena Baerbock",
            "party": "BÜNDNIS 90/­DIE GRÜNEN",
            "title": null,
            "deceased": null,
            "education": "Völkerrechtlerin (LL.M.)",
            "last_name": "Baerbock",
            "residence": "Potsdam",
            "birth_year": 1980,
            "first_name": "Annalena",
            "occupation": "MdB",
            "questions_answered": null,
            "questions_received": 14
        }
    },
    "meta": {
        "timestamp": "2026-06-01T08:13:43.339Z",
        "request_id": "c64ce334-0966-4d15-aec2-d081f39c73f1"
    },
    "status": "ok",
    "message": "Politician retrieved",
    "success": true
}
```

#### `GET /v1/politicians` — Search politicians by name

**Parameters:**
- `query` (query, optional, string) — Name (contains), e.g. Scholz Example: `Scholz`
- `last_name` (query, optional, string) — Exact last name
- `limit` (query, optional, string) — Max results (1-100)

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/bundestag-api/v1/politicians?query=Scholz"
```

**Response:**
```json
{
    "data": {
        "count": 20,
        "query": "Scholz",
        "total": 36,
        "politicians": [
            {
                "id": 184179,
                "sex": "m",
                "name": "Samuel Niklas Scholz",
                "party": "Volt",
                "last_name": "Scholz",
                "birth_year": 1997,
                "first_name": "Samuel Niklas"
            },
            {
                "id": 183987,
                "sex": "m",
                "name": "Matthias Michael Maria Scholz",
                "party": "Die PARTEI",
                "last_name": "Scholz",
                "birth_year": null,
                "first_name": "Matthias Michael Maria"
            },
            {
                "id": 183829,
                "sex": "m",
                "name": "Andreas Scholz",
                "party": "FREIE WÄHLER",
                "last_name": "Scholz",
                "birth_year": 1983,
                "first_name": "Andreas"
            },
            {
                "id": 183184,
                "sex": "m",
                "name": "Michael Scholz",
                "party": "Die Linke",
                "last_name": "Scholz",
                "birth_year": 1974,
                "first_name": "Michael"
            },
            {
                "id": 182681,
                "sex": "m",
                "name": "Konstantin Scholz",
                "party": "SPD",
                "last_name": "Scholz",
                "birth_year": 20
…(truncated, see openapi.json for full schema)
```

### Parliaments

#### `GET /v1/committees` — Parliamentary committees

**Parameters:**
- `parliament` (query, optional, string) — Parliament-period id filter
- `limit` (query, optional, string) — Max (1-100)

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

**Response:**
```json
{
    "data": {
        "count": 30,
        "total": 958,
        "committees": [
            {
                "id": 6484,
                "name": "Gremium nach § 28a des Geldwäschegesetzes",
                "parliament_period": "Bundestag 2025 - 2029"
            },
            {
                "id": 6338,
                "name": "Enquete-Kommission „Aufarbeitung der Corona-Pandemie und Lehren für zukünftige pandemische Ereignisse“",
                "parliament_period": "Bundestag 2025 - 2029"
            },
            {
                "id": 6337,
                "name": "Unterausschuss Europarecht",
                "parliament_period": "Bundestag 2025 - 2029"
            },
            {
                "id": 6336,
                "name": "Unterausschuss Krisenprävention, strategische Vorausschau, Stabilisierung und Friedensförderung",
                "parliament_period": "Bundestag 2025 - 2029"
            },
            {
                "id": 6335,
                "name": "Unterausschuss Internationale Ordnung, Vereinte Nationen und internationale Organisationen",
                "parliament_period": "Bundestag 2025 - 2029"
            },
            {
                "id": 6333,
                "name": "Unterausschuss Rüstungs- und Proliferationskontrolle, Nichtverbreitung und internationale Abrüstung",
                "parliament_period": "Bundestag 2025 - 2029"
            },
            {
                "id": 6332,
                "name": "Unterauss
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/parliaments` — The German parliaments

**Parameters:**
- `limit` (query, optional, string) — Max (1-100)

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

**Response:**
```json
{
    "data": {
        "count": 18,
        "total": 18,
        "parliaments": [
            {
                "id": 18,
                "name": "Schleswig-Holstein",
                "current_period": "Schleswig-Holstein 2022 - 2027",
                "label_external": "Landtag Schleswig-Holstein"
            },
            {
                "id": 17,
                "name": "Sachsen",
                "current_period": "Sachsen 2024 - 2029",
                "label_external": "Landtag Sachsen"
            },
            {
                "id": 16,
                "name": "Brandenburg",
                "current_period": "Brandenburg 2024 - 2029",
                "label_external": "Landtag Brandenburg"
            },
            {
                "id": 15,
                "name": "Thüringen",
                "current_period": "Thüringen 2024 - 2029",
                "label_external": "Landtag Thüringen"
            },
            {
                "id": 14,
                "name": "Saarland",
                "current_period": "Saarland 2022 - 2027",
                "label_external": "Landtag Saarland"
            },
            {
                "id": 13,
                "name": "Bayern",
                "current_period": "Bayern 2023 - 2028",
                "label_external": "Landtag Bayern"
            },
            {
                "id": 12,
                "name": "Niedersachsen",
                "current_period": "Niedersachsen 2022 - 2027",
                "label_ex
…(truncated, see openapi.json for full schema)
```

### Votes

#### `GET /v1/poll` — A single vote

**Parameters:**
- `id` (query, required, string) — Poll id, e.g. 6532 Example: `6532`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/bundestag-api/v1/poll?id=6532"
```

**Response:**
```json
{
    "data": {
        "poll": {
            "id": 6532,
            "url": "https://www.abgeordnetenwatch.de/brandenburg/8/abstimmungen/aufhebung-von-eu-sanktionen",
            "date": "2026-04-22",
            "title": "Aufhebung von EU-Sanktionen",
            "topics": [
                "Europapolitik und Europäische Union",
                "Recht"
            ],
            "accepted": false,
            "committees": [],
            "parliament_period": "Brandenburg 2024 - 2029"
        }
    },
    "meta": {
        "timestamp": "2026-06-01T08:13:45.347Z",
        "request_id": "ba22aec3-7297-4834-8568-9f3f79870d51"
    },
    "status": "ok",
    "message": "Poll retrieved",
    "success": true
}
```

#### `GET /v1/polls` — Recorded votes (Abstimmungen)

**Parameters:**
- `parliament` (query, optional, string) — Parliament-period id filter
- `limit` (query, optional, string) — Max (1-100)

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

**Response:**
```json
{
    "data": {
        "count": 25,
        "polls": [
            {
                "id": 6528,
                "date": "2026-05-22",
                "title": "Vorstoß zur Zukunft der Apothekenversorgung abgelehnt (Beschlussempfehlung)",
                "accepted": true,
                "parliament_period": "Bundestag 2025 - 2029"
            },
            {
                "id": 6525,
                "date": "2026-05-21",
                "title": "Gleichstellung der Geschlechter in der Pflege sicherstellen",
                "accepted": true,
                "parliament_period": "EU-Parlament 2024 - 2029"
            },
            {
                "id": 6524,
                "date": "2026-05-19",
                "title": "Überprüfung ausländischer Investitionen in der EU",
                "accepted": true,
                "parliament_period": "EU-Parlament 2024 - 2029"
            },
            {
                "id": 6511,
                "date": "2026-05-08",
                "title": "Keine stärkere Absicherung des EU-Förderprogramms LEADER (Beschlussempfehlung)",
                "accepted": true,
                "parliament_period": "Bundestag 2025 - 2029"
            },
            {
                "id": 6513,
                "date": "2026-05-06",
                "title": "Verfassungsänderung zur Einsetzung von Untersuchungsausschüssen",
                "accepted": true,
                "parliament_period": "Rheinland-Pfalz 2021 - 2026"
            },
     
…(truncated, see openapi.json for full schema)
```

### Meta

#### `GET /v1/meta` — Usage notes

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

**Response:**
```json
{
    "data": {
        "note": "German parliaments (Bundestag, the 16 state Landtage and the EU Parliament). /v1/politicians?query=Scholz (or last_name=) = search politicians by name, returning id, party, birth year; /v1/politician?id=79475 = a politician's profile (party, education, residence, occupation, question statistics); /v1/parliaments = the parliaments; /v1/polls?parliament=132&limit=25 = recent votes (Abstimmungen) with date and whether they were accepted (newest first; filter by a parliament-period id); /v1/poll?id=6532 = a single vote with its committees and topics; /v1/committees?parliament=132 = parliamentary committees. Data from abgeordnetenwatch.de (CC BY-SA). German federal & state politics. For US Congress see the Congress API; for the UK the UK Parliament API.",
        "source": "abgeordnetenwatch.de API v2 (German parliaments)",
        "endpoints": [
            "/v1/politicians",
            "/v1/politician",
            "/v1/parliaments",
            "/v1/polls",
            "/v1/poll",
            "/v1/committees",
            "/v1/meta"
        ]
    },
    "meta": {
        "timestamp": "2026-06-01T08:13:47.050Z",
        "request_id": "ed0d6619-6a9e-4f26-a893-a3275a038ed3"
    },
    "status": "ok",
    "message": "Meta retrieved",
    "success": true
}
```


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