API eValuta · V2 · JSON / XML / SOAP
API eValuta
Cursuri BNR pentru integrări și aplicații. Un apel pentru un curs, o medie sau o valoare de închidere.
URL de bază https://evaluta.ro/api/v2
JSON sau XML · SOAP 1.1 · O cerere, o valoare · Date în format ISO 8601
OpenAPI 3.1 (JSON) ↗Pornire rapidă
01 / AccesGenerează cheia API, apoi trimite-o în header-ul Authorization sau X-Api-Key. Exemplul de mai jos returnează un singur curs EUR/RON.
curl -H 'Authorization: Bearer ev_CHEIA_TA_API' \
'https://evaluta.ro/api/v2/curs-bnr/eur'
Parametrul opțional data selectează ziua pentru care soliciți cursul. Dacă nu există o publicație BNR în acea zi, se returnează ultimul curs disponibil până atunci.
curl -H 'X-Api-Key: ev_CHEIA_TA_API' \
'https://evaluta.ro/api/v2/curs-bnr/eur?data=2026-09-20'
Specificație OpenAPI
Contract JSONDescarcă specificația OpenAPI 3.1 pentru endpoint-urile REST (JSON și XML). Pentru clienții SOAP 1.1, folosește separat WSDL-ul de mai jos.
GET /openapi.json
XML și SOAP 1.1
Aceleași cotații BNREndpoint-urile REST pentru BNR, BCE, InforEuro, curs vamal și indici de referință pot returna XML în loc de JSON. Folosește header-ul Accept: application/xml. Nu se schimbă URL-ul, cheia API sau logica de calcul.
curl -H 'Authorization: Bearer ev_CHEIA_TA_API' \
-H 'Accept: application/xml' \
'https://evaluta.ro/api/v2/curs-bnr/eur?data=2026-09-20'
<?xml version="1.0" encoding="UTF-8"?>
<curs_bnr>
<valuta>EUR</valuta>
<curs>5.2644</curs>
<data>2026-09-18</data>
</curs_bnr>
Exemplul de răspuns de mai sus este ilustrativ. Pentru medii și cursuri de închidere, răspunsul conține și <perioada>. Erorile 404 și 422 pe aceste endpoint-uri folosesc <eroare><cod>...</cod></eroare> când se solicită XML. Erorile de autentificare și de limitare a cererilor rămân JSON.
POST /api/v2/soap
Descrierea serviciului: GET /api/soap.wsdl. WSDL-ul cuprinde operațiile BNR, conversiile valutare, BCE, InforEuro, curs vamal și indici de referință, câte o valoare pe cerere. Utilizează aceeași cheie API și aceleași limite. Trimite Content-Type: text/xml; charset=utf-8 și cheia prin Authorization: Bearer sau X-Api-Key.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ev="https://evaluta.ro/api/v2/soap">
<soap:Body>
<ev:ObtineCursBnr>
<ev:valuta>EUR</ev:valuta>
<ev:data>2026-09-20</ev:data>
</ev:ObtineCursBnr>
</soap:Body>
</soap:Envelope>
Fără <ev:data> se folosește ziua curentă. O eroare de solicitare validată de serviciul SOAP se returnează ca soap:Fault, cu HTTP 500. Erorile 401, 403, 429 și 503 emise înainte de procesarea SOAP folosesc JSON.
Curs BNR
02 / Cotații/api/v2/curs-bnr/:valuta
O singură valută, cotată în lei. Fără data, se folosește ziua curentă din România. Cu data=AAAA-LL-ZZ, se caută ultimul curs publicat până la data solicitată, inclusiv. Cursul este exprimat pentru o unitate din valută.
/api/v2/curs-bnr/facturare/:valuta
data reprezintă data facturii. Se scade o zi calendaristică și se returnează ultimul curs BNR disponibil până la acea zi. Dacă lipsește data, se folosește data de astăzi. Acest endpoint aplică exclusiv regula D-1, nu stabilește automat tratamentul fiscal al fiecărui document.
GET /api/v2/curs-bnr/facturare/eur?data=2026-09-21
API curs BNR azi
Cursul de astăziDouă variante pentru a obține cursul BNR azi prin API, în JSON sau XML. Ambele folosesc data curentă din România (Europe/Bucharest), acceptă o singură valută per cerere și nu au parametrul data. Dacă ai nevoie de un curs pentru o dată aleasă de tine, folosește /api/v2/curs-bnr/:valuta?data=AAAA-LL-ZZ.
/api/v2/curs-bnr/azi/:valuta
Returnează ultimul curs BNR disponibil până astăzi, inclusiv. Înainte de publicarea cursului de azi, în weekend sau în zilele fără publicație, primești cursul din ultima zi în care a fost publicat. Este echivalent cu /api/v2/curs-bnr/:valuta fără data.
GET /api/v2/curs-bnr/azi/eur
/api/v2/curs-bnr/azi/strict/:valuta
Returnează cursul numai dacă există o cotație BNR cu data publicării de astăzi pentru valuta solicitată. De exemplu, într-o zi lucrătoare la 09:00, înainte de publicare, nu returnează cursul de ieri. În weekend, dacă nu există o publicație datată astăzi, nu returnează nicio valoare.
GET /api/v2/curs-bnr/azi/strict/eur
Dacă nu există curs publicat astăzi, răspunsul este HTTP 404, cu același cod de eroare în JSON sau XML:
{"error":"curs_azi_indisponibil"}
În SOAP 1.1, operațiile corespunzătoare sunt ObtineCursBnrAzi și ObtineCursBnrAziStrict; ambele cer numai valuta. Varianta strictă semnalează lipsa cursului de azi prin soap:Fault.
Notificare curs BNR azi
Webhook unic · JSONÎnregistrează o notificare pentru cursul BNR publicat astăzi, fără interogări repetate. Fiecare cerere acceptă o valută și un URL HTTPS public. Dacă valoarea de astăzi există deja, răspunsul o returnează imediat, fără notificare ulterioară. Nu se trimite cursul unei zile precedente.
/api/v2/curs-bnr/azi/notificare
POST /api/v2/curs-bnr/azi/notificare
Content-Type: application/json
X-API-Key: ev_CHEIA_TA_API
{"valuta":"EUR","url":"https://exemplu.ro/webhook"}
Înainte de publicare, HTTP 202 returnează id, stare: "in_asteptare", data și secret. Păstrează secretul pentru verificarea semnăturii; este afișat doar la înregistrare. Dacă rata este deja disponibilă, HTTP 200 returnează stare: "disponibil", valuta, curs și data.
La publicare, eValuta trimite un POST JSON către URL-ul înregistrat cu id, valuta, curs și data. Antetul X-eValuta-Event-Id identifică notificarea pentru deduplicare. X-eValuta-Signature are formatul t=TIMESTAMP,v1=HEX, unde HEX este HMAC-SHA256 cu cheia secret peste TIMESTAMP.BODY (corpul JSON brut).
Un răspuns HTTP 2xx confirmă livrarea. În caz de eroare, se reîncearcă automat de cel mult cinci ori. Notificarea este valabilă numai pentru ziua înregistrării; dacă BNR nu publică un curs pentru acea zi, nu se trimite o valoare din altă zi. Maximum 20 de notificări în așteptare pentru aceeași cheie API și zi.
API convertor valutar
Conversii curente și istoriceConvertește o singură sumă între RON și o valută cotată de BNR. Același endpoint funcționează pentru conversii curente și istorice: fără data se folosește cursul disponibil astăzi, iar cu data=AAAA-LL-ZZ se folosește ultimul curs publicat până la ziua solicitată, inclusiv. În weekend și în zilele fără publicație se folosește ultima cotație disponibilă până la data cerută.
/api/v2/convertor-valutar?din=EUR&in=RON&suma=100
Conversia funcționează în ambele sensuri: EUR în RON și RON în EUR, precum și pentru celelalte valute cotate de BNR. Conversiile directe între două valute străine și conversia RON în RON nu sunt acceptate. O cerere returnează un singur rezultat.
| Parametru | Descriere |
|---|---|
din | Obligatoriu. Codul ISO al valutei sursă, de exemplu EUR sau RON. |
in | Obligatoriu. Codul ISO al valutei destinație, de exemplu RON sau USD. Una dintre cele două valute trebuie să fie RON. |
suma | Obligatoriu. Suma de convertit, cu separator zecimal punct, până la 8 zecimale și maximum 1.000.000.000.000. |
data | Opțional. Data conversiei în format AAAA-LL-ZZ. Fără acest parametru se folosește ziua curentă din România. |
curl -H 'Authorization: Bearer ev_CHEIA_TA_API' \
'https://evaluta.ro/api/v2/convertor-valutar?din=EUR&in=RON&suma=100'
GET /api/v2/convertor-valutar?din=RON&in=EUR&suma=100&data=2026-09-20
Răspuns JSON pentru EUR în RON (valorile din exemplu sunt ilustrative):
{
"din": "EUR",
"in": "RON",
"suma": "100.0",
"curs": "5.2644",
"rezultat": "526.44",
"data": "2026-09-18"
}
curs este cursul BNR în RON pentru o unitate din valuta străină, inclusiv când convertești din RON în valută. rezultat este suma obținută în moneda in, rotunjită la două zecimale. data indică ziua publicării cursului folosit, nu neapărat ziua solicitată.
Pentru XML, trimite Accept: application/xml către același URL. Răspunsul conține aceleași câmpuri în elementul <convertor_valutar>. În SOAP 1.1, folosește operația ConvertesteValutar din WSDL, cu parametrii din, in, suma și, opțional, data.
/api/v2/convertor-valutar/facturare?din=EUR&in=RON&suma=100&data=2026-09-21
data reprezintă data facturii și este opțional. Fără data, se folosește data curentă din România. Se scade o zi calendaristică, apoi se folosește ultimul curs BNR publicat până la ziua rezultată, inclusiv. Dacă ziua precedentă este nelucrătoare, se selectează ultima publicație disponibilă înainte de aceasta. Această variantă aplică regula tehnică D-1; nu stabilește automat tratamentul fiscal al documentului.
GET /api/v2/convertor-valutar/facturare?din=RON&in=EUR&suma=100&data=2026-09-21
/api/v2/convertor-valutar/azi?din=EUR&in=RON&suma=100
Convertește folosind ultimul curs BNR disponibil până astăzi. Înainte de publicarea cursului de azi, în weekend sau în zilele fără publicație, folosește ultima cotație disponibilă. Este echivalent cu convertorul standard fără data.
/api/v2/convertor-valutar/azi/strict?din=EUR&in=RON&suma=100
Convertește numai dacă există o cotație BNR cu data publicării de astăzi pentru valuta solicitată. Înainte de publicare, în weekend sau în alte zile fără cotație datată astăzi, returnează HTTP 404 cu {"error":"curs_azi_indisponibil"}. Nu folosește cursul de ieri.
Variantele /azi și /azi/strict nu acceptă parametrul data. Toate cele patru variante acceptă aceiași parametri obligatorii din, in și suma, returnează aceleași șase câmpuri și funcționează în JSON sau XML. În SOAP 1.1, operațiile corespunzătoare sunt ConvertesteValutar, ConvertesteValutarFacturare, ConvertesteValutarAzi și ConvertesteValutarAziStrict, descrise în WSDL.
API curs BCE
Cursuri normalizate în RONO singură valută per cerere, exprimată în RON pentru o unitate valutară. Pentru EUR se folosește cursul EUR/RON al BCE, iar pentru alte valute se împarte cursul EUR/RON la cotația EUR/valută din aceeași zi BCE. Nu se combină cursuri din zile diferite și nu se înlocuiesc cu cursuri BNR.
/api/v2/curs-bce/:valuta
Fără data se folosește ziua curentă din România. Cu data=AAAA-LL-ZZ se caută ultima publicație BCE disponibilă până la acea zi, inclusiv. În weekend, de sărbători sau înainte de publicarea noului curs, se folosește ultima cotație disponibilă.
GET /api/v2/curs-bce/usd?data=2026-09-18
/api/v2/curs-bce/azi/:valuta
Returnează ultimul curs BCE disponibil până astăzi, inclusiv. Este echivalent cu endpoint-ul curent fără data.
GET /api/v2/curs-bce/azi/eur
/api/v2/curs-bce/azi/strict/:valuta
Returnează un curs numai dacă sunt disponibile cotațiile BCE pentru valuta solicitată, publicate cu data de astăzi. Fără fallback. Altfel, returnează HTTP 404 cu {"error":"curs_azi_indisponibil"}.
GET /api/v2/curs-bce/azi/strict/usd
Endpoint-urile /azi și /azi/strict nu acceptă parametrul data. Răspunsul JSON conține valuta, curs și data, data reală a publicației BCE utilizate. Pentru XML folosește Accept: application/xml, cu elementul rădăcină <curs_bce>. În SOAP 1.1 sunt disponibile operațiile ObtineCursBce, ObtineCursBceAzi și ObtineCursBceAziStrict.
API curs InforEuro
Cursuri lunare normalizate în RONCursul lunar InforEuro al Comisiei Europene, exprimat în RON pentru o unitate valutară. Pentru EUR se folosește direct cotația EUR/RON InforEuro; pentru alte valute se împarte cotația EUR/RON la cotația EUR/valută din aceeași lună InforEuro. Nu se folosesc cursuri BNR sau BCE la normalizare.
/api/v2/curs-inforeuro/:valuta
Fără data se returnează ultima lună InforEuro disponibilă până în prezent. Pentru o lună specifică, folosește data=AAAA-LL. O lună solicitată explicit trebuie să aibă date proprii, fără fallback la luna anterioară. Sunt disponibile EUR și valutele pentru care există ambele cotații ale lunii în baza de date.
GET /api/v2/curs-inforeuro/usd?data=2026-09
Răspunsul conține valuta, curs și perioada (de exemplu 2026-09). Fiind un indicator lunar, nu are rute /azi sau /azi/strict. Pentru XML, folosește Accept: application/xml, cu rădăcina <curs_inforeuro>. Operația SOAP 1.1 este ObtineCursInforEuro.
API curs vamal
Curs lunar în RONUn curs vamal pentru o singură valută și o lună. Folosește aceeași regulă de calcul ca pagina curs vamal eValuta: cursul BNR disponibil până la penultima miercuri a lunii precedente. curs este exprimat în RON pentru o unitate din valuta solicitată, iar data din răspuns este data reală a publicației BNR utilizate.
/api/v2/curs-vamal/:valuta
Parametrul opțional data=AAAA-LL selectează luna de aplicabilitate. Fără parametru se folosește luna curentă din România. Nu se revine automat la o altă lună dacă lipsesc datele pentru luna cerută.
GET /api/v2/curs-vamal/eur
GET /api/v2/curs-vamal/usd?data=2026-09
Exemplu de răspuns JSON (valoare ilustrativă):
{
"valuta": "USD",
"curs": "4.5678",
"perioada": "2026-09",
"data": "2026-08-19"
}
XML: trimite Accept: application/xml pentru elementul rădăcină <curs_vamal>. SOAP 1.1: operația ObtineCursVamal din WSDL, cu valuta și opțional data (AAAA-LL).
API indici de referință
ROBOR · ROBID · EURIBOR · IRCCInterogări punctuale pentru indicii de referință. Fiecare cerere returnează o singură valoare procentuală pentru indicele și scadența alese. Fără data se folosește cea mai recentă observație disponibilă până astăzi; cu data=AAAA-LL-ZZ se selectează ultima observație stocată până la ziua respectivă. Nu se înlocuiește scadența solicitată cu o altă scadență.
/api/v2/indici/:indice/:scadenta
indice este robor sau robid. Scadențele acceptate pentru fiecare: on (overnight), tn (tomorrow/next), 1w, 1m, 3m, 6m și 12m.
GET /api/v2/indici/robor/on
GET /api/v2/indici/robid/tn
GET /api/v2/indici/robor/12m?data=2026-09-18
/api/v2/indici/euribor/:scadenta
Scadențele: 1w, 1m, 3m, 6m și 12m. Dacă nu există date pentru scadență sau dată, API-ul returnează 404.
GET /api/v2/indici/euribor/1w
GET /api/v2/indici/euribor/3m?data=2026-09-18
/api/v2/indici/ircc
Alias pentru /api/v2/indici/ircc/quarterly. Selectează cea mai recentă observație trimestrială din datele disponibile până la data cerută. data din răspuns este marcajul sfârșitului trimestrului de referință înregistrat, nu data intrării în vigoare a indicelui.
GET /api/v2/indici/ircc
GET /api/v2/indici/ircc?data=2026-09-18
Răspunsul conține indice, scadenta, valoare (procent, șir zecimal) și data (data observației). În XML, elementul rădăcină este <indice>. SOAP 1.1: ObtineIndice cu indice, scadenta și opțional data, sau ObtineIrcc cu data opțional pentru IRCC trimestrial. Toate operațiile sunt descrise în WSDL.
API IRCC aplicabil
Valoarea pentru trimestrul solicitatAcest endpoint răspunde la întrebarea „Ce IRCC trimestrial se aplică la data aceasta?”, nu „Care este ultimul IRCC calculat?”. Valoarea se selectează după trimestrul de aplicabilitate, folosind indicele calculat pentru trimestrul de referință cu două trimestre anterior. Dacă lipsește observația pentru trimestrul de referință exact, se returnează 404, fără înlocuire cu un alt indice.
/api/v2/indici/ircc/aplicabil
Parametrul data=AAAA-LL-ZZ este opțional. Fără el se folosește ziua curentă din România. Pentru a interoga ultima observație trimestrială după data ei de referință, folosește în continuare /api/v2/indici/ircc.
GET /api/v2/indici/ircc/aplicabil
GET /api/v2/indici/ircc/aplicabil?data=2026-09-18
Răspuns JSON ilustrativ:
{
"indice": "IRCC",
"scadenta": "quarterly",
"valoare": "5.560000",
"data": "2026-03-31",
"valabil_de_la": "2026-07-01",
"valabil_pana_la": "2026-09-30"
}
data indică sfârșitul trimestrului de referință din datele stocate, nu momentul publicării. valabil_de_la și valabil_pana_la indică perioada de aplicabilitate pentru care s-a selectat valoarea. XML: Accept: application/xml, elementul <indice>. SOAP: ObtineIrccAplicabil, cu data opțional.
API inflație și indice IPC
INS · valori lunare/api/v2/inflatie
valoare este rata anuală, în procente, ca șir zecimal. Fără data se returnează ultima lună stocată; cu data=AAAA-LL se cere luna exactă, fără fallback.
GET /api/v2/inflatie
GET /api/v2/inflatie?data=2026-08
Exemplu ilustrativ:
{"valoare":"9.8500","perioada":"2026-08"}
/api/v2/inflatie/ipc
valoare este indicele IPC față de luna corespunzătoare din anul precedent (bază 100), nu rata procentuală. Folosește același parametru opțional data=AAAA-LL.
GET /api/v2/inflatie/ipc?data=2026-08
Pentru XML, trimite Accept: application/xml; ambele răspunsuri folosesc rădăcina <inflatie>. În SOAP 1.1 sunt disponibile operațiile ObtineInflatie și ObtineIndiceIpc, fiecare cu data opțional (AAAA-LL).
API curs valutar bancar
O bancă · o valutăReturnează cea mai recentă pereche de cotații disponibile pentru o bancă și o valută, exprimată în RON pentru o unitate din valută. Sunt incluse cursurile de cumpărare și vânzare pentru operațiuni standard în cont; nu sunt cotații de numerar și nu sunt cursuri BNR.
/api/v2/banci/:banca/:valuta
banca este slug-ul canonic al băncii, de exemplu ing sau banca-transilvania. valuta este codul valutei (de exemplu EUR ori USD). O cerere returnează o singură pereche cumpărare/vânzare.
GET /api/v2/banci/ing/eur
GET /api/v2/banci/banca-transilvania/usd
Exemplu ilustrativ:
{
"banca": "ing",
"valuta": "EUR",
"cumparare": "5.0200",
"vanzare": "5.1800",
"data": "2026-09-21"
}
data din răspuns este data publicării cotației de către bancă (AAAA-LL-ZZ). Poate fi anterioară zilei curente dacă banca nu a furnizat o cotație nouă. Acest endpoint expune ultima cotație stocată, fără istoric intrazilnic și fără parametru de dată istorică.
XML: Accept: application/xml, elementul <curs_bancar>. SOAP 1.1: operația ObtineCursBancar, cu banca și valuta.
Curs mediu
03 / Medii/api/v2/curs-bnr/mediu/:valuta/:an/:luna
Media aritmetică a cursurilor unitare pentru publicațiile din luna completă solicitată. Exemplu: /curs-bnr/mediu/eur/2025/09.
/api/v2/curs-bnr/mediu/:valuta/:an
Media aritmetică a celor 12 medii lunare din anul complet. Exemplu: /curs-bnr/mediu/eur/2025. Nu se returnează o medie anuală pentru un an neîncheiat sau fără toate cele 12 luni în datele disponibile.
Închideri de perioadă
04 / Ultima cotațieSe returnează ultima publicație BNR din perioada completă indicată. Dacă nu există o cotație suficient de apropiată de sfârșitul perioadei, răspunsul este 404.
/api/v2/curs-bnr/ultima-zi-luna/:valuta/:an/:luna
Exemplu: /curs-bnr/ultima-zi-luna/eur/2025/12.
/api/v2/curs-bnr/sfarsit-trimestru/:valuta/:an/:trimestru
Trimestru: 1, 2, 3 sau 4. Exemplu: /curs-bnr/sfarsit-trimestru/eur/2025/4.
/api/v2/curs-bnr/sfarsit-an/:valuta/:an
Exemplu: /curs-bnr/sfarsit-an/eur/2025.
Formatul răspunsului
05 / JSON sau XMLFiecare endpoint nou returnează un singur rezultat. data reprezintă data reală a publicației BNR folosite, inclusiv când ai solicitat o zi de weekend sau o sărbătoare legală.
{
"valuta": "EUR",
"curs": "5.3495",
"data": "2026-10-28"
}
| Câmp | Semnificație |
|---|---|
valuta | Codul ISO al valutei solicitate. |
curs | Valoarea în RON pentru o unitate din valuta solicitată, sub formă de șir zecimal. |
data | Data publicației BNR din care provine valoarea. |
perioada | Prezent numai pentru medii și închideri: anul, luna sau trimestrul solicitat. |
Cheie API
06 / AutentificareIntrodu adresa IPv4 și/sau IPv6 de pe care vei apela API-ul. Este obligatorie cel puțin una. Cheia funcționează numai de la adresele configurate; se poate genera o singură cheie pe zi pentru fiecare adresă.
Limite implicite: 1 cerere pe secundă și 100 cereri în 24 de ore per cheie. Limitele pot fi ajustate individual.
Cheia API și limitele implicite există pentru a preveni abuzurile și pentru a menține serviciul disponibil pentru toți. Majorarea limitelor este gratuită. Dacă ai nevoie de mai multe cereri, contactează-ne și spune-ne ce limite îți trebuie.
Authorization: Bearer ev_CHEIA_TA_API
X-Api-Key: ev_CHEIA_TA_API
Folosește una dintre cele două variante de autentificare. Cheile trimise în URL nu sunt acceptate.
Erori și limite
07 / Răspunsuri| HTTP | Cod | Când apare |
|---|---|---|
| 401 | missing_api_key, invalid_api_key | Cheie absentă, invalidă sau revocată. |
| 403 | ip_not_allowed | IP-ul solicitantului nu corespunde cheii. |
| 404 | not_found, curs_azi_indisponibil | Nu există observația solicitată sau cursul BNR datat astăzi nu a fost încă publicat. |
| 422 | invalid_date, invalid_currency, invalid_period, invalid_currency_pair, invalid_amount, invalid_index, invalid_tenor, invalid_bank | Data, codul valutar, perioada, perechea valutară, suma, indicele sau scadența este invalidă. |
| 429 | rate_limit_exceeded | Limita de cereri a fost depășită. Respectă header-ul Retry-After. |
| 503 | api_authentication_unavailable, api_rate_limiter_unavailable | Autentificarea sau limitatorul nu sunt disponibile temporar. |
Răspunsurile de eroare folosesc formatul {"error":"not_found"}. Cererile reușite includ header-uri de limitare a utilizării.