Treceți la conținut

API · Pentru dezvoltatori

Datele licitațiilor prin API

Datele pe care le văd utilizatorii Tender Radar, în ERP-ul, CRM-ul sau depozitul dvs. de date: Prozorro, peste o sută de platforme comerciale și portaluri de companii, UE, Marea Britanie și ONU. Un singur format pentru toate platformele, actualizat la câteva minute.

Ce vă oferă API-ul

Fiecare licitație vine într-un singur format, indiferent unde a fost publicată: număr, titlu, autoritatea contractantă cu identificatorul companiei, CPV, valoare estimată, termene în fusul orar al achizitorului și în UTC, stare și un link către original. Când aceeași licitație apare pe mai multe platforme, primiți o singură înregistrare care enumeră toate locurile în care a fost publicată.

Surse

  • Prozorro — achizițiile publice din Ucraina
  • Platforme comerciale ucrainene și portaluri de achiziții ale companiilor
  • Uniunea Europeană (TED)
  • Sisteme naționale de achiziții din alte țări, inclusiv Marea Britanie
  • Organizații internaționale, inclusiv ONU

Actualitatea datelor

Fiecare sursă este interogată după programul propriu: cea mai frecventă, la câteva minute, celelalte de la o dată pe oră până la o dată la câteva ore. Câmpul updated_at arată când s-a modificat ultima dată o înregistrare.

Câmpurile licitației

CâmpDescriere
idIdentificatorul permanent al înregistrării în Radar (UUID). Actualizați-vă rândurile (upsert) după el.
numberNumărul licitației la sursă, de ex. UA-2026-10-11-000337-a.
title · title_translated · description · languageTitlul și descrierea în limba originală; traducerea în ucraineană a titlului unei licitații străine, când există.
status · status_sourceStarea pe scara comună Radar și starea așa cum o indică sursa.
procedureTipul procedurii: cod și denumire.
buyerAchizitorul: denumire, EDRPOU sau cod național, regiune, localitate.
cpvCodul CPV principal cu denumirea sa, plus codurile suplimentare.
valueValoarea estimată, moneda și dacă TVA este inclus.
published_at · submission_deadline · enquiry_end · auction_atDate și termene: ora locală a achizitorului (local) și UTC (utc); time_zone este fusul orar al achizitorului.
source · url · also_onSursa, linkul către original și celelalte platforme care publică aceeași licitație.
lots · items · documentsLoturi, poziții și documente, când sursa le publică.
radar_url · first_seen_at · updated_atLicitația în Radar, momentul în care am văzut-o prima dată și momentul ultimei modificări a înregistrării.

Autentificare

Fiecare cerere poartă cheia organizației în antetul Authorization: Bearer rdr_live_…. Cheia aparține companiei, nu unei persoane: atribuiți-o unui serviciu sau unei integrări.

  1. 1Cheile sunt create de proprietarul sau administratorul companiei în Tender Radar: Setări → „API”.
  2. 2Afișăm cheia completă o singură dată, imediat după creare. Păstrați-o într-un manager de secrete sau într-o variabilă de mediu.
  3. 3Stocăm doar un hash al cheii, deci nu o mai putem afișa. Ați pierdut cheia? Revocați-o și creați una nouă.
  4. 4O cheie revocată nu mai funcționează imediat. Dați fiecărei integrări propria cheie (până la 10 active).

URL de bază

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

Prima cerere

Licitații deschise pentru lucrări de acoperiș în Ucraina. Cheia este citită din variabila de mediu RADAR_API_KEY.

Endpoint-uri

Fiecare răspuns este JSON în UTF-8. Listele vin ca un obiect cu câmpul data. Parametrii de tip listă pot fi repetați sau separați prin virgulă.

Licitații

GET/v1/data/tenders

Căutați și exportați licitații. Ordinea este întotdeauna (updated_at, id) crescătoare, astfel încât cursorul nu omite nicio modificare.

