oneapi
Sign in
Carburanti v1 / Carburanti

Tax history

Every excise duty and VAT change, with the date it took effect. For correctly reconstructing a price from a past year.

GET
https://oneapi.ro/api/carburanti/v1/taxe/serie

Query parameters

NameTypeDescriptionAccepted values
taraoptional string | null Country code. Defaults to RO. ATBEBGCYCZDEDKEEESFIFRGRHRHUIEITLTLULVMTNLPLPTROSESISKUK
produsrequired string Product code. Required: a tax series belongs to a single product. benzina95motorinamotorina_incalzirepacura_sulf_micpacura_sulf_maregpl
tipoptional string | null Restrict to one type: tva, acciza or alte_indirecte. Defaults to all. tvaaccizaalte_indirecte
de_laoptional string | null Only changes effective on or after this date. e.g. 2020-01-01
pana_laoptional string | null Only changes effective on or before this date. e.g. 2026-08-31

How it behaves

  • The weekly series has gaps, and they belong to the source. Of the 1,082 weeks published between 2005 and today, 37 intervals skip a week or two: 17 resume in January and 15 in April — the Commission does not publish the bulletin during the Christmas and Easter weeks. These are not failed imports. If you plot a weekly chart, expect the breaks and do not fill them by interpolation: no quotation existed in those weeks.
  • When the source publishes a price WITH taxes lower than the one WITHOUT, reconciliere.posibila is false and motiv says exactly that. Without this rule the route gave the generic explanation ("the member state applies an unpublished component") — plausible, but wrong here, and with advice that does not hold: you cannot "use the published price" when the published price is the inconsistent one.
  • Each row is a change, not a weekly value: an entry stays in force until the next one appears. Romania has 23 excise changes since 2008 and 5 VAT changes since 2000.
  • Units differ by type and are explained in legenda: VAT is a percentage, excise and other indirect taxes are amounts in national currency per product unit.
  • Ordering is descending by effective date.

What it is for

  • Redo a three-year-old calculation with the excise duty that applied then, not the one in force today.
  • Document every excise change in a period for a fiscal analysis, with their dates.
  • Check whether an observed price increase coincides with a tax change or is market movement.

Response structure

All fields below live inside data.

FieldTypeDescription
tara string Țara.
produs string Produsul.
moneda string Moneda sumelor (nu se aplică la tva, care e procent).
unitate string Unitatea la care se raportează sumele.
inregistrari integer Câte schimbări conține răspunsul.
schimbari[].tip string tva, acciza sau alte_indirecte.
schimbari[].in_vigoare_de_la string Data de la care se aplică.
schimbari[].valoare number Procent la tva, sumă pe unitate la celelalte.
legenda object Ce înseamnă valoarea pentru fiecare tip.
sursa object Sursa și licența.

Response examples

GEThttps://oneapi.ro/api/carburanti/v1/taxe/serie?produs=benzina95&tip=acciza
{
    "data": {
        "tara": "RO",
        "produs": "benzina95",
        "moneda": "RON",
        "unitate": "1000l",
        "inregistrari": 21,
        "schimbari": [
            {
                "tip": "acciza",
                "in_vigoare_de_la": "2026-01-01",
                "valoare": 3059.8
            }
        ],
        "legenda": {
            "tva": "Procent.",
            "acciza": "Monedă națională pe unitatea produsului.",
            "alte_indirecte": "Monedă națională pe unitatea produsului."
        },
        "sursa": {
            "nume": "European Commission — Weekly Oil Bulletin (DG ENER)",
            "licenta": "CC BY 4.0 (Decizia 2011/833/UE)"
        }
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
422validareprodus is missing, or tip is not one of the three.
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": "produs is missing, or tip is not one of the three.",
        "detalii": {
            "tara": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}