International investment position
The stock of Romania's external assets and liabilities, quarterly since 2007 — 51 positions across four levels. In the latest quarter: assets 166,182, liabilities 333,943, net position −167,761 million euro.
The periods are quarters, with an explicit reference date. The source labels the quarter with its first month, but the value is the stock at its end. Verified on reserve assets against the monthly reserves: compared on their own label, no quarter matches, with deviations of up to 5,274 million euro; shifted by two months, all of them match. Every period carries data_referinta and luna_sursa, and the keys in valori are quarters.
Assets and liabilities are not symmetric — 22 common positions, three assets-only (reserve assets, monetary gold, foreign exchange reserves) and one liabilities-only (SDR allocations). It is not a side × position matrix as in the balance of payments.
Each identity's tolerance is derived, not chosen. The source publishes whole millions, so an identity with k components has its rounding error bounded by ⌊(k+1)/2⌋. Under that rule 17 of 18 identities close on every quarter; the liabilities decomposition comes out at 3 in a single quarter, reported in unde rather than papered over by widening the tolerance.
Query parameters
YYYY-Tn or YYYY-MM. A month is rounded to the quarter containing it, and perioade shows exactly what came back.
e.g. 2024-06-15
YYYY-Tn or YYYY-MM.
e.g. 2024-06-15e.g. 2024-06-30
net, active, pasive.
netactivepasive
How it behaves
- The stock of Romania's external assets and liabilities, quarterly since 2007 — 51 positions across four levels. In 2026-Q1: assets 166,182, liabilities 333,943, net position −167,761 million euro.
- Periods are quarters, with an explicit reference date — and this matters. The source labels a quarter with its first month, but the value is the stock at the end of it. Verified against the monthly reserves: compared on the source label, no quarter matches, with discrepancies of up to 5,274 million euro; shifted by two months, all of them match, with a maximum deviation of 0.5 — rounding, since these values are whole millions while the reserves carry decimals.
- So the keys in
valoriare quarters (2025-T3), and every period carriesdata_referinta(2025-09-30) andluna_sursa(2025-07) for anyone joining back to the raw series. A live check: reserve assets in 2025-Q3 are 75,786, and the reserves on 30 September 2025 are 75,785.94. - The quarterly balance of payments has no such problem: those are flows, and the period really is the quarter. This is a stock.
- Assets and liabilities are not symmetric — 22 shared positions, three only on the asset side (reserve assets, monetary gold, the foreign exchange reserve) and one only on the liability side (SDR allocations). It is not a side × position matrix like the balance of payments, so each side carries its own tree.
- Each identity's tolerance is derived, not chosen. All 3,450 values in the class are whole millions — verified, none with decimals — so every figure carries at most half a million of rounding error, and an identity with
kcomponents is bounded by⌊(k+1)/2⌋. - On that rule, 18 identities are checked:
net = assets − liabilities, the breakdown of each side by instrument, and short-term / long-term on each. Seventeen close across all quarters. The eighteenth does not: liabilities in 2011-Q3 are 136,750 against a component sum of 136,753 — a deviation of 3 against a tolerance of ±2. The tolerance is not raised to 3 to make it pass; the deviation is reported inunde. - Identities are checked over all positions and all quarters in the window, regardless of
laturaornivel_max— a filter must not make the guarantee disappear. - The whole history fits in a single request.
What it is for
- Romania's net position against the rest of the world, quarter by quarter.
- The stock of foreign direct investment in Romania, split into equity and debt.
- Short-term external debt against reserves — the coverage indicator.
Response structure
valori.
net, active or pasive.
null at the three roots.
serie_inexistenta (the source never publishes that component), nepublicata_in_fereastra (it exists, but not in this interval) or fara_perioada_completa (the components exist but never in the same period). The verified count changes with the window, and this says why.
data is null and this says why. No investment position values in the database. The interval falls entirely outside the coverage (2007-Q1 → present). It overlaps but holds no values.
fara_date is prose and may be rephrased, this is not.
Response examples
{
"data": {
"de_la": "2007-T1",
"pana_la": "2026-T2",
"unitate": "milioane EUR",
"filtre": [],
"perioade": [
{
"trimestru": "2007-T1",
"data_referinta": "2007-03-31",
"luna_sursa": "2007-01"
}
],
"pozitii": [
{
"cod": "PII6T_N",
"latura": "net",
"eticheta": "Poziţia netă",
"cale": [
"Poziţia netă"
],
"nivel": 1,
"parinte": null,
"unitate": "milioane EUR",
"trimestre_publicate": 78,
"valori": {
"2007-T1": "-42281",
"2007-T2": "-49074",
"2007-T3": "-54971",
"2007-T4": "-54305",
"2008-T1": "-57521",
"2008-T2": "-65081",
"2008-T3": "-68727",
"2008-T4": "-69090",
"2009-T1": "-69360",
"2009-T2": "-71797",
"2009-T3": "-73871",
"2009-T4": "-74814",
"2010-T1": "-77013",
"2010-T2": "-76388",
"2010-T3": "-78410",
"2010-T4": "-78995",
"2011-T1": "-83059",
"2011-T2": "-83314",
"2011-T3": "-82579",
"2011-T4": "-85558",
"2012-T1": "-85591",
"2012-T2": "-86012",
"2012-T3": "-86287",
"2012-T4": "-90628",
"2013-T1": "-89549",
"2013-T2": "-89642",
"2013-T3": "-89969",
"2013-T4": "-90640",
"2014-T1": "-88496",
"2014-T2": "-89960",
"2014-T3": "-88718",
"2014-T4": "-85967",
"2015-T1": "-86314",
"2015-T2": "-85772",
"2015-T3": "-85162",
"2015-T4": "-86480",
"2016-T1": "-85720",
"2016-T2": "-85304",
"2016-T3": "-88273",
"2016-T4": "-85989",
"2017-T1": "-88333",
"2017-T2": "-90647",
"2017-T3": "-90559",
"2017-T4": "-91177",
"2018-T1": "-93182",
"2018-T2": "-93679",
"2018-T3": "-96231",
"2018-T4": "-93335",
"2019-T1": "-93775",
"2019-T2": "-97596",
"2019-T3": "-99115",
"2019-T4": "-98940",
"2020-T1": "-92857",
"2020-T2": "-97341",
"2020-T3": "-100549",
"2020-T4": "-106419",
"2021-T1": "-105498",
"2021-T2": "-109358",
"2021-T3": "-109538",
"2021-T4": "-113368",
"2022-T1": "-114762",
"2022-T2": "-112430",
"2022-T3": "-110957",
"2022-T4": "-119327",
"2023-T1": "-119844",
"2023-T2": "-126557",
"2023-T3": "-127142",
"2023-T4": "-133106",
"2024-T1": "-134527",
"2024-T2": "-139450",
"2024-T3": "-147364",
"2024-T4": "-146006",
"2025-T1": "-149579",
"2025-T2": "-156146",
"2025-T3": "-162914",
"2025-T4": "-169560",
"2026-T1": "-167761",
"2026-T2": "-168202"
}
}
],
"identitati": [
{
"identitate": "active = poziţia netă + pasive",
"total": "PII6T_A",
"componente": [
"PII6T_N",
"PII6T_P"
],
"toleranta": "1",
"trimestre_verificate": 78,
"trimestre_inchise": 78,
"abatere_maxima": "1"
}
],
"identitati_neverificate": []
},
"meta": {
"sursa": "BNR — poziţia investiţională internaţională, metodologia BPM6.",
"acoperire": {
"de_la": "2007-T1",
"pana_la": "2026-T2"
},
"trimestre": 78,
"pozitii_totale": 51,
"pozitii_returnate": 51,
"identitati_verificate": 18,
"identitati_inchise": 17,
"nota_datare": "Valorile sunt stocuri la `data_referinta`, adică sfârşitul trimestrului — nu la `luna_sursa`, care e doar eticheta din sursă. Comparate pe etichetă cu date lunare, activele de rezervă ies cu până la 5.274 milioane de euro alături; decalate corect, se potrivesc pe toate trimestrele.",
"nota_laturi": "Activele şi pasivele nu au aceleaşi poziţii: 22 comune, trei doar pe active (activele de rezervă, aurul monetar, rezerva valutară), una doar pe pasive (alocările de DST).",
"nota_identitati": "17 din 18 identităţi se închid pe toate trimestrele. Toleranţa fiecăreia e derivată din numărul de componente — sursa publică milioane întregi, deci eroarea de rotunjire e mărginită de ⌊(k+1)/2⌋. Ce depăşeşte se raportează în `unde`, nu se acoperă lărgind toleranţa.",
"nota_ierarhie": "`cale` şi `parinte` vin din denumire, verificate faţă de mnemonicul codului: 0 poziţii corectate. Mnemonicele se cuibăresc pe prefix de caractere (`IXNS` sub `IXN`), nu pe segmente despărţite de liniuţe.",
"nota_null": "`null` într-un trimestru înseamnă că poziţia n-a fost publicată atunci, nu zero."
}
}
{
"data": {
"de_la": "2024-T2",
"pana_la": "2026-T2",
"unitate": "milioane EUR",
"filtre": [],
"perioade": [
{
"trimestru": "2024-T2",
"data_referinta": "2024-06-30",
"luna_sursa": "2024-04"
}
],
"pozitii": [
{
"cod": "PII6T_N",
"latura": "net",
"eticheta": "Poziţia netă",
"cale": [
"Poziţia netă"
],
"nivel": 1,
"parinte": null,
"unitate": "milioane EUR",
"trimestre_publicate": 9,
"valori": {
"2024-T2": "-139450",
"2024-T3": "-147364",
"2024-T4": "-146006",
"2025-T1": "-149579",
"2025-T2": "-156146",
"2025-T3": "-162914",
"2025-T4": "-169560",
"2026-T1": "-167761",
"2026-T2": "-168202"
}
}
],
"identitati": [
{
"identitate": "active = poziţia netă + pasive",
"total": "PII6T_A",
"componente": [
"PII6T_N",
"PII6T_P"
],
"toleranta": "1",
"trimestre_verificate": 9,
"trimestre_inchise": 9,
"abatere_maxima": "1"
}
],
"identitati_neverificate": []
},
"meta": {
"sursa": "BNR — poziţia investiţională internaţională, metodologia BPM6.",
"acoperire": {
"de_la": "2007-T1",
"pana_la": "2026-T2"
},
"trimestre": 9,
"pozitii_totale": 51,
"pozitii_returnate": 51,
"identitati_verificate": 18,
"identitati_inchise": 18,
"nota_datare": "Valorile sunt stocuri la `data_referinta`, adică sfârşitul trimestrului — nu la `luna_sursa`, care e doar eticheta din sursă. Comparate pe etichetă cu date lunare, activele de rezervă ies cu până la 5.274 milioane de euro alături; decalate corect, se potrivesc pe toate trimestrele.",
"nota_laturi": "Activele şi pasivele nu au aceleaşi poziţii: 22 comune, trei doar pe active (activele de rezervă, aurul monetar, rezerva valutară), una doar pe pasive (alocările de DST).",
"nota_identitati": "18 din 18 identităţi se închid pe toate trimestrele. Toleranţa fiecăreia e derivată din numărul de componente — sursa publică milioane întregi, deci eroarea de rotunjire e mărginită de ⌊(k+1)/2⌋. Ce depăşeşte se raportează în `unde`, nu se acoperă lărgind toleranţa.",
"nota_ierarhie": "`cale` şi `parinte` vin din denumire, verificate faţă de mnemonicul codului: 0 poziţii corectate. Mnemonicele se cuibăresc pe prefix de caractere (`IXNS` sub `IXN`), nu pe segmente despărţite de liniuţe.",
"nota_null": "`null` într-un trimestru înseamnă că poziţia n-a fost publicată atunci, nu zero."
}
}
{
"data": {
"de_la": "2007-T1",
"pana_la": "2024-T2",
"unitate": "milioane EUR",
"filtre": [],
"perioade": [
{
"trimestru": "2007-T1",
"data_referinta": "2007-03-31",
"luna_sursa": "2007-01"
}
],
"pozitii": [
{
"cod": "PII6T_N",
"latura": "net",
"eticheta": "Poziţia netă",
"cale": [
"Poziţia netă"
],
"nivel": 1,
"parinte": null,
"unitate": "milioane EUR",
"trimestre_publicate": 70,
"valori": {
"2007-T1": "-42281",
"2007-T2": "-49074",
"2007-T3": "-54971",
"2007-T4": "-54305",
"2008-T1": "-57521",
"2008-T2": "-65081",
"2008-T3": "-68727",
"2008-T4": "-69090",
"2009-T1": "-69360",
"2009-T2": "-71797",
"2009-T3": "-73871",
"2009-T4": "-74814",
"2010-T1": "-77013",
"2010-T2": "-76388",
"2010-T3": "-78410",
"2010-T4": "-78995",
"2011-T1": "-83059",
"2011-T2": "-83314",
"2011-T3": "-82579",
"2011-T4": "-85558",
"2012-T1": "-85591",
"2012-T2": "-86012",
"2012-T3": "-86287",
"2012-T4": "-90628",
"2013-T1": "-89549",
"2013-T2": "-89642",
"2013-T3": "-89969",
"2013-T4": "-90640",
"2014-T1": "-88496",
"2014-T2": "-89960",
"2014-T3": "-88718",
"2014-T4": "-85967",
"2015-T1": "-86314",
"2015-T2": "-85772",
"2015-T3": "-85162",
"2015-T4": "-86480",
"2016-T1": "-85720",
"2016-T2": "-85304",
"2016-T3": "-88273",
"2016-T4": "-85989",
"2017-T1": "-88333",
"2017-T2": "-90647",
"2017-T3": "-90559",
"2017-T4": "-91177",
"2018-T1": "-93182",
"2018-T2": "-93679",
"2018-T3": "-96231",
"2018-T4": "-93335",
"2019-T1": "-93775",
"2019-T2": "-97596",
"2019-T3": "-99115",
"2019-T4": "-98940",
"2020-T1": "-92857",
"2020-T2": "-97341",
"2020-T3": "-100549",
"2020-T4": "-106419",
"2021-T1": "-105498",
"2021-T2": "-109358",
"2021-T3": "-109538",
"2021-T4": "-113368",
"2022-T1": "-114762",
"2022-T2": "-112430",
"2022-T3": "-110957",
"2022-T4": "-119327",
"2023-T1": "-119844",
"2023-T2": "-126557",
"2023-T3": "-127142",
"2023-T4": "-133106",
"2024-T1": "-134527",
"2024-T2": "-139450"
}
}
],
"identitati": [
{
"identitate": "active = poziţia netă + pasive",
"total": "PII6T_A",
"componente": [
"PII6T_N",
"PII6T_P"
],
"toleranta": "1",
"trimestre_verificate": 70,
"trimestre_inchise": 70,
"abatere_maxima": "1"
}
],
"identitati_neverificate": []
},
"meta": {
"sursa": "BNR — poziţia investiţională internaţională, metodologia BPM6.",
"acoperire": {
"de_la": "2007-T1",
"pana_la": "2026-T2"
},
"trimestre": 70,
"pozitii_totale": 51,
"pozitii_returnate": 51,
"identitati_verificate": 18,
"identitati_inchise": 17,
"nota_datare": "Valorile sunt stocuri la `data_referinta`, adică sfârşitul trimestrului — nu la `luna_sursa`, care e doar eticheta din sursă. Comparate pe etichetă cu date lunare, activele de rezervă ies cu până la 5.274 milioane de euro alături; decalate corect, se potrivesc pe toate trimestrele.",
"nota_laturi": "Activele şi pasivele nu au aceleaşi poziţii: 22 comune, trei doar pe active (activele de rezervă, aurul monetar, rezerva valutară), una doar pe pasive (alocările de DST).",
"nota_identitati": "17 din 18 identităţi se închid pe toate trimestrele. Toleranţa fiecăreia e derivată din numărul de componente — sursa publică milioane întregi, deci eroarea de rotunjire e mărginită de ⌊(k+1)/2⌋. Ce depăşeşte se raportează în `unde`, nu se acoperă lărgind toleranţa.",
"nota_ierarhie": "`cale` şi `parinte` vin din denumire, verificate faţă de mnemonicul codului: 0 poziţii corectate. Mnemonicele se cuibăresc pe prefix de caractere (`IXNS` sub `IXN`), nu pe segmente despărţite de liniuţe.",
"nota_null": "`null` într-un trimestru înseamnă că poziţia n-a fost publicată atunci, nu zero."
}
}
{
"data": {
"de_la": "2024-T2",
"pana_la": "2024-T2",
"unitate": "milioane EUR",
"filtre": [],
"perioade": [
{
"trimestru": "2024-T2",
"data_referinta": "2024-06-30",
"luna_sursa": "2024-04"
}
],
"pozitii": [
{
"cod": "PII6T_N",
"latura": "net",
"eticheta": "Poziţia netă",
"cale": [
"Poziţia netă"
],
"nivel": 1,
"parinte": null,
"unitate": "milioane EUR",
"trimestre_publicate": 1,
"valori": {
"2024-T2": "-139450"
}
}
],
"identitati": [
{
"identitate": "active = poziţia netă + pasive",
"total": "PII6T_A",
"componente": [
"PII6T_N",
"PII6T_P"
],
"toleranta": "1",
"trimestre_verificate": 1,
"trimestre_inchise": 1,
"abatere_maxima": "0"
}
],
"identitati_neverificate": []
},
"meta": {
"sursa": "BNR — poziţia investiţională internaţională, metodologia BPM6.",
"acoperire": {
"de_la": "2007-T1",
"pana_la": "2026-T2"
},
"trimestre": 1,
"pozitii_totale": 51,
"pozitii_returnate": 51,
"identitati_verificate": 18,
"identitati_inchise": 18,
"nota_datare": "Valorile sunt stocuri la `data_referinta`, adică sfârşitul trimestrului — nu la `luna_sursa`, care e doar eticheta din sursă. Comparate pe etichetă cu date lunare, activele de rezervă ies cu până la 5.274 milioane de euro alături; decalate corect, se potrivesc pe toate trimestrele.",
"nota_laturi": "Activele şi pasivele nu au aceleaşi poziţii: 22 comune, trei doar pe active (activele de rezervă, aurul monetar, rezerva valutară), una doar pe pasive (alocările de DST).",
"nota_identitati": "18 din 18 identităţi se închid pe toate trimestrele. Toleranţa fiecăreia e derivată din numărul de componente — sursa publică milioane întregi, deci eroarea de rotunjire e mărginită de ⌊(k+1)/2⌋. Ce depăşeşte se raportează în `unde`, nu se acoperă lărgind toleranţa.",
"nota_ierarhie": "`cale` şi `parinte` vin din denumire, verificate faţă de mnemonicul codului: 0 poziţii corectate. Mnemonicele se cuibăresc pe prefix de caractere (`IXNS` sub `IXN`), nu pe segmente despărţite de liniuţe.",
"nota_null": "`null` într-un trimestru înseamnă că poziţia n-a fost publicată atunci, nu zero."
}
}
Error codes
| Code | Slug | When it occurs |
|---|---|---|
| 401 | neautentificat | Token missing, invalid, expired or revoked. |
| 403 | feature_indisponibil | The current plan does not include the feature the route depends on. |
| 422 | validare | interval_prea_lung beyond 80 quarters, a side outside the list, or nivel_max outside 1–4. |
| 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": "validare",
"mesaj": "interval_prea_lung beyond 80 quarters, a side outside the list, or nivel_max outside 1–4.",
"detalii": {
"de_la": [
"The value sent does not satisfy the parameter rule."
]
}
}
}