PricesPump pricesStation pricesSet pricesTaxes and margins
MarketsCrude benchmarksJet and heating oilRefined productsCurrencies
DataCountriesSupply and stocksHistoryStatus
DocsQuick startAPI referenceMCP serverChangelog
Pricing
BRENT123.1$/bbl ▼ 3.92%WTI103.4$/bbl ▼ 1.79%ULSD4.687$/gal ▼ 3.02%RBOB3.521$/gal ▼ 1.92%MX REGULAR23.99MX$/l ▲ 0.00%ES PETROL 951.749€/l ▼ 0.34%FR PETROL 952.195€/l ▼ 0.07%PT PETROL 952.094€/l ▼ 0.01%CA REGULAR1.829C$/l ▲ 6.04%GB PETROL 95 E101.719£/l ▼ 0.29%AT PETROL 951.779€/l ▼ 2.48%HR PETROL 951.640€/l ▲ 0.00%SI PETROL 951.627€/l ▲ 0.00%AL PETROL196.0ALL/lDZ PETROL47.00DZD/l ▲ 0.00%AO PETROL304.0AOA/lBRENT123.1$/bbl ▼ 3.92%WTI103.4$/bbl ▼ 1.79%ULSD4.687$/gal ▼ 3.02%RBOB3.521$/gal ▼ 1.92%MX REGULAR23.99MX$/l ▲ 0.00%ES PETROL 951.749€/l ▼ 0.34%FR PETROL 952.195€/l ▼ 0.07%PT PETROL 952.094€/l ▼ 0.01%CA REGULAR1.829C$/l ▲ 6.04%GB PETROL 95 E101.719£/l ▼ 0.29%AT PETROL 951.779€/l ▼ 2.48%HR PETROL 951.640€/l ▲ 0.00%SI PETROL 951.627€/l ▲ 0.00%AL PETROL196.0ALL/lDZ PETROL47.00DZD/l ▲ 0.00%AO PETROL304.0AOA/l

Oil price API: price breakdown

Price breakdown

What a litre is made of (taxes, crude, refining, distribution) in each EU country, or the parts as published in Thailand, Jamaica, South Africa, Uruguay and New Zealand, and how crude changes reach it.

GEThttps://api.oilapi.net/v1/breakdown
PlansEvery plan
Cost1 call per request
ReturnsOne country, one or both fuels
UpdatedWeekly

What it is for

What a litre of petrol 95 or diesel is made of in an EU country, in the latest week: taxes, the crude oil cost, the refining margin and the distribution margin, each in euros a litre and as a share of the price. Taxes and the price before taxes add up to the price; crude, refining and distribution add up to the price before taxes. All of it is worked out from stored prices.

With it come the weekly figures on how the price moves, for the whole record since 2005 and for the last three years: the share of the weekly movement from each part, the pass-through (cents at the pump for a cent of crude after 8 weeks), the weeks by which half and nine tenths of it has come through, and the same for rises and falls apart. Leave out country for the countries we hold; each part's history is a series, named in series, to read with Series values.

For Thailand, Jamaica, South Africa, Uruguay and New Zealand, which publish the parts of their own prices, the answer gives those parts as published (refinery or ex-plant price, taxes, funds and margins), with the price where we hold it, and how fast the published cost line follows crude, in days, weeks or months.

Good for
  • Showing what a litre is made of
  • How much of the price is tax
  • Whether prices rise faster than they fall
  • Charting margins over time with the series it names
Also the MCP tool price_breakdown

Parameters 2 in the query

NameWhere and typeRequiredWhat it doesExample
countryquery countryoptionalTwo letter code: an EU country such as de or fr, or a country that publishes its own build-up (th, jm, za, uy, nz); leave out for the list of countries.de
fuelquery stringoptionalFor an EU country gasoline_95 or diesel; for the others one of the fuels in the list; leave out for all.diesel

Try it runs against the live API with your key

No key yet? Get a free one; it is saved in this browser for every page.

The answer 200, application/json

