Financiar v1 / Inflatie
Labour productivity
Productivity per person employed and per hour worked, by branch, from 1995 to 2025 — one of the longest series in the module.
⚠️ Productivity per person × employment gives gross value added, NOT gross domestic product. Anyone multiplying by GDP is off by some 9%. The route checks the relation on every request.
GET
https://oneapi.ro/api/financiar/v1/productivitate
Query parameters
NameTypeDescriptionAccepted values
clasificareoptional
string | null
Optional:
rev2 (default, 1995-2025) or rev1 (1999-2008).
rev1rev2
de_laoptional
integer | null
Optional, a year, from 1995.
1995 – 2100
pana_laoptional
integer | null
Optional, a year.
1995 – 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
masuralistoptional
text
Optional:
pe_persoana, pe_ora.
pe_persoanape_ora
caenlistoptional
text
Optional, codes separated by commas: any CAEN code — section (
C), division (62), group, class (6201) — from any revision. It is brought to in rev2 the A10 branch that contains it (C → industrie); in rev1 the published section, subsection or division; what was used is in meta.caen.
e.g. R
gruparelistoptional
text
Optional, separated by commas: the source aggregates that are not CAEN codes —
total, celelalte (Rev.1) or the A10 sum branches requested directly. Not sent together with caen.
e.g. administratie_educatie_sanatatee.g. comert_transport_horecae.g. industrie
How it behaves
- Labour productivity per employed person and per hour worked, by branch — 1,322 values, from TEMPO matrices
CON110A,CON110C,CON110EandCON110F. The Rev.2 series covers 1995-2025, 31 years — one of the longest in the module; the Rev.1 one only 1999-2008. - ⚠️ Productivity per person × employed population gives gross value added, NOT gross domestic product. Multiplying by GDP is off by some 9%. In 2023: 171,042.4 lei per person × 8,493.2 thousand = 1,452,697.3, against gross value added of 1,452,697.1 at
/financiar/v1/conturi-integrate. - The relation is checked on every request, but it is declared for what it is: a concordance between three separately published matrices, not an accounting identity. Measured across all 31 years, the maximum relative gap is 0.004%; in one single year (2017) it exceeds the bound implied by the published decimals, which points to a revision rather than an error. The tolerance is therefore relative, not absolute.
- Hourly productivity times hours worked gives the same thing with far less precision: it is published to one decimal in lei (95.7 in 2023), and multiplied by 15 million hours the rounding alone amounts to a few hundred million.
- ⚠️ Rev.1 and Rev.2 do not join: different nomenclatures, only partly overlapping periods. Rev.1 additionally mixes sections, subsections and divisions in the same nomenclature.
- The denominator — employed population and hours worked — is at
/financiar/v1/ocupare-conturi, with the same branch slugs. - Activity is requested the same way across the platform.
caentakes 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.caenstates the requested code, the one used and whether it was climbed or converted.grupareis for the source aggregates that are not CAEN codes.
What it is for
- The productivity growth of a branch over 30 years.
- Comparing per-person with per-hour productivity — it shows how much is hours and how much is efficiency.
- Checking your own value-added computation, starting from employment.
Response structure
FieldTypeDescription
data.clasificare
string
The classification the values are broken down by.
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
lei / persoana ocupata or lei / ora lucrata — two different measures that do not compare directly.
data.serii[].clasificare
string
The classification the values are broken down by.
data.serii[].activitate
string
The economic activity the value refers to.
data.serii[].denumire_activitate
string
data.serii[].nivel_activitate
string
In Rev.1:
sectiune, subsectiune, diviziune, rest. They do not add together.
data.serii[].valori
object
The values of the series, by period.
data.identitati.identitate
string
The identity being checked — which sum must equal which total.
data.identitati.nota
string
A note on how to read the data — a pitfall, a convention or a limit of the source.
data.identitati.toleranta_relativa
string
The bound is relative, because the three quantities come from separately published matrices.
data.identitati.verificari
integer
How many combinations were checked.
data.identitati.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_vab
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_ocupare
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 for the requested classification. The list is at /ocupare-conturi/activitati. 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/productivitate?per_pagina=3
{
"data": {
"clasificare": "rev2",
"de_la": 1995,
"pana_la": 2025,
"filtre": [],
"ani": [
1995,
1996,
1997,
1998,
1999,
2000,
2001,
2002,
2003,
2004,
2005,
2006,
2007,
2008,
2009,
2010,
2011,
2012,
2013,
2014,
2015,
2016,
2017,
2018,
2019,
2020,
2021,
2022,
2023,
2024,
2025
],
"serii": [
{
"masura": "pe_ora",
"unitate": "lei / ora lucrata",
"clasificare": "rev2",
"activitate": "administratie_educatie_sanatate",
"denumire_activitate": "ADMINISTRATIE PUBLICA SI APARARE; ASIGURARI SOCIALE DIN SISTEMUL PUBLIC; INVATAMANT; SANATATE SI ASISTENTA SOCIALA",
"nivel_activitate": "ramura",
"valori": {
"1995": "0.3",
"1996": "0.4",
"1997": "1",
"1998": "1.5",
"1999": "3.1",
"2000": "5.1",
"2001": "7",
"2002": "9.2",
"2003": "11.2",
"2004": "9.8",
"2005": "13",
"2006": "14.7",
"2007": "16.7",
"2008": "22.8",
"2009": "21.3",
"2010": "28.4",
"2011": "26.5",
"2012": "30",
"2013": "33.3",
"2014": "39.6",
"2015": "32.6",
"2016": "39.6",
"2017": "48.7",
"2018": "59.7",
"2019": "68.1",
"2020": "74.5",
"2021": "71.1",
"2022": "76.2",
"2023": "94.4",
"2024": "102.4",
"2025": "103.5"
}
}
],
"identitati": {
"identitate": "`pe_persoana` × populaţia ocupată = valoarea adăugată brută",
"nota": "⚠️ E valoarea adăugată brută, NU produsul intern brut — cine înmulţeşte cu PIB-ul greşeşte cu vreo 9%. Nu e o identitate contabilă, ci o concordanţă între trei matrici publicate separat: verificată pe toţi cei 31 de ani, cu abaterea relativă maximă de 0,004%. În 2023: 171.042,4 lei/persoană × 8.493,2 mii = 1.452.697,3, faţă de 1.452.697,1 la /financiar/v1/conturi-integrate.",
"toleranta_relativa": "0.0001",
"verificari": 31,
"inchise": 31
}
},
"meta": {
"sursa": "Institutul Naţional de Statistică — productivitatea muncii pe persoană ocupată şi pe oră (TEMPO, matricile CON110A, CON110C, CON110E şi CON110F).",
"acoperire": {
"de_la": 1995,
"pana_la": 2025
},
"serii_returnate": 22,
"nota_vab": "`pe_persoana` × populaţia ocupată = valoarea adăugată brută",
"nota_identitate": "Verificat pe acest răspuns: productivitatea înmulţită cu ocuparea dă valoarea adăugată brută în 31 din 31 ani.",
"nota_ocupare": "Numitorul acestei productivităţi — populaţia ocupată şi orele lucrate — e la /financiar/v1/ocupare-conturi."
}
}
GEThttps://oneapi.ro/api/financiar/v1/productivitate?per_pagina=3&clasificare=rev1
{
"data": {
"clasificare": "rev1",
"de_la": 1999,
"pana_la": 2008,
"filtre": [],
"ani": [
1999,
2000,
2001,
2002,
2003,
2004,
2005,
2006,
2007,
2008
],
"serii": [
{
"masura": "pe_ora",
"unitate": "lei / ora lucrata",
"clasificare": "rev1",
"activitate": "05",
"denumire_activitate": "05 Pescuitul, piscicultura si serviciile anexe",
"nivel_activitate": "diviziune",
"valori": {
"1999": "0.5",
"2000": "0.4",
"2001": "0.9",
"2002": "2.8",
"2003": "1.1",
"2004": "3.5",
"2005": "1.8",
"2006": "2.7",
"2007": "4.1",
"2008": "8.6"
}
}
],
"identitati": []
},
"meta": {
"sursa": "Institutul Naţional de Statistică — productivitatea muncii pe persoană ocupată şi pe oră (TEMPO, matricile CON110A, CON110C, CON110E şi CON110F).",
"acoperire": {
"de_la": 1999,
"pana_la": 2008
},
"serii_returnate": 64,
"nota_ocupare": "Numitorul acestei productivităţi — populaţia ocupată şi orele lucrate — e la /financiar/v1/ocupare-conturi.",
"nota_rev1": "CAEN Rev.1 acoperă doar 1999-2008 şi amestecă niveluri: activităţile nu se adună între ele."
}
}
GEThttps://oneapi.ro/api/financiar/v1/productivitate?caen=R&de_la=2020
{
"data": {
"clasificare": "rev2",
"de_la": 2020,
"pana_la": 2025,
"filtre": {
"activitate": [
"spectacole_alte_servicii"
]
},
"ani": [
2020,
2021,
2022,
2023,
2024,
2025
],
"serii": [
{
"masura": "pe_ora",
"unitate": "lei / ora lucrata",
"clasificare": "rev2",
"activitate": "spectacole_alte_servicii",
"denumire_activitate": "ACTIVITATI DE SPECTACOLE, CULTURALE SI RECREATIVE; REPARATII DE PRODUSE DE UZ CASNIC SI ALTE SERVICII",
"nivel_activitate": "ramura",
"valori": {
"2020": "65.5",
"2021": "74.9",
"2022": "90.7",
"2023": "124.5",
"2024": "155.8",
"2025": "163"
}
}
],
"identitati": []
},
"meta": {
"sursa": "Institutul Naţional de Statistică — productivitatea muncii pe persoană ocupată şi pe oră (TEMPO, matricile CON110A, CON110C, CON110E şi CON110F).",
"acoperire": {
"de_la": 1995,
"pana_la": 2025
},
"serii_returnate": 2,
"nota_ocupare": "Numitorul acestei productivităţi — populaţia ocupată şi orele lucrate — e la /financiar/v1/ocupare-conturi.",
"caen": [
{
"cerut": "R",
"versiune_cerut": "Rev.2",
"folosit": "spectacole_alte_servicii",
"cod": "R",
"nivel": "agregat",
"denumire": "ACTIVITĂŢI DE SPECTACOLE, CULTURALE ŞI RECREATIVE",
"versiune_serie": "Rev.2",
"conversie": false,
"urcat": false
}
]
}
}
GEThttps://oneapi.ro/api/financiar/v1/productivitate?de_la=2024-06-15
{
"data": {
"clasificare": "rev2",
"de_la": 2024,
"pana_la": 2025,
"filtre": [],
"ani": [
2024,
2025
],
"serii": [
{
"masura": "pe_ora",
"unitate": "lei / ora lucrata",
"clasificare": "rev2",
"activitate": "administratie_educatie_sanatate",
"denumire_activitate": "ADMINISTRATIE PUBLICA SI APARARE; ASIGURARI SOCIALE DIN SISTEMUL PUBLIC; INVATAMANT; SANATATE SI ASISTENTA SOCIALA",
"nivel_activitate": "ramura",
"valori": {
"2024": "102.4",
"2025": "103.5"
}
}
],
"identitati": {
"identitate": "`pe_persoana` × populaţia ocupată = valoarea adăugată brută",
"nota": "⚠️ E valoarea adăugată brută, NU produsul intern brut — cine înmulţeşte cu PIB-ul greşeşte cu vreo 9%. Nu e o identitate contabilă, ci o concordanţă între trei matrici publicate separat: verificată pe toţi cei 31 de ani, cu abaterea relativă maximă de 0,004%. În 2023: 171.042,4 lei/persoană × 8.493,2 mii = 1.452.697,3, faţă de 1.452.697,1 la /financiar/v1/conturi-integrate.",
"toleranta_relativa": "0.0001",
"verificari": 2,
"inchise": 2
}
},
"meta": {
"sursa": "Institutul Naţional de Statistică — productivitatea muncii pe persoană ocupată şi pe oră (TEMPO, matricile CON110A, CON110C, CON110E şi CON110F).",
"acoperire": {
"de_la": 1995,
"pana_la": 2025
},
"serii_returnate": 22,
"nota_vab": "`pe_persoana` × populaţia ocupată = valoarea adăugată brută",
"nota_identitate": "Verificat pe acest răspuns: productivitatea înmulţită cu ocuparea dă valoarea adăugată brută în 2 din 2 ani.",
"nota_ocupare": "Numitorul acestei productivităţi — populaţia ocupată şi orele lucrate — e la /financiar/v1/ocupare-conturi."
}
}
Error codes
| Code | Slug | When it occurs |
|---|---|---|
| 401 | neautentificat | Missing or invalid token. |
| 403 | feature_indisponibil | financiar.indici is not in the current plan. |
| 404 | caen_nepublicat | Neither 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. |
| 422 | caen_inexistent | The code in caen exists in no CAEN revision; it is a bad FILTER value, hence 422, not 404. A classification, measure, activity or year outside the expected form. caen and grupare sent together, caen_versiune without caen, or a code that is not CAEN-shaped. |
| 429 | cota_depasita | The 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. A classification, measure, activity or year outside the expected form. caen and grupare sent together, caen_versiune without caen, or a code that is not CAEN-shaped.",
"detalii": {
"clasificare": [
"The value sent does not satisfy the parameter rule."
]
}
}
}