oneapi
Sign in
Financiar v1 / Conversie

Cross conversion, through the leu

Converts an amount between two foreign currencies, using the NBR quotations of both and passing through the leu. The result is not an official NBR rate — the NBR does not publish parities between foreign currencies. curs.componente shows the two quotations used.

For conversions involving the leu, use /conversie.

GET
https://oneapi.ro/api/financiar/v1/conversie/incrucisata

Query parameters

NameTypeDescriptionAccepted values
sumarequired string Required. Decimal point, at most 6 decimals, no thousands separators. e.g. 1000e.g. 2500e.g. 5000
dinrequired string A foreign currency, three-letter code. Cannot be RON. max 3 car.
inrequired string A foreign currency, different from din. Cannot be RON. max 3 car.
dataoptional string | null Optional, YYYY-MM-DD. Defaults to the current day. e.g. 2024-06-14e.g. 2024-05-20

How it behaves

  • Converts an amount between two foreign currencies, using the NBR quotes of both and passing through the leu.
  • The result is NOT an official NBR rate. NBR does not publish parities between foreign currencies — there is no "NBR EUR/USD rate". The figure here is mathematically correct, but it cannot be presented as an official rate. curs.componente shows exactly the two quotes it was derived from.
  • It is a separate route from /conversie precisely so the distinction is not lost: there, a single official quote is used; here, two, and the result has a different status. Merged into one route, the unofficial figure could pass for an official one.
  • Both quotes must come from the same day. If they do not, the request is refused with 409 rather than producing a rate between two different market days — a plausible wrong result is worse than an error.
  • curs.factor honours the same contract as on the official route: suma × factor = suma_convertita_exacta, digit for digit.
  • For parities published directly between currencies, the source is the ECB (/bce/curs) — there the figure is official and does not pass through the leu.

What it is for

  • Estimating an amount in another foreign currency, starting from NBR quotes.
  • Comparing two offers expressed in different currencies.

Response structure

FieldTypeDescription
data.suma string Sum of the values, in the unit indicated alongside.
data.din string
data.in string
data.suma_convertita string The result rounded to 2 decimals.
data.suma_convertita_exacta string The unrounded result, for chained calculations.
data.curs.factor string The number the amount was multiplied by: the quote of din divided by the quote of in.
data.curs.componente[] array The two official NBR quotes used, with the published value and the multiplier.
data.curs.componente[].valuta string ISO 4217 currency code.
data.curs.componente[].valoare string The value published by the source for the combination above.
data.curs.componente[].multiplicator integer Factor the value is multiplied by to reach the base unit.
data.curs.componente[].valoare_unitara string The value per single unit.
data.curs.data string The day the quote comes from. null when the currencies are identical.
data.curs.data_ceruta string The date the client asked for, before alignment to a day that has data.
data.curs.exact boolean true if the quote is from the requested day.
data.curs.zile_inapoi integer
data.curs.prin string Always RON on this route: the currency the conversion passed through.
meta.sursa string The official source the data comes from, with its licence where one is required.
meta.curs string
meta.rotunjire string
meta.avertisment string A warning about a limit of the data that changes its interpretation.
meta.nota string A note on how to read the response — a pitfall, a convention or a limit of the source.
meta.fara_date data is null and this says why. The requested date is before 2005-01-03.
meta.fara_date_cod The short, STABLE word for the reason, for clients that branch on it in code: fara_date is prose and may be rephrased, this is not.

Response examples

GEThttps://oneapi.ro/api/financiar/v1/conversie/incrucisata?suma=1000&din=USD&in=GBP&data=2024-06-14
{
    "data": {
        "suma": "1000",
        "din": "USD",
        "in": "GBP",
        "suma_convertita": "787.10",
        "suma_convertita_exacta": "787.10244364",
        "curs": {
            "factor": "0.78710244364",
            "componente": [
                {
                    "valuta": "USD",
                    "valoare": "4.6576",
                    "multiplicator": 1,
                    "valoare_unitara": "4.6576"
                }
            ],
            "data": "2024-06-14",
            "data_ceruta": "2024-06-14",
            "exact": true,
            "zile_inapoi": 0,
            "prin": "RON"
        }
    },
    "meta": {
        "sursa": "Banca Naţională a României",
        "curs": "incrucisat",
        "rotunjire": "2 zecimale, jumătate în sus. `suma_convertita_exacta` e nerotunjită — foloseşte-o dacă rezultatul intră într-un alt calcul.",
        "avertisment": "Curs încrucişat, calculat prin leu. BNR nu publică direct paritatea între două valute străine, deci cifra NU e un curs oficial BNR. Pentru parităţi publicate direct, sursa e BCE.",
        "nota": "Cotaţie publicată în ziua cerută."
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
404negasitnegasit = unknown currency; delistata = one of the currencies is no longer quoted.
409conflictcotatii_din_zile_diferite = the two currencies have no quote on the same day.
422validarenu_e_incrucisata = one of the currencies is the leu, use /conversie. valute_identice = both sides are the same currency.
429cota_depasitaThe 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": "nu_e_incrucisata = one of the currencies is the leu, use /conversie. valute_identice = both sides are the same currency.",
        "detalii": {
            "suma": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}