Към съдържанието

API · За разработчици

Данни за обществени поръчки през API

Данните, които виждат потребителите на Tender Radar, във вашия ERP, CRM или хранилище за данни: Prozorro, над сто търговски платформи и корпоративни портали, ЕС, Великобритания и ООН. Един формат за всички платформи, обновяване на всеки няколко минути.

Какво получавате от API

Всяка обществена поръчка идва в един формат, където и да е публикувана: номер, заглавие, възложител с идентификатор на компанията, CPV, прогнозна стойност, срокове в часовата зона на възложителя и в UTC, статус и връзка към оригинала. Когато една и съща поръчка е на няколко платформи, получавате един запис със списък на всички места, където е публикувана.

Източници

  • Prozorro — публичните поръчки на Украйна
  • Украински търговски платформи и портали за корпоративни поръчки
  • Европейски съюз (TED)
  • Национални системи за обществени поръчки на други държави, включително Великобритания
  • Международни организации, включително ООН

Актуалност

Всеки източник се проверява по собствен график: най-често на всеки няколко минути, останалите — от почасово до на всеки няколко часа. Полето updated_at показва кога записът е променен за последно.

Полета на обществената поръчка

ПолеОписание
idПостоянен идентификатор на записа в Radar (UUID). По него обновявайте редовете си (upsert).
numberНомерът на поръчката в източника, напр. UA-2026-10-11-000337-a.
title · title_translated · description · languageЗаглавие и описание на оригиналния език; украински превод на заглавието на чуждестранна поръчка, когато има такъв.
status · status_sourceСтатус по общата скала на Radar и статусът, както го дава източникът.
procedureВид процедура: код и наименование.
buyerВъзложител: име, ЄДРПОУ или национален идентификатор, регион, населено място.
cpvОсновен CPV код с наименованието му, плюс допълнителни кодове.
valueПрогнозна стойност, валута и дали е включен ДДС.
published_at · submission_deadline · enquiry_end · auction_atДати и срокове: местно време на възложителя (local) и UTC (utc); time_zone е часовата зона на възложителя.
source · url · also_onИзточник, връзка към оригинала и други платформи, които публикуват същата поръчка.
lots · items · documentsОбособени позиции, артикули и документи, когато източникът ги публикува.
radar_url · first_seen_at · updated_atПоръчката в Radar, кога я видяхме за първи път и кога записът е променен за последно.

Удостоверяване

Всяка заявка носи ключа на организацията в заглавката Authorization: Bearer rdr_live_…. Ключът принадлежи на компанията, а не на човек: предоставяйте го на услуга или интеграция.

  1. 1Ключовете се създават от собственика или администратора на компанията в Tender Radar: Настройки → «API».
  2. 2Показваме пълния ключ само веднъж, веднага след създаването му. Съхранявайте го в мениджър на тайни или в променлива на средата.
  3. 3Съхраняваме само хеш на ключа, затова не можем да го покажем отново. Изгубихте ключ? Отменете го и създайте нов.
  4. 4Отменен ключ спира да работи веднага. Дайте на всяка интеграция собствен ключ (до 10 активни).

Базов URL

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

Първа заявка

Отворени обществени поръчки за покриви в Украйна. Ключът се чете от променливата на средата RADAR_API_KEY.

Крайни точки

Всеки отговор е JSON в UTF-8. Списъците идват като обект с поле data. Параметрите-списъци могат да се повтарят или да се разделят със запетая.

Обществени поръчки

GET/v1/data/tenders

Търсене и експорт на обществени поръчки. Редът винаги е (updated_at, id) във възходящ ред, така че курсорът никога не пропуска промяна.

