Przejdź do treści

API · Dla programistów

Dane o przetargach przez API

Dane, które widzą użytkownicy Tender Radar, w Twoim ERP, CRM lub hurtowni danych: Prozorro, ponad sto platform komercyjnych i portali firmowych, UE, Wielka Brytania i ONZ. Jeden format dla wszystkich platform, odświeżany co kilka minut.

Co daje API

Każdy przetarg przychodzi w jednym formacie, niezależnie od miejsca publikacji: numer, tytuł, zamawiający wraz z identyfikatorem firmy, CPV, szacunkowa wartość, terminy w strefie czasowej zamawiającego i w UTC, status oraz link do oryginału. Gdy ten sam przetarg znajduje się na kilku platformach, otrzymujesz jeden rekord ze wszystkimi miejscami publikacji.

Źródła

  • Prozorro — zamówienia publiczne Ukrainy
  • Ukraińskie platformy komercyjne i portale zamówień firm
  • Unia Europejska (TED)
  • Krajowe systemy zamówień innych państw, m.in. Wielkiej Brytanii
  • Organizacje międzynarodowe, m.in. ONZ

Aktualność

Każde źródło jest odpytywane według własnego harmonogramu: najczęstsze co kilka minut, pozostałe od co godzinę do co kilka godzin. Pole updated_at informuje, kiedy rekord zmienił się ostatnio.

Pola przetargu

PoleOpis
idStały identyfikator rekordu w Radarze (UUID). Użyj go do upsertu swoich wierszy.
numberNumer przetargu w źródle, np. UA-2026-10-11-000337-a.
title · title_translated · description · languageTytuł i opis w języku oryginału; ukraińskie tłumaczenie tytułu zagranicznego przetargu, jeśli jest dostępne.
status · status_sourceStatus na wspólnej skali Radaru oraz status w brzmieniu źródła.
procedureTryb postępowania: kod i etykieta.
buyerZamawiający: nazwa, EDRPOU lub krajowy identyfikator, region, miejscowość.
cpvGłówny kod CPV wraz z nazwą oraz kody dodatkowe.
valueSzacunkowa wartość, waluta i informacja, czy zawiera VAT.
published_at · submission_deadline · enquiry_end · auction_atDaty i terminy: czas lokalny zamawiającego (local) i UTC (utc); time_zone to strefa czasowa zamawiającego.
source · url · also_onŹródło, link do oryginału oraz pozostałe platformy publikujące ten sam przetarg.
lots · items · documentsCzęści zamówienia, pozycje i dokumenty, jeśli źródło je publikuje.
radar_url · first_seen_at · updated_atPrzetarg w Radarze, moment pierwszego zobaczenia go przez nas i ostatniej zmiany rekordu.

Uwierzytelnianie

Każde żądanie zawiera klucz organizacji w nagłówku Authorization: Bearer rdr_live_…. Klucz należy do firmy, a nie do osoby: przekaż go usłudze lub integracji.

  1. 1Klucze tworzy właściciel lub administrator firmy w Tender Radar: Ustawienia → «API».
  2. 2Pełny klucz pokazujemy jednorazowo, zaraz po utworzeniu. Przechowuj go w menedżerze sekretów lub zmiennej środowiskowej.
  3. 3Przechowujemy tylko skrót klucza, więc nie możemy go pokazać ponownie. Zgubiony klucz? Unieważnij go i utwórz nowy.
  4. 4Unieważniony klucz przestaje działać natychmiast. Dla każdej integracji utwórz osobny klucz (do 10 aktywnych).

Bazowy adres URL

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

Pierwsze żądanie

Otwarte przetargi na roboty dachowe na Ukrainie. Klucz jest odczytywany ze zmiennej środowiskowej RADAR_API_KEY.

Punkty końcowe

Każda odpowiedź to JSON w UTF-8. Listy przychodzą jako obiekt z polem data. Parametry list można powtarzać lub rozdzielać przecinkami.

Przetargi

GET/v1/data/tenders

Wyszukiwanie i eksport przetargów. Kolejność jest zawsze rosnąca według (updated_at, id), dzięki czemu kursor nigdy nie pomija zmiany.

