Business v1 / Achiziții publice
Profil autoritate
Rezumatul achizițiilor unei autorități contractante (după CUI): număr de contracte, valoare totală și
top 5 furnizori. 404 dacă nu apare ca autoritate.
GET
https://oneapi.ro/api/business/v1/autoritati/{cui}
Parametri de cale
NumeTipDescriereExemplu
cuiobligatoriu
string
CUI-ul autorităţii contractante, fără prefixul
RO.
Parametri de interogare
Ruta nu acceptă parametri de interogare.
Cum se comportă
- „Nu are” e un răspuns, nu o eroare. Când firma există, dar n-are ce cere ruta, răspunsul e
200cudata: nullşi motivul înmeta.fara_date.404înseamnă doar că firma (CUI-ul) nu există — aşa poţi deosebi cele două cazuri şi poţi păstra în cache răspunsul negativ. - 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. - Profilul unei autorităţi contractante după CUI: totalul atribuit plus top furnizori. Perspectiva inversă a achiziţiilor unei firme.
- Două denumiri, şi asta e intenţionat.
identitate.denumiree cea oficială, de la Ministerul Finanţelor;denumire_seape numele tastat în anunţ. Pot diferi mult: CUI-ul 930 apare în SEAP drept „Institutul National de Cercetare Dezvoltare pentru Mecatronica si Tehnica Masurarii-INCDMTM", iar oficial „INSTITUTUL NATIONAL DE CERCETARE-DEZVOLTARE PENTRU MECATRONICA SI TEHNICA MASURARII - I.N.C.D.M.T.M. BUCURESTI". Pentru afişare foloseştedenumire, care alege singur. - 3,4% dintre autorităţi n-au identitate oficială. Nu e o scăpare, ci o lipsă reală în datele fiscale, iar ruta o spune explicit prin
identitate_lipsaîn loc să lase adresa goală, tăcut. Identitatea se întoarce doar pentru persoane juridice: pentru cele câteva autorităţi înregistrate ca persoane fizice, adresa şi telefonul personal nu ies niciodată pe rută.
La ce folosește
- Pregătirea unei abordări comerciale către o instituţie: ce cumpără şi de la cine.
- Analiza dependenţei unei autorităţi de un număr mic de furnizori.
- Perspectiva inversă, când ai deja profilul furnizorului.
Structura răspunsului
CâmpTipDescriere
data.cui
integer
Codul fiscal.
data.denumire
string
Denumirea de afişat: cea oficială când o avem, altfel cea din anunţ.
data.denumire_seap
string
Denumirea aşa cum apare în anunţurile SEAP — cea mai frecventă dintre variante. Diferă des de cea oficială şi uneori mult, fiindcă e tastată de cine publică anunţul: 6,8% din autorităţi apar sub mai multe nume, una sub 23. Rămâne în răspuns ca să poţi regăsi autoritatea şi după numele din anunţ.
data.identitate
object
Identitatea oficială, din datele de identificare ale Ministerului Finanţelor.
null când CUI-ul n-are corespondent acolo — vezi identitate_lipsa.
data.identitate.denumire
string
Denumirea oficială.
data.identitate.adresa
object
Adresa sediului: stradă, număr, bloc, scară, etaj, apartament, sector, localitate, judeţ, cod poştal. Câmpurile necompletate la sursă vin
null.
data.identitate.adresa.strada
string
data.identitate.adresa.numar
string
Numărul de elemente numărate.
data.identitate.adresa.bloc
null
data.identitate.adresa.scara
null
data.identitate.adresa.etaj
null
data.identitate.adresa.apartament
null
data.identitate.adresa.sector
null
Sectorul instituţional ori economic.
data.identitate.adresa.localitate
string
data.identitate.adresa.judet
string
Judeţul la care se referă valoarea.
data.identitate.adresa.cod_postal
string
data.identitate.stare
string
Starea fiscală (
INREGISTRAT, RADIAT, TRANSFER(SOSIRE) ş.a.).
data.identitate.data_stare
string
Data de la care e în starea asta.
data.identitate.reg_com
null
Numărul din Registrul Comerţului, unde există. Instituţiile publice nu se înregistrează acolo, deci pentru ele e
null.
data.identitate.data_inregistrare
string
Data înregistrării fiscale.
data.identitate.data_radiere
null
Data radierii, dacă a fost radiată.
data.identitate.tip_contribuabil
string
Mereu
PJ: ruta întoarce identitate doar pentru persoane juridice.
data.identitate.an
integer
Anul instantaneului din care vin datele de identificare. O adresă fără anul ei nu se poate citi.
data.identitate_lipsa
null
Doar când
identitate e null: de ce lipseşte. Atunci denumire e numele din anunţul SEAP, iar adresa nu se cunoaşte.
data.are_fisa
boolean
true dacă entitatea e şi în registrul firmelor, deci are sens să ceri /firme/{cui}. Pentru majoritatea autorităţilor e false: instituţiile publice nu se înregistrează la Registrul Comerţului.
data.total.nr_contracte
integer
Numărul de contracte.
data.total.valoare_ron
number
Valoarea, în lei.
data.top_furnizori[].castigator
string
Firma câştigătoare.
data.top_furnizori[].cui
integer
Codul fiscal.
data.top_furnizori[].cui_romanesc
boolean
data.top_furnizori[].nr_contracte
integer
Numărul de contracte.
data.top_furnizori[].valoare_ron
number
Valoarea, în lei.
meta.fara_date
string
Doar când răspunsul e gol: de ce nu există date (de pildă „Firma nu are cod LEI înregistrat la GLEIF.”). Lipseşte când
data e completat.
meta.fara_date_cod
string
Cuvântul scurt şi STABIL al motivului, pentru clienţii care comută pe el în cod:
fara_date e proză şi se poate reformula, ăsta nu.
Exemple de răspuns
GEThttps://oneapi.ro/api/business/v1/autoritati/4547125
{
"data": {
"cui": 4547125,
"denumire": "INSTITUTUL ONCOLOGIC PROF.DR.I.CHIRICUTA CLUJ-NAPOCA",
"denumire_seap": "Institutul Oncologic Prof. Dr. I. Chiricuta Cluj-Napoca",
"identitate": {
"denumire": "INSTITUTUL ONCOLOGIC PROF.DR.I.CHIRICUTA CLUJ-NAPOCA",
"adresa": {
"strada": "Republicii",
"numar": "34-36",
"bloc": null,
"scara": null,
"etaj": null,
"apartament": null,
"sector": null,
"localitate": "Cluj-Napoca",
"judet": "CLUJ",
"cod_postal": "400015"
},
"stare": "MODIFICARE PUBLICI",
"data_stare": "1993-08-24",
"reg_com": null,
"data_inregistrare": "2013-11-21",
"data_radiere": null,
"tip_contribuabil": "PJ",
"an": 2026
},
"identitate_lipsa": null,
"are_fisa": false,
"total": {
"nr_contracte": 44401,
"valoare_ron": 6134746820.27
},
"top_furnizori": [
{
"castigator": "ALLIANCE HEALTHCARE ROMANIA",
"cui": 8955860,
"cui_romanesc": true,
"nr_contracte": 2064,
"valoare_ron": 1296610831.62
}
]
}
}
GEThttps://oneapi.ro/api/business/v1/autoritati/16054368
{
"data": {
"cui": 16054368,
"denumire": "COMPANIA NAŢIONALĂ DE ADMINISTRARE A INFRASTRUCTURII RUTIERE S.A.",
"denumire_seap": "COMPANIA NATIONALA DE ADMINISTRARE A INFRASTRUCTURII RUTIERE S.A.",
"identitate": {
"denumire": "COMPANIA NAŢIONALĂ DE ADMINISTRARE A INFRASTRUCTURII RUTIERE S.A.",
"adresa": {
"strada": "B-dul Dinicu Golescu",
"numar": "38",
"bloc": null,
"scara": null,
"etaj": null,
"apartament": null,
"sector": "1",
"localitate": "Bucureşti",
"judet": "MUNICIPIUL BUCUREŞTI",
"cod_postal": "10873"
},
"stare": "INREGISTRAT",
"data_stare": "2004-01-15",
"reg_com": null,
"data_inregistrare": "2025-10-22",
"data_radiere": null,
"tip_contribuabil": "PJ",
"an": 2026
},
"identitate_lipsa": null,
"are_fisa": true,
"total": {
"nr_contracte": 19407,
"valoare_ron": 123907895425.36
},
"top_furnizori": [
{
"castigator": "SPEDITION UMB",
"cui": 9942680,
"cui_romanesc": true,
"nr_contracte": 23,
"valoare_ron": 11827668571.45
}
]
}
}
GEThttps://oneapi.ro/api/business/v1/autoritati/6719278
{
"data": null,
"meta": {
"fara_date": "CUI-ul nu apare ca autoritate contractantă în achiziţiile publice.",
"fara_date_cod": "fara_contracte"
}
}
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 apare ca autoritate contractantă şi nici ca firmă în registru. |
| 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."
]
}
}
}