The input-output matrix
Who consumes what: the (branch, product) cell says how much of that product that branch consumes as an input. The balance at /financiar/v1/intrari-iesiri/echilibru says how much intermediate consumption a product has in total; here you see who exactly consumes it.
The rows are of three kinds: 88 products, 3 aggregates of the production account and 9 rows of the generation of income account. At comparable prices those nine are missing — the generation of income account is not computed in volume.
⚠️ alte_subventii_exploatare is published positive and is SUBTRACTED from value added — the opposite of the subsidies on products in the balance table, which are negative and are added.
⚠️ The split of gross operating surplus from mixed income exists only from 2010. Before that, the source publishes only the combined row.
Query parameters
curente (default) or comparabile. At comparable prices the generation-of-income rows are absent.
curentecomparabile
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
C), division (62), group, class (6201) — from any revision. It is brought to its division (CAEN Rev.2). Without it total is returned; what was used is in meta.caen.
e.g. 62
total. Not sent together with caen.
e.g. total
produs, agregat, exploatare.
produsagregatexploatare
How it behaves
- The input-output matrix proper (ESA 2010, NACE Rev.2) — 484,872 values from TEMPO matrices
CON111DandCON111H, the largest projection in the module. 89 branch columns (88 divisions plustotal) × 100 rows at current prices, 1995-2023, and × 91 rows at comparable prices, 1996-2023. - The cell (branch, product row) says how much of that product the branch consumes as an input.
/financiar/v1/intrari-iesiri/echilibrusays how much intermediate consumption a product has in total; this route shows who exactly consumes it. It is the only structure in the module that links branches to each other. In 2023 the largest input of the food industry (10) is agriculture, at 40,294.4 million, followed by its own products at 33,281.3. - The rows are of three kinds, marked in
tip: 88 products, 3 aggregates of the production account —consum_intermediar,productie,valoare_adaugata_bruta— and 9 rows of the generation-of-income account: compensation of employees with its three components, other taxes on production, other subsidies on production, gross operating surplus, mixed income and the sum of the last two. At comparable prices the nine are absent — the generation-of-income account is not computed in volume, and the route says so outright instead of returning an empty response. - ⚠️
alte_subventii_exploatareis published POSITIVE and is SUBTRACTED from value added. That is the opposite of the product subsidies in/financiar/v1/intrari-iesiri/echilibru, which are negative and are added — the same word, two signs, in the same table. Exactly one cell of 2,581 carries a negative sign, and that one is −0.1. The series flag it withse_scade. - ⚠️ The split between gross operating surplus and mixed income exists only from 2010. The break is clean: from 2010 onward the identity
excedent_plus_venit_mixt= surplus + mixed income closes 1,246 of 1,246; before that the source publishes only the combined row, and the two separate ones are zero in 86 of 89 branches, year after year. On a request covering only earlier years the route returns the identity withverificata: falseand the reason spelled out, not a false check. - Six identities are checked on every request.
consum_intermediar= the sum of the 88 product rows — 2,581 of 2,581 at current prices and 2,492 of 2,492 at comparable prices; that is the central identity, a branch column summed over products.valoare_adaugata_bruta=productie−consum_intermediar, the only identity in the whole module that is a true subtraction, likewise 2,581/2,581. The generation-of-income identity.remunerare_salariati= wages + actual contributions + imputed contributions. The surplus split, from 2010. And thetotalcolumn = the sum of the 88 branches — 2,900 of 2,900. - Two of them are computed from the database rather than the response: the sum of the 88 products and the sum of the 88 branches. Otherwise they could never be checked on a filtered request, and those are precisely the ones that matter.
- ✅ And a check across the two routes of the family: intermediate consumption by product from the matrix equals
consum_intermediarin the balance — 2,523 of 2,523, maximum gap 0.5. The matrix and the balance say the same thing. - ⚠️ Zero is information here, not an empty cell: it means the branch consumes none of that product. 43% of the cells are zero and stay in the response — unlike
/financiar/v1/conturi-integrate, where zero marks a row the source never fills. - ⚠️ One quirk of the source, fixed in the projection: the row "16 Prelucrarea lemnului" is written with a double space at current prices and a single one at comparable prices. Without normalising whitespace the two bases would not land on the same row. The tolerances are derived as in the balance route: one decimal through 2017, rounding to whole millions after.
- 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
- A branch's supply chain: which products its inputs come from.
- How much of a product's output goes to a particular branch.
- The structure of a branch's value added — wages, taxes, surplus.
- Intermediate consumption intensity: how much a branch consumes to produce one leu.
Response structure
produs, agregat or exploatare — three kinds of row that do not mix.
alte_subventii_exploatare, the only row that is subtracted.
false when the request covers only years before 2010, with the reason spelled out.
data is null and this says why. The projection over the INS data is empty for the requested base. The nomenclature is at /intrari-iesiri/nomenclator. The combination has no series on the requested base; the usual case is the generation-of-income account at comparable prices. As on the other series.
fara_date is prose and may be rephrased, this is not.
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.
caen_versiune, otherwise the first it exists in.
02-03).
sectiune, subsectiune, diviziune, grupa, clasa or agregat.
true when the code was translated from one revision to another through the official INS correspondence.
true when the series does not publish the requested code and a higher level was used.
Response examples
{
"data": {
"baza": "curente",
"descriere_baza": "Preţuri curente — valorile anului, aşa cum au fost",
"unitate": "milioane lei",
"de_la": 1995,
"pana_la": 2023,
"filtre": {
"ramura": [
"total"
]
},
"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
],
"serii": [
{
"ramura": "total",
"denumire_ramura": "Total",
"rand": "consum_intermediar",
"denumire_rand": "Consumul intermediar al ramurilor",
"tip": "agregat",
"unitate": "milioane lei",
"ani_publicati": 29,
"valori": {
"1995": "8786.9",
"1996": "14516.2",
"1997": "30515.7",
"1998": "37971.7",
"1999": "59456.2",
"2000": "83905.3",
"2001": "122329.2",
"2002": "157919.4",
"2003": "205016",
"2004": "260087.3",
"2005": "289488.9",
"2006": "348489.3",
"2007": "406554.6",
"2008": "516214.7",
"2009": "509447.3",
"2010": "583600.7",
"2011": "658075",
"2012": "698265.2",
"2013": "721344",
"2014": "750897.6",
"2015": "765697.4",
"2016": "773731.9",
"2017": "844017.9",
"2018": "942850.9",
"2019": "1028725.4",
"2020": "989185.7",
"2021": "1165499.6",
"2022": "1481933.4",
"2023": "1545470.8"
}
}
],
"identitati": {
"nota_toleranta": "Toleranţa e derivată din an: sursa publică o zecimală până în 2017 şi rotunjeşte la milionul întreg după, iar pragul creşte cu numărul de termeni adunaţi.",
"consum_intermediar": {
"identitate": "`consum_intermediar` = suma celor 88 de rânduri de produs",
"nota": "Identitatea centrală a matricei: coloana unei ramuri, adunată pe produse, dă exact ce consumă ramura. Verificat pe toată proiecţia: 2.581 din 2.581 la preţuri curente şi 2.492 din 2.492 la comparabile. Suma se calculează din bază, ca să poată fi verificată şi când răspunsul nu poartă toate cele 88 de rânduri.",
"verificari": 29,
"inchise": 29
},
"valoare_adaugata": {
"identitate": "`valoare_adaugata_bruta` = `productie` − `consum_intermediar`",
"nota": "Singura identitate din tot modulul care e o scădere adevărată. Verificat pe toată proiecţia: 2.581 din 2.581 la preţuri curente şi 2.492 din 2.492 la comparabile.",
"verificari": 29,
"inchise": 29
},
"exploatare": {
"identitate": "`valoare_adaugata_bruta` = `remunerare_salariati` + `alte_impozite_productie` + `excedent_plus_venit_mixt` − `alte_subventii_exploatare`",
"nota": "Singura identitate din tabel în care o subvenţie se SCADE: `alte_subventii_exploatare` e publicată pozitiv, spre deosebire de subvenţiile pe produs din /financiar/v1/intrari-iesiri/echilibru, care sunt negative şi se adună.",
"verificari": 29,
"inchise": 29
},
"remunerare": {
"identitate": "`remunerare_salariati` = `salarii_brute` + `cotizatii_efective` + `cotizatii_imputate`",
"verificari": 29,
"inchise": 29
},
"excedent": {
"identitate": "`excedent_plus_venit_mixt` = `excedent_brut_exploatare` + `venit_mixt`",
"verificari": 14,
"inchise": 14,
"nota": "Defalcarea există abia din 2010; verificarea se face doar pe anii de la 2010 încoace — 1.246 din 1.246 pe toată proiecţia. Din răspunsul acesta, 15 ani sunt dinainte şi au fost lăsaţi afară din verificare."
},
"total": {
"identitate": "coloana `total` = suma celor 88 de ramuri",
"nota": "Verificat pe toată proiecţia: 2.900 din 2.900. Suma se calculează din bază, nu din răspuns.",
"verificari": 2900,
"inchise": 2900
}
}
},
"meta": {
"sursa": "Institutul Naţional de Statistică — tabelul intrări-ieşiri, conturile de producţie şi de exploatare pe ramuri (TEMPO, matricile CON111D şi CON111H).",
"acoperire": {
"de_la": 1995,
"pana_la": 2023
},
"serii_returnate": 100,
"nota_implicit": "Fără `caen`, răspunsul se opreşte la coloana `total`. Matricea întreagă are 8.900 de celule pe an.",
"nota_zero": "Zeroul e informaţie aici: înseamnă că ramura nu consumă deloc produsul acela. 43% din celule sunt zero şi rămân în răspuns.",
"nota_semn": "`alte_subventii_exploatare` e publicată pozitiv şi se SCADE din valoarea adăugată — invers decât subvenţiile pe produs din /financiar/v1/intrari-iesiri/echilibru.",
"nota_identitate": "Verificat pe acest răspuns: consumul intermediar al ramurii e suma celor 88 de produse în 29 din 29 celule.",
"nota_echilibru": "Consumul intermediar pe produs de aici e acelaşi cu cel din /financiar/v1/intrari-iesiri/echilibru — verificat 2.523 din 2.523."
}
}
{
"data": {
"baza": "curente",
"descriere_baza": "Preţuri curente — valorile anului, aşa cum au fost",
"unitate": "milioane lei",
"de_la": 2020,
"pana_la": 2023,
"filtre": {
"ramura": [
"62"
]
},
"ani": [
2020,
2021,
2022,
2023
],
"serii": [
{
"ramura": "62",
"denumire_ramura": "Activitati de servicii in tehnologia informatiei",
"rand": "consum_intermediar",
"denumire_rand": "Consumul intermediar al ramurilor",
"tip": "agregat",
"unitate": "milioane lei",
"ani_publicati": 4,
"valori": {
"2020": "16851.2",
"2021": "20736.4",
"2022": "28385.2",
"2023": "33086.1"
}
}
],
"identitati": {
"nota_toleranta": "Toleranţa e derivată din an: sursa publică o zecimală până în 2017 şi rotunjeşte la milionul întreg după, iar pragul creşte cu numărul de termeni adunaţi.",
"consum_intermediar": {
"identitate": "`consum_intermediar` = suma celor 88 de rânduri de produs",
"nota": "Identitatea centrală a matricei: coloana unei ramuri, adunată pe produse, dă exact ce consumă ramura. Verificat pe toată proiecţia: 2.581 din 2.581 la preţuri curente şi 2.492 din 2.492 la comparabile. Suma se calculează din bază, ca să poată fi verificată şi când răspunsul nu poartă toate cele 88 de rânduri.",
"verificari": 4,
"inchise": 4
},
"valoare_adaugata": {
"identitate": "`valoare_adaugata_bruta` = `productie` − `consum_intermediar`",
"nota": "Singura identitate din tot modulul care e o scădere adevărată. Verificat pe toată proiecţia: 2.581 din 2.581 la preţuri curente şi 2.492 din 2.492 la comparabile.",
"verificari": 4,
"inchise": 4
},
"exploatare": {
"identitate": "`valoare_adaugata_bruta` = `remunerare_salariati` + `alte_impozite_productie` + `excedent_plus_venit_mixt` − `alte_subventii_exploatare`",
"nota": "Singura identitate din tabel în care o subvenţie se SCADE: `alte_subventii_exploatare` e publicată pozitiv, spre deosebire de subvenţiile pe produs din /financiar/v1/intrari-iesiri/echilibru, care sunt negative şi se adună.",
"verificari": 4,
"inchise": 4
},
"remunerare": {
"identitate": "`remunerare_salariati` = `salarii_brute` + `cotizatii_efective` + `cotizatii_imputate`",
"verificari": 4,
"inchise": 4
},
"excedent": {
"identitate": "`excedent_plus_venit_mixt` = `excedent_brut_exploatare` + `venit_mixt`",
"verificari": 4,
"inchise": 4,
"nota": "Defalcarea există abia din 2010; verificarea se face doar pe anii de la 2010 încoace — 1.246 din 1.246 pe toată proiecţia."
}
}
},
"meta": {
"sursa": "Institutul Naţional de Statistică — tabelul intrări-ieşiri, conturile de producţie şi de exploatare pe ramuri (TEMPO, matricile CON111D şi CON111H).",
"acoperire": {
"de_la": 1995,
"pana_la": 2023
},
"serii_returnate": 100,
"nota_zero": "Zeroul e informaţie aici: înseamnă că ramura nu consumă deloc produsul acela. 43% din celule sunt zero şi rămân în răspuns.",
"nota_semn": "`alte_subventii_exploatare` e publicată pozitiv şi se SCADE din valoarea adăugată — invers decât subvenţiile pe produs din /financiar/v1/intrari-iesiri/echilibru.",
"nota_identitate": "Verificat pe acest răspuns: consumul intermediar al ramurii e suma celor 88 de produse în 4 din 4 celule.",
"nota_echilibru": "Consumul intermediar pe produs de aici e acelaşi cu cel din /financiar/v1/intrari-iesiri/echilibru — verificat 2.523 din 2.523.",
"caen": [
{
"cerut": "62",
"versiune_cerut": "Rev.2",
"folosit": "62",
"nivel": "diviziune",
"denumire": "Activități de servicii în tehnologia informației",
"versiune_serie": "Rev.2",
"conversie": false,
"urcat": false
}
]
}
}
{
"data": null,
"meta": {
"de_la": 2024,
"pana_la": null,
"baza": "curente",
"acoperire": {
"de_la": 1995,
"pana_la": 2023
},
"fara_date": "Intervalul cerut e în întregime în afara acoperirii (1995 → 2023) pe baza [curente].",
"fara_date_cod": "in_afara_acoperirii"
}
}
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. raspuns_prea_mare — the request would return more than 20,000 cells; the full matrix holds 8,900 series. Plus a base, branch, row, kind 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. raspuns_prea_mare — the request would return more than 20,000 cells; the full matrix holds 8,900 series. Plus a base, branch, row, kind or year outside the expected form. caen and grupare sent together, caen_versiune without caen, or a code that is not CAEN-shaped.",
"detalii": {
"baza": [
"The value sent does not satisfy the parameter rule."
]
}
}
}