oneapi
Sign in
Financiar v1 / Inflatie

Enterprise economic indicators

Fourteen economic and financial indicators — turnover, gross value added, gross result, investment, direct exports, staff — by NACE activity and by size class, annually since 2004. This is the set a company can compare itself against its sector with.

Two classifications, requested separately through versiune: rev2 (the default) covers 2008–2024, rev1 covers 2004–2007. ⚠️ They do not overlap and are not spliced — Rev. 1 stops exactly where Rev. 2 begins, so no equality can be checked between them.

NACE at four levels in Rev. 2: section (16), division (77), group (237), class (531). In Rev. 1 there are five — the subsection is added (26 two-letter codes, such as DD) — and there are 12 sections, one of which, alte, is an aggregate remainder with no NACE letter.

⚠️ Monetary values from 2004 are published in thousand ROL, as the source's own dimension name says („Thousand lei, RON lei (from 2005)"). They are brought to RON with the factor 0.1; the publicat block keeps the raw value and the source's unit.

✅ The size classes sum exactly: the total is the sum of the five, verified across every comparable group, without a single exception.

⚠️ The NACE hierarchy is not a partition and is not checked as one. The source suppresses cells with too few enterprises, so that no individual company can be identified. Measured on 2024, the sum of the children falls below the parent in 18 of 208 sections, 77 of 956 divisions and 227 of 2,767 groups — almost all in the same direction, which is the signature of suppression, not of an error. For the same reason, a code can be missing entirely.

GET
https://oneapi.ro/api/financiar/v1/intreprinderi/indicatori

Query parameters

NameTypeDescriptionAccepted values
versiuneoptional string | null Optional: rev2 (default, 2008-2024) or rev1 (2004-2007). One request covers one classification. rev1rev2
niveloptional string | null Optional: sectiune, diviziune, grupa, clasa — plus subsectiune, only in rev1. Without caen, the whole level; with caen, the rows at that level under the code. sectiunesubsectiunediviziunegrupaclasa
de_laoptional integer | null Optional, a year, from 2004. 2000 – 2100
pana_laoptional integer | null Optional, a year. 2000 – 2100
caenoptional string | null Optional: any CAEN code — section (C), division (62), group, class (6201) — from any revision. It is brought to the finest level published in versiune; what was used is in meta.caen. With nivel below the code's level, it returns the rows at nivel under it (caen=C&nivel=diviziune); a nivel above the code is nivel_peste_caen. e.g. C
caen_versiuneoptional string | null Optional: the revision of the caen code — 1, 2 or 3 — when its form is ambiguous (4932 means different things in Rev.2 and Rev.3). Without it, the code is looked up in the series revision first. 123
grupareoptional string | null Optional: the source aggregates that are not CAEN codes — alte (the Rev.1 residual section; with nivel, its rows at that level). Not sent together with caen. e.g. alte
indicatorlistoptional text Optional, one or more of the fourteen, comma-separated. Without it, all of them. cifra_afacerivaloare_adaugata_brutaproductia_exercitiuluiexcedent_brut_exploatarerezultat_brutcheltuieli_personalcheltuieli_salariiinvestitii_neteinvestitii_bruteexporturi_directecapital_socialnumar_intreprinderinumar_salariatinumar_persoane_ocupate
marimelistoptional text Optional: total (default), 0-9, 10-19, 20-49, 50-249, 250+. total0-910-1920-4950-249250+

