oneapi
Sign in
Financiar v1 / RiscCredit

Investment position, the BPM5 archive

The methodology the NBR abandoned in 2014 — 37 series, 47 observations, 1999-Q4 → 2014-Q2. It takes the history seven years further back than the BPM6 series.

It cannot be chained with /pozitie-investitionala, and that is not a warning but a figure. Across the 30 common quarters, the BPM5/BPM6 ratio runs between 0.908 and 0.996 on assets and between 0.936 and 0.995 on liabilities; in 2014-Q2 the net position is −85,858 under BPM5 and −89,960 under BPM6. The comparison is computed on every request, in identitati.comparatie_bpm6.

The rhythm is not uniform: between 1999 and 2003 the source publishes a single observation per year, at its end, and only from 2004-Q1 does it become quarterly. Every period carries its own ritm.

The name does not distinguish the side, the code does. Nine names are used by two series each — „Financial derivatives" is both an asset and a liability — so a path built from the name would place assets under liabilities. The hierarchy is taken from the code.

The identity adapts to what the source publishes: financial derivatives enter only from 2005-Q1, so in older observations the asset total has four components, not five. Their number is reported in componente_in_timp, so that the arrival of derivatives is visible rather than smoothed over.

The net position does not exist as a series in the class — the net block gives it computed, assets minus liabilities.

GET
https://oneapi.ro/api/financiar/v1/pozitie-investitionala/arhiva

Query parameters

NameTypeDescriptionAccepted values
laturaoptional string | null Optional: active or pasive. The net position is returned regardless, in the net block. activepasive
de_laoptional string | null Optional, YYYY-Tn or YYYY-MM. A month is rounded to the quarter containing it. e.g. 2024-06-15
pana_laoptional string | null Optional, YYYY-Tn or YYYY-MM. e.g. 2014-T2
nivel_maxoptional integer | null Optional, 1–3. nivel_max=1 leaves only the two totals. 1 – 3

How it behaves

  • The international investment position under the BPM5 methodology, which the NBR retired in 2014 — 37 series, 47 observations, 1999-Q4 → 2014-Q2. It carries the history seven years further back than the BPM6 series at /pozitie-investitionala.
  • It does not splice onto the BPM6 series, and that is a figure, not a warning. Across the 30 quarters where both publish, the BPM5/BPM6 ratio runs between 0.909 and 0.996 on assets and between 0.937 and 0.995 on liabilities. In 2014-Q2 the net position is −85,858 under BPM5 and −89,960 under BPM6 — 4.1 billion euro for the same quarter. identitati.comparatie_bpm6 gives the comparison pair by pair, computed on every request.
  • The rhythm is not uniform. Between 1999 and 2003 the source publishes a single observation per year, at its end; only from 2004-Q1 does it become quarterly. Anyone asking for "the quarterly history since 1999" gets five annual points followed by 42 quarterly ones, and perioade[].ritm says which is which.
  • The name does not distinguish the side; the code does. Nine names are used by two series each — "Derivate financiare" is both PIIT_AEDF (asset) and PIIT_PEDF (liability) — so the path in the name would silently file assets under liabilities. The hierarchy comes from the code: AE… assets, PE… liabilities.
  • This is the module's third form of hierarchy ambiguity, which is why the path-versus-code check runs on every class: for the reserves the name was right and the code incomplete, for trade in services the name was flat and only the code carried the structure, here the name is ambiguous.
  • The identity adapts to what the source publishes. Financial derivatives only enter from 2005-Q1 and money market instruments from 2004-Q4, so in older observations the sum has fewer components. Their count is reported in componente_in_timp, so each one's entry is visible rather than smoothed over.
  • Exactly one quarter of 47 fails to close: 2004-Q3. Direct investment by non-residents is published as 10,810.8, while its components sum to 12,078.6. The total falls against the previous quarter although both components rise — 9,887 → 10,184 and 1,747 → 1,895 — so the wrong figure is the total, not the components. The neighbouring quarters close exactly. The deviation is reported in identitati.descompunere.abateri, not buried by widening the tolerance.
  • The net position does not exist as a series in this class: PIIT_NA is total assets, PIIT_NP total liabilities. The net block gives it computed, so nobody has to subtract it themselves.
  • Periods carry data_referinta at quarter end, as in the BPM6 series — it is a stock too. The tolerance is derived: all 1,713 values fit in two decimals, so a sum of k components is bounded by (k+1) × 0.005.

What it is for

  • Romania's external position before EU accession, which the current series does not cover.
  • How foreign direct investment grew between 1999 and 2007.
  • The NBR's reserves in the 2000s, as part of external assets.

Response structure

