Business v1 / Achiziții publice
Contracting authorities
The entities that have awarded at least one public contract, with the official name and county from Ministry of Finance records. Filter by county or name, sort by value, contract count or name.
GET
https://oneapi.ro/api/business/v1/autoritati
Query parameters
NameTypeDescriptionAccepted values
judetoptional
string | null
The county of the registered office: the name (with or without diacritics, with
ș or ş) or the car-plate code — Cluj, cluj, CJ, Argeș, ARGEŞ all reach the same place. Bucharest is București or B. A county that does not exist returns 422, not an empty list. ⚠️ Authorities without an official identity have no county, so no county filter will return them.
max 64 car.
qoptional
string | null
Searches the official name AND the one from the notice, anywhere in the text. Two characters minimum.
max 120 car.
sortareoptional
string | null
valoare (default) — by amount awarded; contracte — by their count; denumire — alphabetical, with authorities lacking an official identity last.
valoarecontractedenumire
How it behaves
- This is NOT the list of public institutions in Romania. It is the list of entities that have awarded at least one public contract — which includes state-owned companies, utilities and research institutes, and leaves out institutions that have awarded nothing. The definition is repeated in the response, in
meta.definitie. No canonical register of public institutions exists in our data: the taxpayer type only separates legal entities from natural persons, and "legal entity without a Trade Register match" would return over 300,000 entities, mostly associations, foundations and notarial offices. - The name and address come from a different source than the contracts. The name in a SEAP notice is typed by whoever publishes it and varies; the official name and county come from Ministry of Finance records, and
an_identitatesays which snapshot. For 3.5% of authorities that identity is missing —are_identitateis thenfalseand the county isnull, so thejudetfilter will not return them. qsearches both names, official and from the notice. Search the way the official source writes it: "MUNICIPIUL CLUJ-NAPOCA", not "Primăria Cluj".
What it is for
- Building a target list of institutions by county, ordered by the budget they spend.
- Finding an authority's tax ID by name, so you can then open its profile.
- Feeding an index of per-authority pages with official names and addresses.
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 from SEAP notices — the most frequent variant.
data[].are_identitate
boolean
true if the name comes from official records, false if it comes from the notice.
data[].localitate
string
The locality of the registered office, from official records.
null without an identity.
data[].judet
string
The county of the registered office, from official records.
null without an identity.
data[].stare
string
The tax status.
null without an identity.
data[].an_identitate
integer
The year of the snapshot the name and locality come from.
null without an identity.
data[].nr_contracte
integer
The number of contracts awarded.
data[].valoare_ron
number
The total value awarded, in RON.
null when no contract states a value.
meta.definitie
string
What the list actually is — read it before presenting it as "the public institutions".
meta.paginare.pagina
integer
Current page, counted from 1.
meta.paginare.per_pagina
integer
How many records a page holds.
meta.paginare.total
integer
Total matching records, beyond the current page.
meta.paginare.pagini
integer
How many pages the list has.
Response examples
GEThttps://oneapi.ro/api/business/v1/autoritati?per_pagina=5
{
"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.",
"are_identitate": true,
"localitate": "Bucureşti",
"judet": "MUNICIPIUL BUCUREŞTI",
"stare": "INREGISTRAT",
"an_identitate": 2026,
"nr_contracte": 38814,
"valoare_ron": 247815790850.72
}
],
"meta": {
"definitie": "Entitățile care au atribuit cel puțin un contract public. NU e lista instituțiilor publice din România: include companii de stat și regii, iar instituțiile fără contracte atribuite lipsesc.",
"paginare": {
"pagina": 1,
"per_pagina": 5,
"total": 17479,
"pagini": 3496
}
}
}
GEThttps://oneapi.ro/api/business/v1/autoritati?judet=CJ&per_pagina=5
{
"data": [
{
"cui": 4305857,
"denumire": "MUNICIPIUL CLUJ-NAPOCA",
"denumire_seap": "Municipiul Cluj-Napoca",
"are_identitate": true,
"localitate": "Cluj-Napoca",
"judet": "CLUJ",
"stare": "MODIFICARE PUBLICI",
"an_identitate": 2026,
"nr_contracte": 9190,
"valoare_ron": 33252978736.1
}
],
"meta": {
"definitie": "Entitățile care au atribuit cel puțin un contract public. NU e lista instituțiilor publice din România: include companii de stat și regii, iar instituțiile fără contracte atribuite lipsesc.",
"paginare": {
"pagina": 1,
"per_pagina": 5,
"total": 514,
"pagini": 103
}
}
}
GEThttps://oneapi.ro/api/business/v1/autoritati?q=cluj-napoca&per_pagina=5
{
"data": [
{
"cui": 4305857,
"denumire": "MUNICIPIUL CLUJ-NAPOCA",
"denumire_seap": "Municipiul Cluj-Napoca",
"are_identitate": true,
"localitate": "Cluj-Napoca",
"judet": "CLUJ",
"stare": "MODIFICARE PUBLICI",
"an_identitate": 2026,
"nr_contracte": 9190,
"valoare_ron": 33252978736.1
}
],
"meta": {
"definitie": "Entitățile care au atribuit cel puțin un contract public. NU e lista instituțiilor publice din România: include companii de stat și regii, iar instituțiile fără contracte atribuite lipsesc.",
"paginare": {
"pagina": 1,
"per_pagina": 5,
"total": 48,
"pagini": 10
}
}
}
GEThttps://oneapi.ro/api/business/v1/autoritati?sortare=denumire&per_pagina=5
{
"data": [
{
"cui": 15946512,
"denumire": "3 ART SRL",
"denumire_seap": "3ART",
"are_identitate": true,
"localitate": "Baia Mare",
"judet": "MARAMUREŞ",
"stare": "INREGISTRAT",
"an_identitate": 2026,
"nr_contracte": 32,
"valoare_ron": 504000.96
}
],
"meta": {
"definitie": "Entitățile care au atribuit cel puțin un contract public. NU e lista instituțiilor publice din România: include companii de stat și regii, iar instituțiile fără contracte atribuite lipsesc.",
"paginare": {
"pagina": 1,
"per_pagina": 5,
"total": 17479,
"pagini": 3496
}
}
}
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. |
| 422 | validare | Unknown parameter, sortare outside the allowed list, or q shorter than two characters. |
| 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": "Unknown parameter, sortare outside the allowed list, or q shorter than two characters.",
"detalii": {
"judet": [
"The value sent does not satisfy the parameter rule."
]
}
}
}