How it behaves

  • Fourteen economic and financial indicators — turnover, gross value added at factor cost, output, gross operating surplus, gross result, personnel and wage costs, net and gross investment, direct exports, share capital, the number of enterprises, employees and persons employed — by CAEN activity and size class, annually from 2004, across two classifications.
  • Two classifications, requested separately through versiune. rev2 (the default) covers 2008-2024 from matrix INT109C; rev1 covers 2004-2007 from INT109A, 199,625 values. ⚠️ They neither overlap nor join: Rev.1 stops exactly where Rev.2 begins, so no equality can be verified between them, and their nomenclatures differ. One request covers one version.
  • This is the dataset a company measures itself against. Combined with its own CAEN code and accounts, it gives relative position: in 2024 the 30,329 firms in division 62 (IT services) had 70.58 billion lei of turnover, but the 100 firms with over 250 employees accounted for 29.74 billion, i.e. 42% — and turnover per firm climbs from 0.58 million in the 0-9 class to 297 million in the largest.
  • Rev.1 has five levels, not four: it adds the subsection — 26 two-letter codes such as DD — which Rev.2 abolished. It has 12 sections rather than 16, and the twelfth, alte, is an aggregated remainder with no CAEN letter, flagged with este_rest.
  • ⚠️ The 2004 monetary values are published in thousands of ROL — the source says so in the dimension name itself, “Thousand lei, lei RON (from 2005)”. They are brought here to lei RON with a factor of 0.1, and the publicat block keeps the raw value and the source unit. Verified on manufacturing turnover: 137.9 billion lei RON in 2004 (after conversion) against 149.5 in 2005 — a continuous series.
  • CAEN on four levels in Rev.2: 16 sections, 77 divisions, 237 groups, 531 classes. The requested code is brought to the finest published level. Without a code, nivel returns a whole level; with a code, nivel returns the rows under it — caen=C&nivel=diviziune are the manufacturing divisions.
  • ✅ Size classes add up exactly. The total is the sum of the five — 0-9, 10-19, 20-49, 50-249 and 250+ employees — verified across 5,646 of 5,646 comparable groups in 2024 under Rev.2 and 23,539 of 23,539 under Rev.1, without exception. The identity runs on every request, but only where the source publishes all five classes — and it must: gross operating surplus and the gross result offset one another between classes, so a partial sum can exceed the total in magnitude (2005, class 2871: the total is −896 while the two published size classes (0-9 and 250+) sum to −1,606,120).
  • ⚠️ The CAEN hierarchy is NOT a partition, and the route does not check it as one. The source suppresses cells with too few enterprises, so that no individual firm can be identified. Measured for 2024, with the direction of the gap verified: the children's sum falls below the parent in 18 of 208 sections, 77 of 956 divisions and 227 of 2,767 groups — nearly all in the same direction, which is the signature of suppression rather than of an error. The largest gap is 45.7 billion lei. For the same reason a code may be missing entirely, and an indicator may be missing for a code that otherwise exists.
  • ⚠️ The source writes the same word two ways. Section rows carry the division marked TOTAL in capitals, while the finer levels use Total. A case-sensitive comparison misses the entire section level — 21,087 values, that is all sixteen sections. The projection handles both.
  • Eleven indicators are in lei, one in number of enterprises and two in number of persons; serii[].unitate says which, so they are never added together wrongly.
  • Activity is requested the same way across the platform. caen takes any CAEN code, at any level and from any revision, and the route brings it to what the series publishes — climbing to a parent or translating it through the official INS correspondence; meta.caen states the requested code, the one used and whether it was climbed or converted. grupare is for the source aggregates that are not CAEN codes.

What it is for

  • Positioning a company against its sector average, on turnover or margin.
  • The structure of a sector by size class: how much of the market the large firms hold.
  • The path of investment or direct exports within a given activity.

Response structure

