Government securities fixing
The bid and ask yields of Romanian government securities, at the five published maturities: 6 months, 12 months, 3, 5 and 10 years. A daily series since January 2011.
These are YIELDS, not prices, and the bid/ask relationship inverts. You buy at the ask price, which is higher, so the corresponding yield is LOWER. Verified across all 19,710 pairs since 2011: bid > ask in 100% of cases, without a single exception.
That is why spread comes already computed as bid − ask, positive. Anyone computing it the other way round, out of price reflex, gets a negative number and concludes the data is broken. The historical mean is 0.28 percentage points, between 0.14 and 0.51 — so it is also a liquidity benchmark.
The points come ordered by actual maturity, not alphabetically: sorted as text they would come out 10Y, 12M, 3Y, 5Y, 6M. luni gives the order and serves the interpolation.
A day with no publication has valoare empty, and the last preceding fixing comes back in ultima.
Query parameters
YYYY-MM-DD. Cannot be in the future.
e.g. 2024-06-15e.g. 2024-01-15e.g. 2023-06-15
How it behaves
?data=is required, and the response always has the same shape:data(the day you asked for),valoare(filled ONLY if we have that exact day) andultima(the last day published on or before it, with its value).valoarestays empty DELIBERATELY when the requested day has no publication — a figure from another day sits separately, underultima, so it cannot be used by mistake in a calculation. Missing data is no longer an error: the response is 200, and comparingdatawithultima.datatells you everything.- Bid and ask yields on Romanian government securities, across the five maturities published by NBR: 6 months, 12 months, 3, 5 and 10 years. Daily series since January 2011.
- These are YIELDS, not prices, and the bid/ask relationship inverts. You buy at the
askprice, which is higher, so the corresponding yield is LOWER. Verified across all 19,710 pairs since 2011: bid > ask in 100% of cases, without a single exception. - That is why
spreadis returned already computed asbid − ask, positive. Anyone computing it the other way, from the reflex of prices, gets a negative number and concludes the data is broken. The unit is percentage points of yield. - The spread also serves as a liquidity gauge. The historical average is 0.28 points, between 0.14 and 0.51 — but on 19 March 2020, at the height of the crisis, it ran between 0.33 and 0.46 across all maturities, against 0.17–0.30 in calm periods.
- Points come ordered by REAL maturity, not alphabetically. Sorted as text they would read
10Y, 12M, 3Y, 5Y, 6M— a curve drawn that way looks like noise.lunigives the ordering and serves for interpolation. - A day without publication has
valoareempty, and the last preceding fixing comes back inultima. No age ceiling. All maturities come from the SAME day: a curve that mixes market moments is not a curve. - This is the Romanian sovereign curve. For the euro area one, across 11 maturities and two issuer variants, see
/bce/curba— they are different markets and should not be read together without knowing that.
What it is for
- The yield the market demands on Romanian sovereign debt.
- Discounting a leu-denominated cash flow at market yields.
- Tracking market liquidity through the evolution of the spread.
Response structure
{unitate, puncte[]}. null if that day has no publication.
data, with its fixing: {data, valoare}. null only if nothing exists before the requested day.
procent_pe_an.
6M, 12M, 3Y, 5Y, 10Y).
bid − ask, in percentage points. Already positive.
Response examples
{
"data": {
"data": "2024-06-15",
"valoare": null,
"ultima": {
"data": "2024-06-14",
"valoare": {
"unitate": "procent_pe_an",
"puncte": [
{
"maturitate": "6M",
"denumire": "şase luni",
"luni": 6,
"bid": "6.09",
"ask": "5.79",
"mid": "5.94",
"spread": "0.30"
}
]
}
}
},
"meta": {
"sursa": "BNR — fixing titluri de stat (baza de date interactivă).",
"acoperire": {
"de_la": "2011-01-10",
"pana_la": "2026-09-21"
},
"nota_randamente": "Valorile sunt RANDAMENTE, nu preţuri. De aceea `bid` e mai mare decât `ask`: cumperi la preţul ask, care e mai mare, deci randamentul e mai mic. Verificat pe 19.710 perechi din 2011: bid > ask în 100% din cazuri.",
"nota_spread": "`spread` e `bid − ask`, în puncte procentuale de randament, deja pozitiv. Calculat invers ar da un număr negativ. Media istorică: 0,28 puncte, între 0,14 şi 0,51.",
"nota_ordine": "Punctele sunt ordonate pe maturitate reală. Sortate alfabetic ar ieşi `10Y, 12M, 3Y, 5Y, 6M` — o curbă desenată aşa arată ca zgomot.",
"nota_zi": "Ziua cerută nu are publicare. `valoare` e gol DELIBERAT, ca să nu fie folosită o cifră care nu e a zilei cerute; ultima publicată înainte de ea e în `ultima`."
}
}
{
"data": {
"data": "2024-01-15",
"valoare": {
"unitate": "procent_pe_an",
"puncte": [
{
"maturitate": "6M",
"denumire": "şase luni",
"luni": 6,
"bid": "6.12",
"ask": "5.76",
"mid": "5.94",
"spread": "0.36"
}
]
},
"ultima": {
"data": "2024-01-15",
"valoare": {
"unitate": "procent_pe_an",
"puncte": [
{
"maturitate": "6M",
"denumire": "şase luni",
"luni": 6,
"bid": "6.12",
"ask": "5.76",
"mid": "5.94",
"spread": "0.36"
}
]
}
}
},
"meta": {
"sursa": "BNR — fixing titluri de stat (baza de date interactivă).",
"acoperire": {
"de_la": "2011-01-10",
"pana_la": "2026-09-21"
},
"nota_randamente": "Valorile sunt RANDAMENTE, nu preţuri. De aceea `bid` e mai mare decât `ask`: cumperi la preţul ask, care e mai mare, deci randamentul e mai mic. Verificat pe 19.710 perechi din 2011: bid > ask în 100% din cazuri.",
"nota_spread": "`spread` e `bid − ask`, în puncte procentuale de randament, deja pozitiv. Calculat invers ar da un număr negativ. Media istorică: 0,28 puncte, între 0,14 şi 0,51.",
"nota_ordine": "Punctele sunt ordonate pe maturitate reală. Sortate alfabetic ar ieşi `10Y, 12M, 3Y, 5Y, 6M` — o curbă desenată aşa arată ca zgomot.",
"nota_zi": "Valoare publicată în ziua cerută."
}
}
{
"data": {
"data": "2023-06-15",
"valoare": {
"unitate": "procent_pe_an",
"puncte": [
{
"maturitate": "6M",
"denumire": "şase luni",
"luni": 6,
"bid": "6.24",
"ask": "5.87",
"mid": "6.06",
"spread": "0.37"
}
]
},
"ultima": {
"data": "2023-06-15",
"valoare": {
"unitate": "procent_pe_an",
"puncte": [
{
"maturitate": "6M",
"denumire": "şase luni",
"luni": 6,
"bid": "6.24",
"ask": "5.87",
"mid": "6.06",
"spread": "0.37"
}
]
}
}
},
"meta": {
"sursa": "BNR — fixing titluri de stat (baza de date interactivă).",
"acoperire": {
"de_la": "2011-01-10",
"pana_la": "2026-09-21"
},
"nota_randamente": "Valorile sunt RANDAMENTE, nu preţuri. De aceea `bid` e mai mare decât `ask`: cumperi la preţul ask, care e mai mare, deci randamentul e mai mic. Verificat pe 19.710 perechi din 2011: bid > ask în 100% din cazuri.",
"nota_spread": "`spread` e `bid − ask`, în puncte procentuale de randament, deja pozitiv. Calculat invers ar da un număr negativ. Media istorică: 0,28 puncte, între 0,14 şi 0,51.",
"nota_ordine": "Punctele sunt ordonate pe maturitate reală. Sortate alfabetic ar ieşi `10Y, 12M, 3Y, 5Y, 6M` — o curbă desenată aşa arată ca zgomot.",
"nota_zi": "Valoare publicată în ziua cerută."
}
}
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 | Malformed or future date. |
| 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": "Malformed or future date.",
"detalii": {
"data": [
"The value sent does not satisfy the parameter rule."
]
}
}
}