Financiar v1 / Curs
NBR reference exchange rate
The quotations of the most recent day published by the NBR, for all currencies or only the ones requested. The NBR publishes only on banking days, generally after 13:00 — the response always says which day the rate belongs to (data) and whether that is the current day (este_azi).
GET
https://oneapi.ro/api/financiar/v1/curs
Query parameters
NameTypeDescriptionAccepted values
datarequired
string
Required: the day,
YYYY-MM-DD. Cannot be in the future.
e.g. 2024-06-14e.g. 2024-06-15
valutalistoptional
text
Optional filter:
?valuta=EUR,USD or ?valuta[]=EUR&valuta[]=USD. Without it, every currency quoted on that day is returned.
e.g. EUR
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.- The quotes for the most recent day published by the National Bank of Romania. The rate is RON per
multiplicatorunits of currency (moneda_baza: "RON") — the inverse of the ECB, which quotes currency per 1 EUR. - NBR publishes on banking days only, generally after 13:00. There is no rate for weekends, public holidays, or the morning of a banking day. The route returns the last published day and declares it in
data; it never invents a quote for a day without publication. - Five currencies are published per 100 units (HUF, JPY, KRW, IDR, ISK). Use
valoare_unitaraif you multiply directly, orvaloare+multiplicatorif you must cite the official figure. - Amounts are decimal strings, not JSON numbers, so that no float rounding errors appear.
What it is for
- Displaying the day's exchange rate.
- Converting a foreign-currency invoice at the official rate.
Response structure
FieldTypeDescription
data.data
string
The banking day for which NBR published the quotes in the response.
data.valoare.moneda_baza
string
The currency the quote is expressed in. Always
RON on this route.
data.valoare.cotatii[].valuta
string
ISO 4217 currency code.
data.valoare.cotatii[].valoare
string
The figure published by NBR, for
multiplicator units of currency.
data.valoare.cotatii[].multiplicator
integer
How many units of currency
valoare covers (1 or 100).
data.valoare.cotatii[].valoare_unitara
string
RON for ONE unit of currency, already divided by the multiplier.
data.ultima
object
The last day published on or before
data, with its quotes: {data, valoare}. null only if nothing exists before the requested day.
data.ultima.data
string
data.ultima.valoare.moneda_baza
string
data.ultima.valoare.cotatii[].valuta
string
ISO 4217 currency code.
data.ultima.valoare.cotatii[].valoare
string
The quotes for the requested day:
{moneda_baza, cotatii[]}. null if that day has no publication.
data.ultima.valoare.cotatii[].multiplicator
integer
Factor the value is multiplied by to reach the base unit.
data.ultima.valoare.cotatii[].valoare_unitara
string
The value per single unit.
meta.sursa
string
The official source the data comes from, with its licence where one is required.
meta.cotatii
integer
How many quotations the response covers.
meta.nota
string
A note on how to read the response — a pitfall, a convention or a limit of the source.
meta.nota_publicare
string
A note on how to read the response: a caveat, a convention or a limit of the source.
meta.necotate
Currencies requested through the filter that have NO quote on that day. It appears only when something is missing — otherwise a partial response would pass unnoticed.
Response examples
GEThttps://oneapi.ro/api/financiar/v1/curs?data=2024-06-14
{
"data": {
"data": "2024-06-14",
"valoare": {
"moneda_baza": "RON",
"cotatii": [
{
"valuta": "AED",
"valoare": "1.268",
"multiplicator": 1,
"valoare_unitara": "1.268"
}
]
},
"ultima": {
"data": "2024-06-14",
"valoare": {
"moneda_baza": "RON",
"cotatii": [
{
"valuta": "AED",
"valoare": "1.268",
"multiplicator": 1,
"valoare_unitara": "1.268"
}
]
}
}
},
"meta": {
"sursa": "Banca Naţională a României",
"cotatii": 31,
"nota": "Valoare publicată în ziua cerută.",
"nota_publicare": "Curs de referinţă, publicat în zilele bancare, în general după ora 13: 00."
}
}
GEThttps://oneapi.ro/api/financiar/v1/curs?data=2024-06-14&valuta=EUR
{
"data": {
"data": "2024-06-14",
"valoare": {
"moneda_baza": "RON",
"cotatii": [
{
"valuta": "EUR",
"valoare": "4.9771",
"multiplicator": 1,
"valoare_unitara": "4.9771"
}
]
},
"ultima": {
"data": "2024-06-14",
"valoare": {
"moneda_baza": "RON",
"cotatii": [
{
"valuta": "EUR",
"valoare": "4.9771",
"multiplicator": 1,
"valoare_unitara": "4.9771"
}
]
}
}
},
"meta": {
"sursa": "Banca Naţională a României",
"cotatii": 1,
"nota": "Valoare publicată în ziua cerută.",
"nota_publicare": "Curs de referinţă, publicat în zilele bancare, în general după ora 13: 00."
}
}
GEThttps://oneapi.ro/api/financiar/v1/curs?data=2024-06-15
{
"data": {
"data": "2024-06-15",
"valoare": null,
"ultima": {
"data": "2024-06-14",
"valoare": {
"moneda_baza": "RON",
"cotatii": [
{
"valuta": "AED",
"valoare": "1.268",
"multiplicator": 1,
"valoare_unitara": "1.268"
}
]
}
}
},
"meta": {
"sursa": "Banca Naţională a României",
"cotatii": 31,
"nota": "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`.",
"nota_publicare": "Curs de referinţă, publicat în zilele bancare, în general după ora 13: 00."
}
}
GEThttps://oneapi.ro/api/financiar/v1/curs?data=2024-06-15&valuta=EUR
{
"data": {
"data": "2024-06-15",
"valoare": null,
"ultima": {
"data": "2024-06-14",
"valoare": {
"moneda_baza": "RON",
"cotatii": [
{
"valuta": "EUR",
"valoare": "4.9771",
"multiplicator": 1,
"valoare_unitara": "4.9771"
}
]
}
}
},
"meta": {
"sursa": "Banca Naţională a României",
"cotatii": 1,
"nota": "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`.",
"nota_publicare": "Curs de referinţă, publicat în zilele bancare, în general după ora 13: 00."
}
}
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 | Missing, malformed or future date; a currency code that is not 3 letters. |
| 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": "Missing, malformed or future date; a currency code that is not 3 letters.",
"detalii": {
"data": [
"The value sent does not satisfy the parameter rule."
]
}
}
}