ParametruDescriere
qText liber, inclusiv formele flexionare ale cuvintelor. O expresie exactă se pune între ghilimele, -cuvânt exclude.
cpvCoduri CPV sau prefixe de 2–8 cifre (45 — construcții, 4526 — lucrări de acoperiș).
countryȚara în format ISO 3166-1 alpha-2: UA, PL, GB…; EU — licitații din UE din TED.
sourceCoduri de sursă din /v1/data/sources.
groupSlug-uri ale grupurilor de companii din /v1/data/buyer-groups.
buyerAchizitorul: EDRPOU, cod național sau id-ul achizitorului în Radar.
statusopen (implicit) — un furnizor poate încă depune ofertă, iar termenul nu a expirat; any — orice stare; sau stări concrete: planned, active, enquiry, tendering, auction, qualification, awarded, complete, cancelled, unsuccessful, closed_by_deadline, withdrawn_from_hub, notice, non_competitive.
value_min, value_maxValoarea estimată de la / până la, în moneda licitației.
deadline_from, deadline_toTermenul de depunere a ofertelor de la / până la, dată și oră ISO 8601.
updated_sinceISO 8601: doar licitațiile create sau modificate în acest moment sau după el.
cursorCursor opac din next_cursor al răspunsului anterior.
limitDimensiunea paginii, 1–500, implicit 100.
langLimba denumirilor CPV, a denumirilor procedurilor și a denumirilor surselor: uk (implicit), ru, en.
formatjson (implicit) sau csv.
Exemplu de răspuns
{
  "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"
}

O licitație

GET/v1/data/tenders/{id}

Înregistrarea completă după id. Id necunoscut: 404 tender_not_found.

Fără parametri.

Exemplu de răspuns
{
  "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"
}

Surse

GET/v1/data/sources

Toate sursele: cod, țară, segment, program de interogare, ultima rulare reușită, stare și numărul de licitații deschise. Codurile se folosesc în parametrul source.

ParametruDescriere
langLimba denumirilor CPV, a denumirilor procedurilor și a denumirilor surselor: uk (implicit), ru, en.
Exemplu de răspuns
{
  "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
    }
  ]
}

Grupuri de companii

GET/v1/data/buyer-groups

Grupuri de achizitori (holdinguri) cu membrii și identificatorii companiilor lor. Slug-urile se folosesc în parametrul group.

ParametruDescriere
langLimba denumirilor CPV, a denumirilor procedurilor și a denumirilor surselor: uk (implicit), ru, en.
Exemplu de răspuns
{
  "data": [
    {
      "slug": "metinvest",
      "name": "Метінвест",
      "aliases": [
        "Metinvest"
      ],
      "members": [
        {
          "edrpou": "00191000",
          "name": "ПрАТ «ММК ім. Ілліча»"
        }
      ]
    }
  ]
}

Coduri CPV

GET/v1/data/cpv

Găsiți coduri CPV după prefixul codului sau după cuvinte, cu denumiri în trei limbi.

ParametruDescriere
qPrefix de cod sau cuvinte.
langLimba denumirilor CPV, a denumirilor procedurilor și a denumirilor surselor: uk (implicit), ru, en.
limitCâte coduri să fie returnate.
Exemplu de răspuns
{
  "data": [
    {
      "code": "45261000",
      "name": "Покрівельні роботи",
      "names": {
        "uk": "Покрівельні роботи",
        "en": "Roofing works",
        "ru": "Кровельные работы"
      }
    }
  ]
}

Utilizare

GET/v1/data/usage

Cheia dvs., limitele ei, câte cereri și rânduri au fost folosite astăzi și starea accesului dvs.

Fără parametri.

Exemplu de răspuns
{
  "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
  }
}

Schema OpenAPI

GET/v1/data/openapi.json

Schema OpenAPI 3 exclusiv pentru API-ul de date; nu necesită cheie. Generați din ea un client pentru limbajul dvs.

Fără parametri.

Sincronizare incrementală

Cum păstrați o copie actualizată: încărcați totul o dată, apoi preluați doar modificările.

  1. 1Prima încărcare: GET /v1/data/tenders?limit=500, apoi urmați next_cursor cât timp has_more este true. Salvați ultimul next_cursor.
  2. 2La fiecare 10 minute: GET /v1/data/tenders?cursor=…&status=any&limit=500, din nou cât timp has_more. Actualizați rândurile (upsert) după id: o licitație modificată revine cu noua stare, de ex. closed_by_deadline. Salvați noul next_cursor.
  3. 3status=any pentru ca și licitațiile închise și anulate să vină ca modificări. Rândurile pe care nu le-ați avut niciodată și care nu mai sunt deschise pot fi omise.

