oneapi
Sign in
Financiar v1 / RiscCredit

Credit Risk Register aggregates

It contains no data about any individual company. The Central Credit Register is nominal at the NBR, but only aggregates are published — total owed, arrears, number of debtors, breakdowns by currency, maturity and sector. This route cannot look up a debtor, and the absence of a result would not mean the absence of risk, only that the nominal data is not public. For what can be checked about an individual company, see the Business module.

The three axes pick one of the six published classes: creditor (banks or non-bank financial institutions), debitor (all, or individuals only) and masura (loans plus commitments, or loans only). Not all eight combinations exist at source — doar_credite is published only for all debtors — and the missing ones get a refusal naming those available.

The grouping comes from the source's structure, not from a classification invented by us. The codes beginning with _ after the class prefix — _MON, _TERM, _RISC, _SEC — have zero values: they are the NBR's table headers („Currency", „Term of granting", „Sector of activity"). The column order was preserved on import, so each dimension is attributed to the section above it. Those before any header stay top-level indicatori.

The units are never mixed. Of 532 series, 499 are in million lei, 25 in persons — the number of debtors was 2,058,804 in June 2026 — 4 in percent and 4 in units. Every value carries its own unit, and nothing is summed across sections.

Without an interval, the response gives the latest published month: the natural question is „where do we stand now", not „the whole series". The complete series runs to 120 months in one request.

GET
https://oneapi.ro/api/financiar/v1/risc-credit/agregate

Query parameters

NameTypeDescriptionAccepted values
creditoroptional string | null Optional, defaults to banci. Or ifn — non-bank financial, e-money and payment institutions. banciifn
debitoroptional string | null Optional, defaults to toti. Or persoane_fizice. totipersoane_fizice
masuraoptional string | null Optional, defaults to credite_si_angajamente. Or doar_credite — but only with debitor=toti. credite_si_angajamentedoar_credite
de_laoptional string | null Optional, YYYY-MM. Without it, the last published month is returned. e.g. 2024-06-15
pana_laoptional string | null Optional, YYYY-MM. At most 120 months. e.g. 2024-06-15

How it behaves

  • Contains no data about any individual company. The Credit Risk Register is name-level at the NBR, but only aggregates are published: total owed, arrears, number of debtors, breakdowns by currency, maturity and sector. This route cannot look up a debtor, and the absence of a result does NOT mean the absence of risk — it means name-level data is not public.
  • Coverage: 532 series, 97,447 values, January 2000 → today, monthly.
  • Three axes select one of the six published classes: creditor (banks or non-bank financial institutions), debitor (all, or individuals only) and masura (credits plus commitments, or credits only). Not all eight combinations exist at the source — doar_credite is published only for all debtors — and the missing ones get a 404 listing the six available, not an empty list.
  • The grouping comes from the source's own structure, not from a classification we invented. Codes starting with _ after the class prefix — _MON, _TERM, _RISC, _SEC — carry zero values: they are the NBR's table headings ("Currency", "Maturity", "Sector"). Column order survived the import, so each breakdown is attributed to the heading above it.
  • The source gives two different sections the same name: "Currency" appears twice, once as a breakdown of total credits and commitments, once as a breakdown of amounts owed. descompune says which is which — and it is not guessed from the column code but measured: the section's dimensions are summed and matched against the indicator they add up to. In June 2026 the first "Currency" section's seven components give 844,206 against a total of 844,204, and the second's give 698,470 against 698,469.
  • A breakdown carries the class and then the detail in its name, separated by a semicolon. A name without a semicolon is a standalone indicator, wherever it sits in the table — and the rule fixes a real error: in four of the six classes, the 18 columns holding arrears by delay bracket (types A–H) come after the last section heading and would have been swallowed by it. The arithmetic confirms it: the contaminated section added up to neither total.
  • Units do not mix. Of 532 series, 499 are in millions of lei, 25 in persons — the debtor count was 2,058,804 in June 2026 — 4 in percent (the arrears share: 3.01%) and 4 in units. Every dimension carries its unit, and nothing is summed across sections.
  • Without an interval, the response gives the last published month: the natural question is "where do we stand now", not "the whole series". With an interval, the cap is 120 months.
  • null in a month means the dimension was not published then — a few series start later than their class.

What it is for

  • How much the economy has borrowed and how much of it is in arrears, month by month.
  • The structure of credit by currency, maturity and sector of activity.
  • Comparing banks with non-bank lenders on the same dimensions.

Response structure

FieldTypeDescription
data.clasa object The three axes chosen and the NBR class they lead to.
data.clasa.creditor string The creditor, as classified by the source.
data.clasa.debitor string
data.clasa.masura string The measure reported — what the value actually counts or sums.
data.clasa.denumire string The name, exactly as the source publishes it.
data.clasa.cid integer
data.de_la string Start of the interval the response covers.
data.pana_la string End of the interval the response covers, inclusive.
data.perioade array The months that actually carry values, in order.
data.indicatori[] array Top-level dimensions: totals, arrears, shares, debtor counts, amounts by delay bracket.
data.indicatori[].cod string Code from the source code list — the key you filter on.
data.indicatori[].denumire string The name, exactly as the source publishes it.
data.indicatori[].unitate string Unit of measure of the values. Read it before plotting or summing them.
data.indicatori[].valori object The values of the series, by period.
data.sectiuni[].cod string Code from the source code list — the key you filter on.
data.sectiuni[].denumire string The table heading from the source.
data.sectiuni[].dimensiuni[].cod string Code from the source code list — the key you filter on.
data.sectiuni[].dimensiuni[].denumire string The detail, without the class prefix that repeats on every source column.
data.sectiuni[].dimensiuni[].unitate string mil. RON, pers., % or număr.
data.sectiuni[].dimensiuni[].valori object One value per month. null = not published that month.
data.sectiuni[].descompune object The indicator the section breaks down, found by summation. null when no match is confirmed.
data.sectiuni[].descompune.cod string Code from the source code list — the key you filter on.
data.sectiuni[].descompune.denumire string The name, exactly as the source publishes it.
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.luni integer Number of months covered.
meta.dimensiuni integer
meta.nota_nominal string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_grupare string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_unitati string What to know about the units of measure in the response.
meta.nota_null string Why some values are missing: the source did not publish, did not compute, or suppressed them.
meta.nota_implicit string Which value was used when the parameter was not sent.
meta.combinatii[].creditor string The creditor, as classified by the source.
meta.combinatii[].debitor string
meta.combinatii[].masura string The measure reported — what the value actually counts or sums.
meta.fara_date data is null and this says why. The class exists in the catalogue but has no values in the database. The interval falls entirely outside the coverage. It overlaps the coverage but holds no values.
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/risc-credit/agregate
{
    "data": {
        "clasa": {
            "creditor": "banci",
            "debitor": "toti",
            "masura": "credite_si_angajamente",
            "denumire": "Credite acordate şi angajamente asumate de instituţiile de credit",
            "cid": 565
        },
        "de_la": "2026-07",
        "pana_la": "2026-07",
        "perioade": [
            "2026-07"
        ],
        "indicatori": [
            {
                "cod": "CRBL_CAT",
                "denumire": "Credite acordate şi angajamente asumate de instituţiile de credit",
                "unitate": "mil. RON",
                "valori": {
                    "2026-07": "851743"
                }
            }
        ],
        "sectiuni": [
            {
                "cod": "CRBL__PROPB",
                "denumire": "Forma de proprietate a beneficiarului de credit",
                "dimensiuni": [
                    {
                        "cod": "CRBL_CAPC",
                        "denumire": "proprietate cooperatistă",
                        "unitate": "mil. RON",
                        "valori": {
                            "2026-07": "1345"
                        }
                    }
                ],
                "descompune": {
                    "cod": "CRBL_CAT",
                    "denumire": "Credite acordate şi angajamente asumate de instituţiile de credit"
                }
            }
        ]
    },
    "meta": {
        "sursa": "BNR — Centrala Riscului de Credit, agregate publice lunare.",
        "acoperire": {
            "de_la": "2000-01",
            "pana_la": "2026-07"
        },
        "luni": 1,
        "dimensiuni": 129,
        "nota_nominal": "NU conţine date despre nicio firmă anume. CRC e nominală la BNR, dar public se publică doar agregate. Absenţa unui rezultat NU înseamnă absenţa riscului — înseamnă că datele nominale nu sunt publice.",
        "nota_grupare": "`sectiuni` urmează capetele de tabel ale sursei („Moneda\", „Termen de acordare\", „Sector de activitate\"), care în catalog sunt coduri cu zero valori. `indicatori` sunt dimensiunile de dinaintea oricărui cap.",
        "nota_unitati": "Unităţile diferă în aceeaşi clasă: milioane de lei, persoane, procente, bucăţi. Fiecare dimensiune îşi poartă unitatea; peste secţiuni nu se însumează nimic.",
        "nota_null": "`null` într-o lună înseamnă că dimensiunea n-a fost publicată atunci — câteva serii încep mai târziu decât clasa.",
        "nota_implicit": "Fără interval, se întoarce ultima lună publicată.",
        "combinatii": [
            {
                "creditor": "banci",
                "debitor": "toti",
                "masura": "credite_si_angajamente"
            }
        ]
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
422validareinterval_prea_lung beyond 120 months, axes outside the lists, or a malformed month. combinatie_inexistenta — the axis combination is not published; the response lists the six.
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 120 months, axes outside the lists, or a malformed month. combinatie_inexistenta — the axis combination is not published; the response lists the six.",
        "detalii": {
            "creditor": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}