GET /api/v1/cities/{slug}/public-tenders
Öffentliche Auftragsvergabe je Stadt (oeffentlichevergabe.de, Tier A)
Öffentliche Auftragsbekanntmachungen einer Stadt aus dem Bekanntmachungsdienst des Bundes (oeffentlichevergabe.de, OCDS): laufende Vergabeverfahren und entschiedene Verfahren, je Bekanntmachung Titel, Status, Auftraggeber, Wert und Quell-Link; bei entschiedenen Verfahren zusaetzlich die Auftragnehmer (suppliers, Namensliste; leer wenn die Quelle nicht offenlegt) und der tatsaechlich vergebene Auftragswert (award_value/award_currency, getrennt vom Ausschreibungswert value). status wird semantisch aus dem notice_type abgeleitet: active = laufendes Vergabeverfahren (Auftragsbekanntmachung), complete = entschiedenes Verfahren inkl. aufgehobener Vergaben; der rohe Zuschlag-Status steht im Feld award_status (active/pending/unsuccessful/null). Betraege <= 0 aus der Quelle werden als nicht angegeben (null) gewertet. Die Angebotsfrist (deadline) fehlt im Quell-Export fast immer und steht dann nur in der Original-Bekanntmachung über source_url. Read-only aus dem deduplizierten Store (kein Live-Pull im Request-Pfad). Filter status (active/complete) und match (buyer_city/place_of_performance), mit Pagination (limit/offset). Keine Bekanntmachungen -> 200 source_status="no_data", data=null (ehrlich). CC0 (Tier A). Deaktiviert -> 200 source_status="disabled".
Parameter
| Name | In | Pflicht | Typ | Beschreibung |
|---|---|---|---|---|
slug | path | ja | string | |
status | query | nein | string | Verfahrens-Status (active = laufendes Vergabeverfahren, complete = entschiedenes Verfahren inkl. aufgehobener Vergaben; Detail im Feld award_status). |
match | query | nein | string | Stadt-Zuordnung (buyer_city = Sitz des Amts, place_of_performance = Erfüllungsort). |
q | query | nein | string | Titel-Stichwort (Teilstring, parametrisierter LIKE-Filter). |
since | query | nein | string | Nur Bekanntmachungen ab diesem ISO-Datum YYYY-MM-DD; ungültiges Datum -> 422. |
limit | query | nein | integer | Seitengröße (Default 50, Cap 200). |
offset | query | nein | integer | Seiten-Offset (>= 0); Overflow -> leere Seite, no_data. |
Code-Beispiele
curl "https://infranode.dev/api/v1/cities/hamburg/public-tenders"const res = await fetch("https://infranode.dev/api/v1/cities/hamburg/public-tenders");
const data = await res.json();
console.log(data);import httpx
res = httpx.get("https://infranode.dev/api/v1/cities/hamburg/public-tenders")
res.raise_for_status()
print(res.json())