FieldTypeDescription
data.de_la integer Start of the interval the response covers.
data.pana_la integer End of the interval the response covers, inclusive.
data.filtre.versiune string Version of the dataset or artefact the values come from.
data.filtre.indicator array The statistical indicator the value refers to.
data.filtre.nivel string Level in the classification hierarchy — the deeper, the more detailed.
data.ani array Years for which values exist.
data.serii[].caen string The CAEN (NACE) code of the activity, in the series revision.
data.serii[].versiune string The classification of the series; series from different versions do not compare code for code.
data.serii[].nivel string sectiune, diviziune, grupa or clasa — plus subsectiune under Rev.1. The levels do not add together.
data.serii[].sectiune string Section of the classification — the broadest level.
data.serii[].denumire string The exact source name, with the code in front.
data.serii[].indicator string The statistical indicator the value refers to.
data.serii[].indicator_eticheta string
data.serii[].marime string Size class used by the source.
data.serii[].unitate string lei, numar or persoane.
data.serii[].ani_publicati integer Years the source actually published for this series.
data.serii[].valori object The values of the series, by period.
data.identitati object The size-class check, plus the note on the suppression that breaks the CAEN hierarchy.
data.identitati.identitate string The identity being checked — which sum must equal which total.
data.identitati.nota_clase string
data.identitati.nota_ierarhie string How to read the classification hierarchy and which levels must not be added together.
data.identitati.verificari integer How many combinations were checked.
data.identitati.inchise integer How many checks closed within tolerance.
data.identitati.abatere_maxima string Largest deviation found between the sum of components and the total.
meta.sursa string The official source the data comes from, with its licence where one is required.
meta.versiune string Version of the dataset or artefact the values come from.
meta.acoperire.de_la integer The first period we have data for.
meta.acoperire.pana_la integer The last period we have data for.
meta.serii_returnate integer How many series were actually returned, after filters and the cell ceiling.
meta.coduri_pe_nivel.clasa integer Class in the classification — the most detailed level.
meta.coduri_pe_nivel.diviziune integer
meta.coduri_pe_nivel.grupa integer
meta.coduri_pe_nivel.sectiune integer Section of the classification — the broadest level.
meta.nota_versiune string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_nivel string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_marime string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_suprimare string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_unitati string What to know about the units of measure in the response.
data.serii[].este_rest boolean Present only on the Rev.1 alte section, which is an aggregated remainder rather than an activity.
data.serii[].publicat object Present only for 2004: the raw value in thousands of ROL, the source unit and the factor applied.
meta.fara_date data is null and this says why. The projection over the INS data is empty. As on the other series.
meta.fara_date_cod 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.
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.folosit string The code the series used: the requested one, its first published parent or the source aggregate that contains it (02-03).
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.versiune_serie string The CAEN revision the series is published in.
meta.caen.conversie boolean true when the code was translated from one revision to another through the official INS correspondence.
meta.caen.urcat boolean true when the series does not publish the requested code and a higher level was used.
meta.caen.sfera string[] The keys at nivel under the requested code, when caen comes with a finer nivel (caen=C&nivel=diviziune).

Response examples

