Business v1 / Achiziții publice
Achiziţii după obiect (semantic)
Descrii în text liber ce se cumpără (ex. „servicii de curățenie") și primești contractele din CPV-ul
potrivit ca SENS. Sub capotă: text potrivit semantic la codul CPV (vezi /cpv/potriveste), apoi se
listează contractele cu acel cod. Răspunsul arată CPV-ul detectat + alternativele. Filtre opționale:
?an=, ?autoritate_cui=, ?castigator_cui=, ?val_min=, ?val_max=. Paginat.
GET
https://oneapi.ro/api/business/v1/achizitii/dupa-obiect
Parametri de interogare
NumeTipDescriereValori acceptate
anopțional
integer | null
Filtru opţional pe anul contractului.
ex. 2024
autoritate_cuiopțional
integer | null
CUI-ul autorităţii contractante, ca filtru peste potrivirea semantică.
1
castigator_cuiopțional
integer | null
CUI-ul câştigătorului, ca filtru peste potrivirea semantică.
1
textopțional
string | null
Descrierea obiectului contractului (obligatoriu). Ex.: „servicii de curăţenie".
ex. servicii de curatenieex. reparatii drumuriex. servicii medicale
tipopțional
string | null
Tipul procedurii:
contracte, directe sau notificari.
contractedirectenotificari
val_maxopțional
number | null
Valoarea maximă a contractului, în lei (
valoare_ron).
0
val_minopțional
number | null
Valoarea minimă a contractului, în lei (
valoare_ron).
0
Cum se comportă
- Nu toate contractele au valoare declarată. Măsurat pe 4 octombrie 2026, pe toate cele 17,39 milioane de rânduri: lipseşte la 10,8% din contracte (312.587 rânduri), şi aproape niciodată la achiziţii directe (47 din 13,68 milioane) sau la notificări (52 din 811.033). Orice sumă e deci a rândurilor care AU cifră, nu a întregului — la
tip=contracte, a nouă zecimi din ele. Numărul de contracte le acoperă pe toate. Filtreleval_min/val_maxlucrează pe valoarea în lei, deci exclud rândurile fără valoare. - Descrii în text liber obiectul contractului (ex. „servicii de curăţenie") şi primeşti contractele din CPV-ul potrivit ca sens — nu pe cuvinte. Compune potrivirea semantică text→CPV (vezi
/cpv/potriveste) cu listarea contractelor pe acel cod. - Răspunsul arată explicit CPV-ul detectat (cu scor) şi alternativele. Se pot adăuga filtre:
?an=,?autoritate_cui=,?castigator_cui=,?tip=,?val_min=,?val_max=.?text=e obligatoriu. - Se filtrează pe CPV-ul cu scorul cel mai mare. Pentru control fin, foloseşte
/cpv/potrivesteşi apoi/achizitii/cauta?cpv=. - Fiecare contract apare o dată: publicările mai vechi ale unui contract republicat de SEAP şi valoarea contractului repetată pe alte loturi nu se listează (le deschide
/achizitii/{id}).valoare.rone valoarea declarată;valoare.atribuita_ron, partea acestui câştigător, e cea din sume. - Sumele numără fiecare contract o singură dată şi cu partea fiecărui câştigător. SEAP republică anunţul de atribuire la fiecare actualizare (1,19 M de rânduri de contracte sunt republicări), repetă valoarea contractului pe fiecare lot (0,52 M) şi pune valoarea ÎNTREGULUI acord-cadru pe fiecare câştigător (228.000 de rânduri). Citite brut, contractele 2021–2026 însumau 7.059 de miliarde de lei, iar Farmexim 248 de miliarde; corectat, 1.212 miliarde şi 14,6. Valorile imposibile (un simulator de trafic aerian de 125,9 miliarde, lactate de 1,59 miliarde la un DGASPC) nu intră în sume.
La ce folosește
- Găsirea contractelor pe un tip de achiziţie descris în cuvinte.
- Analiză de piaţă pe o categorie de achiziţii.
- Monitorizarea unui domeniu de contracte publice.
Structura răspunsului
CâmpTipDescriere
data[].id
integer
Identificatorul contractului. Deschide-l cu
/achizitii/{id}, unde e anunţul SEAP întreg (număr anunţ, criteriu de atribuire, finanţare din fonduri UE).
data[].an
integer | null
Anul de referinţă.
data[].data_contract
string | null
Data contractului.
data[].autoritate.nume
string | null
Denumirea autorităţii contractante.
data[].autoritate.cui
integer | null
Codul fiscal al autorităţii contractante.
data[].castigator.nume
string | null
Denumirea firmei câştigătoare.
data[].castigator.cui
integer | null
Codul fiscal al câştigătorului. ⚠️ SEAP scrie în acelaşi câmp şi identificatori străini: din 179.814 identificatori distincţi, 8.656 (4,8%) nu sunt CUI-uri româneşti valide — vezi
cui_romanesc.
data[].obiect
string | null
Obiectul contractului, aşa cum a fost publicat.
data[].cpv
string | null
Codul CPV al obiectului.
data[].cpv_denumire
string | null
Denumirea oficială a codului CPV, din nomenclator. E descrierea de rezervă când autoritatea n-a scris nimic folositor în
obiect — 4.582 de achiziţii directe au acolo chiar cuvântul „directa". null la cele 11 coduri (din 8.628) care nu există în nomenclatorul CPV 2008.
data[].valoare.ron
number | null
Valoarea contractului, în lei.
data[].valoare.eur
number | null
Valoarea contractului, în euro.
data[].valoare.moneda_originala
string | null
Moneda în care a fost publicat contractul.
data[].valoare.atribuita_ron
number | null
Ce-i revine acestui câştigător: valoarea declarată împărţită la câştigătorii aceluiaşi acord-cadru;
null dacă valoarea declarată e imposibilă. Pe ea se fac toate sumele.
data[].valoare.castigatori
integer
Câţi câştigători împart acelaşi contract (acord-cadru); 1 de obicei.
data[].valoare.suspecta
boolean
true dacă valoarea declarată e imposibilă (de peste 10 ori estimarea procedurii ori de mii de ori peste contractele obişnuite ale autorităţii); rămâne afişată, dar nu intră în sume.
data[].tip
string | null
Tipul.
data[].procedura
string | null
Tipul procedurii de atribuire.
meta.paginare.pagina
integer
Pagina curentă.
meta.paginare.per_pagina
integer
Rezultate pe pagină.
meta.paginare.total
integer
Total rezultate.
meta.paginare.pagini
integer
Număr de pagini.
data[].castigator.cui_romanesc
boolean
true dacă valoarea validează ca CUI românesc (inclusiv cifra de control). false înseamnă doar că NU e un CUI românesc — de regulă un identificator străin (1.257 au peste 10 cifre) sau un cod cu cifra de control greşită (7.392). Nu pretindem că ştim a cui e. Util înainte de /firme/{cui}: cu false, firma nu va fi găsită acolo.
Exemple de răspuns
GEThttps://oneapi.ro/api/business/v1/achizitii/dupa-obiect?text=servicii+de+curatenie&per_pagina=3
{
"data": [
{
"id": 57979911,
"an": 2026,
"data_contract": "2026-03-31",
"autoritate": {
"nume": "LICEUL TEORETIC GH.SINCAI",
"cui": 4736434
},
"castigator": {
"nume": "TRANSILVANIA CLEANING SOLUTIONS S.R.L.",
"cui": 48188732,
"cui_romanesc": true
},
"obiect": "Servicii de curatenie perioada 01.01.2026-31.03.2026",
"cpv": "90910000-9",
"cpv_denumire": "Servicii de curăţenie",
"valoare": {
"ron": 112352.52,
"eur": null,
"moneda_originala": null,
"atribuita_ron": 112352.52,
"castigatori": 1,
"suspecta": false
},
"tip": "notificari",
"procedura": "Servicii"
}
],
"meta": {
"obiect": {
"text": "servicii de curatenie",
"cpv": {
"cod": "90910000-9",
"denumire": "Servicii de curăţenie",
"scor": 0.8729719519615173
},
"alternative": [
{
"cod": "90911100-7",
"denumire": "Servicii de curăţare a locuinţelor",
"scor": 0.7943454025490706
}
]
},
"paginare": {
"pagina": 1,
"per_pagina": 3,
"total": 16962,
"pagini": 5654
}
}
}
GEThttps://oneapi.ro/api/business/v1/achizitii/dupa-obiect?text=reparatii+drumuri&per_pagina=3
{
"data": [
{
"id": 47404406,
"an": 2026,
"data_contract": "2026-03-31",
"autoritate": {
"nume": "Municipiul Blaj",
"cui": 4563007
},
"castigator": {
"nume": "INA STRADE TGA",
"cui": 26009151,
"cui_romanesc": true
},
"obiect": "Achizitie lucrari de reparatii parcare publica existenta",
"cpv": "45233142-6",
"cpv_denumire": "Lucrări de reparare a drumurilor",
"valoare": {
"ron": 233733.04,
"eur": null,
"moneda_originala": null,
"atribuita_ron": 233733.04,
"castigatori": 1,
"suspecta": false
},
"tip": "directe",
"procedura": "Lucrari"
}
],
"meta": {
"obiect": {
"text": "reparatii drumuri",
"cpv": {
"cod": "45233142-6",
"denumire": "Lucrări de reparare a drumurilor",
"scor": 0.8459581984865132
},
"alternative": [
{
"cod": "50112100-4",
"denumire": "Servicii de reparare a automobilelor",
"scor": 0.7667024821075039
}
]
},
"paginare": {
"pagina": 1,
"per_pagina": 3,
"total": 8876,
"pagini": 2959
}
}
}
GEThttps://oneapi.ro/api/business/v1/achizitii/dupa-obiect?text=servicii+medicale&an=2024&per_pagina=3
{
"data": [
{
"id": 53377179,
"an": 2024,
"data_contract": "2024-12-31",
"autoritate": {
"nume": "SPITALUL DE ORTOPEDIE SI TRAUMATOLOGIE AZUGA",
"cui": 2845125
},
"castigator": {
"nume": "S.C. Centrul Medical Unirea S.R.L.",
"cui": 5919324,
"cui_romanesc": true
},
"obiect": "SERVICII MEDICALE",
"cpv": "85148000-8",
"cpv_denumire": "Servicii de analize medicale",
"valoare": {
"ron": 5194.8,
"eur": null,
"moneda_originala": null,
"atribuita_ron": 5194.8,
"castigatori": 1,
"suspecta": false
},
"tip": "notificari",
"procedura": "Servicii"
}
],
"meta": {
"obiect": {
"text": "servicii medicale",
"cpv": {
"cod": "85148000-8",
"denumire": "Servicii de analize medicale",
"scor": 0.7869725696428176
},
"alternative": [
{
"cod": "85141000-9",
"denumire": "Servicii furnizate de personalul medical",
"scor": 0.7868664987762883
}
]
},
"paginare": {
"pagina": 1,
"per_pagina": 3,
"total": 2241,
"pagini": 747
}
}
}
Coduri de eroare
| Cod | Slug | Când apare |
|---|---|---|
| 401 | neautentificat | Token lipsă, invalid, expirat sau revocat. |
| 403 | feature_indisponibil | Planul curent nu include funcţia de care ţine ruta. |
| 422 | validare | Lipseşte parametrul text. |
| 429 | cota_depasita | Cota lunară a planului a fost depăşită (vezi Retry-After). |
| 503 | mentenanta | Indexul semantic CPV nu e construit, sau serviciul de embeddings e temporar indisponibil. |
Toate erorile au aceeași formă. eroare.cod e stabil și e cel după care trebuie să ramifici în cod — nu după textul din mesaj, care se poate schimba.
{
"eroare": {
"cod": "validare",
"mesaj": "Lipseşte parametrul text.",
"detalii": {
"an": [
"Valoarea trimisă nu respectă regula parametrului."
]
}
}
}