ПараметърОписание
qСвободен текст, включително словоформи. Точна фраза се поставя в кавички, -дума изключва.
cpvCPV кодове или префикси от 2–8 цифри (45 — строителство, 4526 — покривни работи).
countryДържава по ISO 3166-1 alpha-2: UA, PL, GB…; EU — поръчки на ЕС от TED.
sourceКодове на източници от /v1/data/sources.
groupИдентификатори (slug) на групи компании от /v1/data/buyer-groups.
buyerВъзложител: ЄДРПОУ, национален идентификатор или идентификатор на възложител в Radar.
statusopen (по подразбиране) — доставчик все още може да подаде оферта и срокът не е изтекъл; any — всеки статус; или конкретни статуси: planned, active, enquiry, tendering, auction, qualification, awarded, complete, cancelled, unsuccessful, closed_by_deadline, withdrawn_from_hub, notice, non_competitive.
value_min, value_maxПрогнозна стойност от / до, във валутата на самата обществена поръчка.
deadline_from, deadline_toКраен срок за оферти от / до, дата и час по ISO 8601.
updated_sinceISO 8601: само обществени поръчки, създадени или променени в този момент или по-късно.
cursorНепрозрачен курсор от next_cursor на предишния отговор.
limitРазмер на страницата, 1–500, по подразбиране 100.
langЕзик на наименованията на CPV, видовете процедури и източниците: uk (по подразбиране), ru, en.
formatjson (по подразбиране) или csv.
Примерен отговор
{
  "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"
}

Една обществена поръчка

GET/v1/data/tenders/{id}

Пълният запис по id. Непознат id: 404 tender_not_found.

Няма параметри.

Примерен отговор
{
  "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"
}

Източници

GET/v1/data/sources

Всеки източник: код, държава, сегмент, график на проверка, последно успешно изпълнение, статус и брой отворени обществени поръчки. Кодовете се подават в параметъра source.

ПараметърОписание
langЕзик на наименованията на CPV, видовете процедури и източниците: uk (по подразбиране), ru, en.
Примерен отговор
{
  "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
    }
  ]
}

Групи компании

GET/v1/data/buyer-groups

Групи възложители (холдинги) с техните членове и идентификатори на компании. Идентификаторите (slug) се подават в параметъра group.

ПараметърОписание
langЕзик на наименованията на CPV, видовете процедури и източниците: uk (по подразбиране), ru, en.
Примерен отговор
{
  "data": [
    {
      "slug": "metinvest",
      "name": "Метінвест",
      "aliases": [
        "Metinvest"
      ],
      "members": [
        {
          "edrpou": "00191000",
          "name": "ПрАТ «ММК ім. Ілліча»"
        }
      ]
    }
  ]
}

CPV кодове

GET/v1/data/cpv

Търсене на CPV кодове по префикс на кода или по думи, с наименования на три езика.

ПараметърОписание
qПрефикс на код или думи.
langЕзик на наименованията на CPV, видовете процедури и източниците: uk (по подразбиране), ru, en.
limitКолко кода да се върнат.
Примерен отговор
{
  "data": [
    {
      "code": "45261000",
      "name": "Покрівельні роботи",
      "names": {
        "uk": "Покрівельні роботи",
        "en": "Roofing works",
        "ru": "Кровельные работы"
      }
    }
  ]
}

Използване

GET/v1/data/usage

Вашият ключ, неговите лимити, колко заявки и редове са използвани днес и състоянието на достъпа ви.

Няма параметри.

