Zum Inhalt springen

API · Für Entwickler

Ausschreibungsdaten über eine API

Die Daten, die Tender-Radar-Nutzer sehen, in Ihrem ERP, CRM oder Data Warehouse: Prozorro, über hundert kommerzielle Plattformen und Unternehmensportale, die EU, das Vereinigte Königreich und die UN. Ein Format für jede Plattform, alle paar Minuten aktualisiert.

Was die API Ihnen liefert

Jede Ausschreibung kommt in einem Format, egal wo sie veröffentlicht wurde: Nummer, Titel, Auftraggeber mit seiner Unternehmens-ID, CPV, erwarteter Wert, Fristen in der Zeitzone des Auftraggebers und in UTC, Status und ein Link zum Original. Steht dieselbe Ausschreibung auf mehreren Plattformen, erhalten Sie einen Datensatz, der alle Veröffentlichungsorte auflistet.

Quellen

  • Prozorro – öffentliche Beschaffung der Ukraine
  • Ukrainische kommerzielle Plattformen und Beschaffungsportale von Unternehmen
  • Europäische Union (TED)
  • Nationale Beschaffungssysteme anderer Länder, darunter das Vereinigte Königreich
  • Internationale Organisationen, darunter die UN

Aktualität

Jede Quelle wird nach eigenem Zeitplan abgefragt: die häufigste alle paar Minuten, die übrigen stündlich bis alle paar Stunden. Das Feld updated_at gibt an, wann sich ein Datensatz zuletzt geändert hat.

Felder einer Ausschreibung

FeldBeschreibung
idDauerhafte ID des Datensatzes in Radar (UUID). Führen Sie Upserts Ihrer Zeilen anhand dieser ID durch.
numberDie Nummer der Ausschreibung bei der Quelle, z. B. UA-2026-10-11-000337-a.
title · title_translated · description · languageTitel und Beschreibung in der Originalsprache; eine ukrainische Übersetzung des Titels einer ausländischen Ausschreibung, falls vorhanden.
status · status_sourceStatus auf der einheitlichen Skala von Radar und der Status, wie ihn die Quelle angibt.
procedureVerfahrensart: Code und Bezeichnung.
buyerAuftraggeber: Name, EDRPOU oder nationale ID, Region, Ort.
cpvHaupt-CPV-Code mit Bezeichnung sowie zusätzliche Codes.
valueErwarteter Wert, Währung und ob die MwSt. enthalten ist.
published_at · submission_deadline · enquiry_end · auction_atDaten und Fristen: Ortszeit des Auftraggebers (local) und UTC (utc); time_zone ist die Zeitzone des Auftraggebers.
source · url · also_onQuelle, Link zum Original und die anderen Plattformen, die dieselbe Ausschreibung veröffentlichen.
lots · items · documentsLose, Positionen und Dokumente, wenn die Quelle sie veröffentlicht.
radar_url · first_seen_at · updated_atDie Ausschreibung in Radar, wann wir sie erstmals gesehen haben und wann sich der Datensatz zuletzt geändert hat.

Authentifizierung

Jede Anfrage trägt den Schlüssel der Organisation im Header Authorization: Bearer rdr_live_…. Ein Schlüssel gehört dem Unternehmen, nicht einer Person: Geben Sie ihn einem Dienst oder einer Integration.

  1. 1Schlüssel erstellt der Inhaber oder Admin des Unternehmens in Tender Radar: Einstellungen → «API».
  2. 2Wir zeigen den vollständigen Schlüssel einmal, direkt nach der Erstellung. Bewahren Sie ihn in einem Secrets-Manager oder einer Umgebungsvariable auf.
  3. 3Wir speichern nur einen Hash des Schlüssels, können ihn also nicht erneut anzeigen. Schlüssel verloren? Widerrufen Sie ihn und erstellen Sie einen neuen.
  4. 4Ein widerrufener Schlüssel funktioniert sofort nicht mehr. Geben Sie jeder Integration einen eigenen Schlüssel (bis zu 10 aktive).

Basis-URL

https://app.metadani.com/v1/data
Authorization: Bearer rdr_live_…

Erste Anfrage

