API curs valutar

Cursurile publicate de BNR și de BCE, în format JSON: gratuit, fără cheie, fără înregistrare.

  • GET
  • JSON
  • UTF-8
  • CORS
  • v1
  • gratuit
  • fără cheie

Adresa de bază https://b24.ro/api/v1

Reguli

  1. Adresa de bază este https://b24.ro/api/v1. Toate cererile sunt GET, iar răspunsurile sunt JSON (UTF-8). Cererile din browser sunt permise de pe orice domeniu (CORS).
  2. Limită per adresă IP: 60 de cereri în rafală, apoi 60 pe minut. Fiecare răspuns poartă antetele RateLimit-Limit și RateLimit-Remaining; la depășire răspunsul este 429, cu antetul Retry-After.
  3. Cursurile se schimbă o dată pe zi bancară. Păstrează răspunsurile local și respectă antetul Cache-Control, în loc să repeți aceeași cerere.
  4. Dacă afișezi datele, menționează sursa lor: Banca Națională a României, respectiv Banca Centrală Europeană.

Cursurile unei zile

GET /api/v1/rates

Cursurile în vigoare la o dată: cele publicate în acea zi sau, în weekend și de sărbători, ultimele publicate înainte.

Parametri
ParametruSemnificație
dateData (AAAA-LL-ZZ). Implicit: ultima zi publicată. Cel mai devreme 2005-01-03; o dată din viitor este respinsă.
sourceSursa: bnr (implicit; lei pentru o unitate sau pentru 100 de unități din fiecare monedă) sau ecb (unități din fiecare monedă pentru 1 euro).
currenciesDoar aceste monede: coduri de trei litere separate prin virgulă, de exemplu EUR,USD. Implicit: toate.
Exemplu
$ curl "https://b24.ro/api/v1/rates?date=2026-09-18&currencies=EUR,USD,HUF"
RăspunsHTTP 200 · application/json
{
  "source": "BNR",
  "quote_currency": "RON",
  "date": "2026-09-18",
  "requested_date": "2026-09-18",
  "rates": {
    "EUR": {
      "rate": 5.2644,
      "multiplier": 1,
      "unit_rate": 5.2644
    },
    "HUF": {
      "rate": 1.4472,
      "multiplier": 100,
      "unit_rate": 0.014472
    },
    "USD": {
      "rate": 4.5839,
      "multiplier": 1,
      "unit_rate": 4.5839
    }
  }
}

Conversie

GET /api/v1/convert

Convertește o sumă dintr-o monedă în alta, cu aritmetică exactă. Rezultatul e rotunjit ca pe site: două zecimale de la 1 în sus, patru cifre semnificative sub 1.

Parametri
ParametruSemnificație
fromMoneda din care se convertește, cod de trei litere (obligatoriu).
toMoneda în care se convertește, cod de trei litere (obligatoriu).
amountSuma, cu punct zecimal, de exemplu 100 sau 99.50. Implicit 1.
dateData (AAAA-LL-ZZ). Implicit: ultima zi publicată. Cel mai devreme 2005-01-03; o dată din viitor este respinsă.
sourceSursa: bnr (implicit; lei pentru o unitate sau pentru 100 de unități din fiecare monedă) sau ecb (unități din fiecare monedă pentru 1 euro).
Exemplu
$ curl "https://b24.ro/api/v1/convert?from=EUR&to=RON&amount=100&date=2026-09-18"
RăspunsHTTP 200 · application/json
{
  "source": "BNR",
  "date": "2026-09-18",
  "requested_date": "2026-09-18",
  "from": "EUR",
  "to": "RON",
  "amount": 100,
  "rate": 5.2644,
  "result": 526.44,
  "basis": "direct"
}

Consolă

Trimite o cerere reală spre API, direct din pagină: mai jos apare răspunsul primit, cu timpul lui. Fără JavaScript, formularul deschide răspunsul JSON.

GET https://b24.ro/api/v1/convert?from=EUR&to=RON&amount=100&date=2026-09-18HTTP 200 · application/json
{
  "source": "BNR",
  "date": "2026-09-18",
  "requested_date": "2026-09-18",
  "from": "EUR",
  "to": "RON",
  "amount": 100,
  "rate": 5.2644,
  "result": 526.44,
  "basis": "direct"
}

Erori

O eroare are codul HTTP potrivit și un corp JSON de forma {"error":{"code":"…","message":"…"}}. Mesajele sunt în engleză; programele se bazează pe câmpul code.

Erori
HTTPCodCând apare
400invalid_queryȘirul de interogare nu poate fi citit.
400invalid_dateData lipsește de formatul AAAA-LL-ZZ sau apare de două ori.
400date_in_futureData cerută este după ziua de mâine.
404no_rates_for_dateData este înaintea primei zile din istoric.
400invalid_sourceSursa nu este bnr sau ecb.
400invalid_currencyUn cod de monedă lipsește sau nu are trei litere.
400invalid_amountSuma nu este un număr pozitiv cu punct zecimal sau este prea mare.
404currency_not_quotedMoneda nu are curs la sursa și la data cerute.
429rate_limitedPrea multe cereri; vezi antetul Retry-After.
503data_incompleteIstoricul din jurul datei cerute nu este încă importat complet.
503no_dataCursurile nu sunt încă încărcate; încearcă peste un minut.
404not_foundAdresa nu este a unui endpoint al API-ului.