# Tweede Kamer open data

Alles wat de Tweede Kamer doet, als open API: moties en amendementen, hoe elke fractie stemde, schriftelijke Kamervragen, debatten en commissies, Kamerstukken, en de Kamerleden zelf, met hun nevenfuncties, geschenken en reizen.

- Uitgever: Tweede Kamer der Staten-Generaal
- Gebied: Nederland · Laagste detail: motie, stemming, Kamerlid
- Periode: 2008 – 2026 · Ververst: dagelijks
- Toegang: Open · Licentie: CC0 1.0 (disclaimer Tweede Kamer)
- Koppelsleutels: zaaknummer, Kamerstuknummer, fractie
- Status: ok (2026-10-14) · nieuwste motie 2026Z22500
- URL: https://opendata.tweedekamer.nl/documentatie/introductie#heading-93

## Wat kun je ermee?
- **Welke fractie dient de meeste moties in?.** Tel moties per indiener en per jaar. Kijk ook hoeveel ervan zijn aangenomen.
- **Stemgedrag naast elkaar.** Leg voor twee fracties alle stemmingen van een jaar naast elkaar en reken uit hoe vaak ze hetzelfde stemden.
- **Nevenfuncties en geschenken.** Per Kamerlid staan nevenfuncties, inkomsten daaruit, ontvangen geschenken en reizen. Koppel aan de commissies waarin ze zitten.

## Zo verwerk je het
1. **Gebruik de nieuwe adressen (OData v5).** Sinds 12 juni 2026 is er een nieuwe versie van de OData API, met dezelfde 38 entiteiten maar andere veldnamen. De datum van een zaak heet daar Datum (in v4: GestartOp). Dit voorbeeld geeft de nieuwste moties.
   `https://gegevensmagazijn.tweedekamer.nl/OData/v5/Zaak?$filter=Soort%20eq%20'Motie'%20and%20Verwijderd%20eq%20false&$orderby=Datum%20desc&$top=3&$select=Nummer,Onderwerp,Datum`
2. **Tel per jaar in één aanroep.** Ook in v5 werkt $apply. Zo krijg je het aantal moties per jaar zonder alles op te halen (op 16 oktober 2026: 66.147 moties in totaal, in v4 en v5 hetzelfde).
   `https://gegevensmagazijn.tweedekamer.nl/OData/v5/Zaak?$apply=filter(Soort%20eq%20'Motie'%20and%20Verwijderd%20eq%20false)/compute(year(Datum)%20as%20Jaar)/groupby((Jaar),aggregate($count%20as%20n))`