Offene Dacharbeiten-Ausschreibungen in der Ukraine. Der Schlüssel wird aus der Umgebungsvariable RADAR_API_KEY gelesen.

Endpunkte

Jede Antwort ist JSON in UTF-8. Listen kommen als Objekt mit einem Feld data. Listenparameter können wiederholt oder durch Kommas getrennt werden.

Ausschreibungen

GET/v1/data/tenders

Ausschreibungen suchen und exportieren. Die Reihenfolge ist immer (updated_at, id) aufsteigend, sodass der Cursor nie eine Änderung überspringt.

ParameterBeschreibung
qFreitext, einschließlich Wortformen. Eine exakte Wendung steht in Anführungszeichen, -Wort schließt aus.
cpvCPV-Codes oder 2–8-stellige Präfixe (45 – Bau, 4526 – Dacharbeiten).
countryLand nach ISO 3166-1 alpha-2: UA, PL, GB …; EU – EU-Ausschreibungen aus TED.
sourceQuellcodes aus /v1/data/sources.
groupSlugs von Unternehmensgruppen aus /v1/data/buyer-groups.
buyerAuftraggeber: EDRPOU, nationale ID oder Radar-Auftraggeber-ID.
statusopen (Standard) – ein Lieferant kann noch bieten und die Frist ist nicht abgelaufen; any – jeder Status; oder bestimmte Status: planned, active, enquiry, tendering, auction, qualification, awarded, complete, cancelled, unsuccessful, closed_by_deadline, withdrawn_from_hub, notice, non_competitive.
value_min, value_maxErwarteter Wert von / bis, in der eigenen Währung der Ausschreibung.
deadline_from, deadline_toAngebotsfrist von / bis, ISO-8601-Datum mit Uhrzeit.
updated_sinceISO 8601: nur Ausschreibungen, die zu diesem Zeitpunkt oder später erstellt oder geändert wurden.
cursorOpaker Cursor aus next_cursor der vorherigen Antwort.
limitSeitengröße, 1–500, Standard 100.
langSprache der CPV-Bezeichnungen, Verfahrensbezeichnungen und Quellennamen: uk (Standard), ru, en.
formatjson (Standard) oder csv.
Beispielantwort
{
  "data": [
    {
      "id": "0d6f4f7e-1c3b-4a51-9b7e-5b9b1f0c2a11",
      "number": "UA-2026-10-11-000337-a",
      "title": "Капітальний ремонт покрівлі",
      "status": "tendering",
      "source": { "code": "prozorro", "name": "Prozorro" },
      "value": { "amount": 1250000.0, "currency": "UAH", "vat_included": true },
      "submission_deadline": { "local": "2026-10-21T00:00:00+03:00", "utc": "2026-10-20T21:00:00Z" },
      "updated_at": "2026-10-11T19:31:02.123456Z",
      "…": "…"
    }
  ],
  "next_cursor": "eyJ1IjoiMjAyNi0xMC0xMVQxOTozMTowMi4xMjM0NTZaIiwiaSI6IjZmMWMifQ",
  "has_more": true,
  "as_of": "2026-10-11T19:40:00Z"
}

Eine Ausschreibung

GET/v1/data/tenders/{id}

Der vollständige Datensatz anhand von id. Unbekannte ID: 404 tender_not_found.

Keine Parameter.

