oneapi
Sign in
Business v1 / Firme

Companies in a CAEN code

The companies whose main activity falls under the CAEN code in the path, at any level: section (J), division (62), group (620), class (6201). The code is looked up in Rev.3 first, then Rev.2 and Rev.1 (?caen_versiune= pins the revision); companies with codes from other revisions are caught through the official correspondence. A code that does not exist is a 404. What was searched is in meta.caen. Paginated.

GET
https://oneapi.ro/api/business/v1/caen/{cod}/firme

Path parameters

NameTypeDescriptionExample
codrequired string NACE Rev. 2 (CAEN) code, four digits (e.g. 6201).

Query parameters

NameTypeDescriptionAccepted values
caen_versiuneoptional string | null The revision of the code (1, 2, 3), when its form is ambiguous. Without it: Rev.3, then Rev.2, then Rev.1. 123
sortareoptional string | null The order: denumire (default), cifra_afaceri, profit, salariati (descending, on the latest filed balance sheet), data_inmatriculare (newest first). relevantadenumirecifra_afaceriprofitsalariatidata_inmatriculare

How it behaves

  • The companies whose primary activity falls under the code in the path, paginated — equivalent to /firme/cauta?caen=, but with the code in the path.
  • The code can be at any level: section (J), division (62), group (620), class (6201). Companies with codes from other revisions are caught through the official INS correspondence; meta.caen states the revision the code was read in and how many classes were searched.
  • A code missing from the nomenclature is a 404 (caen_inexistent) — here the code is in the PATH, so it IS the resource; on routes where caen is a filter the same code yields 422. A malformed one is a 422 (caen_invalid). Neither is ever an empty list.
  • With sortare=cifra_afaceri, profit or salariati, the list becomes a ranking on each company's latest filed balance sheet (the year is in financiar.an, so it may differ between companies) and covers only companies that have one — meta.paginare.total drops accordingly. For a ranking on a single year: /firme/top.

What it is for

  • Building the full list of companies in a sector, for prospecting.
  • Analysing the geographic distribution of an industry.
  • A sector export, with geographic filters and pagination.

Response structure

FieldTypeDescription
data[].cui integer The tax ID.
data[].denumire string The name.
data[].cod_inmatriculare string The trade register order number (J…).
data[].forma_juridica string Legal form (SRL, SA, PFA…).
data[].stare string The company status, as an object: denumire is the raw ONRC text (107 distinct values in use), categorie is our classification into 7 buckets — activa, suspendata, dizolvata, lichidare, radiata, insolventa, alta — which is what you filter or group by. cod is the ONRC code of the status.
data[].data_inmatriculare string The trade register incorporation 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 locality SIRUTA code — chainable to /api/locations/v1.
data[].caen_principal.cod string The primary CAEN code.
data[].caen_principal.denumire string The name of the primary activity.
data[].fiscal.tva boolean VAT-registered.
data[].fiscal.inactiv boolean Declared fiscally inactive.
data[].fiscal.e_factura boolean Enrolled in e-Invoicing.
data[].financiar object | null The latest filed balance sheet (year, turnover, net profit, employees); null for companies without one — sole traders, new companies —, not zero.
data[].financiar.an integer The balance-sheet year.
data[].financiar.cifra_afaceri number | null Net turnover, in lei.
data[].financiar.profit_net number | null Net profit, in lei; negative = loss.
data[].financiar.salariati integer | null The average number of employees.
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.
meta.caen object How the caen parameter was understood: the requested code, the revision it was read in and the code the route used. For a list of codes, one object per code.
meta.caen.cerut string The CAEN code sent, normalised (upper case, no dots).
meta.caen.versiune_cerut string The revision the code sent was read in: the one in caen_versiune, otherwise the first it exists in.
meta.caen.nivel string The level of the code used — on company routes, of the requested code: sectiune, subsectiune, diviziune, grupa, clasa or agregat.
meta.caen.denumire string The name of the code, from the CAEN nomenclature.
meta.caen.clase_cautate integer How many CAEN classes, across all revisions companies carry, fall under the requested code.
meta.caen.clase_altele_decat_cerut integer How many of them are NOT the requested code. The search is permissive (it translates the code into every edition so that companies not yet renumbered are found), and the translation sometimes lands on far broader classes — so the total can be about more than the trade you asked for.
meta.caen.nota_acoperire string Present only when classes other than the requested code were searched; it says what to use instead if you want a figure strictly about the trade you asked for.
meta.caen.clase string[] The raw classes actually searched, when there are at most 20. So the total can be checked rather than taken on trust.

Response examples

GEThttps://oneapi.ro/api/business/v1/caen/6201/firme
{
    "data": [
        {
            "cui": 41572620,
            "denumire": "$COMPANYNAME S.R.L.",
            "cod_inmatriculare": "J2/1494/2019",
            "forma_juridica": "SRL",
            "stare": {
                "cod": "1074",
                "denumire": "întrerupere temporară de activitate",
                "categorie": "alta"
            },
            "data_inmatriculare": "2019-08-28",
            "sediu": {
                "judet": "Arad",
                "localitate": "Sântana",
                "cod_siruta": 12108
            },
            "caen_principal": {
                "cod": "6201",
                "denumire": "Activități de realizare a soft-ului la comandă (software orientat client)"
            },
            "fiscal": {
                "tva": false,
                "inactiv": true,
                "e_factura": false
            },
            "financiar": {
                "an": 2025,
                "cifra_afaceri": 234660,
                "profit_net": 155214,
                "salariati": 1
            }
        }
    ],
    "meta": {
        "paginare": {
            "pagina": 1,
            "per_pagina": 20,
            "total": 65600,
            "pagini": 3280
        },
        "caen": {
            "cerut": "6201",
            "versiune_cerut": "Rev.2",
            "nivel": "clasa",
            "denumire": "Activități de realizare a soft-ului la comandă (software orientat client)",
            "clase_cautate": 5,
            "clase_altele_decat_cerut": 4,
            "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 4 clase diferite de [6201], 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",
                "6210",
                "7240",
                "7221",
                "7222"
            ]
        }
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
404caen_inexistentThe code [{cod}] does not exist in any CAEN revision (Rev.1, Rev.2, Rev.3).
422validareAn undeclared parameter or a value that fails validation (caen_versiune, pagina, per_pagina, sortare). The offending field is in detalii.
422caen_invalidThe code [{cod}] is not shaped like a CAEN code: a section letter, two subsection letters (Rev.1), 2, 3 or 4 digits.
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 (caen_versiune, pagina, per_pagina, sortare). The offending field is in detalii.",
        "detalii": {
            "cod": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}