Business v1 / Firme
Top companies
The companies ranked by turnover, net profit or employees on one year's balance sheets, optionally within a county or a CAEN sector.
GET
https://oneapi.ro/api/business/v1/firme/top
Query parameters
NameTypeDescriptionAccepted values
caenoptional
string | null
A CAEN code at any level — section (
G), division (62), group, class (4711).
e.g. 62
caen_versiuneoptional
string | null
The revision of the
caen code (1, 2, 3), when its form is ambiguous.
123
duparequired
string
Required.
cifra_afaceri, profit or salariati.
cifra_afaceriprofitsalariati
anoptional
integer | null
The balance-sheet year. By default, the newest year with most balance sheets filed.
e.g. 2025
judetoptional
string | null
The registered-office county: licence-plate code (
CJ) or name.
e.g. CJ
limitaoptional
integer | null
How many companies. Default 20, maximum 100.
1 – 100
How it behaves
- Ranks companies by
cifra_afaceri,profit(net profit, signed) orsalariati, on one year's balance sheets — every row has the samefinanciar.an, so they are comparable. The ordinary lists (/judete/{judet}/firme?sortare=) order by each company's latest filed balance sheet instead. - Without
an, it uses the newest year with most balance sheets filed (at least 90% of the previous year's companies), given inmeta.an_implicit. The year still being filed (June–September) would rank only the early filers. A year without balance sheets returns200withdata: nullandmeta.fara_date, listing the available years. judetis the registered-office county of the ranked year (from the trade-register history: a company that moved from Cluj to Bucharest in 2024 appears in Cluj's 2021 ranking), andcaenis today's main activity from ANAF (a code at any level, expanded across all revisions).- Balance sheets come from the Ministry of Finance (annual financial statements). Companies that do not file one (sole traders) do not appear.
- Impossible values written in the form (a turnover of 300,000 billion lei, 62,355 employees at a company with 275,000 lei in turnover) become
nulland stay out of rankings and averages. Insurers' forms have no turnover line, so they havecifra_afaceri: null.
What it is for
- The 20 largest companies in a county, for a page on the local economy.
- The leaders of a sector (
caen=62) by headcount, for prospecting or recruiting. - The most profitable companies of a year, for an article or a report.
Response structure
FieldTypeDescription
data[].pozitie
integer
The rank, from 1.
data[].cui
integer
The tax ID.
data[].denumire
string
The name.
data[].cod_inmatriculare
string
The trade-register number (J…).
data[].forma_juridica
string
The legal form (SRL, SA, PFA…).
data[].stare
object
The company status (active, deregistered…).
data[].stare.cod
string
Code from the source code list — the key you filter on.
data[].stare.denumire
string
The name, exactly as the source publishes it.
data[].stare.categorie
string
Category in the source classification.
data[].data_inmatriculare
string
The trade-register registration date.
data[].sediu.judet
string
The county of the registered office.
data[].sediu.localitate
string
The locality of the registered office.
data[].sediu.cod_siruta
integer
The SIRUTA code of the locality — chainable to /api/locations/v1.
data[].caen_principal.cod
string
The main CAEN code.
data[].caen_principal.denumire
string
The name of the main activity.
data[].fiscal.tva
boolean
VAT-registered.
data[].fiscal.inactiv
boolean
Declared fiscally inactive.
data[].fiscal.e_factura
boolean
Enrolled in e-Factura.
data[].financiar.an
integer
The ranked balance-sheet year — the same on every row.
data[].financiar.cifra_afaceri
integer
Net turnover, in lei.
data[].financiar.profit_net
integer
Net profit, in lei; negative = loss.
data[].financiar.salariati
integer
The average number of employees.
meta.dupa
string
The ranking criterion.
meta.an
integer
The year of the ranked balance sheets.
meta.an_implicit
integer
The year used when
an is missing: the newest year with most balance sheets filed.
meta.limita
integer
How many companies were requested.
meta.nr_firme
integer
meta.judet
string
The requested county, if any.
meta.caen
object
How the requested CAEN code was resolved (level, name, how many classes were searched).
Response examples
GEThttps://oneapi.ro/api/business/v1/firme/top?dupa=cifra_afaceri&limita=10
{
"data": [
{
"pozitie": 1,
"cui": 1590082,
"denumire": "OMV PETROM SA",
"cod_inmatriculare": "J1997008302407",
"forma_juridica": "SA",
"stare": {
"cod": "2072",
"denumire": "sechestru părți sociale/acțiuni deținute de unul sau mai mulți asoc./acționari",
"categorie": "alta"
},
"data_inmatriculare": "1997-10-23",
"sediu": {
"judet": "București",
"localitate": "București Sectorul 1",
"cod_siruta": 179141
},
"caen_principal": {
"cod": "0610",
"denumire": "Extracția petrolului brut"
},
"fiscal": {
"tva": true,
"inactiv": false,
"e_factura": false
},
"financiar": {
"an": 2025,
"cifra_afaceri": 30828147506,
"profit_net": 3067559914,
"salariati": 6701
}
}
],
"meta": {
"dupa": "cifra_afaceri",
"an": 2025,
"an_implicit": 2025,
"limita": 10,
"nr_firme": 730163
}
}
GEThttps://oneapi.ro/api/business/v1/firme/top?dupa=profit&judet=CJ&limita=5
{
"data": [
{
"pozitie": 1,
"cui": 14476722,
"denumire": "DISTRIBUȚIE ENERGIE ELECTRICĂ ROMANIA S.A.",
"cod_inmatriculare": "J2002000352121",
"forma_juridica": "SA",
"stare": {
"cod": "2127",
"denumire": "raspundere penala cf. Legii 286/2009, Legii 135/2010",
"categorie": "alta"
},
"data_inmatriculare": "2002-02-26",
"sediu": {
"judet": "Cluj",
"localitate": "Cluj-Napoca",
"cod_siruta": 54984
},
"caen_principal": {
"cod": "3514",
"denumire": "Comercializarea energiei electrice"
},
"fiscal": {
"tva": true,
"inactiv": false,
"e_factura": false
},
"financiar": {
"an": 2025,
"cifra_afaceri": 4312446414,
"profit_net": 812663232,
"salariati": 6270
}
}
],
"meta": {
"dupa": "profit",
"an": 2025,
"an_implicit": 2025,
"judet": "CJ",
"limita": 5,
"nr_firme": 57933
}
}
GEThttps://oneapi.ro/api/business/v1/firme/top?dupa=salariati&caen=62&limita=5
{
"data": [
{
"pozitie": 1,
"cui": 9533457,
"denumire": "ENDAVA ROMANIA SRL",
"cod_inmatriculare": "J1997001110126",
"forma_juridica": "SRL",
"stare": {
"cod": "1048",
"denumire": "funcțiune",
"categorie": "activa"
},
"data_inmatriculare": "1997-06-20",
"sediu": {
"judet": "Cluj",
"localitate": "Cluj-Napoca",
"cod_siruta": 54984
},
"caen_principal": {
"cod": "6210",
"denumire": "Activități de realizare a soft-ului la comandă (software orientat client)"
},
"fiscal": {
"tva": true,
"inactiv": false,
"e_factura": true
},
"financiar": {
"an": 2025,
"cifra_afaceri": 1179513721,
"profit_net": 117032117,
"salariati": 4023
}
}
],
"meta": {
"dupa": "salariati",
"an": 2025,
"an_implicit": 2025,
"limita": 5,
"nr_firme": 27366,
"caen": {
"cerut": "62",
"versiune_cerut": "Rev.3",
"nivel": "diviziune",
"denumire": "Activităţi de programare și activități de consultanță în tehnologia informaţiei",
"clase_cautate": 13,
"clase_altele_decat_cerut": 13,
"nota_acoperire": "Căutarea e permisivă: codul cerut s-a tradus în toate ediţiile CAEN, ca să prindă şi firmele nerenumerotate încă. Totalul cuprinde deci şi 13 clase diferite de [62], iar unele pot fi mult mai largi decât codul cerut. Pentru o cifră strict despre meseria cerută, foloseşte `categorie=` de la `/caen/categorii`, care refuză clasele-sac.",
"clase": [
"6201",
"6202",
"6203",
"6209",
"6220",
"6210",
"6290",
"3002",
"7230",
"7240",
"7260",
"7221",
"7222"
]
}
}
}
GEThttps://oneapi.ro/api/business/v1/firme/top?dupa=profit
{
"data": [
{
"pozitie": 1,
"cui": 13267213,
"denumire": "SOCIETATEA DE PRODUCERE A ENERGIEI ELECTRICE IN HIDROCENTRALE \" HIDROELECTRICA\" S.A.",
"cod_inmatriculare": "J2000007426409",
"forma_juridica": "SA",
"stare": {
"cod": "2072",
"denumire": "sechestru părți sociale/acțiuni deținute de unul sau mai mulți asoc./acționari",
"categorie": "alta"
},
"data_inmatriculare": "2000-08-10",
"sediu": {
"judet": "București",
"localitate": "București Sectorul 1",
"cod_siruta": 179141
},
"caen_principal": {
"cod": "3512",
"denumire": "Transportul energiei electrice"
},
"fiscal": {
"tva": true,
"inactiv": false,
"e_factura": true
},
"financiar": {
"an": 2025,
"cifra_afaceri": 9758404582,
"profit_net": 3337517121,
"salariati": 3554
}
}
],
"meta": {
"dupa": "profit",
"an": 2025,
"an_implicit": 2025,
"limita": 20,
"nr_firme": 917611
}
}
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 | An undeclared parameter or a value that fails validation (dupa missing or unknown, an, limita over 100, caen). The offending field is in detalii. |
| 422 | filtru_necunoscut | The county in judet does not exist; detalii.camp says which. |
| 422 | caen_inexistent | The caen code does not exist in any CAEN revision. |
| 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": "An undeclared parameter or a value that fails validation (dupa missing or unknown, an, limita over 100, caen). The offending field is in detalii.",
"detalii": {
"caen": [
"The value sent does not satisfy the parameter rule."
]
}
}
}