Conversion at the customs rate
Converts an amount in foreign currency at the customs rate of the month — the figure the customs value is determined with — not at the day's rate.
Why this is not the same as /conversie. The customs rate is FIXED for the whole month: the NBR quotation from the penultimate Wednesday of the previous month (art. 146 of Implementing Regulation (EU) 2015/2447). Anyone converting at the day's rate gets the tax base wrong, and the figure looks just as convincing.
Measured across the whole coverage, for EUR: mean deviation from the day's rate 0.297%, and 5.2% of days exceed 1%, with a maximum of 3.41%. For sterling, in July 2016 — the month after the Brexit referendum — the day's rate was 5.2496 while the customs rate was 5.8918, fixed on 20 June: a 10.9% difference.
That is why the response also carries la_cursul_zilei, with the deviation computed. It is not the figure you declare — it is given so you can see how far off you would be.
One direction only: foreign currency → RON. The customs value is expressed in lei from an invoice in foreign currency; the inverse has no customs meaning.
The period is given as the declaration's data — the rule is monthly, but the declarant need not know that — or directly as an + luna.
Query parameters
YYYY-MM-DD. Excludes an + luna.
e.g. 2024-06-15
luna as well.
2016 – 2100
an as well.
1 – 12
How it behaves
- Converts a foreign-currency amount at the customs rate of the month — the figure used to determine customs value — rather than at the daily rate.
- Why this is not the same as
/conversie. The customs rate is FIXED for the whole month: the NBR quote from the second-to-last Wednesday of the previous month (art. 146 of Commission Implementing Regulation (EU) 2015/2447). Converting at the daily rate misstates the taxable base, and the figure looks just as good. - Measured across the whole coverage, for EUR: average deviation from the daily rate 0.297%, with 5.2% of days exceeding 1% and a maximum of 3.41%. For sterling, in July 2016 — the month after the Brexit referendum — the daily rate was 5.2496 while the customs rate was 5.8918, fixed on 20 June: on GBP 100,000 that is RON 64,220, or 12.23%.
la_cursul_zileiholds the wrong conversion, with the deviation computed. It is not the figure to declare — it is given so the size of the mistake is visible. It appears only whendatais supplied: without it there is no day at which one could have gone wrong, and a day chosen by us would be an invented comparison.- One direction only: currency → RON. Customs value is expressed in lei from a foreign-currency invoice; the inverse has no customs meaning, and accepting it would suggest it does.
- The period is given as the declaration
data— the rule is monthly, but the declarant need not know that to ask the question — or directly asan+luna, for whoever already knows the month of application. - A future date is not an error: next month's grid is already fixed, because it is computed from the previous month. The customs rate is known before the month of application — unlike the daily rate.
- The response carries the rule in verifiable form: the month of application, the second-to-last Wednesday, the quote day and the legal basis.
meta.verificareeven gives the path for checking the quote against/curs/{valuta}?data=. - Coverage starts in May 2016. Earlier months are refused with an explanation: until then art. 171 of Reg. 2454/93 applied, with a 5% clause that broke periods mid-month, which a monthly grid cannot express.
What it is for
- Determining customs value on an import declaration.
- Checking the amount declared by a customs broker.
- Estimating customs value for next month's shipment, whose grid is already fixed.
Response structure
suma × factor = valoare_in_vama_exacta.
data is null and this says why. The requested month is before May 2016, or the currency has no customs rate published for it.
fara_date is prose and may be rephrased, this is not.
Response examples
{
"data": {
"suma": "1000",
"valuta": "EUR",
"in": "RON",
"data_declaratiei": "2024-06-15",
"luna_aplicare": "2024-06",
"curs_vamal": {
"valoare": "4.9745",
"multiplicator": 1,
"valoare_unitara": "4.9745",
"aplicabil_de_la": "2024-06-01",
"aplicabil_pana_la": "2024-06-30",
"cotatie_din": "2024-05-22",
"penultima_miercuri": "2024-05-22",
"baza_legala": "art. 146 Reg. (UE) 2015/2447"
},
"valoare_in_vama": "4974.50",
"valoare_in_vama_exacta": "4974.5",
"factor": "4.9745",
"la_cursul_zilei": {
"curs": "4.9771",
"data_cotatiei": "2024-06-14",
"exact": false,
"valoare": "4977.10",
"diferenta_fata_de_vamal": "2.60",
"abatere_procent": "0.05",
"nota": "NU e cifra care se declară. E dată ca să se vadă cât s-ar greşi folosind cursul zilei."
}
},
"meta": {
"sursa": "Derivat din cursul de referinţă BNR, după regula vamală.",
"regula": "Cotaţia BNR din penultima zi de miercuri a lunii anterioare, fixă pe toată luna de aplicare.",
"verificare": "Cotaţia se poate confrunta cerând /financiar/v1/curs/EUR?data=2024-05-22.",
"contract": "suma × factor = valoare_in_vama_exacta, cifră cu cifră.",
"nota_curs_zilei": "La cursul zilei, valoarea în vamă ar ieşi cu 2.60 lei (0.05% din valoarea la cursul vamal) mai mare decât cea corectă. `la_cursul_zilei` e dat ca avertisment, nu ca alternativă.",
"grila_lunii": "Toate valutele lunii: /financiar/v1/curs-vamal?luna=2024-06."
}
}
{
"data": {
"suma": "1000",
"valuta": "USD",
"in": "RON",
"data_declaratiei": null,
"luna_aplicare": "2024-03",
"curs_vamal": {
"valoare": "4.6073",
"multiplicator": 1,
"valoare_unitara": "4.6073",
"aplicabil_de_la": "2024-03-01",
"aplicabil_pana_la": "2024-03-31",
"cotatie_din": "2024-02-21",
"penultima_miercuri": "2024-02-21",
"baza_legala": "art. 146 Reg. (UE) 2015/2447"
},
"valoare_in_vama": "4607.30",
"valoare_in_vama_exacta": "4607.3",
"factor": "4.6073",
"la_cursul_zilei": null
},
"meta": {
"sursa": "Derivat din cursul de referinţă BNR, după regula vamală.",
"regula": "Cotaţia BNR din penultima zi de miercuri a lunii anterioare, fixă pe toată luna de aplicare.",
"verificare": "Cotaţia se poate confrunta cerând /financiar/v1/curs/USD?data=2024-02-21.",
"contract": "suma × factor = valoare_in_vama_exacta, cifră cu cifră.",
"nota_curs_zilei": "Comparaţia cu cursul zilei apare doar când se dă `data` declaraţiei: fără ea nu există ziua la care s-ar fi putut greşi.",
"grila_lunii": "Toate valutele lunii: /financiar/v1/curs-vamal?luna=2024-03."
}
}
{
"data": {
"suma": "1000",
"valuta": "USD",
"in": "RON",
"data_declaratiei": null,
"luna_aplicare": "2024-06",
"curs_vamal": {
"valoare": "4.5878",
"multiplicator": 1,
"valoare_unitara": "4.5878",
"aplicabil_de_la": "2024-06-01",
"aplicabil_pana_la": "2024-06-30",
"cotatie_din": "2024-05-22",
"penultima_miercuri": "2024-05-22",
"baza_legala": "art. 146 Reg. (UE) 2015/2447"
},
"valoare_in_vama": "4587.80",
"valoare_in_vama_exacta": "4587.8",
"factor": "4.5878",
"la_cursul_zilei": null
},
"meta": {
"sursa": "Derivat din cursul de referinţă BNR, după regula vamală.",
"regula": "Cotaţia BNR din penultima zi de miercuri a lunii anterioare, fixă pe toată luna de aplicare.",
"verificare": "Cotaţia se poate confrunta cerând /financiar/v1/curs/USD?data=2024-05-22.",
"contract": "suma × factor = valoare_in_vama_exacta, cifră cu cifră.",
"nota_curs_zilei": "Comparaţia cu cursul zilei apare doar când se dă `data` declaraţiei: fără ea nu există ziua la care s-ar fi putut greşi.",
"grila_lunii": "Toate valutele lunii: /financiar/v1/curs-vamal?luna=2024-06."
}
}
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 | Malformed amount or currency; missing or doubled period, or an without luna. |
| 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": "Malformed amount or currency; missing or doubled period, or an without luna.",
"detalii": {
"suma": [
"The value sent does not satisfy the parameter rule."
]
}
}
}