oneapi
Sign in
Financiar v1 / Inflatie

Employees by age group and occupation

The number of employees, the gross basic wage and gross earnings realised, across 11 age groups × 9 ISCO-08 major groups × sexes, in the month of October, annually since 2013.

Age is a dimension that appears nowhere else in the module.

⚠️ A wrong total row at source, flagged rather than smoothed over: in 2016, the total by age is 849,821 instead of 4,120,907 — a fifth of the real value, even though all eleven groups are published.

⚠️ The occupational breakdown has gaps: in 2013 the ocupatii_elementare group is missing, and in 2018 all nine are missing on the total age slice. There the identity is skipped, not reported as a failure.

⚠️ The basic wage and earnings realised are averages and are not additive; the identities are run only on the number of employees.

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

Query parameters

NameTypeDescriptionAccepted values
de_laoptional integer | null Optional, a year, from 2013. 2013 – 2100
pana_laoptional integer | null Optional, a year. 2013 – 2100
masuralistoptional text Optional: numar_salariati, salariu_baza, venit_realizat. numar_salariatisalariu_bazavenit_realizat
sexlistoptional text Optional: total, masculin, feminin. totalmasculinfeminin
varstalistoptional text Optional: 15_19 … 60_64, 65_plus, total. e.g. 15_19
ocupatielistoptional text Optional, ISCO-08 slugs comma-separated, plus total. totalconducatorispecialistitehnicienifunctionariserviciiagriculturamuncitori_calificatioperatoriocupatii_elementare

How it behaves

  • The number of full-time employees paid for the whole month of October, the gross base wage and the gross earnings realised — by 11 age groups × 9 ISCO-08 major groups × sex, annually from 2013. 11,649 values, from TEMPO matrix FOM121B.
  • Age is a dimension that appears nowhere else in the module. For the same ISCO-08 groups without age but with the earnings structure: /financiar/v1/castiguri/structura.
  • ⚠️ salariu_baza and venit_realizat are averages and add up on no dimension. The identities run only on numar_salariati; the money series carry este_medie.
  • ✅ total = masculin + feminin, on the headcount: 1,292 of 1,292.
  • ⚠️ The identity bound is relative, 0.01%, not absolute: the source suppresses small cells for confidentiality, so the components sum slightly below the total. Measured, the actual maximum gap is 107 persons out of ~4.1 million — 0.0026%.
  • ⚠️ One wrong total row at the source, in 2016: the age total is 849,821 instead of 4,120,907 — a fifth of the real value, even though all eleven age groups are published. We do not correct it; the identity surfaces it, with the year named in ani_care_nu_se_inchid.
  • ⚠️ The occupation detail has gaps: in 2013 the ocupatii_elementare group is missing entirely (hence a 531,851-person gap against the total), and in 2018 all nine are missing on the total age slice. There the identity is skipped rather than reported as a failure — it would be a false one.
  • ⚠️ The year 2014 is missing entirely from the published series.

What it is for

  • The wage curve by age, within the same occupation.
  • The earnings gap between women and men, at the same age and occupation.
  • The age structure of an ISCO major group.

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 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[].masura string The measure reported — what the value actually counts or sums.
data.serii[].unitate string Unit of measure of the values. Read it before plotting or summing them.
data.serii[].sex string Sex of the people the value refers to.
data.serii[].varsta string
data.serii[].denumire_varsta string
data.serii[].ocupatie string The major ISCO-08 group, 1-9, or total.
data.serii[].denumire_ocupatie string
data.serii[].valori object The values of the series, by period.
data.identitati.toleranta_relativa string The relative bound, chosen because the source suppresses small cells.
data.identitati.nota_toleranta string Where the tolerance comes from and why it is not zero.
data.identitati.nota_medii string How to read the averages in the response and when the median says something else.
data.identitati.varsta.identitate string The identity being checked — which sum must equal which total.
data.identitati.varsta.nota string A note on how to read the data — a pitfall, a convention or a limit of the source.
data.identitati.varsta.verificari integer How many combinations were checked.
data.identitati.varsta.inchise integer How many checks closed within tolerance.
data.identitati.varsta.ani_care_nu_se_inchid array The years where the identity does not hold — in this series, 2016.
data.identitati.varsta.unde.an integer The year the value refers to.
data.identitati.varsta.unde.serie string
data.identitati.varsta.unde.total string
data.identitati.varsta.unde.suma_componentelor string
data.identitati.ocupatie.identitate string The identity being checked — which sum must equal which total.
data.identitati.ocupatie.nota string A note on how to read the data — a pitfall, a convention or a limit of the source.
data.identitati.ocupatie.verificari integer How many combinations were checked.
data.identitati.ocupatie.inchise integer How many checks closed within tolerance.
data.identitati.sex.identitate string The identity being checked — which sum must equal which total.
data.identitati.sex.nota string A note on how to read the data — a pitfall, a convention or a limit of the source.
data.identitati.sex.verificari integer How many combinations were checked.
data.identitati.sex.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_toleranta string Where the tolerance comes from and why it is not zero.
meta.nota_medii string How to read the averages in the response and when the median says something else.
meta.nota_2014 string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_anomalii string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_ocupatii string A note on how to read the response: a caveat, a convention or a limit of the source.
data.serii[].este_medie Present on the base wage and realised earnings: they do not add up.
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.