## Interessante koppelingen
- Welke Woo-besluiten horen bij een Kamerdebat? → [open-overheid-woo](https://www.opendataindex.nl/bron/open-overheid-woo.md) via Kamerstuknummer. Zoek op dossier- of Kamerstuknummer in de Woo-documenten van het ministerie.

## Vergelijkbare bronnen
- [Debat Direct](https://debatdirect.tweedekamer.nl): De debatten zelf, live en terug te kijken, met sprekersinformatie. Geen data-API; de vergaderingen staan wel als Activiteit en Vergadering in het Gegevensmagazijn.
- [openraadsinformatie](https://www.opendataindex.nl/bron/openraadsinformatie.md): Hetzelfde soort stukken, maar van gemeenteraden en Provinciale Staten.

## Waar je op moet letten
- **Maximaal 250 per verzoek.** Een hogere $top geeft een foutmelding. Pagineer met $skip, of gebruik de SyncFeed voor bulk.
- **Stemmingen zitten aan besluiten.** Een stemming hoort bij een Besluit, dat bij een Zaak hoort (de motie). Gebruik $expand of koppel op Besluit_Id.
- **Versie 4 is afgeschreven.** De Kamer meldde op 29 mei 2026 dat het oude adres (/OData/v4/2.0) vanaf 1 oktober 2026 geen resultaat meer geeft. Op 16 oktober 2026 antwoordde v4 nog wel, met dezelfde aantallen als v5. Bouw nieuwe code op /OData/v5. De SyncFeed verandert niet.
- **Andere veldnamen in v5.** Een oude veldnaam in v5 geeft een foutmelding. Voorbeelden: Zaak.GestartOp wordt Datum, Organisatie wordt Kamer, Volgnummer wordt Ondernummer; Document.DocumentNummer wordt Nummer; ActorNaam en ActorFractie worden Naam en FractieNaam (Stemming, ZaakActor, DocumentActor, ActiviteitActor); Relatie wordt Rol. Zaak.Status, HuidigeBehandelstatus en GrootProject vervallen. De volledige lijst staat in het nieuwsbericht van de Kamer: https://opendata.tweedekamer.nl/nieuws/nieuwe-versie-odata-api

## API (OData v4)

- Basis: https://gegevensmagazijn.tweedekamer.nl/OData/v5
- Toegang: Geen sleutel of account; het dienstdocument en de tellingen werken anoniem. (getest)
- Formaten: JSON, XML (Atom)
- Filteren: OData v4-expressies in $filter; eq, ne, gt, ge, lt, le, and, or, not, contains(), startswith(), any(), year()

### Endpoints
- `GET /Persoon`: Kamerleden (en oud-Kamerleden)
- `GET /PersoonContactinformatie`: PersoonContactinformatie
- `GET /PersoonGeschenk`: PersoonGeschenk
- `GET /PersoonLoopbaan`: PersoonLoopbaan
- `GET /PersoonNevenfunctie`: PersoonNevenfunctie
- `GET /PersoonNevenfunctieInkomsten`: PersoonNevenfunctieInkomsten
- `GET /PersoonOnderwijs`: PersoonOnderwijs
- `GET /PersoonReis`: PersoonReis
- `GET /Commissie`: Commissie
- `GET /CommissieContactinformatie`: CommissieContactinformatie
- `GET /CommissieZetel`: CommissieZetel
- `GET /CommissieZetelVastPersoon`: CommissieZetelVastPersoon
- `GET /CommissieZetelVastVacature`: CommissieZetelVastVacature
- `GET /CommissieZetelVervangerPersoon`: CommissieZetelVervangerPersoon
- `GET /CommissieZetelVervangerVacature`: CommissieZetelVervangerVacature
- `GET /Fractie`: fracties met aantal zetels
- `GET /FractieZetel`: FractieZetel
- `GET /FractieZetelPersoon`: FractieZetelPersoon
- `GET /FractieZetelVacature`: FractieZetelVacature
- `GET /Activiteit`: debatten, commissievergaderingen, gesprekken
- `GET /ActiviteitActor`: ActiviteitActor
- `GET /Agendapunt`: Agendapunt
- `GET /Besluit`: besluiten over een zaak, met de stemmingssoort
- `GET /Stemming`: stemmingen per fractie of Kamerlid
- `GET /Zaak`: zaken: moties, amendementen, wetsvoorstellen, Kamervragen (veld Soort)
- `GET /ZaakActor`: ZaakActor
- `GET /Zaal`: Zaal
- `GET /Reservering`: Reservering
- `GET /Document`: documenten: Kamerstukken, brieven, verslagen
- `GET /DocumentActor`: DocumentActor
- `GET /DocumentVersie`: DocumentVersie
- `GET /DocumentPublicatie`: DocumentPublicatie
- `GET /DocumentPublicatieMetadata`: DocumentPublicatieMetadata
- `GET /Kamerstukdossier`: 7.840 records
- `GET /Vergadering`: 7.569 records
- `GET /Verslag`: Verslag
- `GET /Toezegging`: Toezegging
- `GET /ToegezegdAan`: ToegezegdAan

### Parameters
- `$filter`: rijen kiezen, bv. Soort eq 'Motie' and Datum ge 2025-01-01T00:00:00Z (platform)
- `$select`: alleen deze velden (platform)
- `$expand`: gekoppelde entiteiten meenemen, bv. Zaak met Besluit en Stemming (platform)
- `$orderby`: sorteren, bv. Datum desc (platform)
- `$top / $skip`: pagineren (platform)
- `$count`: totaal meegeven ($count=true) of alleen tellen (/$count) (platform)
- `$apply`: groeperen en tellen, bv. groupby((Soort),aggregate($count as n)) (getest)

### Dimensies
- `Zaak` (343619 codes): 
- `Document` (728947 codes): 
- `Besluit` (740618 codes): 
- `Stemming` (1030560 codes): 
- `Activiteit` (100752 codes): 
- `Vergadering` (7569 codes): 
- `Persoon` (4480 codes): 
- `Fractie` (160 codes): 
- `Kamerstukdossier` (7840 codes): 

### Velden van Zaak (18)
`Id` guid, `Nummer` string, `Soort` string, `Titel` string, `Citeertitel` string, `Alias` string, `Onderwerp` string, `Datum` datetimeoffset, `Kamer` string, `Voorhang` string, `Termijn` datetimeoffset, `Vergaderjaar` string, `Ondernummer` int32, `Afgedaan` boolean, `GewijzigdOp` datetimeoffset, `ApiGewijzigdOp` datetimeoffset, `Verwijderd` boolean, `Kabinetsappreciatie` string

### Limieten en valkuilen
- Maximaal 250 rijen per verzoek ($top); hoger geeft een foutmelding. Volg @odata.nextLink of pagineer met $skip. (getest)
- De data beginnen niet allemaal tegelijk: Parlis (activiteiten, documenten, stemmingen) sinds 1 september 2008, VLOS (verslagen) sinds 25 juni 2013, Sesam (Kamerleden, fracties, commissies) sinds 1 september 2021, toezeggingen sinds 1 september 2022. Reeksen van vóór die data zijn onvolledig. (uit de beschrijving)
- Licentie: CC0 1.0, tenzij anders vermeld (disclaimer: https://opendata.tweedekamer.nl/disclaimer). De Tweede Kamer onderschrijft het gebruik niet en sluit aansprakelijkheid uit. (uit de beschrijving)
- Voor alles in één keer is er de SyncFeed (gegevensmagazijn.tweedekamer.nl/SyncFeed/2.0/Feed): een Atom-feed met alle wijzigingen. (getest)
- Tellen en groeperen kan in de API zelf: $apply=groupby((Soort),aggregate($count as n)). (getest)
- Records worden niet gewist maar krijgen Verwijderd = true; filter daar altijd op. (ervaring)

### Voorbeeld
```
https://gegevensmagazijn.tweedekamer.nl/OData/v5/Zaak?$filter=Soort%20eq%20'Motie'&$orderby=Datum%20desc&$top=3&$select=Nummer,Onderwerp,Titel,Datum
```

## Wat je ermee kunt bouwen
- [Rijksbegroting-tracker: begroot tegen uitgegeven](https://www.opendataindex.nl/bouwen/rijksbegroting-tracker.md): Volg per ministerie en per begrotingsartikel wat het Rijk van plan was uit te geven en wat het echt uitgaf, jaar na jaar, met de moties en amendementen die de Kamer erover indiende.
- [Stemgedrag-tracker: hoe stemde elke partij?](https://www.opendataindex.nl/bouwen/stemgedrag-tracker.md): Zoek een onderwerp en zie hoe elke fractie in de Tweede Kamer stemde over de moties erover: hoe vaak voor, hoe vaak tegen, en welke moties het haalden.


## Voorbeelden met echte cijfers (9)

Per voorbeeld de bevinding, de peildatum en de aanroep die precies deze cijfers ophaalt.

- **Ingediende amendementen: 982 per jaar in 2025, 7% meer dan in 2009** (2025). Tabel Zaak. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/tk-amendementen)
  - `https://gegevensmagazijn.tweedekamer.nl/OData/v5/Zaak?$apply=filter((Soort%20eq%20'Amendement')%20and%20Verwijderd%20eq%20false)%2Fcompute(year(Datum)%20as%20Jaar)%2Fgroupby((Jaar)%2Caggregate(%24count%20as%20n))`
- **Brieven van de regering aan de Kamer: 4.935 per jaar in 2025, 17% minder dan in 2009** (2025). Tabel Zaak. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/tk-brieven-regering)
  - `https://gegevensmagazijn.tweedekamer.nl/OData/v5/Zaak?$apply=filter((Soort%20eq%20'Brief%20regering')%20and%20Verwijderd%20eq%20false)%2Fcompute(year(Datum)%20as%20Jaar)%2Fgroupby((Jaar)%2Caggregate(%24count%20as%20n))`
- **Geschenken die Kamerleden meldden: 434 per jaar in 2025, 52% meer dan in 2010** (2025). Tabel PersoonGeschenk. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/tk-geschenken)
  - `https://gegevensmagazijn.tweedekamer.nl/OData/v5/PersoonGeschenk?$apply=filter((true)%20and%20Verwijderd%20eq%20false)%2Fcompute(year(Datum)%20as%20Jaar)%2Fgroupby((Jaar)%2Caggregate(%24count%20as%20n))`
- **Initiatiefwetsvoorstellen van Kamerleden: 13 per jaar in 2025, 2,2 keer zo veel als in 2009** (2025). Tabel Zaak. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/tk-initiatiefwetten)
  - `https://gegevensmagazijn.tweedekamer.nl/OData/v5/Zaak?$apply=filter((Soort%20eq%20'Initiatiefwetgeving')%20and%20Verwijderd%20eq%20false)%2Fcompute(year(Datum)%20as%20Jaar)%2Fgroupby((Jaar)%2Caggregate(%24count%20as%20n))`
- **Schriftelijke Kamervragen: 1.993 per jaar in 2025, 34% minder dan in 2009** (2025). Tabel Zaak. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/tk-kamervragen)
  - `https://gegevensmagazijn.tweedekamer.nl/OData/v5/Zaak?$apply=filter((Soort%20eq%20'Schriftelijke%20vragen')%20and%20Verwijderd%20eq%20false)%2Fcompute(year(Datum)%20as%20Jaar)%2Fgroupby((Jaar)%2Caggregate(%24count%20as%20n))`
- **Mondelinge vragen in het vragenuur: 76 per jaar in 2025, 44% minder dan in 2009** (2025). Tabel Zaak. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/tk-mondelinge-vragen)
  - `https://gegevensmagazijn.tweedekamer.nl/OData/v5/Zaak?$apply=filter((Soort%20eq%20'Mondelinge%20vragen')%20and%20Verwijderd%20eq%20false)%2Fcompute(year(Datum)%20as%20Jaar)%2Fgroupby((Jaar)%2Caggregate(%24count%20as%20n))`
