Business v1 / Achiziții publice
Authority profile
The procurement summary of a contracting authority (by tax id): contract count, total value and the top 5 suppliers. 404 if it does not appear as an authority.
GET
https://oneapi.ro/api/business/v1/autoritati/{cui}
Path parameters
NameTypeDescriptionExample
cuirequired
string
Tax identification number of the contracting authority, without the
RO prefix.
Query parameters
This route accepts no query parameters.
How it behaves
- "Has none" is an answer, not an error. When the company exists but has nothing the route asks for, the response is
200withdata: nulland the reason inmeta.fara_date.404only means the company (tax ID) does not exist — that way you can tell the two apart and cache the negative answer. - Not every contract has a declared value. Measured on 4 October 2026, across all 17.39 million rows: it is missing on 10.8% of contracts (312,587 rows), and almost never on direct awards (47 out of 13.68 million) or notices (52 out of 811,033). Any total is therefore the total of the rows that DO carry a figure, not of the whole set — for
tip=contracte, of nine tenths of them. Contract counts cover all rows. Theval_min/val_maxfilters work on the RON value, so they exclude rows without one. - The profile of a contracting authority by tax ID: total awarded plus top suppliers. The reverse view of a company's procurement.
- Two names, and that is deliberate.
identitate.denumireis the official one, from the Ministry of Finance;denumire_seapis the name typed into the notice. They can differ a lot: tax ID 930 appears in SEAP as „Institutul National de Cercetare Dezvoltare pentru Mecatronica si Tehnica Masurarii-INCDMTM", and officially as „INSTITUTUL NATIONAL DE CERCETARE-DEZVOLTARE PENTRU MECATRONICA SI TEHNICA MASURARII - I.N.C.D.M.T.M. BUCURESTI". For display usedenumire, which picks for you. - 3.4% of authorities have no official identity. It is not an oversight but a real gap in the tax data, and the route says so explicitly through
identitate_lipsainstead of silently leaving the address empty. Identity is returned only for legal entities: for the few authorities registered as natural persons, the personal address and phone never leave the route.
What it is for
- Preparing a commercial approach to an institution: what it buys, and from whom.
- Analysing an authority's dependence on a small number of suppliers.
- The reverse perspective, when you already have the supplier's profile.
Response structure
FieldTypeDescription
data.cui
integer
The tax ID.
data.denumire
string
The name to display: the official one where we have it, otherwise the one from the notice.
data.denumire_seap
string
The name as it appears in SEAP notices — the most frequent variant. It often differs from the official one, sometimes a lot, because whoever publishes the notice types it by hand: 6.8% of authorities appear under more than one name, one under 23. Kept in the response so you can still find an authority by the name used in the notice.
data.identitate
object
The official identity, from the Ministry of Finance taxpayer records.
null when the tax ID has no match there — see identitate_lipsa.
data.identitate.denumire
string
The official name.
data.identitate.adresa
object
The registered address: street, number, building, staircase, floor, flat, sector, locality, county, postcode. Fields the source leaves empty come back
null.
data.identitate.adresa.strada
string
data.identitate.adresa.numar
string
Number of items counted.
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
Institutional or economic sector.
data.identitate.adresa.localitate
string
data.identitate.adresa.judet
string
The county the value refers to.
data.identitate.adresa.cod_postal
string
data.identitate.stare
string
The tax status (
INREGISTRAT, RADIAT, TRANSFER(SOSIRE) and so on).
data.identitate.data_stare
string
The date that status took effect.
data.identitate.reg_com
null
The Trade Register number, where one exists. Public institutions do not register there, so it is
null for them.
data.identitate.data_inregistrare
string
The date of tax registration.
data.identitate.data_radiere
null
The date of deregistration, if it happened.
data.identitate.tip_contribuabil
string
Always
PJ: the route returns an identity only for legal entities.
data.identitate.an
integer
The year of the snapshot the identity data comes from. An address you cannot date is an address you cannot read.
data.identitate_lipsa
null
Only when
identitate is null: why it is missing. denumire is then the name from the SEAP notice, and the address is unknown.
data.are_fisa
boolean
true if the entity is also in the company register, so asking /firme/{cui} is worth it. For most authorities it is false: public institutions do not register with the Trade Register.
data.total.nr_contracte
integer
The number of contracts.
data.total.valoare_ron
number
The value, in RON.
data.top_furnizori[].castigator
string
The winning company.
data.top_furnizori[].cui
integer
The tax ID.
data.top_furnizori[].cui_romanesc
boolean
data.top_furnizori[].nr_contracte
integer
The number of contracts.
data.top_furnizori[].valoare_ron
number
The value, in RON.
meta.fara_date
string
Only when the response is empty: why there is no data (for instance "Firma nu are cod LEI înregistrat la GLEIF."). Absent when
data is filled in.
meta.fara_date_cod
string
The short, STABLE word for the reason, for clients that branch on it in code:
fara_date is prose and may be rephrased, this is not.
Response examples
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"
}
}
Error codes
| Code | Slug | When it occurs |
|---|---|---|
| 401 | neautentificat | Token missing, invalid, expired or revoked. |
| 403 | feature_indisponibil | The current plan does not include the feature the route depends on. |
| 404 | negasit | The tax ID [{cui}] appears neither as a contracting authority nor as a company in the register. |
| 422 | validare | The route takes no parameters apart from lang: any other parameter returns 422 instead of being ignored. |
| 429 | cota_depasita | The plan's monthly quota has been exceeded (see Retry-After). |
All errors share the same shape. eroare.cod is stable and is the value you should branch on in code — not the text in mesaj, which may change.
{
"eroare": {
"cod": "validare",
"mesaj": "The route takes no parameters apart from lang: any other parameter returns 422 instead of being ignored.",
"detalii": {
"cui": [
"The value sent does not satisfy the parameter rule."
]
}
}
}