Secondary market trading
How many government securities trades took place and at what value, on securities denominated in lei and in euro. A daily series since September 1999, a monthly series since November 1999.
The monthly series published by the NBR is NOT the month's total, it is the DAILY AVERAGE. The source's note says so, and it checks out against the data: July 2026 gives 7,438.8 monthly and exactly 7,438.8 as the average of the 23 published days — a 92.8% match on lei and 96.2% on euro, and the differences come from days missing from the daily series, not from a different definition. Anyone adding the twelve monthly values to get the year's volume obtains a meaningless number.
That is why the monthly response gives both figures side by side: valoare_medie_zilnica, published by the NBR, and valoare_totala, computed by us from the daily series, with the zile it follows from.
Zero means zero, not missing data. In euro there is no trade at all in 1999–2002 and 2005–2008, while in 2003, 2004 and 2009 only 16–22% of days have trades; since 2021, between 11% and 26% of each year's days have no euro trade (19% over 2022–2026). A day without trades is one with numar 0: a valoare of 0 with numar above zero (2024-06-27 in euro: one trade, 0.00) is an amount below the rounding threshold, not zero trades. A day with no publication is a different thing: it does not appear in the response at all, and meta says how many working days the interval held.
Lei and euro are not additive. They are different currencies, each with its own unit — million RON and million EUR — and a combined total would be a lie.
Query parameters
zilnic (default) or lunar. It also changes the format of the bounds.
zilniclunar
YYYY-MM-DD for daily, YYYY-MM for monthly.
e.g. 2024-06-15e.g. 2024-01-02
de_la.
e.g. 2024-06-30e.g. 2024-06-28e.g. 2024-06-15
How it behaves
- How many government-bond trades took place and for what value, for securities denominated in lei and in euro. Daily series from September 1999, monthly series from November 1999.
- The monthly series the NBR publishes is NOT the month's total — it is the DAILY AVERAGE. The source note says so, and the data confirms it: July 2026 shows 7,438.8 monthly and exactly 7,438.8 as the average of its 23 published days. Anyone who adds up twelve monthly figures to get a year's volume gets a meaningless number — which is why the response also carries
valoare_totala, computed by us from the daily series, with thezile(days) it is built from. - The two averages — the published one and
valoare_medie_zilnica_calculata— agree in 292 of 319 months for the lei value, within 0.1%. Five months differ by more than 10%: the exact divisor the NBR used cannot be reconstructed from the published data. We give both; the published figure remains the official one. - Zero means zero, not missing data. In euro there is no trade at all in 1999–2002 and 2005–2008, while in 2003, 2004 and 2009 only 16–22% of days have trades; since 2021, between 11% and 26% of each year's days have no euro trade (19% over 2022–2026). A day without trades is one with
numar0: avaloareof 0 withnumarabove zero (2024-06-27 in euro: one trade, 0.00) is an amount below the rounding threshold, not zero trades. A day without a publication is a different thing: it does not appear in the response, andmeta.zile_lucratoaresays what the returned day count should be read against. - Lei and euro are never added together. They are different currencies, each with its own unit — millions RON and millions EUR — and a combined total would be a lie. That is also why
rezumathas no "grand total" line. - The bounds are written according to the frequency:
YYYY-MM-DDfor daily,YYYY-MMfor monthly. A single day in a monthly request would not say whether the whole month or just that day was meant, so it is refused. - Bounds outside the coverage are silently clamped to it, and
meta.ajustatsays what moved and from where. Caps: 366 days for daily, 120 months for monthly.
What it is for
- Secondary-market liquidity: how much actually trades, not only at what yield.
- The real volume of a month or a year, with the total computed correctly from the daily series.
- The weight of the euro-denominated market against the lei one, tracked over time.
Response structure
varf is null when the interval is flat zero.
null if the period has no value for them.
YYYY-MM, at monthly frequency.
zile. Monthly only.
true when the month's total is built from fewer days than the month had, so it understates reality. Monthly only.
milioane_ron or milioane_eur.
data is null and this says why. The interval falls entirely outside the series; the response gives the coverage.
fara_date is prose and may be rephrased, this is not.
Response examples
{
"data": {
"frecventa": "zilnic",
"de_la": "2024-06-15",
"pana_la": "2024-06-30",
"rezumat": {
"lei": {
"zile": 9,
"zile_fara_tranzactii": 0,
"numar_total": 2163,
"valoare_totala": "27948.30",
"valoare_medie_zilnica": "3105.37",
"varf": {
"data": "2024-06-25",
"valoare": "8448.90",
"numar": 306
},
"unitate": "milioane_ron"
},
"euro": {
"zile": 9,
"zile_fara_tranzactii": 1,
"numar_total": 16,
"valoare_totala": "222.50",
"valoare_medie_zilnica": "24.72",
"varf": {
"data": "2024-06-26",
"valoare": "101.00",
"numar": 2
},
"unitate": "milioane_eur"
}
},
"perioade": [
{
"data": "2024-06-17",
"lei": {
"numar": 163,
"valoare": "2048.20",
"unitate": "milioane_ron"
},
"euro": {
"numar": 0,
"valoare": "0.00",
"unitate": "milioane_eur"
}
}
]
},
"meta": {
"sursa": "BNR — tranzacţii pe piaţa secundară (baza de date interactivă).",
"acoperire": {
"de_la": "1999-09-01",
"pana_la": "2026-09-21"
},
"perioade_publicate": 9,
"zile_interval": 16,
"zile_lucratoare": 9,
"nota_zero": "Zero înseamnă zero, nu date lipsă. În euro nu există nicio tranzacţie în 1999–2002 şi 2005–2008, iar în 2003, 2004 şi 2009 doar 16–22% din zile au tranzacţii; din 2021, între 11% şi 26% din zilele fiecărui an n-au nicio tranzacţie în euro (19% pe 2022–2026). Ziua fără tranzacţii e cea cu `numar` 0: o `valoare` 0 cu `numar` peste zero (2024-06-27 în euro: o tranzacţie, 0,00) e o sumă sub pragul de rotunjire, nu zero tranzacţii.",
"nota_lipsa": "Zilele fără publicare nu apar în răspuns. `zile_lucratoare` e reperul faţă de care se citeşte `perioade_publicate` — nu e identic cu calendarul de tranzacţionare: BNR a publicat şi în şase zile de sâmbătă (2002-01-19, 2002-01-26, 2010-02-06, 2010-02-20, 2010-06-26, 2011-05-14).",
"nota_monede": "Lei şi euro nu se adună: sunt monede diferite, fiecare cu unitatea ei (`milioane_ron`, `milioane_eur`)."
}
}
{
"data": {
"frecventa": "lunar",
"de_la": "2024-01",
"pana_la": "2024-06",
"rezumat": {
"lei": {
"luni": 6,
"zile": 123,
"numar_total": 19549,
"valoare_totala": "276827.30",
"valoare_medie_zilnica": "2250.63",
"varf": {
"perioada": "2024-02",
"valoare_totala": "48774.60"
},
"unitate": "milioane_ron"
},
"euro": {
"luni": 6,
"zile": 123,
"numar_total": 341,
"valoare_totala": "818.50",
"valoare_medie_zilnica": "6.65",
"varf": {
"perioada": "2024-01",
"valoare_totala": "326.30"
},
"unitate": "milioane_eur"
}
},
"perioade": [
{
"perioada": "2024-01",
"zile_lucratoare": 20,
"total_partial": false,
"lei": {
"numar_mediu_zilnic": "139.00",
"valoare_medie_zilnica": "2291.00",
"numar_total": 2780,
"valoare_totala": "45819.20",
"zile": 20,
"valoare_medie_zilnica_calculata": "2290.96",
"unitate": "milioane_ron"
},
"euro": {
"numar_mediu_zilnic": "3.30",
"valoare_medie_zilnica": "16.30",
"numar_total": 65,
"valoare_totala": "326.30",
"zile": 20,
"valoare_medie_zilnica_calculata": "16.32",
"unitate": "milioane_eur"
}
}
]
},
"meta": {
"sursa": "BNR — tranzacţii pe piaţa secundară (baza de date interactivă).",
"acoperire": {
"de_la": "1999-11",
"pana_la": "2026-08"
},
"perioade_publicate": 6,
"luni_interval": 6,
"nota_lunar": "Seria lunară a BNR e MEDIA ZILNICĂ, nu totalul lunii: `valoare_medie_zilnica` şi `numar_mediu_zilnic` sunt cifrele publicate. `valoare_totala` şi `numar_total` sunt calculate de noi din seria zilnică, din `zile` zile — adunarea mediilor lunare ar da un număr fără sens.",
"nota_potrivire": "`valoare_medie_zilnica_calculata` e media care iese din seria zilnică, pusă lângă cea publicată. Coincid în 292 din 319 luni la valoarea în lei (sub 0,1% diferenţă), dar cinci luni diferă cu peste 10% — divizorul exact folosit de BNR nu se poate reconstitui din datele publicate. Când cele două nu coincid, cifra publicată rămâne cea oficială.",
"nota_zero": "Zero înseamnă zero, nu date lipsă. În euro nu există nicio tranzacţie în 1999–2002 şi 2005–2008, iar în 2003, 2004 şi 2009 doar 16–22% din zile au tranzacţii; din 2021, între 11% şi 26% din zilele fiecărui an n-au nicio tranzacţie în euro (19% pe 2022–2026). Ziua fără tranzacţii e cea cu `numar` 0: o `valoare` 0 cu `numar` peste zero (2024-06-27 în euro: o tranzacţie, 0,00) e o sumă sub pragul de rotunjire, nu zero tranzacţii.",
"nota_lipsa": "Lunile fără publicare nu apar în răspuns, iar `zile` din fiecare lună spune din câte zile e făcut totalul ei — o lună cu zile lipsă din seria zilnică are un total mai mic decât realitatea, iar media publicată de BNR şi cea care ar ieşi din zilnic nu se mai potrivesc.",
"nota_monede": "Lei şi euro nu se adună: sunt monede diferite, fiecare cu unitatea ei (`milioane_ron`, `milioane_eur`)."
}
}
{
"data": null,
"meta": {
"de_la": "2024-06-15",
"pana_la": "2024-06-15",
"acoperire": {
"de_la": "1999-09-01",
"pana_la": "2026-09-21"
},
"fara_date": "Intervalul cerut e în întregime în afara acoperirii (1999-09-01 → 2026-09-21).",
"fara_date_cod": "in_afara_acoperirii"
}
}
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 | Wrong format for the requested frequency, pana_la before de_la, an interval in the future, or interval_prea_lung — over 366 days or 120 months. |
| 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": "Wrong format for the requested frequency, pana_la before de_la, an interval in the future, or interval_prea_lung — over 366 days or 120 months.",
"detalii": {
"frecventa": [
"The value sent does not satisfy the parameter rule."
]
}
}
}