oneapi
Sign in
Financiar v1 / Inflatie

Employees and earnings, by activity and county

How many employees each NACE activity has in each county and how much they earn — annually since 2008, by sex, across 55 territories and 68 activities. 694,836 values.

It complements /castig-salarial, it does not repeat it. That one is monthly and national, without sexes and without counties, and has no employee count; here you get both, but annually.

⚠️ Two of the four measures are averages, not totals — and that changes everything you can do with them. numar_mediu and efectiv_final are people and are additive; castig_net and castig_brut are monthly averages in lei and are not additive, neither across counties nor across sexes. Measured on 2024: on the employee count, country = the sum of the 42 counties closes 204 of 204; on gross earnings, 0 of 204 — the sum of the counties comes out 32.26 times the national average. Across sexes, the male average plus the female average gives 1.98 times the total. The route runs the identities only on the count measures and returns identitati.aplicabile = false with the reason on the others.

✅ Verified across the whole projection, on the employee count: total = male + female 57,315 of 57,315, country = the sum of the counties 2,460 of 2,460, the NACE total = the sum of the 19 sections 2,805 of 2,805, all with zero deviation.

⚠️ industrie is a partial aggregate, not a section. Verified: it covers exactly sections B, C, D and E — 1,327,503 employees in 2024. Anyone adding it alongside the sections counts industry twice.

The NACE dimension has 19 sections and 47 divisions, some merged by the source (02-03). The complete list, with the source's names: /financiar/v1/salariati/activitati.

GET
https://oneapi.ro/api/financiar/v1/salariati

Query parameters

NameTypeDescriptionAccepted values
masuraoptional string | null Optional: numar_mediu (default), efectiv_final, castig_net, castig_brut. numar_mediuefectiv_finalcastig_netcastig_brut
niveloptional string | null Optional: total, agregat, sectiune, diviziune. totalagregatsectiunediviziune
teritoriuoptional string | null Optional, the exact name — a county, a region, a macroregion or TOTAL. max 80 car.
nivel_teritoriuoptional string | null Optional: tara (default), macroregiune, regiune, judet. taramacroregiuneregiunejudet
de_laoptional integer | null Optional, a year, from 2008. 2008 – 2100
pana_laoptional integer | null Optional, a year. 2008 – 2100
caenoptional string | null Optional: any CAEN code — section (C), division (62), group, class (6201) — from any revision. It is brought to the published section, division or range (CAEN Rev.2); what was used is in meta.caen. e.g. 4711
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 — total, industrie (B–E) or the ranges (02-03, 38-39, 59-60, 62-63). Not sent together with caen. e.g. 02-03e.g. 38-39e.g. 59-60
sexlistoptional text Optional: total (default), masculin, feminin. totalmasculinfeminin

How it behaves

  • The number of employees and their average earnings, by CAEN activity, county and sex — annually from 2008 to 2024, across 55 territories and 68 activities. 694,836 values from TEMPO matrices FOM104F, FOM105F, FOM106E and FOM107E.
  • This complements /castig-salarial, it does not repeat it. That one is monthly and national, without sex or county, and carries no employee counts. Here both are present, but annually.
  • What the data shows: in IT (section J), the average gross earning in 2024 is highest in Cluj — 18,737 lei, above Timiş (17,625) and above Bucharest (17,543). IT also employed 249,698 people, of whom 103,374 women.
  • ⚠️ Two of the four measures are averages, not totals — and that changes everything you can do with them. numar_mediu and efectiv_final are people and add up. castig_net and castig_brut are monthly averages in lei and do not add up, neither across counties nor across sexes.
  • The figures show why, brutally. Measured on 2024: on employee counts, country = the sum of the 42 counties closes 204 of 204, and total = male + female 3,495 of 3,495. On gross earnings: 0 of 204 across territories — the sum of counties comes out 32.26 times the national average — and only 60 of 3,495 across sexes, where the male average plus the female average gives 1.98 times the total. The route runs the identities only on count-type measures and returns identitati.aplicabile = false with the reason on the others, instead of false discrepancies.
  • ✅ On employee counts the identities close across the whole projection, with zero deviation: total = male + female 57,315 of 57,315, country = sum of counties 2,460 of 2,460, CAEN total = sum of the 19 sections 2,805 of 2,805.
  • ⚠️ industrie is a partial aggregate, not a section. Verified: it covers exactly sections B, C, D and E — 1,327,503 employees in 2024, to the unit. Adding it beside the sections counts industry twice.
  • The CAEN dimension holds 19 sections and 47 divisions, four of which the source merges into pairs: 02-03, 38-39, 59-60, 62-63. The full list, with source wording, is at /financiar/v1/salariati/activitati.
  • 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

  • The average earning in a given activity and county — a benchmark for a salary offer.
  • The earnings gap between women and men, within the same activity.
  • How many employees a sector holds in a county, as the size of the local labour market.

Response structure

