GET /api/v1/cities/{slug}/council-papers
Municipal council information per city (OParl, Tier A)
A city's municipal council information from the OParl 1.x standard (OParl "Paper" = council papers, motions, resolutions): each paper with title, reference, date, paper type and a link to the main file (main_file_url; the PDF is NOT mirrored). Covered are the five licence-cleared cities Dresden, Cologne, Düsseldorf, Münster and Leipzig (each with its own licence in the attribution). Read-only from the deduplicated store (no live pull in the request path). Filter by q (title keyword), paper_type and since (from an ISO date), with pagination (limit/offset). Not-covered city -> 404 with hint. No papers -> 200 source_status="no_data", data=null. Disabled -> 200 source_status="disabled". Also available under the alias /api/v1/cities/{slug}/council/papers.
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
slug | path | yes | string | |
q | query | no | string | Titel-Stichwort (Teilstring, parametrisierter LIKE-Filter). |
paper_type | query | no | string | Exakter Paper-Typ (z. B. Beschlussvorlage, Antrag). |
since | query | no | string | Nur Paper ab diesem ISO-Datum YYYY-MM-DD; ungültiges Datum -> 422. |
limit | query | no | integer | Seitengröße (Default 50, Cap 100). |
offset | query | no | integer | Seiten-Offset (>= 0); Overflow -> leere Seite, no_data. |
Code samples
curl "https://infranode.dev/api/v1/cities/hamburg/council-papers"const res = await fetch("https://infranode.dev/api/v1/cities/hamburg/council-papers");
const data = await res.json();
console.log(data);import httpx
res = httpx.get("https://infranode.dev/api/v1/cities/hamburg/council-papers")
res.raise_for_status()
print(res.json())