oneapi
Sign in
Financiar v1 / Inflatie

Business demography

How many firms are born, how many live and how many die — five events in a firm's life, across 19 NACE Rev. 2 sections, annually since 2008: active, newly created, with their first employee, dissolved and with no employees left.

⚠️ The two breakdowns are parallel, not hierarchical: the same quantity, cut once by legal form (commercial companies / sole traders / other forms) and once by size class (0 / 1–4 / 5–9 / 10+ employees). You request one; they are neither crossed nor added together.

⚠️ The „with at least one employee" universe is something else, not a convenient subset: there a firm's birth becomes „it took on its first employee" and its death becomes „it no longer has any employees". It covers 2021–2023.

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

Query parameters

NameTypeDescriptionAccepted values
universoptional string | null Optional: toate (default) or cu_angajati, the latter only 2021-2023. toatecu_angajati
defalcareoptional string | null Optional: forma_juridica (default) or clasa_marime. Exactly one is used. forma_juridicaclasa_marime
de_laoptional integer | null Optional, a year, from 2008. 2008 – 2100
pana_laoptional integer | null Optional, a year. 2008 – 2100
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
evenimentlistoptional text Optional: active, nou_create, primul_angajat, desfiintate, fara_angajati. The last two exist only in the cu_angajati universe. activenou_createprimul_angajatdesfiintatefara_angajati
categorielistoptional text Optional, slugs from the chosen breakdown, comma-separated, plus total. e.g. alte_forme
indicatorlistoptional text Optional: numar_intreprinderi, salariati, persoane_ocupate. numar_intreprinderisalariatipersoane_ocupate
caenlistoptional text Optional, codes separated by commas: any CAEN code — section (C), division (62), group, class (6201) — from any revision. It is brought to its section (CAEN Rev.2); what was used is in meta.caen. e.g. 62,C
gruparelistoptional text Optional, separated by commas: the source aggregates that are not CAEN codes — total. Not sent together with caen. e.g. total

How it behaves

  • Five events in the life of a firm, across 19 NACE Rev.2 sections — 29,754 values, annually from 2008, from TEMPO families INT110, INT111 and INT113: active, newly born, with a first employee, dissolved and with no employees left. Three indicators for each: the number of firms, the average number of employees and the average number of persons employed.
  • It is the only capability in the module that measures the birth and death of firms. /financiar/v1/intreprinderi counts how many exist; this one says how many appear and how many disappear each year.
  • ⚠️ The two breakdowns are parallel, not hierarchical. The same quantity is cut once by legal form — companies, sole traders, other forms — and once by size class — 0, 1-4, 5-9, 10+ employees. One is requested through defalcare; they do not cross and do not add together.
  • ✅ total = the sum of the three legal forms: 969 of 969, on each of the three long-running events. ✅ On size classes, 969/969 for newly born and for dissolved firms. ✅ The total section = the sum of the 18: 204/204 on legal forms.
  • ⚠️ The "with at least one employee" universe is not a convenient subset. There, the birth of a firm becomes primul_angajat — it took on its first employee — and death becomes fara_angajati — it has none left. They are different events with different names, and cover only 2021-2023. A request that crosses them wrongly gets eveniment_in_alt_univers with the explanation, not an empty response.
  • ⚠️ 2022 is inconsistent at the source, for active firms, on the two headcount indicators — and in two ways at once. The size classes do not sum to the section total: for manufacturing, on employees, the section total is 732,495 while the classes sum to 1,089,681. And the 18 sections do not sum to the economy total: 1,118,908 persons employed and 1,074,409 employees are missing. numar_intreprinderi is fine in 2022, and every other year closes exactly, at every level. We correct nothing — the year and the indicators appear in identitati.anomalie.
  • 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

  • Firm birth and death rates, by branch.
  • How many firms cross the first-employee threshold in a year.
  • The share of sole traders in a branch's firm population.
  • Net firm creation: newly born minus dissolved.

Response structure

