Fixing series over an interval
Government securities yields between two dates, grouped by maturity, with bid, ask, mid and spread on each day.
Something other than /titluri-stat/fixing: there the question is „what is the curve today", and the answer is a table of five rows. Here it is „how did it move", and the answer is a series. The same distinction as between /curs and /curs/interval.
rezumat answers directly the question actually being asked. In February 2020 the mean spread was 0.221 points; in March, 0.304 — with the maximum rising from 0.33 to 0.46, and the ten-year yield from about 4.2% to about 5.9%. Those figures come out of one request, without walking through hundreds of points. It is an aggregation /serii/{cod}/valori cannot do: the spread is born of TWO series.
Every point carries all four values, with no „mid only" variant: mid serves the chart, the spread serves liquidity, and a route that changes its shape depending on a parameter is harder to use. A whole year with every maturity means around 1,250 points; with a filter, far fewer.
The interval is capped at 366 days, the same bounds as at /curs/interval and /robor/interval.
Query parameters
YYYY-MM-DD. Cannot be in the future; aligns to coverage.
e.g. 2024-06-15e.g. 2024-06-17e.g. 2024-01-02
?maturitate=10Y or ?maturitate=6M,10Y. Without it, all five.
6M12M3Y5Y10Y
How it behaves
- Government securities yields between two dates, grouped by maturity, with bid, ask, mid and spread for each day.
- Different from
/titluri-stat/fixing: there the question is "what is the curve today", and the answer is a five-row table. Here it is "how did it move", and the answer is a series. The same distinction as between/cursand/curs/interval. rezumatanswers the question actually being asked, without walking the series: the minimum, maximum and average for mid and for spread, plus the endpoints. In March 2020 the ten-year yield rose from 4.04% to 5.02% — but it touched 5.92% mid-month, a peak the endpoints hide entirely. The maximum spread jumped from 0.21 points in February to 0.46 in March.- This is an aggregation
/serii/{cod}/valoriCANNOT do: the spread is born from TWO series, bid and ask, not from one. - Every point carries all four values, with no "mid only" variant. Mid serves the chart, the spread serves liquidity, and a route that changes shape depending on a parameter is harder to use than one slightly larger. A full year with all maturities is around 1,250 points; with a filter, far fewer.
maturitateis OPTIONAL here, unlike/curs/intervalwhere the currency is required: the maturities are five, fixed and known, and all five at once is a natural request for a curve. With currencies, "all" would mean forty series.- The order of the series comes from the maturity table, not from the order the client wrote them:
?maturitate=10Y,6Mstill returns 6M before 10Y, so a curve drawn from the response does not come out scrambled. - Days without publication do not appear in the series, and
rezumat.punctesays how many days actually have a quote. The bounds align to coverage — which starts on 2011-01-10 — and whatever was adjusted appears inmeta.ajustat. The cap is 366 days, checked AFTER alignment.
What it is for
- Charting the evolution of the Romanian sovereign curve.
- Measuring liquidity stress through the widening of the spread.
- Comparing two periods — a calm month against a crisis month.
Response structure
ON, 3M, 12M).
bid − ask, in percentage points. Already positive.
data is null and this says why. The interval lies entirely before 2011-01-10.
fara_date is prose and may be rephrased, this is not.
Response examples
{
"data": {
"de_la": "2024-06-15",
"pana_la": "2024-06-30",
"unitate": "procent_pe_an",
"serii": [
{
"maturitate": "6M",
"denumire": "şase luni",
"luni": 6,
"rezumat": {
"puncte": 9,
"prima_zi": "2024-06-17",
"ultima_zi": "2024-06-28",
"mid": {
"primul": "5.95",
"ultimul": "5.92",
"minim": "5.92",
"maxim": "5.95",
"mediu": "5.94"
},
"spread": {
"minim": "0.30",
"maxim": "0.31",
"mediu": "0.30"
}
},
"valori": [
{
"data": "2024-06-17",
"bid": "6.10",
"ask": "5.80",
"mid": "5.95",
"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"
},
"puncte": 18,
"zile_interval": 16,
"nota_randamente": "Valorile sunt RANDAMENTE: `bid` e mai mare decât `ask`, iar `spread` e `bid − ask`, deja pozitiv.",
"nota_rezumat": "`rezumat` dă minimul, maximul şi media pentru mid şi pentru spread, plus capetele — ca „cât s-a lărgit spread-ul\" să nu ceară parcurgerea seriei.",
"nota_zile": "Zilele fără publicare nu apar în serie; `rezumat.puncte` spune câte zile au efectiv cotaţie."
}
}
{
"data": {
"de_la": "2024-06-17",
"pana_la": "2024-06-28",
"unitate": "procent_pe_an",
"serii": [
{
"maturitate": "12M",
"denumire": "douăsprezece luni",
"luni": 12,
"rezumat": {
"puncte": 9,
"prima_zi": "2024-06-17",
"ultima_zi": "2024-06-28",
"mid": {
"primul": "5.96",
"ultimul": "5.93",
"minim": "5.93",
"maxim": "5.96",
"mediu": "5.94"
},
"spread": {
"minim": "0.30",
"maxim": "0.32",
"mediu": "0.31"
}
},
"valori": [
{
"data": "2024-06-17",
"bid": "6.11",
"ask": "5.80",
"mid": "5.96",
"spread": "0.31"
}
]
}
]
},
"meta": {
"sursa": "BNR — fixing titluri de stat (baza de date interactivă).",
"acoperire": {
"de_la": "2011-01-10",
"pana_la": "2026-09-21"
},
"puncte": 9,
"zile_interval": 12,
"nota_randamente": "Valorile sunt RANDAMENTE: `bid` e mai mare decât `ask`, iar `spread` e `bid − ask`, deja pozitiv.",
"nota_rezumat": "`rezumat` dă minimul, maximul şi media pentru mid şi pentru spread, plus capetele — ca „cât s-a lărgit spread-ul\" să nu ceară parcurgerea seriei.",
"nota_zile": "Zilele fără publicare nu apar în serie; `rezumat.puncte` spune câte zile au efectiv cotaţie."
}
}
{
"data": {
"de_la": "2024-01-02",
"pana_la": "2024-01-31",
"unitate": "procent_pe_an",
"serii": [
{
"maturitate": "6M",
"denumire": "şase luni",
"luni": 6,
"rezumat": {
"puncte": 20,
"prima_zi": "2024-01-03",
"ultima_zi": "2024-01-31",
"mid": {
"primul": "5.97",
"ultimul": "5.91",
"minim": "5.91",
"maxim": "5.97",
"mediu": "5.94"
},
"spread": {
"minim": "0.33",
"maxim": "0.37",
"mediu": "0.36"
}
},
"valori": [
{
"data": "2024-01-03",
"bid": "6.15",
"ask": "5.78",
"mid": "5.97",
"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"
},
"puncte": 100,
"zile_interval": 30,
"nota_randamente": "Valorile sunt RANDAMENTE: `bid` e mai mare decât `ask`, iar `spread` e `bid − ask`, deja pozitiv.",
"nota_rezumat": "`rezumat` dă minimul, maximul şi media pentru mid şi pentru spread, plus capetele — ca „cât s-a lărgit spread-ul\" să nu ceară parcurgerea seriei.",
"nota_zile": "Zilele fără publicare nu apar în serie; `rezumat.puncte` spune câte zile au efectiv cotaţie."
}
}
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 | interval_prea_lung (over 366 days, checked after alignment); non-existent maturity; de_la missing or in the future; pana_la before de_la. |
| 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": "interval_prea_lung (over 366 days, checked after alignment); non-existent maturity; de_la missing or in the future; pana_la before de_la.",
"detalii": {
"de_la": [
"The value sent does not satisfy the parameter rule."
]
}
}
}