Fără goluri și fără dubluri: o modificare aflată încă în curs de scriere este reținută până la confirmare, astfel încât cursorul nu o sare niciodată. Dacă o cerere se întrerupe, repetați-o cu același cursor.

Export CSV

Adăugați format=csv și aceleași rânduri vin ca CSV: coloane plate, separate prin virgulă, cu rând de antet, UTF-8 cu BOM (Excel îl deschide direct). Cursorul vine în antetele X-Next-Cursor și X-Has-More, deci sincronizarea funcționează la fel.

Limite

  • 120 de cereri pe minut pentru fiecare cheie.
  • 100.000 de rânduri de licitații pe zi pentru fiecare organizație (zi UTC).
  • Până la 500 de rânduri pe pagină.
  • Ambele limite pot fi mărite pentru organizația dvs. — scrieți-ne.

Antete pentru limitele de cereri

Fiecare răspuns conține starea curentă a limitelor:

AntetDescriere
X-RateLimit-LimitCereri pe minut pentru această cheie.
X-RateLimit-RemainingCereri rămase în minutul curent.
X-RateLimit-ResetSecunde până la resetarea ferestrei de un minut.
X-RateLimit-Rows-LimitRânduri pe zi pentru organizație.
X-RateLimit-Rows-RemainingRânduri rămase astăzi.
Retry-AfterDoar la un 429: secunde de așteptat înainte de a reîncerca.

Erori

Corpul erorii este întotdeauna același: code pentru programe, message și detail pentru oameni. O eroare de validare (422) are corpul standard, în care detail enumeră câmpurile.

CodCe s-a întâmplat
401 missing_api_keyLipsește antetul Authorization: Bearer.
401 invalid_api_keyCheie necunoscută.
401 api_key_revokedCheia a fost revocată.
402 api_plan_requiredOrganizația nu are un abonament API activ.
400 invalid_cursorCursorul este deteriorat sau nu provine din acest API.
404 tender_not_foundNu există nicio licitație cu acest id.
422 —Un parametru este invalid.
429 rate_limitedPrea multe cereri pe minut; reîncercați după Retry-After.
429 daily_rows_exceededLimita zilnică de rânduri a fost epuizată; se resetează la miezul nopții UTC.
{
  "code": "invalid_api_key",
  "message": "Unknown API key",
  "detail": "Check the Authorization header"
}

Server MCP

Aceleași date despre licitații, ca server Model Context Protocol (MCP), astfel încât un asistent să poată căuta licitații și să deschidă una în timpul unei conversații. Un singur endpoint, POST /v1/mcp, JSON-RPC 2.0 peste transportul Streamable HTTP. Folosește cheia organizației, la fel ca API-ul REST — antetul Authorization: Bearer rdr_live_… — cu același abonament și aceleași limite.

Endpoint

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

Instrumente

InstrumentDescriere
search_tendersCăutați licitații după text, CPV, țară, stare și valoare; returnează cele mai recent actualizate rezultate, cu achizitor, valoare, termen și linkuri.
get_tenderPreia o licitație după id-ul ei din Radar.

Conectați un client

Adăugați serverul în orice client MCP care permite setarea unui antet de cerere și transmiteți cheia în antetul Authorization. Pentru un client care citește o configurație JSON, antetul este transmis de puntea mcp-remote:

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

Un client care vorbește direct Streamable HTTP nu are nevoie de punte: trimiteți JSON-RPC 2.0 prin POST la endpoint, cu antetul Authorization și Accept: application/json.

Conectorii web găzduiți care necesită OAuth nu sunt încă acceptați — folosiți un client care primește un antet sau scrieți-ne.

API-ul vine cu un abonament

Trimiteți o solicitare: stabilim împreună volumul și prețul, activăm abonamentul pentru organizația dvs., iar proprietarul sau un administrator creează imediat o cheie.

Aveți deja acces? Cheile se creează în Setări → „API”. Deschideți setările

Obțineți o cheie / Solicitați acces