oneapi
Sign in
Carburanti v1 / Carburanti

Change over an interval

How much the price moved between two moments, in absolute and percentage terms, with the value at each end of the interval.

GET
https://oneapi.ro/api/carburanti/v1/variatie

Query parameters

NameTypeDescriptionAccepted values
taraoptional string | null Country code. Defaults to RO. ATBEBGCYCZDEDKEEESFIFRGRHRHUIEITLTLULVMTNLPLPTROSESISKUKEUEA
produsrequired string Product code. Required: the change is computed on the series of a single product. benzina95motorinamotorina_incalzirepacura_sulf_micpacura_sulf_maregpl
de_larequired string Start date, YYYY-MM-DD. Required. e.g. 2021-01-04
pana_laoptional string | null End date, YYYY-MM-DD. Defaults to today. 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.
  • Two known source inconsistencies, handled explicitly. (1) The bulletin has 2 rows with both prices at 0.00 (Slovakia, fuel oil, 2006-05-01) — missing data published as zero. We serve those as null rather than as a price, and build nothing on top of them. (2) In 32 rows, all fuel oil, the price WITH taxes is lower than the price WITHOUT, which would imply a negative tax: 30 on the EU aggregate and one each on BE and IE. Both prices are reported as published, but nothing is computed from them — taxe_din_pret_procent is null and an atentionare field appears.
  • Both ends are resolved to the week published on or before the requested date, and the response carries the full row for each end — including the actual week used. In a contract dispute it matters exactly which week the calculation rested on.
  • The change is given both in euro (with and without taxes) and in national currency. These are not the same number: the exchange rate also moves between the two dates, and an indexation clause must say which currency it indexes in.
  • Omitting pana_la means today.

What it is for

  • Apply an indexation clause: the contract says "adjusts with the change in the official diesel price since signing", and this is exactly that figure.
  • Justify a rate increase to a client with the percentage change between two dates, not with an impression.
  • Compare fuel inflation with other costs in a fiscal-year analysis.

Response structure

All fields below live inside data.

