Glossary

A reference for the domain concepts and project-specific terms used throughout dip-bundestag-cli. The DIP domain is German; this glossary gives the English term used in the CLI/API (where one exists) alongside the original German.

Translation table. The CLI keeps the original German resource names (they are the API’s own paths), with the English meaning given here:

German English
Vorgang procedure / legislative process
Vorgangsposition procedure step / position within a procedure
Drucksache printed paper
Plenarprotokoll plenary protocol (minutes)
Aktivität activity
Person person (member / actor)
Wahlperiode electoral term / legislative period
Bundestag the federal parliament
Bundesrat the federal council (states’ chamber)

DIP

DIP — Dokumentations- und Informationssystem für Parlamentsmaterialien. (“Documentation and information system for parliamentary materials.”) The Bundestag’s catalogue of parliamentary process data: who proposed what, the documents involved, the plenary debates, and the people acting. Browsable at dip.bundestag.de; the machine API this tool wraps lives at search.dip.bundestag.de/api/v1.

Bundestag. The German federal parliament (the elected chamber). Bundesrat is the chamber representing the sixteen federal states (Länder). DIP covers materials from both bodies.

API key. DIP requires an API key, sent as the HTTP header Authorization: ApiKey <key>. The key is not bundled — supply it via --api-key or the DIP_API_KEY environment variable, else the header is omitted and the API returns 401. The Bundestag publishes a public key on its DIP API help page (stated there in 2026 as valid until the end of May 2027); a personal key can be requested from parlamentsdokumentation@bundestag.de. The CLI’s obtain-key command reads that page’s key from the JSON document DIP’s content service serves behind it, falls back to the bundesAPI README, and verifies the key against the live API before printing it — so it fails rather than hand over a key the API rejects.


Resources (endpoints)

Each resource is exposed under /api/v1/<resource> with a list endpoint (/<resource>) and a single-item endpoint (/<resource>/<id>). The CLI mirrors this as <resource> list and <resource> get <id>.

Vorgang (procedure). A legislative or parliamentary process — e.g. a bill, a motion (Antrag), an interpellation (Anfrage) — tracked from introduction to conclusion. The central entity that ties documents, activities and people together. CLI: vorgang. Client: client.vorgaenge.

Vorgangsposition (procedure step). A single step within a Vorgang — one event in its history (e.g. a first reading, a committee referral, a vote). A Vorgang has many Vorgangspositionen. CLI: vorgangsposition. Client: client.vorgangspositionen.

Drucksache (printed paper). A formal parliamentary document — bills, motions, reports, answers to questions, etc. — identified by a paper number within an electoral term. CLI: drucksache. Client: client.drucksachen.

Drucksache-Text. The same Drucksachen, but with the extracted full text of the document included in the payload (a separate, heavier endpoint). CLI: drucksache-text. Client: client.drucksacheText.

Plenarprotokoll (plenary protocol). The stenographic minutes of a plenary sitting of the Bundestag or Bundesrat. CLI: plenarprotokoll. Client: client.plenarprotokolle.

Plenarprotokoll-Text. The Plenarprotokolle with the extracted full text of the minutes included. CLI: plenarprotokoll-text. Client: client.plenarprotokollText.

Aktivität (activity). A recorded action by a person within a procedure — e.g. a speech, a question, a signature on a motion. Links a Person to a Vorgang. CLI: aktivitaet. Client: client.aktivitaeten.

Person. A person appearing in the materials — typically a member of parliament (Abgeordnete:r), but also other actors. CLI: person. Client: client.personen.


Identifiers, filters & pagination

id. Every resource document has a numeric id, used by the get endpoint (drucksache get 123456) and by the f.id filter. The CLI’s --id flag is shorthand for f.id and is repeatable.

f.* filters (Filter). DIP filters are query parameters prefixed with f., e.g. f.titel (title), f.id, f.wahlperiode, f.datum.start / f.datum.end (date range), f.vorgangstyp, f.dokumentart, f.aktualisiert.start (last-updated range). The CLI passes them verbatim via --filter key=value (repeatable); only the first = splits key from value, so a value may itself contain =. Repeating the same key sends repeated query keys (?f.id=1&f.id=2), which DIP treats as an OR set.

cursor. DIP list endpoints are cursor-paginated. A list response carries a cursor; pass it back via --cursor (CLI) or { cursor } (library) to fetch the next page. The cursor is opaque — treat it as a token, not a number. When the returned cursor stops changing, you have reached the end.

numFound. The total number of documents matching a list query (across all pages), returned in the list envelope alongside the current page’s documents.

documents. The array of resource documents in the current page of a list response. Each is exposed as a faithful raw JsonObject (the per-resource payloads are large and resource-specific, so they are not narrowed to typed fields).

Wahlperiode (electoral term). The numbered legislative period of the Bundestag (e.g. the 20th Wahlperiode). Most resources carry a wahlperiode field and can be filtered with f.wahlperiode; document numbers are scoped to a Wahlperiode.

Vorgangstyp (procedure type). The classification of a Vorgang (e.g. Gesetzgebung — legislation, Antrag — motion, Kleine Anfrage — minor interpellation). Filterable via f.vorgangstyp.

Dokumentart (document type). Whether a document is a Drucksache or a Plenarprotokoll. Filterable via f.dokumentart on vorgang, vorgangsposition and aktivitaet. The kind of Drucksache (Antrag, Gesetzentwurf, Antwort, …) is drucksachetyp, filterable via f.drucksachetyp.

Datum (date). The date a document/activity is dated. Date-range filtering uses f.datum.start and f.datum.end (ISO YYYY-MM-DD). The query builder serialises Date values to full ISO-8601 strings.

Zuordnung (assignment). Some resources can be filtered by chamber/assignment (f.zuordnung), distinguishing Bundestag (BT) from Bundesrat (BR) materials.


API behaviour & errors

Base URL. Defaults to https://search.dip.bundestag.de; override with --base-url (CLI) or baseUrl (library). All resource paths are under /api/v1.

Rate limiting. DIP limits the request rate; the API returns 429 when it is exceeded. The client retries 429 and 503 automatically with linear backoff (--max-retries, default 2).

Credential stripping on redirect. The Authorization header (and X-API-Key / Cookie) is removed on any redirect that crosses origins, so the API key is never leaked to a host other than the one you targeted. Same-origin redirects keep it.

Error types. errors.ts: DipApiError (non-2xx, carries status/detail/url/method/body, with isRetryable for 429/503), DipNetworkError (transport failure/timeout), DipParseError (bad JSON), and DipUsageError (a CLI usage error such as an empty get id), all extending DipError. Exit codes: 0 success, 2 usage errors, 4 on a 404, 1 for any other runtime error (including 401 when the key is missing/expired).


Library & internals. Terms for the TypeScript client and its internals — DipClient, resource groups, the request engine, transport, retry/backoff, error types, query builder — now live in DEVELOPING.md.

View the source on GitHub →