FieldTypeWhat it holdsExample
countrystringTwo letter country code"DE"
namestringOur name for it"Germany"
fuelstringFuel code; see Fuels and units"diesel"
datestringThe day of the close"2026-10-26"
unitstringlitre, gallon or barrel"litre"
currencystringThree letter currency code"EUR"
pricenumberThe price in currency per unit2.298
partsobjectEach part a litre: taxes, crude, refining, distribution, margin (refining and distribution together) and before_taxes{"taxes":0.8587,"crude":0.6788,"refin...
sharesobjectEach part as a share of the price{"taxes":0.374,"crude":0.295,"refinin...
pass_throughobjectThe weekly figures, all and last_3_years: share_of_movement, pass_through, lag50_weeks, lag90_weeks, r2, rises and falls{"all":{"weeks":1090,"from":"2005-01-...
seriesobjectSeries code, or the series we hold{"price":"retail.de.diesel","taxes":"...

Example answer real, from what we hold now; long lists cut to three

GET /v1/breakdown?country=de&fuel=diesel
{
    "data": {
        "country": "DE",
        "name": "Germany",
        "fuel": "diesel",
        "date": "2026-10-26",
        "unit": "litre",
        "currency": "EUR",
        "price": 2.298,
        "parts": {
            "taxes": 0.8587,
            "crude": 0.6788,
            "refining": 0.4767,
            "distribution": 0.2838,
            "margin": 0.7605,
            "before_taxes": 1.4393
        },
        "shares": {
            "taxes": 0.374,
            "crude": 0.295,
            "refining": 0.207,
            "distribution": 0.123,
            "margin": 0.331
        },
        "pass_through": {
            "all": {
                "weeks": 1090,
                "from": "2005-01-03",
                "to": "2026-10-26",
                "share_of_movement": {
                    "taxes": 0.235,
                    "crude_price": 0.281,
                    "exchange_rate": 0.012,
                    "margin": 0.471,
                    "refining": 0.193,
                    "distribution": 0.278,
                    "unexplained": 0.001
                },
                "pass_through": 1.051,
                "lag50_weeks": 0,
                "lag90_weeks": 1,
                "r2": 0.362,
                "rises": {
                    "pass_through": 1.025,
                    "lag50_weeks": 0
                },
                "falls": {
                    "pass_through": 1.019,
                    "lag50_weeks": 0
                }
            },
            "last_3_years": {
                "weeks": 157,
                "from": "2023-10-30",
                "to": "2026-10-26",
                "share_of_movement": {
                    "taxes": 0.306,
                    "crude_price": 0.252,
                    "exchange_rate": 0.014,
                    "margin": 0.428,
                    "refining": 0.202,
                    "distribution": 0.226,
                    "unexplained": 0
                },
                "pass_through": 0.678,
                "lag50_weeks": 0,
                "lag90_weeks": 0,
                "r2": 0.458,
                "rises": {
                    "pass_through": 0.473,
                    "lag50_weeks": 0
                },
                "falls": {
                    "pass_through": 0.295,
                    "lag50_weeks": 0
                }
            }
        },
        "series": {
            "price": "retail.de.diesel",
            "taxes": "tax.de.total.diesel",
            "before_taxes": "structure.de.before_tax.diesel",
            "crude": "structure.de.crude_cost.diesel",
            "refining": "structure.de.refining.diesel",
            "distribution": "structure.de.distribution.diesel",
            "margin": "structure.de.margin.diesel"
        }
    },
    "meta": {
        "worked_out_at": "2026-10-30T02:20:43Z",
        "note": "Taxes and the price before taxes add up to the price; crude, refining and distribution add up to the price before taxes. Worked out from stored prices. Distribution is measured against a world product price, so its changes say more than its level."
    }
}

Errors every error has the same shape

HTTPCodeWhenWhat to do
401unauthorizedNo key, or not a valid oneSend your key in the X-API-Key header; your account page shows it.
400bad_requestA value is wrong or a required one is missingThe message names the parameter and the form it takes.
422unknown_parameterA parameter this endpoint does not takeTake it out; the parameters this endpoint takes are listed above.
429rate_limitedToo many calls this minuteWait the seconds in the Retry-After header, then call again.
429quota_exceededToday's calls are used upWait for the day to reset at midnight UTC, or move to a larger plan.
Dates and times are UTC. A point's date is the day its price took effect, or the first day of its week or month for weekly and monthly series. Conversions use each day's own rate, so a converted series moves with both the price and the exchange rate.

Related