FieldTypeDescription
tara string Țara.
produs string Produsul.
de_la object Rândul complet de preț la capătul de început, ca la GET /preturi.
pana_la object Rândul complet de preț la capătul de final.
variatie.eur_cu_taxe object The difference in euro with taxes: absolute value and percentage.
variatie.eur_cu_taxe.absolut number Diferența în euro pe unitate, cu taxe.
variatie.eur_cu_taxe.procent number Diferența procentuală, cu taxe, în euro.
variatie.eur_fara_taxe object The difference in euro before taxes — shows how much of the move comes from the market rather than taxation.
variatie.eur_fara_taxe.absolut number Diferența în euro pe unitate, fără taxe — arată mișcarea pieței, curățată de fiscalitate.
variatie.eur_fara_taxe.procent number Diferența procentuală fără taxe.
variatie.national_cu_taxe object The difference in national currency. Compare it with the euro one: a large gap means the move is exchange-rate, not price.
variatie.national_cu_taxe.absolut number Diferența în monedă națională, cu taxe. Prezentă doar dacă ambele capete au curs.
variatie.national_cu_taxe.procent number Diferența procentuală în monedă națională — de regulă diferită de cea în euro, din cauza cursului.
sursa object Sursa și licența.
de_la.tara string The country code.
de_la.data string The week the price refers to (the bulletin's Monday).
de_la.produs string The product code.
de_la.denumire string The product name.
de_la.unitate string The unit the product is quoted in: 1,000 litres for road fuels, 1,000 kg for heavy fuel oil.
de_la.eur.cu_taxe number The price in euro, all taxes included, per quoted unit.
de_la.eur.fara_taxe number The price in euro, excluding taxes.
de_la.eur.pe_litru_cu_taxe number The same price brought to a litre — null for products quoted per tonne.
de_la.eur.pe_litru_fara_taxe number The tax-free price, per litre.
de_la.national.moneda string The country's national currency at that date. It changes over time: states that adopted the euro have series in two currencies.
de_la.national.curs_eur_pe_unitate number The exchange rate the source used. When it is missing or 1.0, the country was already on the euro — that is how we derive the currency, not from a table.
de_la.national.cu_taxe number The price in national currency, with taxes.
de_la.national.fara_taxe number The price in national currency, without taxes.
de_la.national.pe_litru_cu_taxe number The national price per litre, with taxes.
de_la.national.pe_litru_fara_taxe number The national price per litre, without taxes.
de_la.taxe_din_pret_procent number What percentage of the final price is tax — the most quoted figure from a bulletin.
pana_la.tara string The country code.
pana_la.data string The week the price refers to (the bulletin's Monday).
pana_la.produs string The product code.
pana_la.denumire string The product name.
pana_la.unitate string The unit the product is quoted in: 1,000 litres for road fuels, 1,000 kg for heavy fuel oil.
pana_la.eur.cu_taxe number The price in euro, all taxes included, per quoted unit.
pana_la.eur.fara_taxe number The price in euro, excluding taxes.
pana_la.eur.pe_litru_cu_taxe number The same price brought to a litre — null for products quoted per tonne.
pana_la.eur.pe_litru_fara_taxe number The tax-free price, per litre.
pana_la.national.moneda string The country's national currency at that date. It changes over time: states that adopted the euro have series in two currencies.
pana_la.national.curs_eur_pe_unitate number The exchange rate the source used. When it is missing or 1.0, the country was already on the euro — that is how we derive the currency, not from a table.
pana_la.national.cu_taxe number The price in national currency, with taxes.
pana_la.national.fara_taxe number The price in national currency, without taxes.
pana_la.national.pe_litru_cu_taxe number The national price per litre, with taxes.
pana_la.national.pe_litru_fara_taxe number The national price per litre, without taxes.
pana_la.taxe_din_pret_procent number What percentage of the final price is tax — the most quoted figure from a bulletin.

Response examples

GEThttps://oneapi.ro/api/carburanti/v1/variatie?produs=benzina95&de_la=2021-01-04
{
    "data": {
        "tara": "RO",
        "produs": "benzina95",
        "de_la": {
            "tara": "RO",
            "data": "2020-12-21",
            "produs": "benzina95",
            "denumire": "Benzină Euro-super 95",
            "unitate": "1000l",
            "eur": {
                "cu_taxe": 974.65,
                "fara_taxe": 454.14,
                "pe_litru_cu_taxe": 0.9747,
                "pe_litru_fara_taxe": 0.4541
            },
            "national": {
                "moneda": "RON",
                "curs_eur_pe_unitate": 0.2057486163,
                "cu_taxe": 4737.09,
                "fara_taxe": 2207.26,
                "pe_litru_cu_taxe": 4.7371,
                "pe_litru_fara_taxe": 2.2073
            },
            "taxe_din_pret_procent": 53.4,
            "atentionare": null
        },
        "pana_la": {
            "tara": "RO",
            "data": "2026-09-14",
            "produs": "benzina95",
            "denumire": "Benzină Euro-super 95",
            "unitate": "1000l",
            "eur": {
                "cu_taxe": 1888.8411,
                "fara_taxe": 978.9606,
                "pe_litru_cu_taxe": 1.8888,
                "pe_litru_fara_taxe": 0.979
            },
            "national": {
                "moneda": "RON",
                "curs_eur_pe_unitate": 0.1902297976,
                "cu_taxe": 9929.26,
                "fara_taxe": 5146.2,
                "pe_litru_cu_taxe": 9.9293,
                "pe_litru_fara_taxe": 5.1462
            },
            "taxe_din_pret_procent": 48.17,
            "atentionare": null
        },
        "variatie": {
            "eur_cu_taxe": {
                "absolut": 914.1911,
                "procent": 93.8
            },
            "eur_fara_taxe": {
                "absolut": 524.8206,
                "procent": 115.56
            },
            "national_cu_taxe": {
                "absolut": 5192.17,
                "procent": 109.61
            }
        },
        "sursa": {
            "nume": "European Commission — Weekly Oil Bulletin (DG ENER)",
            "licenta": "CC BY 4.0 (Decizia 2011/833/UE)",
            "observatie": "Prețuri medii naționale raportate de statele membre pentru săptămâna indicată, nu prețuri per stație de alimentare."
        }
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
404negasitNo prices published for at least one of the requested dates.
422validareprodus or de_la is missing, or pana_la precedes de_la.
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 or de_la is missing, or pana_la precedes de_la.",
        "detalii": {
            "tara": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}