Response examples

GEThttps://oneapi.ro/api/financiar/v1/salariati/varste
{
    "data": {
        "de_la": 2013,
        "pana_la": 2024,
        "filtre": [],
        "ani": [
            2013,
            2015,
            2016,
            2017,
            2018,
            2019,
            2020,
            2021,
            2022,
            2023,
            2024
        ],
        "serii": [
            {
                "masura": "numar_salariati",
                "unitate": "Numar persoane",
                "sex": "feminin",
                "varsta": "15_19",
                "denumire_varsta": "15-19 ani",
                "ocupatie": "agricultura",
                "denumire_ocupatie": "Lucratori calificati in agricultura, silvicultura si pescuit",
                "valori": {
                    "2013": null,
                    "2015": "10",
                    "2016": null,
                    "2017": null,
                    "2018": null,
                    "2019": "15",
                    "2020": null,
                    "2021": "10",
                    "2022": "11",
                    "2023": "10",
                    "2024": null
                }
            }
        ],
        "identitati": {
            "toleranta_relativa": "0.0001",
            "nota_toleranta": "Pragul e relativ (0,01%): sursa suprimă celulele mici din motive de confidenţialitate, aşa că suma componentelor iese cu puţin sub total. Abaterea reală maximă e 107 persoane din ~4,1 milioane.",
            "nota_medii": "⚠️ `salariu_baza` şi `venit_realizat` sunt medii şi nu se adună pe nicio dimensiune; identităţile se rulează doar pe `numar_salariati`.",
            "varsta": {
                "identitate": "`total` = suma celor unsprezece grupe de vârstă",
                "nota": "⚠️ În 2016 sursa publică un rând `total` vizibil greşit: 849.821 în loc de 4.120.907 — o cincime din valoarea reală, cu toate cele unsprezece grupe de vârstă prezente. Nu îl corectăm, îl semnalăm; în restul anilor identitatea se închide.",
                "verificari": 290,
                "inchise": 262,
                "ani_care_nu_se_inchid": [
                    2016
                ],
                "unde": {
                    "an": 2016,
                    "serie": "numar_salariati|agricultura|total",
                    "total": "3901",
                    "suma_componentelor": "14502.00"
                }
            },
            "ocupatie": {
                "identitate": "`total` = suma celor nouă grupe majore ISCO-08",
                "nota": "⚠️ Identitatea se sare acolo unde sursa nu publică toate cele nouă grupe: în 2013 lipseşte `ocupatii_elementare` (de aici o diferenţă de 531.851 de persoane faţă de total), iar în 2018 lipsesc toate nouă pe felia cu vârsta `total`. Se sare, nu se raportează ca eşec.",
                "verificari": 347,
                "inchise": 347
            },
            "sex": {
                "identitate": "`total` = `masculin` + `feminin`",
                "nota": "Verificat pe toată proiecţia, doar pe numărul de salariaţi: 1.292 din 1.292.",
                "verificari": 1292,
                "inchise": 1292
            }
        }
    },
    "meta": {
        "sursa": "Institutul Naţional de Statistică — salariaţii, salariul de bază şi venitul realizat pe vârste şi ocupaţii (TEMPO, matricea FOM121B).",
        "acoperire": {
            "de_la": 2013,
            "pana_la": 2024
        },
        "serii_returnate": 1080,
        "nota_toleranta": "Pragul e relativ (0,01%): sursa suprimă celulele mici din motive de confidenţialitate, aşa că suma componentelor iese cu puţin sub total. Abaterea reală maximă e 107 persoane din ~4,1 milioane.",
        "nota_medii": "⚠️ `salariu_baza` şi `venit_realizat` sunt medii şi nu se adună pe nicio dimensiune; identităţile se rulează doar pe `numar_salariati`.",
        "nota_2014": "Anul 2014 lipseşte cu totul din seria publicată de sursă.",
        "nota_anomalii": "Anul 2016 are un rând `total` pe vârstă vizibil greşit; anii 2013 şi 2018 au goluri în detalierea pe ocupaţii. Se văd în `identitati`.",
        "nota_ocupatii": "Aceleaşi grupe ISCO-08, dar pe activităţi: /financiar/v1/salariati/ocupatii-activitati şi /financiar/v1/castiguri/structura."
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatMissing or invalid token.
403feature_indisponibilfinanciar.indici is not in the current plan.
422validareA measure, sex, age, occupation or year outside the expected shape.
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": "A measure, sex, age, occupation or year outside the expected shape.",
        "detalii": {
            "de_la": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}