NBR registers
The nine register-type classes, with a few thousand records between them (the exact count, per class, is in the response): money market tenders, government securities issues and exchanges, eligible assets, and the registers of credit and payment institutions. The series catalogue excludes them, because they do not have the shape of a time series — one row carries several fields at once, and the fields differ from one class to another.
The shape of each class is declared, not inferred. intrari means every row is an event on its date — a tender, a registration. instantaneu means the whole list, republished at each date: the eligible-asset rows are the same list of about 114 positions, repeated at every published date — six dates already make almost 700 rows. Read as history, they would look like as many events.
Two classes already have a dedicated route, where the same data comes translated into named structures: ruta_dedicata says so, to keep anyone from reimplementing what is already done.
Diacritics are missing at source in two registers — diacritice_pierdute flags them. About one record in five, for both payment and credit institutions, contains ? instead of ș or ț. Verified on the raw artefact: the header of the same class has the diacritics correct in the same file, so it is not our transport. We do not repair them: an automatic reconstruction would hit „opera?iuni" and would ruin a proper name at the first opportunity.
Query parameters
How it behaves
- The eight register-type classes, holding a few thousand records between them (the exact count, per class, is in the response): money-market auctions (repo, reverse repo, deposits), government securities issues and exchanges, eligible assets, and the registers of credit and payment institutions.
- The series catalogue excludes them because they do not have the shape of a time series: one row carries several fields at once, and the fields differ from class to class.
meta.registre_excluseon/seriicounts the 145 field descriptors left out; their records are here. - Each class's shape is declared, not inferred.
intrarimeans every row is an event on its date — an auction, a registration.instantaneumeans the whole list, republished on every date: the eligible-asset rows are the same list of about 114 positions, repeated at every published date — six dates already make almost 700 rows. Read as history, they would look like as many events. - The shape could be guessed from rows per day — six classes sit between 1 and 3.6, while
1147has 114 — but a heuristic would mislabel the first class that deviates, and the label lands in the response as fact. Nine hand-written entries cost less. Class 1987 (e-money issuers) was the opposite case: six registrations, one per date, so it looked like a series — and until 16 September that is how it was imported, with the tax IDs served as values. - Two classes already have a dedicated route, where the same data comes translated into named structures: securities issues at
/titluri-stat/emisiuni, credit institutions at/banci.ruta_dedicatasays so, so nobody reimplements what is already done. - Diacritics are lost at the source in two registers. About one record in five, for both payment and credit institutions, contains
?in place ofșorț— "opera?iuni". In the other six: none. Verified against the raw artefact: the same class's header carries correct diacritics in the same file, so it is not our transport.diacritice_pierduteflags them. We do not repair them: an automatic reconstruction would get "opera?iuni" right and mangle a proper name at the first opportunity.
What it is for
- Which register classes exist and how much each one covers.
- Choosing a class before requesting its records.
- Checking whether the data you want already has a dedicated route.
Response structure
/registre/{cid}.
instantaneu, this is NOT a count of events.
intrari or instantaneu. null for a class that appeared after this route was written — the shape is not assumed.
true where the source publishes ? instead of ș/ț.
Response examples
{
"data": {
"clase": [
{
"cid": 803,
"denumire": "Operaţiuni de piaţă monetară ale BNR - Licitaţii repo",
"campuri": 6,
"inregistrari": 204,
"zile": 201,
"acoperire": {
"de_la": "2001-12-17",
"pana_la": "2025-06-30"
},
"forma": "intrari",
"nota": "Câte o licitaţie repo pe zi de şedinţă.",
"ruta_dedicata": null,
"diacritice_pierdute": false
}
]
},
"meta": {
"sursa": "Banca Naţională a României — baza de date interactivă.",
"clase": 9,
"inregistrari": 4823,
"nota_forma": "`forma` e declarată de mână pentru fiecare clasă, nu dedusă dintr-o euristică: la `instantaneu`, numărul de înregistrări NU e un număr de evenimente, ci lista republicată de mai multe ori.",
"nota_rute": "`ruta_dedicata` arată unde aceleaşi date vin deja traduse în structuri cu nume.",
"nota_diacritice": "`diacritice_pierdute` marchează registrele în care sursa publică `?` în loc de `ş`/`ţ`. Le declarăm, nu le reparăm prin ghicit.",
"catalogul_de_serii": "/financiar/v1/serii"
}
}
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 | The route takes no parameters apart from lang: any other parameter returns 422 instead of being ignored. |
| 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": "The route takes no parameters apart from lang: any other parameter returns 422 instead of being ignored."
}
}