Beispielantwort
{
  "id": "0d6f4f7e-1c3b-4a51-9b7e-5b9b1f0c2a11",
  "number": "UA-2026-10-11-000337-a",
  "title": "Капітальний ремонт покрівлі",
  "title_translated": null,
  "description": "…",
  "language": "uk",
  "status": "tendering",
  "status_source": "active.tendering",
  "procedure": {
    "code": "aboveThreshold",
    "label": "Відкриті торги з особливостями"
  },
  "buyer": {
    "name": "Київська міська рада",
    "edrpou": "22883141",
    "scheme": "UA-EDR",
    "region": "Київ",
    "locality": "Київ"
  },
  "country": "UA",
  "region": "Київ",
  "source": {
    "code": "prozorro",
    "name": "Prozorro"
  },
  "url": "https://prozorro.gov.ua/tender/UA-2026-10-11-000337-a",
  "also_on": [
    {
      "source": "smarttender",
      "url": "https://smarttender.biz/…"
    }
  ],
  "cpv": {
    "main": {
      "code": "45261000",
      "name": "Покрівельні роботи"
    },
    "extra": [
      {
        "code": "45262000",
        "name": "…"
      }
    ]
  },
  "value": {
    "amount": 1250000,
    "currency": "UAH",
    "vat_included": true
  },
  "time_zone": "Europe/Kyiv",
  "published_at": {
    "local": "2026-10-11T10:15:00+03:00",
    "utc": "2026-10-11T07:15:00Z"
  },
  "submission_start": {
    "local": "2026-10-11T10:15:00+03:00",
    "utc": "2026-10-11T07:15:00Z"
  },
  "enquiry_end": null,
  "submission_deadline": {
    "local": "2026-10-21T00:00:00+03:00",
    "utc": "2026-10-20T21:00:00Z"
  },
  "auction_at": null,
  "lots": [],
  "items": [],
  "documents": [],
  "radar_url": "https://platform.aurum-apps.com/uk/app/tenders/0d6f4f7e-1c3b-4a51-9b7e-5b9b1f0c2a11",
  "first_seen_at": "2026-10-11T07:16:40Z",
  "updated_at": "2026-10-11T19:31:02.123456Z"
}

Quellen

GET/v1/data/sources

Jede Quelle: Code, Land, Segment, Abfragezeitplan, letzter erfolgreicher Lauf, Status und Zahl offener Ausschreibungen. Die Codes gehören in den Parameter source.

ParameterBeschreibung
langSprache der CPV-Bezeichnungen, Verfahrensbezeichnungen und Quellennamen: uk (Standard), ru, en.
Beispielantwort
{
  "data": [
    {
      "code": "prozorro",
      "name": "Prozorro",
      "country": "UA",
      "segment": "ua_public",
      "kind": "api",
      "schedule_minutes": 5,
      "last_success_at": "2026-10-11T19:35:00Z",
      "status": "ok",
      "open_tenders": 18950
    }
  ]
}

Unternehmensgruppen

GET/v1/data/buyer-groups

Auftraggebergruppen (Holdings) mit ihren Mitgliedern und Unternehmens-IDs. Die Slugs gehören in den Parameter group.

ParameterBeschreibung
langSprache der CPV-Bezeichnungen, Verfahrensbezeichnungen und Quellennamen: uk (Standard), ru, en.
Beispielantwort
{
  "data": [
    {
      "slug": "metinvest",
      "name": "Метінвест",
      "aliases": [
        "Metinvest"
      ],
      "members": [
        {
          "edrpou": "00191000",
          "name": "ПрАТ «ММК ім. Ілліча»"
        }
      ]
    }
  ]
}

CPV-Codes

GET/v1/data/cpv

CPV-Codes nach Codepräfix oder Wörtern finden, mit Bezeichnungen in drei Sprachen.

ParameterBeschreibung
qCodepräfix oder Wörter.
langSprache der CPV-Bezeichnungen, Verfahrensbezeichnungen und Quellennamen: uk (Standard), ru, en.
limitWie viele Codes zurückgegeben werden.
Beispielantwort
{
  "data": [
    {
      "code": "45261000",
      "name": "Покрівельні роботи",
      "names": {
        "uk": "Покрівельні роботи",
        "en": "Roofing works",
        "ru": "Кровельные работы"
      }
    }
  ]
}

Nutzung

GET/v1/data/usage

Ihr Schlüssel, seine Limits, wie viele Anfragen und Zeilen heute verbraucht wurden und der Stand Ihres Zugangs.

Keine Parameter.

Beispielantwort
{
  "org": "ТОВ «Альфа»",
  "key": {
    "name": "ERP sync",
    "prefix": "rdr_live_ab12cd"
  },
  "limits": {
    "requests_per_minute": 120,
    "rows_per_day": 100000,
    "max_page": 500
  },
  "today": {
    "requests": 14,
    "rows": 1200,
    "rows_remaining": 98800
  },
  "subscription": {
    "status": "active",
    "plan": "api",
    "trial_until": null
  }
}

OpenAPI-Schema