FieldTypeDescription
data.metodologie string Always BPM5. It is why these figures cannot be chained to /pozitie-investitionala.
data.de_la string Start of the interval the response covers.
data.pana_la string End of the interval the response covers, inclusive.
data.unitate string The unit of the values. Read it before plotting or adding them up.
data.filtre array The filters actually applied, as the route understood them — useful when a value was normalised.
data.perioade[].trimestru string The quarter the value refers to.
data.perioade[].data_referinta string The end of the quarter, when the stock is measured.
data.perioade[].luna_sursa string The month as the source labels it, before normalisation.
data.perioade[].ritm string anual up to 2003, trimestrial from 2004.
data.net object The computed net position: total assets minus total liabilities.
data.pozitii[].cod string Code from the source code list — the key you filter on.
data.pozitii[].latura string Side of the account (resources or uses).
data.pozitii[].eticheta string Display label for the value — the readable version of the code next to it.
data.pozitii[].nivel integer Level in the classification hierarchy — the deeper, the more detailed.
data.pozitii[].parinte null The parent position's code, from the code. null at the two totals.
data.pozitii[].unitate string Unit of measure of the values. Read it before plotting or summing them.
data.pozitii[].perioade_publicate integer How many periods the source actually published.
data.pozitii[].valori object The values of the series, by period.
data.identitati.descompunere.identitate string The identity being checked — which sum must equal which total.
data.identitati.descompunere.noduri_cu_copii integer How many nodes in the hierarchy have at least one descendant.
data.identitati.descompunere.noduri_inchise integer How many hierarchy nodes closed within tolerance.
data.identitati.descompunere.verificari integer How many combinations were checked.
data.identitati.descompunere.regula_tolerantei string
data.identitati.descompunere.componente_in_timp object From which quarter each component count applies — this is how the source's start of publishing derivatives becomes visible.
data.identitati.descompunere.componente_in_timp.PIIT_NA object
data.identitati.descompunere.componente_in_timp.PIIT_AEIP object
data.identitati.descompunere.componente_in_timp.PIIT_NP object
data.identitati.descompunere.abateri[] array The nodes that do not close. At present only 2004-Q3.
data.identitati.descompunere.abateri[].nod string
data.identitati.descompunere.abateri[].copii integer
data.identitati.descompunere.abateri[].verificari_inchise integer How many checks closed within tolerance.
data.identitati.descompunere.abateri[].verificari integer How many combinations were checked.
data.identitati.descompunere.abateri[].abatere_maxima string Largest deviation found between the sum of components and the total.
data.identitati.descompunere.abateri[].unde.trimestru string The quarter the value refers to.
data.identitati.descompunere.abateri[].unde.componente_incluse integer
data.identitati.descompunere.abateri[].unde.total string
data.identitati.descompunere.abateri[].unde.suma_componentelor string
data.identitati.comparatie_bpm6 object Not an identity and not meant to close: these are different methodologies. The figures show why the two series cannot be joined.
data.identitati.comparatie_bpm6.nota string A note on how to read the data — a pitfall, a convention or a limit of the source.
data.identitati.comparatie_bpm6.trimestre_comune integer
data.identitati.comparatie_bpm6.raport_bpm5_bpm6.active.min string
data.identitati.comparatie_bpm6.raport_bpm5_bpm6.active.max string
data.identitati.comparatie_bpm6.raport_bpm5_bpm6.pasive.min string
data.identitati.comparatie_bpm6.raport_bpm5_bpm6.pasive.max string
data.identitati.comparatie_bpm6.perechi[].trimestru string The quarter the value refers to.
data.identitati.comparatie_bpm6.perechi[].active.bpm5 string
data.identitati.comparatie_bpm6.perechi[].active.bpm6 string
data.identitati.comparatie_bpm6.perechi[].active.raport string The ratio between the two quantities compared.
data.identitati.comparatie_bpm6.perechi[].pasive.bpm5 string
data.identitati.comparatie_bpm6.perechi[].pasive.bpm6 string
data.identitati.comparatie_bpm6.perechi[].pasive.raport string The ratio between the two quantities compared.
meta.sursa string The official source the data comes from, with its licence where one is required.
meta.acoperire.de_la string The first period we have data for.
meta.acoperire.pana_la string The last period we have data for.
meta.perioade integer Periods for which values exist.
meta.pozitii_totale integer How many positions match the filters, beyond the current page.
meta.pozitii_returnate integer How many positions this response actually returned.
meta.ritm object
meta.nota_bpm6 string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_ritm string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_ierarhie string How to read the classification hierarchy and which levels must not be added together.
meta.nota_identitate string How the identity above is checked and what it means when it does not close.
meta.nota_net string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_null string Why some values are missing: the source did not publish, did not compute, or suppressed them.
meta.fara_date string data is null and this says why. No BPM5 values in the database. The interval falls outside the coverage (1999-Q4 → 2014-Q2).
meta.fara_date_cod string 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/pozitie-investitionala/arhiva
{
    "data": {
        "metodologie": "BPM5",
        "de_la": "1999-T4",
        "pana_la": "2014-T2",
        "unitate": "milioane EUR",
        "filtre": [],
        "perioade": [
            {
                "trimestru": "1999-T4",
                "data_referinta": "1999-12-31",
                "luna_sursa": "1999-10",
                "ritm": "anual"
            }
        ],
        "net": {
            "1999-T4": "-7093.89",
            "2000-T4": "-9166.77",
            "2001-T4": "-10725.06",
            "2002-T4": "-9250.94",
            "2003-T4": "-13013.00",
            "2004-T1": "-15251.30",
            "2004-T2": "-16243.90",
            "2004-T3": "-14892.00",
            "2004-T4": "-16454.00",
            "2005-T1": "-17246.00",
            "2005-T2": "-19116.00",
            "2005-T3": "-21583.00",
            "2005-T4": "-23146.50",
            "2006-T1": "-26002.20",
            "2006-T2": "-29041.70",
            "2006-T3": "-32564.80",
            "2006-T4": "-36891.00",
            "2007-T1": "-42193.10",
            "2007-T2": "-48984.00",
            "2007-T3": "-54886.40",
            "2007-T4": "-54222.70",
            "2008-T1": "-57559.10",
            "2008-T2": "-63993.80",
            "2008-T3": "-67250.60",
            "2008-T4": "-69006.40",
            "2009-T1": "-69274.90",
            "2009-T2": "-71715.40",
            "2009-T3": "-72803.60",
            "2009-T4": "-73741.10",
            "2010-T1": "-75902.70",
            "2010-T2": "-75187.90",
            "2010-T3": "-77277.80",
            "2010-T4": "-77846.00",
            "2011-T1": "-81956.90",
            "2011-T2": "-82226.50",
            "2011-T3": "-81450.50",
            "2011-T4": "-84394.30",
            "2012-T1": "-84448.50",
            "2012-T2": "-84826.70",
            "2012-T3": "-85115.30",
            "2012-T4": "-89481.40",
            "2013-T1": "-87176.70",
            "2013-T2": "-86903.88",
            "2013-T3": "-85619.19",
            "2013-T4": "-87225.10",
            "2014-T1": "-85344.30",
            "2014-T2": "-85857.50"
        },
        "pozitii": [
            {
                "cod": "PIIT_NA",
                "latura": "active",
                "eticheta": "active",
                "nivel": 1,
                "parinte": null,
                "unitate": "milioane EUR",
                "perioade_publicate": 47,
                "valori": {
                    "1999-T4": "8182.52",
                    "2000-T4": "10206.24",
                    "2001-T4": "12939.72",
                    "2002-T4": "12900.86",
                    "2003-T4": "12490.00",
                    "2004-T1": "13060.20",
                    "2004-T2": "13985.50",
                    "2004-T3": "15773.00",
                    "2004-T4": "17692.00",
                    "2005-T1": "20041.00",
                    "2005-T2": "22160.00",
                    "2005-T3": "24620.00",
                    "2005-T4": "25741.50",
                    "2006-T1": "27309.20",
                    "2006-T2": "27071.20",
                    "2006-T3": "28426.50",
                    "2006-T4": "32062.00",
                    "2007-T1": "32547.70",
                    "2007-T2": "33761.50",
                    "2007-T3": "36117.10",
                    "2007-T4": "36867.30",
                    "2008-T1": "36929.70",
                    "2008-T2": "37772.70",
                    "2008-T3": "39427.30",
                    "2008-T4": "39039.30",
                    "2009-T1": "38834.50",
                    "2009-T2": "40510.40",
                    "2009-T3": "44261.10",
                    "2009-T4": "43713.50",
                    "2010-T1": "48732.90",
                    "2010-T2": "49123.90",
                    "2010-T3": "50133.60",
                    "2010-T4": "50759.50",
                    "2011-T1": "50881.60",
                    "2011-T2": "52838.90",
                    "2011-T3": "52965.90",
                    "2011-T4": "52480.30",
                    "2012-T1": "53886.10",
                    "2012-T2": "52553.00",
                    "2012-T3": "52381.80",
                    "2012-T4": "51189.90",
                    "2013-T1": "53187.90",
                    "2013-T2": "51684.80",
                    "2013-T3": "52688.70",
                    "2013-T4": "51426.20",
                    "2014-T1": "51394.70",
                    "2014-T2": "51578.80"
                }
            }
        ],
        "identitati": {
            "descompunere": {
                "identitate": "fiecare poziţie = suma copiilor ei direcţi, dintre cei publicaţi în perioada aceea",
                "noduri_cu_copii": 13,
                "noduri_inchise": 10,
                "verificari": 611,
                "regula_tolerantei": "(k+1) × 0,005 milioane pentru k componente — valorile clasei încap în două zecimale",
                "componente_in_timp": {
                    "PIIT_NA": {
                        "4": "1999-T4",
                        "5": "2005-T1"
                    },
                    "PIIT_AEIP": {
                        "2": "1999-T4",
                        "3": "2004-T4"
                    },
                    "PIIT_NP": {
                        "3": "1999-T4",
                        "4": "2005-T1"
                    }
                },
                "abateri": [
                    {
                        "nod": "PIIT_NA",
                        "copii": 5,
                        "verificari_inchise": 46,
                        "verificari": 47,
                        "abatere_maxima": "0.30",
                        "unde": {
                            "trimestru": "2004-T3",
                            "componente_incluse": 4,
                            "total": "15773.00",
                            "suma_componentelor": "15772.70"
                        }
                    }
                ]
            },
            "comparatie_bpm6": {
                "nota": "Nu e o identitate şi nu trebuie să se închidă: BPM5 şi BPM6 sunt metodologii diferite. Cifrele există ca să se vadă că cele două serii nu se pot înlănţui într-un istoric lung.",
                "trimestre_comune": 30,
                "raport_bpm5_bpm6": {
                    "active": {
                        "min": "0.9089",
                        "max": "0.9962"
                    },
                    "pasive": {
                        "min": "0.9368",
                        "max": "0.9951"
                    }
                },
                "perechi": [
                    {
                        "trimestru": "2007-T1",
                        "active": {
                            "bpm5": "32547.70",
                            "bpm6": "32829.00",
                            "raport": "0.9914"
                        },
                        "pasive": {
                            "bpm5": "74740.80",
                            "bpm6": "75110.00",
                            "raport": "0.9951"
                        }
                    }
                ]
            }
        }
    },
    "meta": {
        "sursa": "BNR — arhivă poziţia investiţională internaţională, metodologia BPM5 (clasa 577).",
        "acoperire": {
            "de_la": "1999-T4",
            "pana_la": "2014-T2"
        },
        "perioade": 47,
        "pozitii_totale": 37,
        "pozitii_returnate": 37,
        "ritm": {
            "1999": "anual",
            "2000": "anual",
            "2001": "anual",
            "2002": "anual",
            "2003": "anual",
            "2004": "trimestrial",
            "2005": "trimestrial",
            "2006": "trimestrial",
            "2007": "trimestrial",
            "2008": "trimestrial",
            "2009": "trimestrial",
            "2010": "trimestrial",
            "2011": "trimestrial",
            "2012": "trimestrial",
            "2013": "trimestrial",
            "2014": "trimestrial"
        },
        "nota_bpm6": "Seria asta nu se lipeşte de /pozitie-investitionala: pe cele 30 trimestre comune raportul BPM5/BPM6 e între 0.9089 şi 0.9962 la active. Cifrele sunt în `identitati.comparatie_bpm6`, pereche cu pereche.",
        "nota_ritm": "Între 1999 şi 2003 sursa publică o singură observaţie pe an, la sfârşitul lui; din 2004-T1 devine trimestrială. `perioade[].ritm` o spune pentru fiecare punct.",
        "nota_ierarhie": "Ierarhia vine din cod, nu din denumire: nouă denumiri sunt comune celor două laturi, deci calea din denumire ar aşeza activele sub pasive.",
        "nota_identitate": "10 din 13 noduri se închid, pe 611 verificări. Suma include doar componentele publicate în perioada respectivă, iar `componente_in_timp` arată de când intră fiecare — derivatele financiare abia din 2005-T1.",
        "nota_net": "Poziţia netă nu există ca serie în clasă; blocul `net` o dă calculată, totalul activelor minus totalul pasivelor.",
        "nota_null": "`null` într-un trimestru înseamnă că poziţia n-a fost publicată atunci, nu zero."
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
404negasitThe series has ended and is no longer updated.
422validareinterval_prea_lung beyond 60 periods, a side outside the list, or nivel_max outside 1–3.
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": "interval_prea_lung beyond 60 periods, a side outside the list, or nivel_max outside 1–3.",
        "detalii": {
            "latura": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}