GEThttps://oneapi.ro/api/financiar/v1/intreprinderi/indicatori?nivel=sectiune&indicator=cifra_afaceri&de_la=2020&pana_la=2023
{
    "data": {
        "de_la": 2020,
        "pana_la": 2023,
        "filtre": {
            "versiune": "rev2",
            "indicator": [
                "cifra_afaceri"
            ],
            "nivel": "sectiune"
        },
        "ani": [
            2020,
            2021,
            2022,
            2023
        ],
        "serii": [
            {
                "caen": "B",
                "versiune": "rev2",
                "nivel": "sectiune",
                "sectiune": "B",
                "denumire": "B  INDUSTRIA EXTRACTIVA",
                "indicator": "cifra_afaceri",
                "indicator_eticheta": "cifra de afaceri",
                "marime": "total",
                "unitate": "lei",
                "ani_publicati": 4,
                "valori": {
                    "2020": "25397242641",
                    "2021": "36875876517",
                    "2022": "26919841531",
                    "2023": "20182254386"
                }
            }
        ],
        "identitati": {
            "identitate": "clasa de mărime `total` = suma celor cinci clase",
            "nota_clase": "Rulată doar acolo unde sursa publică toate cinci clasele. Verificat pe toată proiecţia: 5.646 din 5.646 de grupuri în 2024 pe Rev.2 şi 23.539 din 23.539 pe Rev.1. Unde o clasă e suprimată, verificarea se sare — şi trebuie sărită: excedentul brut şi rezultatul brut se compensează între clase, aşa că o sumă parţială poate depăşi în modul totalul.",
            "nota_ierarhie": "Ierarhia CAEN NU se verifică: sursa suprimă celulele cu prea puţine întreprinderi, ca să nu poată fi identificată o firmă. Măsurat pe 2024, suma copiilor cade sub părinte în 18 din 208 secţiuni, 77 din 956 diviziuni şi 227 din 2.767 grupe — aproape toate în aceeaşi direcţie, ceea ce e semnătura suprimării, nu a unei erori.",
            "verificari": 64,
            "inchise": 64,
            "abatere_maxima": "0"
        }
    },
    "meta": {
        "sursa": "Institutul Naţional de Statistică — principalii indicatori economici şi financiari ai întreprinderilor (TEMPO, matricea INT109C).",
        "versiune": "rev2",
        "acoperire": {
            "de_la": 2008,
            "pana_la": 2024
        },
        "serii_returnate": 16,
        "coduri_pe_nivel": {
            "clasa": 531,
            "diviziune": 77,
            "grupa": 237,
            "sectiune": 16
        },
        "nota_versiune": "Cererea acoperă o singură clasificare. `rev2` (implicit) merge 2008-2024, `rev1` merge 2004-2007; nu se suprapun şi nu se lipesc, iar nomenclatoarele lor sunt diferite.",
        "nota_nivel": "Nivelul CAEN se deduce din forma codului: o literă e secţiune, iar 2, 3 sau 4 cifre sunt diviziunea, grupa şi clasa. În Rev.1, două litere sunt o subsecţiune, iar `alte` e secţiunea-rest. Codul poate fi din orice revizie: se aduce la cel mai fin nivel publicat (`meta.caen`). Cu `nivel` alături, `caen` devine sfera: `caen=C&nivel=diviziune` sunt diviziunile secţiunii C; fără `caen`, `nivel` dă toate codurile nivelului.",
        "nota_marime": "Fără `marime`, se întoarce doar clasa `total`. Verificat: totalul e suma exactă a celor cinci clase, 64 din 64 verificări în acest răspuns.",
        "nota_suprimare": "Ierarhia CAEN NU se verifică: sursa suprimă celulele cu prea puţine întreprinderi, ca să nu poată fi identificată o firmă. Măsurat pe 2024, suma copiilor cade sub părinte în 18 din 208 secţiuni, 77 din 956 diviziuni şi 227 din 2.767 grupe — aproape toate în aceeaşi direcţie, ceea ce e semnătura suprimării, nu a unei erori.",
        "nota_unitati": "Unsprezece indicatori sunt în lei, unul în număr de întreprinderi şi doi în număr de persoane. `serii[].unitate` o spune pentru fiecare."
    }
}

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_nepublicatNeither the code nor its parents are published in the series; detalii.disponibile lists the keys. grupare_nepublicata — the grouping is not in the series; the response lists them.
422caen_inexistentThe code in caen exists in no CAEN revision; it is a bad FILTER value, hence 422, not 404. caen_invalid — the code is neither a letter nor 2-4 digits. Plus an indicator, size or level outside the list, a year out of range, or interval_prea_lung beyond 30 years. caen and grupare sent together, caen_versiune without caen, or a code that is not CAEN-shaped. nivel_peste_caen — nivel is above the caen code.
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": "caen_inexistent",
        "mesaj": "The code in caen exists in no CAEN revision; it is a bad FILTER value, hence 422, not 404. caen_invalid — the code is neither a letter nor 2-4 digits. Plus an indicator, size or level outside the list, a year out of range, or interval_prea_lung beyond 30 years. caen and grupare sent together, caen_versiune without caen, or a code that is not CAEN-shaped. nivel_peste_caen — nivel is above the caen code.",
        "detalii": {
            "versiune": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}