Business v1 / Firme
Achiziţii ca autoritate
Contractele în care firma este AUTORITATEA contractantă (nu câștigătorul). Paginat.
GET
https://oneapi.ro/api/business/v1/firme/{cui}/achizitii-autoritate
Parametri de cale
NumeTipDescriereExemplu
cuiobligatoriu
string
Codul de identificare fiscală al firmei, fără prefixul
RO (ex. 6719278).
Parametri de interogare
Ruta nu acceptă parametri de interogare.
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. - Când firma e ea însăşi autoritate contractantă (instituţie publică, regie), aici sunt contractele pe care le-a atribuit — cine a câştigat, cât. Complementară cu
/firme/{cui}/achizitii, unde firma e câştigătoare. - O firmă din registru care n-a cumpărat nimic prin SEAP răspunde
200cudata: nullşi motivul înmeta.fara_date.404rămâne doar pentru un CUI pe care nu-l ştie nici registrul, nici SEAP (autorităţile care nu sunt firme — spitale, primării — se găsesc după contracte). - 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
- Analiza cheltuielilor unei instituţii publice: ce a cumpărat şi de la cine.
- Jurnalism de date pe achiziţiile unei primării sau ale unui spital.
- Găsirea furnizorilor recurenţi ai unei autorităţi, înainte de a licita.
Structura răspunsului
CâmpTipDescriere
data[].id
integer
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/firme/4547125/achizitii-autoritate
{
"data": [
{
"id": 47406353,
"an": 2026,
"data_contract": "2026-03-31",
"autoritate": {
"nume": "Institutul Oncologic Prof. Dr. I. Chiricuta Cluj-Napoca",
"cui": 4547125
},
"castigator": {
"nume": "RMB INTER AUTO SRL",
"cui": 4016034,
"cui_romanesc": true
},
"obiect": "Revizie auto CJ 22 UAS DF 1033",
"cpv": "50112000-3",
"cpv_denumire": "Servicii de reparare şi de întreţinere a automobilelor",
"valoare": {
"ron": 12592.01,
"eur": null,
"moneda_originala": null,
"atribuita_ron": 12592.01,
"castigatori": 1,
"suspecta": false
},
"tip": "directe",
"procedura": "Servicii"
}
],
"meta": {
"paginare": {
"pagina": 1,
"per_pagina": 20,
"total": 44401,
"pagini": 2221
}
}
}
GEThttps://oneapi.ro/api/business/v1/firme/6719278/achizitii-autoritate
{
"data": null,
"meta": {
"fara_date": "Firma [6719278] nu apare ca autoritate contractantă în nicio achiziţie publică.",
"fara_date_cod": "fara_contracte"
}
}
GEThttps://oneapi.ro/api/business/v1/firme/4220955/achizitii-autoritate
{
"data": [
{
"id": 57979004,
"an": 2026,
"data_contract": "2026-03-31",
"autoritate": {
"nume": "Teatrul Municipal Lucia Sturdza Bulandra",
"cui": 4220955
},
"castigator": {
"nume": "Lica Flower Shop",
"cui": 40565934,
"cui_romanesc": true
},
"obiect": "aranjament florar",
"cpv": "44423000-1",
"cpv_denumire": "Diverse articole",
"valoare": {
"ron": 600,
"eur": null,
"moneda_originala": null,
"atribuita_ron": 600,
"castigatori": 1,
"suspecta": false
},
"tip": "notificari",
"procedura": "Furnizare"
}
],
"meta": {
"paginare": {
"pagina": 1,
"per_pagina": 20,
"total": 4588,
"pagini": 230
}
}
}
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. |
| 404 | negasit | CUI-ul [{cui}] nu e nici în registrul firmelor, nici autoritate contractantă în SEAP. |
| 422 | validare | Ruta nu primeşte parametri, în afară de lang: orice alt parametru dă 422, nu e ignorat. |
| 429 | cota_depasita | Cota lunară a planului a fost depăşită (vezi Retry-After). |
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": "Ruta nu primeşte parametri, în afară de lang: orice alt parametru dă 422, nu e ignorat.",
"detalii": {
"cui": [
"Valoarea trimisă nu respectă regula parametrului."
]
}
}
}