FieldTypeDescription
data.masura string The measure reported — what the value actually counts or sums.
data.denumire string The name, exactly as the source publishes it.
data.natura string numar or medie — decides whether the series can be summed.
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.sex array Sex of the people the value refers to.
data.filtre.nivel_teritoriu string Territorial level of the value (country, region, county, locality).
data.ani array Years for which values exist.
data.serii[].teritoriu string The territory the value refers to.
data.serii[].nivel_teritoriu string Territorial level of the value (country, region, county, locality).
data.serii[].caen string The CAEN (NACE) code of the activity, in the series revision.
data.serii[].nivel string total, agregat, sectiune or diviziune.
data.serii[].denumire string The exact source name, with the code in front.
data.serii[].sex string Sex of the people the value refers to.
data.serii[].unitate string Unit of measure of the values. Read it before plotting or summing them.
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.aplicabile boolean false on average-type measures, with the reason and the figures behind it.
data.identitati.identitate_sexe string
data.identitati.nota string A note on how to read the data — a pitfall, a convention or a limit of the source.
data.identitati.nota_industrie string What the industrial perimeter used here covers.
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_natura 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_industrie string What the industrial perimeter used here covers.
meta.nota_lunar string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_activitati string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.fara_date data is null and this says why. The projection over the INS data is empty. The name does not appear; the full list comes back. 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.

Response examples

GEThttps://oneapi.ro/api/financiar/v1/salariati?per_pagina=3
{
    "data": {
        "masura": "numar_mediu",
        "denumire": "Numărul mediu al salariaţilor",
        "natura": "numar",
        "unitate": "persoane",
        "de_la": 2008,
        "pana_la": 2024,
        "filtre": {
            "sex": [
                "total"
            ],
            "nivel_teritoriu": "tara"
        },
        "ani": [
            2008,
            2009,
            2010,
            2011,
            2012,
            2013,
            2014,
            2015,
            2016,
            2017,
            2018,
            2019,
            2020,
            2021,
            2022,
            2023,
            2024
        ],
        "serii": [
            {
                "teritoriu": "TOTAL",
                "nivel_teritoriu": "tara",
                "caen": "industrie",
                "nivel": "agregat",
                "denumire": "INDUSTRIE",
                "sex": "total",
                "unitate": "persoane",
                "ani_publicati": 17,
                "valori": {
                    "2008": "1605611",
                    "2009": "1371064",
                    "2010": "1237297",
                    "2011": "1259061",
                    "2012": "1295692",
                    "2013": "1285312",
                    "2014": "1302576",
                    "2015": "1334943",
                    "2016": "1352862",
                    "2017": "1400975",
                    "2018": "1409137",
                    "2019": "1398710",
                    "2020": "1316883",
                    "2021": "1312194",
                    "2022": "1312797",
                    "2023": "1333936",
                    "2024": "1327503"
                }
            }
        ],
        "identitati": {
            "aplicabile": true,
            "identitate_sexe": "sexul `total` = `masculin` + `feminin`",
            "nota": "Verificat pe toată proiecţia: pe numărul de salariaţi, `total` = masculin + feminin se închide 57.315 din 57.315, ţara = suma celor 42 de judeţe 2.460 din 2.460, iar totalul CAEN = suma celor 19 secţiuni 2.805 din 2.805.",
            "nota_industrie": "Codul `industrie` e un agregat parţial peste secţiunile B, C, D, E şi nu intră în nicio partiţie."
        }
    },
    "meta": {
        "sursa": "Institutul Naţional de Statistică — salariaţi şi câştig salarial pe activităţi şi judeţe (TEMPO, matricile FOM104F, FOM105F, FOM106E şi FOM107E).",
        "acoperire": {
            "de_la": 2008,
            "pana_la": 2024
        },
        "serii_returnate": 68,
        "nota_natura": "Numărul de salariaţi se însumează; câştigul salarial e o medie şi nu se adună nici peste judeţe, nici peste sexe. Câmpul `natura` o spune pe fiecare răspuns.",
        "nota_identitate": "Verificat pe toată proiecţia: pe numărul de salariaţi, `total` = masculin + feminin se închide 57.315 din 57.315, ţara = suma celor 42 de judeţe 2.460 din 2.460, iar totalul CAEN = suma celor 19 secţiuni 2.805 din 2.805.",
        "nota_industrie": "Codul `industrie` e un agregat peste secţiunile B, C, D şi E, nu o secţiune în sine.",
        "nota_lunar": "Pentru câştigul salarial LUNAR, la nivel naţional, cu serie din 2000: /financiar/v1/castig-salarial.",
        "nota_activitati": "Lista completă a codurilor, cu denumirile de la sursă: /financiar/v1/salariati/activitati."
    }
}

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. prea_multe_serii — beyond 1,500; all 68 activities across all counties exceed the limit on their own. interval_prea_lung — beyond 30 years on a narrow cut and beyond 8 when the response spans several. Plus a measure, level, sex or code outside the expected form. caen and grupare sent together, caen_versiune without caen, or a code that is not CAEN-shaped.
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. prea_multe_serii — beyond 1,500; all 68 activities across all counties exceed the limit on their own. interval_prea_lung — beyond 30 years on a narrow cut and beyond 8 when the response spans several. Plus a measure, level, sex or code outside the expected form. caen and grupare sent together, caen_versiune without caen, or a code that is not CAEN-shaped.",
        "detalii": {
            "masura": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}