ParametrOpis
qTekst swobodny, z uwzględnieniem form wyrazów. Dokładną frazę umieść w cudzysłowie, -słowo wyklucza.
cpvKody CPV lub prefiksy 2–8 cyfr (45 — roboty budowlane, 4526 — roboty dachowe).
countryKraj według ISO 3166-1 alpha-2: UA, PL, GB…; EU — przetargi UE z TED.
sourceKody źródeł z /v1/data/sources.
groupSlugi grup firm z /v1/data/buyer-groups.
buyerZamawiający: EDRPOU, identyfikator krajowy lub identyfikator zamawiającego w Radarze.
statusopen (domyślnie) — wykonawca może jeszcze złożyć ofertę, a termin nie upłynął; any — każdy status; lub konkretne statusy: planned, active, enquiry, tendering, auction, qualification, awarded, complete, cancelled, unsuccessful, closed_by_deadline, withdrawn_from_hub, notice, non_competitive.
value_min, value_maxSzacunkowa wartość od / do, w walucie przetargu.
deadline_from, deadline_toTermin składania ofert od / do, data i godzina w formacie ISO 8601.
updated_sinceISO 8601: tylko przetargi utworzone lub zmienione w tym momencie lub później.
cursorNieprzezroczysty kursor z next_cursor poprzedniej odpowiedzi.
limitRozmiar strony, 1–500, domyślnie 100.
langJęzyk nazw CPV, etykiet trybów postępowania i nazw źródeł: uk (domyślnie), ru, en.
formatjson (domyślnie) lub csv.
Przykładowa odpowiedź
{
  "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"
}

Jeden przetarg

GET/v1/data/tenders/{id}

Pełny rekord według id. Nieznany identyfikator: 404 tender_not_found.

Brak parametrów.

Przykładowa odpowiedź
{
  "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"
}

Źródła

GET/v1/data/sources

Wszystkie źródła: kod, kraj, segment, harmonogram odpytywania, ostatnie udane uruchomienie, status i liczba otwartych przetargów. Kody trafiają do parametru source.

ParametrOpis
langJęzyk nazw CPV, etykiet trybów postępowania i nazw źródeł: uk (domyślnie), ru, en.
Przykładowa odpowiedź
{
  "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
    }
  ]
}

Grupy firm

GET/v1/data/buyer-groups

Grupy zamawiających (holdingi) wraz z członkami i identyfikatorami firm. Slugi trafiają do parametru group.

ParametrOpis
langJęzyk nazw CPV, etykiet trybów postępowania i nazw źródeł: uk (domyślnie), ru, en.
Przykładowa odpowiedź
{
  "data": [
    {
      "slug": "metinvest",
      "name": "Метінвест",
      "aliases": [
        "Metinvest"
      ],
      "members": [
        {
          "edrpou": "00191000",
          "name": "ПрАТ «ММК ім. Ілліча»"
        }
      ]
    }
  ]
}

Kody CPV

GET/v1/data/cpv

Wyszukiwanie kodów CPV według prefiksu kodu lub słów, z nazwami w trzech językach.

ParametrOpis
qPrefiks kodu lub słowa.
langJęzyk nazw CPV, etykiet trybów postępowania i nazw źródeł: uk (domyślnie), ru, en.
limitIle kodów zwrócić.
Przykładowa odpowiedź
{
  "data": [
    {
      "code": "45261000",
      "name": "Покрівельні роботи",
      "names": {
        "uk": "Покрівельні роботи",
        "en": "Roofing works",
        "ru": "Кровельные работы"
      }
    }
  ]
}

Wykorzystanie

GET/v1/data/usage

Twój klucz, jego limity, liczba żądań i wierszy wykorzystanych dzisiaj oraz stan dostępu.

Brak parametrów.

Przykładowa odpowiedź
{
  "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
  }
}

Schemat OpenAPI

GET/v1/data/openapi.json

Schemat OpenAPI 3 wyłącznie dla API danych; klucz nie jest potrzebny. Wygeneruj z niego klienta w swoim języku.

Brak parametrów.

Synchronizacja przyrostowa

Jak utrzymywać aktualną kopię: załaduj wszystko raz, a potem pobieraj tylko zmiany.

  1. 1Pierwsze ładowanie: GET /v1/data/tenders?limit=500, następnie podążaj za next_cursor, dopóki has_more ma wartość true. Zapisz ostatni next_cursor.
  2. 2Co 10 minut: GET /v1/data/tenders?cursor=…&status=any&limit=500, ponownie dopóki has_more. Wykonuj upsert wierszy według id: zmieniony przetarg przychodzi ponownie z nowym stanem, np. closed_by_deadline. Zapisz nowy next_cursor.
  3. 3status=any, aby zamknięte i anulowane przetargi również przychodziły jako zmiany. Wiersze, których nigdy nie miałeś i które nie są już otwarte, można pominąć.

