oneapi
Sign in
Carburanti v1 / Carburanti

Tax build-up of the price

The tax build-up of the pump price: from the pre-tax price through excise duty to VAT — how much of what you pay is tax.

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

Query parameters

NameTypeDescriptionAccepted values
taraoptional string | null Country code. Defaults to RO. ATBEBGCYCZDEDKEEESFIFRGRHRHUIEITLTLULVMTNLPLPTROSESISKUK
produsrequired string Product code. Required: excise and VAT are published per product, with different units. benzina95motorinamotorina_incalzirepacura_sulf_micpacura_sulf_maregpl
dataoptional string | null The date you want the build-up for, YYYY-MM-DD. Defaults to the most recent week. e.g. 2026-08-31

How it behaves

  • 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.
  • The calculation is in national currency, because that is where the taxes apply: excise duties are legislated in the national currency, prices are published in euro, and adding them without conversion would give a plausible and entirely wrong number.
  • The order is the fiscal one: pre-tax price + excise + other indirect taxes = VAT base, then × (1 + VAT) = reconstructed price with taxes.
  • Read reconciliere first. It states how closely the reconstruction reproduces the actually published price. When se_inchide is false, the breakdown does not explain the price — most often because the source dates an excise change differently from how the prices already reflect it, or because the state applies a component not published separately. In that case use the published price, not the sum of the components.
  • accize_componente appears only for petrol and diesel, and only from 2015 — the source does not publish the bio/fossil split for the other products.
  • Taxes are "in force from": the applicable value is the last entry dated on or before the price week, not one that coincides with it.

What it is for

  • Show in a briefing note how much of the pump price is excise duty and how much is VAT, with the effective date of each.
  • Estimate the impact of an excise change on the final price, starting from the real structure rather than a guess.
  • Check whether a supplier price is plausible against the mandatory tax component.

Response structure

All fields below live inside data.

FieldTypeDescription
tara string Țara.
produs string Produsul.
denumire string Denumirea lizibilă a produsului.
saptamana string Săptămâna de preț folosită.
ceruta string Data cerută.
moneda string Moneda în care sunt toate sumele din răspuns.
unitate string 1000l sau t.
curs_eur_pe_unitate number Cursul folosit la conversie. null în zona euro.
constructie.pret_fara_taxe number Prețul fără taxe, în monedă națională pe unitate.
constructie.acciza object The excise applied, with the date it took effect.
constructie.acciza.valoare number Acciza pe unitate.
constructie.acciza.in_vigoare_de_la string De când se aplică acest nivel de acciză.
constructie.alte_taxe_indirecte object Other indirect taxes, with their effective date.
constructie.alte_taxe_indirecte.valoare number Alte taxe indirecte pe unitate. La România e 0 din 2009.
constructie.alte_taxe_indirecte.in_vigoare_de_la string De când se aplică.
constructie.baza_tva number Suma peste care se aplică TVA.
constructie.tva object The rate, the amount and the date it took effect.
constructie.tva.procent number Cota de TVA.
constructie.tva.valoare number TVA-ul rezultat, pe unitate.
constructie.tva.in_vigoare_de_la string De când se aplică această cotă.
constructie.pret_cu_taxe_reconstruit number Rezultatul construcției. Compară-l cu reconciliere.pret_publicat.
pe_litru.fara_taxe number Aceleași componente, pe litru. Lipsește la produsele pe tonă.
pe_litru.acciza number Acciza pe litru.
pe_litru.tva number TVA pe litru.
pe_litru.cu_taxe number Prețul publicat, pe litru.
reconciliere.posibila boolean false dacă lipsesc componente pentru perioada cerută.
reconciliere.pret_publicat number Prețul efectiv publicat, în monedă națională pe unitate.
reconciliere.abatere_procent number Cu cât diferă reconstrucția de prețul publicat.
reconciliere.se_inchide boolean true sub 1% abatere. Când e false, nu folosi suma componentelor.
reconciliere.observatie string Explicația în clar a rezultatului reconcilierii.
accize_componente.in_vigoare_de_la string De când e valabilă defalcarea bio/fosil.
accize_componente.total number Acciza totală din defalcare.
accize_componente.bio object The biofuel part of the excise: amount and share.
accize_componente.bio.acciza number Partea de acciză aferentă componentei bio.
accize_componente.bio.procent number Ponderea componentei bio.
accize_componente.fosil object The fossil part of the excise: amount and share.
accize_componente.fosil.acciza number Partea de acciză aferentă componentei fosile.
accize_componente.fosil.procent number Ponderea componentei fosile.
sursa object Sursa și licența.

Response examples

GEThttps://oneapi.ro/api/carburanti/v1/taxe?produs=benzina95
{
    "data": {
        "tara": "RO",
        "produs": "benzina95",
        "denumire": "Benzină Euro-super 95",
        "saptamana": "2026-09-14",
        "ceruta": "2026-09-14",
        "moneda": "RON",
        "unitate": "1000l",
        "curs_eur_pe_unitate": 0.1902297976,
        "constructie": {
            "pret_fara_taxe": 5146.2,
            "acciza": {
                "valoare": 3059.8,
                "in_vigoare_de_la": "2026-01-01"
            },
            "alte_taxe_indirecte": {
                "valoare": 0,
                "in_vigoare_de_la": "2009-01-07"
            },
            "baza_tva": 8206,
            "tva": {
                "procent": 21,
                "valoare": 1723.26,
                "in_vigoare_de_la": "2025-08-01"
            },
            "pret_cu_taxe_reconstruit": 9929.26
        },
        "pe_litru": {
            "fara_taxe": 5.1462,
            "acciza": 3.0598,
            "tva": 1.7233,
            "cu_taxe": 9.9293
        },
        "reconciliere": {
            "posibila": true,
            "pret_publicat": 9929.26,
            "abatere_procent": 0,
            "se_inchide": true,
            "observatie": "Defalcarea reproduce prețul publicat; diferența rămasă vine din rotunjiri și din medierea săptămânală."
        },
        "accize_componente": {
            "in_vigoare_de_la": "2024-02-19",
            "total": 2019.6,
            "bio": {
                "acciza": 0,
                "procent": 0
            },
            "fosil": {
                "acciza": 2019.6,
                "procent": 100
            }
        },
        "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.
404negasitNo data for the requested country, product and date.
422validareprodus is missing, or parameters are malformed.
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 parameters are malformed.",
        "detalii": {
            "tara": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}