- **Ingediende moties in de Tweede Kamer: 4.440 per jaar in 2025, 70% meer dan in 2009** (2025). Tabel Zaak. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/tk-moties)
  - `https://gegevensmagazijn.tweedekamer.nl/OData/v5/Zaak?$apply=filter((Soort%20eq%20'Motie')%20and%20Verwijderd%20eq%20false)%2Fcompute(year(Datum)%20as%20Jaar)%2Fgroupby((Jaar)%2Caggregate(%24count%20as%20n))`
- **Waar de Kamer vorig jaar mee bezig was: brief regering is het grootste deel, 31% in 2025** (2025). Tabel Zaak. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/tk-zaken-soort)
  - `https://gegevensmagazijn.tweedekamer.nl/OData/v5/Zaak?$apply=filter((true)%20and%20Verwijderd%20eq%20false%20and%20year(Datum)%20eq%202025)%2Fgroupby((Soort)%2Caggregate(%24count%20as%20n))`
- **Zetels in de Tweede Kamer: D66 is het grootste deel, 17% in oktober 2026** (oktober 2026). Tabel Fractie. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/tk-zetels)
  - `https://gegevensmagazijn.tweedekamer.nl/OData/v5/Fractie?$filter=(DatumInactief%20eq%20null)%20and%20Verwijderd%20eq%20false&$select=Afkorting,AantalZetels&$orderby=AantalZetels%20desc`