Примерен отговор
{
  "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 схема

GET/v1/data/openapi.json

OpenAPI 3 схема само на API за данни; не е нужен ключ. Генерирайте от нея клиент за вашия език.

Няма параметри.

Инкрементална синхронизация

Как да поддържате актуално копие: заредете всичко веднъж, после теглете само промените.

  1. 1Първоначално зареждане: GET /v1/data/tenders?limit=500, после следвайте next_cursor, докато has_more е true. Запазете последния next_cursor.
  2. 2На всеки 10 минути: GET /v1/data/tenders?cursor=…&status=any&limit=500, отново докато has_more. Обновявайте редовете по id (upsert): променена поръчка идва отново с новото си състояние, напр. closed_by_deadline. Запазете новия next_cursor.
  3. 3status=any, за да дойдат като промени и приключените, и отменените обществени поръчки. Редове, които никога не сте имали и които вече не са отворени, могат да се пропуснат.

Без пропуски и без дубликати: промяна, която все още се записва, се задържа, докато бъде потвърдена, така че курсорът никога не я прескача. Ако заявката се прекъсне, повторете я със същия курсор.

CSV експорт

Добавете format=csv и същите редове идват като CSV: плоски колони, разделени със запетая, ред със заглавия, UTF-8 с BOM (Excel го отваря директно). Курсорът идва в заглавките X-Next-Cursor и X-Has-More, така че синхронизацията работи по същия начин.

Лимити

  • 120 заявки в минута на ключ.
  • 100 000 реда обществени поръчки на ден на организация (ден по UTC).
  • До 500 реда на страница.
  • И двата лимита могат да бъдат увеличени за вашата организация — пишете ни.

Заглавки за лимитите

Всеки отговор носи текущото състояние на лимитите:

ЗаглавкаОписание
X-RateLimit-LimitЗаявки в минута за този ключ.
X-RateLimit-RemainingОставащи заявки в текущата минута.
X-RateLimit-ResetСекунди до подновяване на минутния прозорец.
X-RateLimit-Rows-LimitРедове на ден за организацията.
X-RateLimit-Rows-RemainingОставащи редове за днес.
Retry-AfterСамо при 429: секунди за изчакване преди повторен опит.

Грешки

Тялото на грешката винаги е еднакво: code за програмите, message и detail за хората. Грешка при валидиране (422) има стандартно тяло, в което detail изброява полетата.

КодКакво се случи
401 missing_api_keyЛипсва заглавка Authorization: Bearer.
401 invalid_api_keyНепознат ключ.
401 api_key_revokedКлючът е отменен.
402 api_plan_requiredОрганизацията няма активен абонамент за API.
400 invalid_cursorКурсорът е повреден или не е от този API.
404 tender_not_foundНяма обществена поръчка с този id.
422 —Невалиден параметър.
429 rate_limitedТвърде много заявки в минута; опитайте отново след Retry-After.
429 daily_rows_exceededДневният лимит на редове е изчерпан; подновява се в полунощ по UTC.
{
  "code": "invalid_api_key",
  "message": "Unknown API key",
  "detail": "Check the Authorization header"
}

MCP сървър

Същите данни за обществени поръчки като сървър за Model Context Protocol (MCP), така че асистент да може да търси обществени поръчки и да отваря конкретна по време на разговор. Една крайна точка, POST /v1/mcp, JSON-RPC 2.0 през транспорта Streamable HTTP. Използва ключа на организацията, както REST API — заглавката Authorization: Bearer rdr_live_… — със същия абонамент и лимити.

Крайна точка

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

Инструменти

ИнструментОписание
search_tendersТърсене на обществени поръчки по текст, CPV, държава, статус и стойност; връща най-скоро обновените съвпадения с възложител, стойност, срок и връзки.
get_tenderИзвличане на една обществена поръчка по нейния идентификатор в Radar.

Свързване на клиент

Добавете сървъра във всеки MCP клиент, който позволява задаване на заглавка на заявката, и подайте ключа си в заглавката Authorization. За клиент, който чете JSON конфигурация, заглавката се предава от моста mcp-remote:

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

Клиент, който говори директно Streamable HTTP, не се нуждае от мост: изпращайте JSON-RPC 2.0 с POST към крайната точка със заглавките Authorization и Accept: application/json.

Хоствани уеб конектори, които изискват OAuth, още не се поддържат — използвайте клиент, който приема заглавка, или пишете ни.

API идва с абонамент

Изпратете заявка: уговаряме обема и цената, включваме абонамента за вашата организация, а собственикът или администраторът веднага създава ключ.

Вече имате достъп? Ключовете се създават в Настройки → «API». Отвори настройките

Получете ключ / Заявете достъп