InfraNode.dev
MCP InfraNode is also available as an MCP server for AI assistants like Claude and ChatGPT.

GET /api/v1/cities/{slug}/public-tenders

Public procurement notices per city (oeffentlichevergabe.de, Tier A)

A city's public procurement notices from the German federal procurement publication service (oeffentlichevergabe.de, OCDS): running procedures and decided procedures, each with title, status, buyer, value and a source link; decided procedures additionally carry the contractors (suppliers, list of names; empty when the source does not disclose them) and the actually awarded value (award_value/award_currency, separate from the tender estimate value). status is derived semantically from the notice_type: active = running procedure (contract notice), complete = decided procedure incl. cancelled awards; the raw award status is in the award_status field (active/pending/unsuccessful/null). Amounts of 0 or less from the source are treated as not stated (null). The submission deadline is almost always missing in the source export and then only found in the original notice via source_url. Read-only from the deduplicated store (no live pull in the request path). Filter by status (active/complete) and match (buyer_city/place_of_performance), with pagination (limit/offset). No notices -> 200 source_status="no_data", data=null (honest). CC0 (Tier A). Disabled -> 200 source_status="disabled".

Parameters

Name In Required Type Description
slug path yes string
status query no string Verfahrens-Status (active = laufendes Vergabeverfahren, complete = entschiedenes Verfahren inkl. aufgehobener Vergaben; Detail im Feld award_status).
match query no string Stadt-Zuordnung (buyer_city = Sitz des Amts, place_of_performance = Erfüllungsort).
q query no string Titel-Stichwort (Teilstring, parametrisierter LIKE-Filter).
since query no string Nur Bekanntmachungen ab diesem ISO-Datum YYYY-MM-DD; ungültiges Datum -> 422.
limit query no integer Seitengröße (Default 50, Cap 200).
offset query no integer Seiten-Offset (>= 0); Overflow -> leere Seite, no_data.

Code samples

curl "https://infranode.dev/api/v1/cities/hamburg/public-tenders"

Try it