GET/v1/data/openapi.json

OpenAPI-3-Schema nur der Daten-API; kein Schlüssel nötig. Generieren Sie daraus einen Client für Ihre Sprache.

Keine Parameter.

Inkrementelle Synchronisierung

So halten Sie eine aktuelle Kopie: einmal alles laden, danach nur noch die Änderungen abrufen.

  1. 1Erstes Laden: GET /v1/data/tenders?limit=500, dann next_cursor folgen, solange has_more true ist. Speichern Sie den letzten next_cursor.
  2. 2Alle 10 Minuten: GET /v1/data/tenders?cursor=…&status=any&limit=500, wieder solange has_more. Führen Sie Upserts der Zeilen anhand von id durch: Eine geänderte Ausschreibung kommt erneut mit ihrem neuen Zustand, z. B. closed_by_deadline. Speichern Sie den neuen next_cursor.
  3. 3status=any, damit auch geschlossene und abgesagte Ausschreibungen als Änderungen durchkommen. Zeilen, die Sie nie hatten und die nicht mehr offen sind, können Sie überspringen.

Keine Lücken und keine Duplikate: Eine Änderung, die noch geschrieben wird, wird zurückgehalten, bis sie bestätigt ist, sodass der Cursor sie nie überspringt. Bricht eine Anfrage ab, wiederholen Sie sie mit demselben Cursor.

CSV-Export

Fügen Sie format=csv hinzu, und dieselben Zeilen kommen als CSV: flache Spalten, durch Kommas getrennt, eine Kopfzeile, UTF-8 mit BOM (Excel öffnet es direkt). Der Cursor kommt in den Headern X-Next-Cursor und X-Has-More, die Synchronisierung funktioniert also genauso.

Limits

  • 120 Anfragen pro Minute und Schlüssel.
  • 100.000 Ausschreibungszeilen pro Tag und Organisation (UTC-Tag).
  • Bis zu 500 Zeilen pro Seite.
  • Beide Limits lassen sich für Ihre Organisation erhöhen – schreiben Sie uns.

Rate-Limit-Header

Jede Antwort trägt den aktuellen Stand der Limits:

HeaderBeschreibung
X-RateLimit-LimitAnfragen pro Minute für diesen Schlüssel.
X-RateLimit-RemainingVerbleibende Anfragen in der laufenden Minute.
X-RateLimit-ResetSekunden, bis das Minutenfenster zurückgesetzt wird.
X-RateLimit-Rows-LimitZeilen pro Tag für die Organisation.
X-RateLimit-Rows-RemainingHeute verbleibende Zeilen.
Retry-AfterNur bei 429: Sekunden bis zum nächsten Versuch.

Fehler

Der Fehlerkörper ist immer gleich: code für Programme, message und detail für Menschen. Ein Validierungsfehler (422) hat den Standardkörper, in dem detail die Felder auflistet.

CodeWas passiert ist
401 missing_api_keyKein Header Authorization: Bearer.
401 invalid_api_keyUnbekannter Schlüssel.
401 api_key_revokedDer Schlüssel wurde widerrufen.
402 api_plan_requiredDie Organisation hat kein aktives API-Abonnement.
400 invalid_cursorDer Cursor ist beschädigt oder stammt nicht aus dieser API.
404 tender_not_foundKeine Ausschreibung mit dieser ID.
422 —Ein Parameter ist ungültig.
429 rate_limitedZu viele Anfragen pro Minute; wiederholen Sie nach Retry-After.
429 daily_rows_exceededDas Tageslimit an Zeilen ist aufgebraucht; es wird um Mitternacht UTC zurückgesetzt.
{
  "code": "invalid_api_key",
  "message": "Unknown API key",
  "detail": "Check the Authorization header"
}

Die API gehört zu einem Abonnement

Senden Sie eine Anfrage: Wir vereinbaren Volumen und Preis, schalten das Abonnement für Ihre Organisation frei, und der Inhaber oder ein Admin erstellt sofort einen Schlüssel.

Sie haben schon Zugang? Schlüssel erstellen Sie unter Einstellungen → «API». Einstellungen öffnen

Schlüssel erhalten / Zugang anfragen