FieldTypeDescription
data.univers string The statistical universe the values refer to — the population measured.
data.defalcare string The breakdown applied to the values.
data.unitate string The unit of the values. Read it before plotting or adding them up.
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 array The filters actually applied, as the route understood them — useful when a value was normalised.
data.ani array Years for which values exist.
data.serii[].eveniment string
data.serii[].univers string toate or cu_angajati — different universes, with different events.
data.serii[].defalcare string Which of the two parallel cuts the response carries.
data.serii[].categorie string Category in the source classification.
data.serii[].denumire_categorie string Name of the category, as published by the source.
data.serii[].indicator string The statistical indicator the value refers to.
data.serii[].sectiune string Section of the classification — the broadest level.
data.serii[].denumire_sectiune string
data.serii[].unitate string Unit of measure of the values. Read it before plotting or summing them.
data.serii[].valori object The values of the series, by period.
data.identitati.toleranta string How much deviation is accepted before the identity counts as unclosed — the source rounding, not an error.
data.identitati.nota_paralele string
data.identitati.defalcare.identitate string The identity being checked — which sum must equal which total.
data.identitati.defalcare.nota string A note on how to read the data — a pitfall, a convention or a limit of the source.
data.identitati.defalcare.verificari integer How many combinations were checked.
data.identitati.defalcare.inchise integer How many checks closed within tolerance.
data.identitati.sectiuni.identitate string The identity being checked — which sum must equal which total.
data.identitati.sectiuni.nota string A note on how to read the data — a pitfall, a convention or a limit of the source.
data.identitati.sectiuni.verificari integer How many combinations were checked.
data.identitati.sectiuni.inchise integer How many checks closed within tolerance.
meta.sursa string The official source the data comes from, with its licence where one is required.
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.nota_paralele string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_identitate string How the identity above is checked and what it means when it does not close.
meta.nota_supravietuire string A note on how to read the response: a caveat, a convention or a limit of the source.
data.identitati.anomalie The year and indicators where the source contradicts itself, with the exact figures.
meta.fara_date data is null and this says why. The projection over the INS data is empty for the requested universe. The combination has no series. 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[].cod string The CAEN code the key used stands for, when the series names its activities differently (agricultura = 01) or the key is an aggregate (62-63).
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.

Response examples

GEThttps://oneapi.ro/api/financiar/v1/intreprinderi/demografie?per_pagina=3
{
    "data": {
        "univers": "toate",
        "defalcare": "forma_juridica",
        "unitate": "numar",
        "de_la": 2008,
        "pana_la": 2024,
        "filtre": [],
        "ani": [
            2008,
            2009,
            2010,
            2011,
            2012,
            2013,
            2014,
            2015,
            2016,
            2017,
            2018,
            2019,
            2020,
            2021,
            2022,
            2023,
            2024
        ],
        "serii": [
            {
                "eveniment": "active",
                "univers": "toate",
                "defalcare": "forma_juridica",
                "categorie": "alte_forme",
                "denumire_categorie": "Alte forme juridice",
                "indicator": "numar_intreprinderi",
                "sectiune": "a",
                "denumire_sectiune": "Agricultura, silvicultura si pescuit",
                "unitate": "numar",
                "valori": {
                    "2008": "929",
                    "2009": "892",
                    "2010": "853",
                    "2011": "754",
                    "2012": "781",
                    "2013": "767",
                    "2014": "718",
                    "2015": "699",
                    "2016": "691",
                    "2017": "699",
                    "2018": "726",
                    "2019": "688",
                    "2020": "694",
                    "2021": "742",
                    "2022": "812",
                    "2023": "888",
                    "2024": "924"
                }
            }
        ],
        "identitati": {
            "toleranta": "0.5",
            "nota_paralele": "Cele două defalcări sunt paralele, nu ierarhice: aceeaşi mărime, tăiată o dată după forma juridică şi o dată după clasa de mărime. Nu se încrucişează şi nu se adună între ele.",
            "defalcare": {
                "identitate": "`total` = `societati_comerciale` + `persoane_fizice` + `alte_forme`",
                "nota": "Verificat pe toată proiecţia: 969 din 969 pe fiecare dintre cele trei evenimente lungi.",
                "verificari": 2907,
                "inchise": 2907
            },
            "sectiuni": {
                "identitate": "secţiunea `total` = suma celor optsprezece secţiuni",
                "nota": "Verificat pe toată proiecţia: 204/204 pe forme juridice şi 253/255 pe clase de mărime — cele două rateuri sunt cei doi indicatori de personal în 2022, vezi `anomalie`.",
                "verificari": 612,
                "inchise": 612
            }
        }
    },
    "meta": {
        "sursa": "Institutul Naţional de Statistică — demografia întreprinderilor (TEMPO, familiile INT110, INT111 şi INT113).",
        "acoperire": {
            "de_la": 2008,
            "pana_la": 2024
        },
        "serii_returnate": 684,
        "nota_paralele": "Cele două defalcări sunt paralele, nu ierarhice: aceeaşi mărime, tăiată o dată după forma juridică şi o dată după clasa de mărime. Nu se încrucişează şi nu se adună între ele.",
        "nota_identitate": "Verificat pe acest răspuns: totalul e suma categoriilor în 2907 din 2907 celule.",
        "nota_supravietuire": "Câte dintre firmele nou create rezistă, pe cohorte: /financiar/v1/intreprinderi/supravietuire."
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatMissing or invalid token.
403feature_indisponibilfinanciar.indici is not in the current plan.
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. raspuns_prea_mare — more than 20,000 cells. Plus an event, universe, breakdown, category, indicator, section or year outside the expected shape. caen and grupare sent together, caen_versiune without caen, or a code that is not CAEN-shaped. eveniment_in_alt_univers — the requested event does not exist in the requested universe.
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. raspuns_prea_mare — more than 20,000 cells. Plus an event, universe, breakdown, category, indicator, section or year outside the expected shape. caen and grupare sent together, caen_versiune without caen, or a code that is not CAEN-shaped. eveniment_in_alt_univers — the requested event does not exist in the requested universe.",
        "detalii": {
            "univers": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}