Bez luk i duplikatów: zmiana, która jest jeszcze zapisywana, jest wstrzymywana do zatwierdzenia, więc kursor nigdy jej nie przeskakuje. Jeśli żądanie się urwie, powtórz je z tym samym kursorem.

Eksport CSV

Dodaj format=csv, a te same wiersze przyjdą jako CSV: płaskie kolumny, rozdzielone przecinkami, wiersz nagłówka, UTF-8 z BOM (Excel otwiera go bez zmian). Kursor przychodzi w nagłówkach X-Next-Cursor i X-Has-More, więc synchronizacja działa tak samo.

Limity

  • 120 żądań na minutę na klucz.
  • 100 000 wierszy przetargów dziennie na organizację (doba UTC).
  • Do 500 wierszy na stronę.
  • Oba limity można podnieść dla Twojej organizacji — napisz do nas.

Nagłówki limitów

Każda odpowiedź zawiera aktualny stan limitów:

NagłówekOpis
X-RateLimit-LimitŻądań na minutę dla tego klucza.
X-RateLimit-RemainingPozostałe żądania w bieżącej minucie.
X-RateLimit-ResetSekundy do zresetowania okna minutowego.
X-RateLimit-Rows-LimitWierszy dziennie dla organizacji.
X-RateLimit-Rows-RemainingPozostałe dziś wiersze.
Retry-AfterTylko przy 429: sekundy oczekiwania przed ponowną próbą.

Błędy

Treść błędu jest zawsze taka sama: code dla programów, message i detail dla ludzi. Błąd walidacji (422) ma standardową treść, w której detail wymienia pola.

KodCo się stało
401 missing_api_keyBrak nagłówka Authorization: Bearer.
401 invalid_api_keyNieznany klucz.
401 api_key_revokedKlucz został unieważniony.
402 api_plan_requiredOrganizacja nie ma aktywnej subskrypcji API.
400 invalid_cursorKursor jest uszkodzony lub nie pochodzi z tego API.
404 tender_not_foundBrak przetargu o tym identyfikatorze.
422 —Nieprawidłowy parametr.
429 rate_limitedZbyt wiele żądań na minutę; ponów po czasie z Retry-After.
429 daily_rows_exceededDzienny limit wierszy został wykorzystany; zerowany o północy UTC.
{
  "code": "invalid_api_key",
  "message": "Unknown API key",
  "detail": "Check the Authorization header"
}

Serwer MCP

Te same dane o przetargach jako serwer Model Context Protocol (MCP), aby asystent mógł wyszukiwać przetargi i otwierać wybrany w trakcie rozmowy. Jeden punkt końcowy, POST /v1/mcp, JSON-RPC 2.0 przez transport Streamable HTTP. Używa klucza organizacji, tak samo jak REST API — nagłówek Authorization: Bearer rdr_live_… — z tą samą subskrypcją i limitami.

Punkt końcowy

POST https://metadani.com/v1/mcp

Narzędzia

NarzędzieOpis
search_tendersWyszukuje przetargi według tekstu, CPV, kraju, statusu i wartości; zwraca ostatnio zaktualizowane dopasowania z zamawiającym, wartością, terminem i linkami.
get_tenderPobiera jeden przetarg według jego identyfikatora w Radarze.

Podłączanie klienta

Dodaj serwer do dowolnego klienta MCP, który pozwala ustawić nagłówek żądania, i przekaż klucz w nagłówku Authorization. Dla klienta czytającego konfigurację JSON nagłówek przenosi most mcp-remote:

{
  "mcpServers": {
    "metadani-radar": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://metadani.com/v1/mcp",
        "--header",
        "Authorization: Bearer rdr_live_…"
      ]
    }
  }
}

Klient obsługujący Streamable HTTP bezpośrednio nie potrzebuje mostu: wyślij JSON-RPC 2.0 przez POST na punkt końcowy z nagłówkiem Authorization i Accept: application/json.

Hostowane łączniki webowe wymagające OAuth nie są jeszcze obsługiwane — użyj klienta przyjmującego nagłówek lub napisz do nas.

API jest dostępne w ramach subskrypcji

Wyślij zapytanie: ustalimy wolumen i cenę, włączymy subskrypcję dla Twojej organizacji, a właściciel lub administrator od razu utworzy klucz.

Masz już dostęp? Klucze tworzy się w Ustawieniach → «API». Otwórz ustawienia

Uzyskaj klucz / Poproś o dostęp