oneapi
Sign in
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) or salariati, on one year's balance sheets — every row has the same financiar.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 in meta.an_implicit. The year still being filed (June–September) would rank only the early filers. A year without balance sheets returns 200 with data: null and meta.fara_date, listing the available years.
  • judet is 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), and caen is 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 null and stay out of rankings and averages. Insurers' forms have no turnover line, so they have cifra_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
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
422validareAn undeclared parameter or a value that fails validation (dupa missing or unknown, an, limita over 100, caen). The offending field is in detalii.
422filtru_necunoscutThe county in judet does not exist; detalii.camp says which.
422caen_inexistentThe caen code does not exist in any CAEN revision.
429cota_depasitaThe 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."
            ]
        }
    }
}