OilPriceAPI Docs
Quick Start
API Reference
  • SDKs and languages
  • Tutorials
  • Articles
  • Documentation directory
  • Quick reference
  • API explorer
  • FAQ
  • Changelog
  • Status
  • Dashboard
GitHub
Quick Start
API Reference
  • SDKs and languages
  • Tutorials
  • Articles
  • Documentation directory
  • Quick reference
  • API explorer
  • FAQ
  • Changelog
  • Status
  • Dashboard
GitHub
  • Documentation

    • OilPriceAPI Documentation
    • Data Sources & Methodology
    • Frequently Asked Questions
    • SLA Overview
    • Changelog

Changelog

Every change to the OilPriceAPI — new price series, new endpoints, and changes to how existing ones behave.

Subscribe: RSS feed — each entry arrives as its own item on the day it ships.


October 2026

Documentation

  • IFO380 at Gibraltar and Piraeus — catalogue references now document HFO_380_GIGIB_USD and HFO_380_GRPIR_USD, 3.5% sulphur heavy fuel oil in USD per metric tonne. Both ports also offer VLSFO and marine gas oil. Prices follow weekday publication sessions; history begins with first collection. Commodity catalogue.
  • LPG_USD shorthand — the reference now documents that LPG_USD and LPG resolve to PROPANE_MONT_BELVIEU_USD on latest and historical price routes. This is EIA Mont Belvieu propane in USD per gallon, not a propane/butane mix; responses identify the canonical series.
  • Scheduled deliveries — the delivery reference describes saved commodity selections, daily/weekday/weekly schedules, delivery times and IANA time zones, CSV attachments, and the manual-send endpoint. Deliveries are also managed in the dashboard; dispatch and plan limits are exposed by the API.

Changed

  • NATURAL_GAS_USD is the Henry Hub front-month futures quote again; EIA daily spot moves to NATURAL_GAS_HENRY_HUB_SPOT_USD — /v1/prices/latest?by_code=NATURAL_GAS_USD (and its aliases NG, HENRY_HUB) returns the intraday NYMEX Henry Hub front-month futures quote it returned before October 19, updated through the trading day. The October 19 change that served EIA's daily spot observation under this code is reversed. EIA's Henry Hub daily spot series (NG.RNGWHHD.D, USD per MMBtu, published in batches that can lag about a week) is now its own code, NATURAL_GAS_HENRY_HUB_SPOT_USD, with source_date, as_of, instrument_type: physical_spot and the EIA publication-cadence freshness window. NATGAS_FUTURES is unchanged and continues to return the explicit contract code (for example NATGAS_FUTURES_2026_11). Spot and futures are distinct benchmarks and can differ by several percent. /v1/prices/historical follows the same split: NATURAL_GAS_USD history contains only the futures quote (from December 2023) and no longer includes EIA spot observations.

  • Henry Hub daily spot identity — NATURAL_GAS_USD now selects EIA Henry Hub daily spot observations (NG.RNGWHHD.D, USD per MMBtu), rather than mixing spot with futures quotes. Daily observations have publication lag that can approach a week; read source_date, as_of and freshness before using a price. For intraday natural-gas futures, request /v1/prices/latest?by_code=NATGAS_FUTURES and check the returned contract code. Spot and futures are distinct benchmarks and may differ in price. Spot percentage changes remain unavailable while comparable history is unverified.

  • Congressional trading coverage retired — /v1/indicators/congressional-trades now returns 410 ENDPOINT_RETIRED. Congressional trading data is no longer offered, and its monitoring and collection jobs are disabled.

September 2026

Added

  • Bunker broker indications for Malta — price a Malta call without chasing a broker quote. VLSFO_INDICATION_MTMLA_USD and LSMGO_INDICATION_MTMLA_USD, USD per metric tonne ex-wharf for a 500/50 mt lot, on business days, from 2026-09-18. These are a broker's guidance levels, not assessments or traded prices — the _INDICATION_ in the code says so, and metadata.price_type is broker_indication. The sheet covers the Maltese bunkering area rather than one berth, so metadata.location names the anchorages it applies to.
  • Port Said bunker prices (weekly batches) — VLSFO and LSMGO at Port Said, Egypt (EGPSD), USD per metric ton: VLSFO_AFOS_EGPSD_USD and LSMGO_AFOS_EGPSD_USD. Build for batch arrival — a third party republishes five daily prices in one weekly issue, so rows land together (usually the following Monday, sometimes weeks later), each dated by its own price day. Port Said often repeats a price for days while other ports move, so every row carries metadata.unchanged_run_days and metadata.carried_forward_suspected. The publication prints no sulfur limit for LSMGO.
  • EU bunker unit values from trade statistics, monthly, Belgium, Netherlands, Spain and Portugal — a monthly cost benchmark for Belgium, the Netherlands, Spain and Portugal, where no port assessment is published. Nine codes of the form {GRADE}_SHIP_STORES_UNIT_VALUE_{CC}_EUR, EUR per metric tonne, unconverted. Each value is declared trade value divided by tonnes each country supplied to ships as stores, published by Eurostat about six weeks after the month ends. It is a national customs-implied figure, not a port price and not an assessment: metadata.geography is national and port_code (BEANR, NLRTM, ESALG, PTSIE) is for lookup only. Months under 1,000 t are not published.
  • LNG posted tariff at Vancouver — cost LNG bunkering at FortisBC's Tilbury facility (CAVAN), where marine vessels are eligible customers: LNG_POSTED_TARIFF_CAVAN_CAD, CAD per gigajoule excluding taxes, as posted under BCUC-approved Rate Schedule 46. The value excludes the LNG Spot Charge; every charge, including it, is in metadata.tariff_components. This is a regulated utility's posted price at the plant, not a delivered bunker price and not a market assessment. A new value appears only when the tariff changes, usually at a quarter start. First value 9.519 CAD/GJ, effective 2026-07-01.
  • South African bunker unit values from customs statistics, monthly, Durban, Richards Bay and Cape Town — a monthly cost benchmark at Durban, Richards Bay and Cape Town, where no assessment is published: FUEL_OIL_SHIP_STORES_UNIT_VALUE_{ZADUR|ZARCB|ZACPT}_ZAR. ZAR per litre, exactly as SARS publishes it — SARS records no mass, so no density is assumed and nothing is converted. Each value is customs value divided by litres of residual fuel oil recorded as maritime ship's stores at one customs district office in one month. Two things to build around: it is a customs district figure, wider than the port it is named after (metadata.geography: customs_district, port_code for lookup only), and all sulphur grades share the tariff line, so the number is a blend and lags spot. Months under 1,000,000 litres have no value; SARS releases a month on the last working day of the following month.
  • Petrolimex posted mazút prices for Phu My, Ho Chi Minh City and Haiphong — Phu My (VNPHU, covering Cai Mep-Thi Vai and Vung Tau), Ho Chi Minh City (VNSGN) and Haiphong (VNHPH). Six codes: MAZUT_RMG180_05S_LIST_PETROLIMEX_{PORT}_DOMESTIC_VND and MAZUT_N2B_35S_LIST_PETROLIMEX_{PORT}_DOMESTIC_VND. VND per kg, Petrolimex's posted wholesale price including VAT — duty-paid domestic fuel, so it is neither bonded international bunker fuel nor a market assessment. One value per MOIT-MOF price cycle, usually weekly, dated by the cycle's effective date. All three ports carry Petrolimex's zone 1 price. History from 2026-03-24.
  • Free-sample bunker assessments for 25 ports (sparse, not a price series) — spot checks for 14 ports with no other bunker code here, including Antwerp, Hamburg, Zhoushan, New Orleans and Panama. 84 codes of the form {GRADE}_{PORT}_SAMPLE_ASSESSMENT_USD, USD per metric tonne, delivered in Asia and Europe, ex-wharf in the Americas; the value is the printed mean of the low/high range. Treat these as sparse observations, not a series — they come from nine sample reports published between 2019 and 2026, one dated value per report, and new reports appear about once a year, so a stale latest value is expected rather than a fault. Manzanillo and Veracruz print identical numbers in every report.
  • Government bunker contract prices at 90 ports — a delivered-price reference across 53 countries, including many ports with no commercial assessment. 107 codes of the form {GRADE}_TENDER_DLA_{LOCODE}_{MODE}_USD, covering marine gas oil, IFO 380, IFO 180, F-76 and JP-5. These are the prices the U.S. Defense Logistics Agency pays under contract — an awarded price with delivery included, repriced each publishing day against a market index — so they are tender awards, not spot assessments (metadata.price_type: tender_award). Units are as published: USD per metric ton outside the US, USD per gallon for US ports, with metadata.usd_per_mt alongside. History from 2022 in Asia, 2023 in Africa, 2024-25 in Europe and 2026 for US ports.
  • CPC Taiwan posted marine fuel list prices at five ports — Taiwan's state refiner posts international marine fuel prices at Kaohsiung (TWKHH), Taichung (TWTXG), Keelung (TWKEL), Hualien (TWHUN) and Suao (TWSUO). Eleven codes: MGO_LIST_CPC_{PORT}_USD and MF180_05S_LIST_CPC_{PORT}_USD, plus MF380_LIST_CPC_TWKHH_USD at Kaohsiung only. USD per metric ton. This is CPC's posted spot list price, not a market assessment; CPC's contract price sits alongside in metadata.contract_usd_per_mt. A new row appears only when CPC reposts, and history starts with our first collection because the source publishes none.
  • Shanghai bonded bunker offer prices, trading days since 2023-03-28 — LSFO_380_CNSHA_BONDED_CNY and HSFO_380_CNSHA_BONDED_CNY, delivered in Shanghai port waters (CNSHA), with history via /v1/prices/historical. CNY per metric tonne, bonded (ex-tax) — not converted to USD. The value is a daily exchange-published composite of suppliers' offer quotes, not a transaction assessment: the 18:00 Asia/Shanghai final price, with the 16:00 guide price in metadata.guide_price_cny_per_mt. Trading days only, so no values on weekends or Chinese exchange holidays.
  • Delivered bunker assessments for Mumbai, Kochi, Kandla, Colombo and Salalah, monthly — Mumbai, Kochi, Kandla, Colombo and Salalah, USD per metric tonne: VLSFO_DELIVERED_MONTHLY_{INBOM|INCOK|INIXY|LKCMB}_USD for delivered 0.5% marine fuel, LSMGO_DELIVERED_MONTHLY_OMSLL_USD for delivered 0.1%S LSMGO at Salalah, and LSMGO_DELIVERED_MONTHLY_AVG_OMSLL_USD for its calendar-month average. Each value is a price-reporting agency's assessment as printed in its monthly regional commentary — republished, not our own assessment and not a transaction price. Editions are irregular, so plan for months with no value.
  • Bunker broker indications for nine more ports — Hamburg (DEHAM), Skaw (DKSKA), Port Louis (MUPLU), St. Eustatius (BQEUX), Kingston (JMKIN), Trinidad OPL (TTPOS_OPL), the Zona Comun anchorage (ARBUE_ZONA_COMUN), Bahia Blanca (ARINW) and Callao (PECLL). 21 codes of the form {IFO_380|VLSFO|LSMGO}_INDICATION_{LOCODE}_USD, USD per metric tonne ex-wharf for 500/50 mt lots, on business days. The broker prints a low-high range and the value is its midpoint, with both ends in metadata.range_low and metadata.range_high. These are guidance levels, not assessments or traded prices. Trinidad OPL and Zona Comun have no UN/LOCODE of their own, so the code names a reference port and metadata.location says where the level applies. A day with no printed range, or an implausible one, has no row.
  • Bunker broker indications for New Orleans and Las Palmas — VLSFO_INDICATION_USMSY_USD, LSMGO_INDICATION_USMSY_USD, VLSFO_INDICATION_ESLPA_USD and LSMGO_INDICATION_ESLPA_USD: VLSFO 0.5% and LSMGO 0.1%S, USD per metric tonne ex-wharf for a 500/50 mt lot, on business days. These are a broker's guidance levels, not assessments or traded prices — _INDICATION_ is in the code so it is never mistaken for one. as_of is the date printed on the row, usually the business day before publication.
  • Changjiang Waterway Engineering Bureau fuel tender awards — what a large Chinese state buyer actually pays for delivered domestic 180CST low sulphur fuel oil, across 10 supply sections on the Yangtze and the Chinese coast: LSFO_180_TENDER_CJHDGCJ_{LOCODE}_DOMESTIC_CNY. CNY per metric tonne, duty-paid and VAT-inclusive. This is a buyer's tender award — not a list price, not an assessment and not bonded bunker fuel. One value per procurement batch, about every two months, dated by the award publicity date, with the supply period in metadata.period_start/period_end. History from 2026-04-17.
  • Posted domestic marine fuel list prices, Yingkou and Yantai — FO_180_LIST_SINOPEC_CNYIK_DOMESTIC_CNY (Yingkou, one posted price covering the Bayuquan port area) and FO_180_LIST_LIFENG_CNYTG_DOMESTIC_CNY (Yantai). Each is a single supplier's posted delivered price for domestic-trade fuel oil 180CST — duty-paid, not bonded, and a list price rather than a market assessment. CNY per metric tonne, one value per Chinese working day the supplier quotes. These suppliers suspend quoting for days at a time; a day with no quote has no value, and the previous price is never carried forward.
  • Chimbusco posted domestic marine fuel list prices, Lianyungang and Guangxi — FO_180_LIST_CHIMBUSCO_CNLYG_DOMESTIC_CNY and FO_180_LIST_CHIMBUSCO_CNFAN_DOMESTIC_CNY (Fangchenggang, one price for the Guangxi Beibu Gulf ports). China Marine Bunker's own posted price for domestic-trade fuel oil 180CST — duty-paid, not bonded, and a single supplier's list price rather than a market assessment. CNY per metric tonne, one value per Chinese working day; a day the supplier does not quote has no value.
  • Busan bunker prices — VLSFO_KRPUS_USD, HFO_380_KRPUS_USD and MGO_01S_KRPUS_USD for Busan, Republic of Korea, USD per metric tonne, one published price per weekday, history from 2026-09-03. Busan marine gas oil is a 0.10% sulphur grade, so it is published under its own MGO_01S token; MGO_05S_KRPUS_USD remains unavailable. The value is a published daily port price, not a supplier's posted price and not a transaction. Rows written from this release carry the port and price-type labels; earlier rows do not.
  • Argentine bunker prices by port, monthly since December 2004 — 21 years of monthly history at eight ports including Buenos Aires (ARBUE), Dock Sud (ARDSU), Bahía Blanca (ARINW) and Rosario (ARSMA), for fuel oil, Gas Oil Grado 2 and 3, and Mezcla 70-30. 21 codes of the form {GRADE}_{LOCODE}_{BONDED|DOMESTIC}_AVG_ARS, ARS per litre, unconverted. Each value is the volume-weighted average of what operators actually reported selling under Resolución 1104/04 — a realised average selling price, not a posted or assessed one. _BONDED_ is international bunker, ex-tax; _DOMESTIC_ is cabotage, tax-inclusive. A month with no reported sales has no value.
  • Brazil bunker customs unit values, monthly, seven ports — a monthly cost benchmark at Santos, Rio de Janeiro, Paranaguá, Rio Grande, Itaqui, Itaguaí and Belém: FUEL_OIL_CUSTOMS_{LOCODE}_USD, with GASOIL_CUSTOMS_{LOCODE}_USD at five of them. USD per metric tonne, one value per calendar month, in the first week of the month after. Each value is declared FOB export value divided by net tonnes for fuel cleared to open-registry flag states, with cargo-sized lots excluded. It is a customs-implied unit value from trade statistics, not a spot price and not an assessment, and the fuel oil figure mixes all sulphur grades.
  • Zhoushan bonded bunker quotes, seller and buyer — the official daily quote for 380cst low and high sulphur fuel oil at Zhoushan (CNZOS), seller and buyer: {LSFO_380|HSFO_380}_CNZOS_BONDED_{SELLER|BUYER}_CNY. CNY per metric tonne, bonded (ex-tax), not converted to USD. Each value is an exchange-published quote, not a transaction assessment: a quoted premium over the named futures contract's settlement plus that settlement, and every stored row is checked to reconcile with it. Trading days only; collection starts with this release, with no back history.
  • Bangladesh Petroleum Corporation posted bunker prices at Chattogram and Mongla — price Bangladeshi port calls without a local broker quote. Four codes covering High Speed Diesel and marine fuel at both ports, USD per metric ton: HSD_LIST_BPC_{BDCGP|BDMGL}_USD and MARINE_FUEL_LIST_BPC_{BDCGP|BDMGL}_USD. These are BPC's posted bunker list prices, not market assessments, quoted in USD for vessels separately from BPC's domestic taka prices. The marine fuel row states no sulfur content, so the code does not claim VLSFO. A new row appears only when BPC reposts, and months can pass unchanged.
  • OK Danmark diesel list prices, daily since 2002 — 23 years of daily history via /v1/prices/historical: DIESEL_LIST_OK_DK_DKK (station list price) and DIESEL_TRUCK_LIST_OK_DK_DKK (truck-station list, which matches the Danish majors' daily diesel list). DKK per litre including duties and 25% VAT, before customer discounts, one value per calendar day. Each row also carries the same price ex VAT and ex duties in metadata, so you can work on whichever basis your model needs.
  • EU Weekly Oil Bulletin: heating oil, untaxed road fuels, and 21 years of history — HEATING_OIL_RETAIL_{CC}_EUR (taxed heating gas oil, 24 member states) and GASOLINE_RETAIL_{CC}_EUR_EXTAX / DIESEL_RETAIL_{CC}_EUR_EXTAX (Euro-super 95 and automotive diesel net of excise, VAT and other indirect taxes, 27 member states) join the existing taxed codes. EUR per litre, weekly, dated on the bulletin's Monday. History for every bulletin code now runs back to 2005-01-03, previously 2026-04-08. Source: EU Weekly Oil Bulletin.
  • Nearest still-trading contract on futures — every /v1/futures/<family> latest response now carries nearest_contract (the unexpired contract with the fewest days_to_expiry, held through its own last trading day), is_nearest_contract on each contract, and metadata.front_month_selection stating how front_month was chosen. front_month itself is unchanged: it still rolls 7 days before the current contract's last trading day. Pair nearest_contract with days_to_expiry/expiry_date to roll on your own terms. See the futures reference.

Changed

  • Busan is served on /v1/bunker-fuels — /v1/bunker-fuels/ports/PUS and /ports/KRPUS return prices instead of a 404, and Busan appears in /v1/bunker-fuels/all, in /export defaults and in the port list a 404 body prints. The world's 6th-largest bunker port had no price on this endpoint because its previous source published none; it is now backed by a published Busan port spot price in USD per tonne for IFO 380, VLSFO and LSMGO. Zhoushan and Antwerp remain unavailable and still say why.

  • Every bunker port feed now names its port and its price type on the row — rows from the bunker feeds added this month carry metadata.port_locode beside the price, and the port in one spelling across every feed, so you can join them without a lookup table. CPC Taiwan rows also gain the price-type labels the other feeds already had. Existing rows are unchanged; labels start with rows written from this release. /v1/bunker-fuels still serves delivered spot assessments in USD per tonne only, and never mixes tender awards, list prices or broker indications into them.

  • Live-freshness refusal on gasoil and Henry Hub natural-gas futures — when the market is open and intraday data falls behind the freshness bound, /v1/futures/ice-gasoil and /v1/futures/natural-gas return 503 LIVE_DATA_STALE with the market-hours context (freshness_status, market_status, stale_by_minutes, market_timezone, …) instead of serving stale ticks (their /intraday endpoints refuse under the same rule). Distinct from the 96-hour DATA_TOO_STALE bound, which is checked first and applies at all hours.

  • Interval aliases — every historical endpoint accepts the same alias spellings per family (1h/h/hour/1hour, 1d/d/day/1day, 1w/w/week/1week, 1m/m/month/1month), case-insensitively, and an unknown spelling on /v1/prices/historical returns 400 listing valid_intervals. Endpoints that previously tolerated unknown intervals keep their fallback behaviour.

  • Gasoil crack at weekends — /v1/spreads/gasoil-crack now uses the same 96-hour serving bound as the futures endpoints, so weekend and holiday closures serve the last trading session instead of returning 404.

  • Broker indication sheets no longer lose a whole day to one odd row — the two daily broker-indication sheets used to refuse the entire document when a single row or cell was unreadable, so one new port or one typed character stopped every port on the sheet. A single row or cell is now skipped and reported while every other port still publishes; the document is refused only when its headers, date, basis line or column layout change, or when no row on it is usable. A day on which nothing at all publishes still alerts. No change to any stored value, code or label.

Fixed

  • Three Petrolimex mazút codes are now reachable — MAZUT_RMG180_05S_LIST_PETROLIMEX_VNPHU_DOMESTIC_VND, ..._VNSGN_... and ..._VNHPH_... are 51 characters, and the API refused any code over 50, so the 0.5%S RMG grade answered invalid_code although the rows were there. The maximum accepted commodity code length is now 64 characters on every endpoint. No code, value or label changed; the three codes simply answer.
  • "Did you mean" no longer suggests the code you sent — both the invalid_code (400) and no_price_data (404) bodies could list the exact code in the request as its own correction, because the suggester matches against the catalogue and a catalogued code is its own best match. The requested code is now excluded from suggestions and did_you_mean. A code that is in the catalogue but has no observations yet says so (known_code: true, has_data: false) instead of reading as unknown, and a code refused for being too long now says its length and the maximum rather than "not found".

August 2026

Added

  • European gasoil crack — GET /v1/spreads/gasoil-crack: ICE Low Sulphur Gasoil (USD/tonne ÷ 7.45) against ICE Brent in USD/bbl, with each leg's contract_month and the conversion applied.
  • Point-in-time history — past_day, past_week, past_month and past_year accept ?as_of=<ISO 8601> (requires interval=raw) and answer with X-Vintage-As-Of and X-Vintage-Revision-Coverage-Since headers. Revisions are tracked from 2026-07-28. past_day?at=YYYY-MM-DD returns one calendar day, and /v1/prices/YYYY-MM-DD is an alias that serves that lookup directly (no redirect; the near-miss aliases stopped redirecting in September 2026). See Historical.
  • Swap disclosures — SINGAPORE_JET_KEROSENE_USD and SINGAPORE_MOGAS_92_USD are calendar-month average futures, not spot prices. /v1/prices/latest and /v1/commodities/{code} return an instrument_disclosure object for them (with contract_month when known); past_* and historical carry metadata.instrument_disclosures[]. Omitted from CSV.
  • Withheld historical values — historical responses carry metadata.quarantine when verified-unreliable dates were excluded from the window. Source rows are not deleted.
  • Discovery hint — /v1/prices/latest may include an additive metadata.discover {endpoint, description} for accounts using few endpoints; safe to ignore.
  • Machine-readable tier limits — GET /v1/meta/limits (alias /limits.json, no key) returns the current Free, trial and paid-plan limits with their windows. Product facts are published under schema 2.0.0 with /schemas/product-facts-v2.schema.json. GET /v1/health is a keyless liveness alias.
  • Futures bars carry open_interest alongside volume; /v1/futures/*/curve contracts carry expiry_date, and contracts past their last trading day are excluded from the curve.
  • Futures OHLC history to five years — days on /v1/futures/*/ohlc accepts up to 1825; larger values are served as 1825 with truncated: true, days_requested and days_served.
  • Rig counts — /v1/rig-counts/historical accepts period and by_period windows up to 15 years (weekly data held back to 2013-01-04); the period object reports coverage_from, coverage_to, earliest_available, observations and complete; responses paginate at 100 with Link headers.
  • Well permits freshness — as_of on /v1/ei/well-permits/* is the newest permit_date held (not the request time), with data_age_days, stale and as_of_basis; multi-state responses add by_state_as_of and stale_states.
  • Well production — /v1/well-production/summary national reports data_available and provisional instead of null or zero while state filings are still landing; GET /v1/well-production/wells/:api_number 404s include reason (unknown_state_prefix, state_not_covered, well_not_in_source) with state and source.
  • Drilling intelligence — per-state current_activity_status, indexing_recommendation and current_activity_reason on /v1/pseo/drilling-intelligence/states/:state/full and /v1/ei/well-permits/states/:state_code.
  • Spreads history — /v1/spreads/crack/historical reports coverage (from, to, observations, complete) and data_revised_at.
  • Six physical crude benchmarks — BONNY_LIGHT_USD, ESPO_CRUDE_USD and JOHAN_SVERDRUP_USD join MURBAN_CRUDE_USD, MARS_USD and LOUISIANA_LIGHT_USD; each has its own publication cadence, so read as_of, data_status and stale per series.
  • Better invalid_code errors — the 400 body includes did_you_mean[] with code, name, description, available and, when false, unavailable_reason; when a suggested code is not in the default /v1/commodities listing the message points at ?include_unavailable=true. WCS, CANADIAN_CRUDE, CANADIAN_CRUDE_USD, WESTERN_CANADIAN_SELECT and WESTERN_CANADIAN_SELECT_USD resolve to WCS_CRUDE_USD.
  • Query-parameter authentication — ?api_key= is accepted on GET/HEAD for clients that cannot send headers (Google Sheets IMPORTDATA); an Authorization header always wins.
  • Marine fuels — /v1/prices/marine-fuels/latest and /historical accept port_code (the OpenAPI name); port remains an alias.

Changed

  • Quota errors by plan — the Free tier returns 402 Payment Required (PAYMENT_REQUIRED) when its daily quota is used up; paid plans and trials return 429 with MONTHLY_QUOTA_EXCEEDED / TRIAL_LIMIT_EXCEEDED, distinct from the rolling-window RATE_LIMIT_EXCEEDED. Every quota block carries current_usage, reset (the real window end), efficiency and reduce_usage — the free ways to need fewer requests — and the Free-tier 402 also sizes recommended_plan on attempted volume. Full body on Rate Limiting.
  • A 304 Not Modified no longer counts against your quota (it still uses a rate-limit slot). Send If-None-Match with the ETag from your previous response.
  • X-RateLimit-Window (daily_counter, monthly_counter, trial_counter) and X-RateLimit-State headers say which window the X-RateLimit-* counters describe. The X-Monthly-Remaining header never existed; use X-RateLimit-Remaining.
  • Futures on the Free tier — free-plan calls to /v1/futures/* count against the daily allowance and return 402 FREE_TIER_LIMIT_EXCEEDED past it. Futures Data is included in Professional and above and available to other paid plans as a $39/month add-on; the 403 names the add-on and links to billing.
  • Stale futures are refused, not warned — /v1/futures/* returns 503 DATA_TOO_STALE (data_age_hours, max_age_hours: 96, last_updated) when the newest quote is older than 96 hours. Quotes 1–96 hours old are served with data_age_warning.
  • settlement on futures bars is the exchange-published settlement when captured and null otherwise; it is no longer a copy of close.
  • Spreads on trial — active 7-day trials can call /v1/spreads/*.
  • /v1/commodities default listing omits codes not backed by data even where they remain callable; pass ?include_unavailable=true for every configured code with has_data and a reason.
  • Suspended or over-quota keys are throttled to 5 requests per rolling 60 seconds rather than left unthrottled.
  • Congressional trades marked not live — /v1/indicators/congressional-trades returns 404 DATA_NOT_AVAILABLE until its source is configured and is excluded from the public OpenAPI contract.

Documentation

  • Every remaining reference to the retired monthly free-tier allowance now reads 50 requests per day, across the API reference, integration guides, comparison pages, tools and blog; the lint rule that guards this copy now catches the phrasings it previously missed.
  • Futures and spreads pages match the current response shapes (settlement, open_interest, expiry_date, days ceiling, plan and add-on access); the stale spreads entitlement caveat is gone.
  • /api-reference/ei/drilling-intelligence, /api-reference/spreads/gasoil-crack and /api-reference/prices/demo are in the sidebar.

Changed (earlier in August)

  • Free tier is now 50 requests per day, replacing the previous 200 requests per month (effective 2026-08-05). The window changed as well as the number: the allowance now resets daily rather than monthly, so a 402 Payment Required on the Free tier clears at the next daily reset instead of the next month. In monthly terms the allowance is roughly 7.5x larger than before. Paid plans are unchanged and remain monthly: Developer 10,000/month, Starter 50,000/month, Professional 100,000/month, Scale 1,000,000/month. See Rate Limiting for the full table.

July 2026

Added

  • UK carbon (UKA) forward curve — GET /v1/futures/uk-carbon/curve, term-structure analysis parallel to eua-carbon/curve. Note the URL slug is uk-carbon (contract codes remain UKA_FUTURES_*).
  • Fuel Surcharge API reference for carrier-published LTL and parcel surcharge schedules:
    • GET /v1/fuel-surcharge - latest LTL surcharges by covered carrier
    • GET /v1/fuel-surcharge/:carrier/latest and /history - one LTL carrier
    • GET /v1/fuel-surcharge/parcel - latest parcel surcharges grouped by carrier and service level
    • GET /v1/fuel-surcharge/parcel/:carrier/latest and /history - one parcel carrier/service level
  • API reference coverage for spreads, market indicators, bunker and maritime fuels, gas/LNG futures, UK carbon futures, webhooks, alerts, account status, API keys, subscriptions, organizations, and price utility endpoints.
  • Data-rights guidance for internal use, public display, redistribution, and downstream productization review.
  • Documentation guardrails for unsupported market-data claims and phantom endpoint drift.

Changed

  • Published OpenAPI examples now use Authorization: Token YOUR_API_KEY for API keys, retain Bearer only for JWT sessions, advertise only the production API server, and explain recovery for payment, rate-limit, and transient server errors.
  • Commodity catalog pages now use source-timestamped freshness language, omit stale generated price/date snapshots, and provide direct Python and JavaScript quickstarts for every catalog entry.
  • Replaced broad "real-time" claims with source timestamp and documented update-cadence language where users need to evaluate freshness.
  • Removed phantom /v1/drilling/* paths and corrected marine fuel paths in the published OpenAPI file.
  • Standardized data-source labels. The source / data_source fields in API responses now report a consistent value for non-government data: series drawn from published market reporting return market_reporting, while government-sourced series continue to name their agency (for example EIA, OPEC). This aligns our responses with our Data Provenance & Rights policy: OilPriceAPI is a data collection and delivery service, and we are not affiliated with or a licensed distributor of any exchange or price-reporting agency. If your integration branches on the source string, update it to treat market_reporting as the label for non-government sources. The underlying prices and endpoints are unchanged.

June 2026

Added

  • AI-agent endpoints for the OilPriceAPI MCP server:
    • GET /v1/market-brief - multi-commodity snapshot with 24h changes, 1-month forecasts, and an optional plain-English narrative (1 request per call)
    • /v1/subscriptions - persistent recurring "watches" with a poll-based event model (GET /v1/subscriptions/events, which does not count against the request quota)
  • Agent Subscriptions with MCP recipe documenting opa_get_market_brief, opa_create_price_subscription, and opa_get_subscription_events
  • Per-tier plan gating for codes-per-brief, watch count, and snapshot interval (Free included; full feature on Professional and Scale)
  • Well Production Data — four-state launch (TX, AK, NM, ND) with US national monthly rollup:
    • GET /v1/well-production/ — coverage and package summary
    • GET /v1/well-production/states — supported states with metadata
    • GET /v1/well-production/states/:code — state production history (well-level monthly)
    • GET /v1/well-production/wells/:api — individual well production by API number
    • GET /v1/well-production/top-producers — top producing wells by state
    • GET /v1/well-production/cycle-time — permit-to-first-production cycle time
    • GET /v1/well-production/cycle-time/cohorts — cycle time by vintage cohort
    • Sources: TX RRC, NM OCD, ND NDIC, AOGCC. Additional states are in progress — see the Well Production reference for current coverage.
    • National rollup (US/state_well_rollup) derives monthly totals from all collected well-level state rows.

May 2026

Added

  • ICE JKM LNG futures — GET /v1/futures/lng-jkm (with /historical, /curve, /ohlc, /intraday, /spreads)
  • UK carbon (UKA) futures — GET /v1/futures/uk-carbon (with /historical)
  • Excel API gateway — GET /v1/excel/run and GET /v1/prices/excel-latest backing the Excel add-in
  • Developer plans now allow up to 3 API keys
  • Futures responses expose front-month contract-selection semantics

April 2026

Added

  • Calculated Metrics API — GET /v1/spreads/*: crack spreads, basis spreads, curve structure, refinery margin, and physical (spot-vs-futures) premium, each with /historical and /all variants
  • Market intelligence — market annotations, CFTC positioning, and storage analytics
  • Well Production Data — TX RRC well-level scraper and Enterprise API (foundation for the June four-state launch)
  • 21 new physical commodity spot prices (EIA, EEX, NGI, ACER sources)
  • Macro economic indicators (FRED integration) and an economic release calendar
  • GET /v1/futures/ice-brent now returns the front-month contract and its codes
  • /v1/prices auto-downsamples long windows for intraday commodity codes

December 2025

Added

  • 7-day free trial with 10,000 requests, followed by the Free tier with 200 requests/month
  • New onboarding email sequence for first-time users
  • Improved documentation with multi-language code examples

Changed

  • Trial accounts now receive full API access during trial period
  • Updated Quick Start guide with troubleshooting section

November 2025

Added

  • 8 new coal commodity endpoints:
    • COAL_USD - Newcastle Thermal Coal
    • COAL_EUR - Rotterdam Coal
    • COKING_COAL_USD - Premium Hard Coking Coal
    • COAL_SOUTH_AFRICA_USD - Richards Bay Coal
    • COAL_INDONESIA_USD - Indonesian Coal (ICI4)
    • COAL_CHINA_USD - China Qinhuangdao Coal
    • COAL_AUSTRALIA_USD - Australian Thermal Coal
    • ANTHRACITE_USD - Anthracite Coal

Improved

  • Coal price update frequency now daily (previously weekly)

October 2025

Added

  • WebSocket streaming for real-time price updates (Professional+ plans)
  • WS_CONNECT endpoint at wss://api.oilpriceapi.com/cable
  • Real-time subscription channels for individual commodities

Changed

  • WebSocket connections now require Professional plan or higher
  • Improved connection stability with automatic reconnection

September 2025

Improved

  • Rate limit headers now include X-RateLimit-Used and X-RateLimit-Tier
  • Response time headers added to all endpoints

Correction (July 2026)

Earlier revisions of this changelog listed an "X-App-URL header bonus" (10% extra monthly requests) and related telemetry headers under this month. That feature was never built and does not exist in the API. Sending X-App-URL has no effect on your quota. The entry has been removed. See Authentication for the headers the API actually reads.


August 2025

Added

  • Bunker fuel endpoints for maritime industry:
    • VLSFO_USD - Very Low Sulphur Fuel Oil
    • HSFO_USD - High Sulphur Fuel Oil
    • MGO_USD - Marine Gas Oil
    • Bunker prices for 20+ major ports worldwide

Improved

  • Added source-specific refresh scheduling and timestamps for bunker-fuel values

July 2025

Added

  • Energy Intelligence endpoints (premium plans):
    • /v1/rig-counts/latest - Active rig counts by region
    • /v1/drilling-intelligence/well-permits - Well permit datasets
    • /v1/drilling-intelligence/summary - Energy intelligence summary

Fixed

  • Resolved intermittent 504 timeouts on historical endpoints
  • Fixed pagination on /v1/prices/past_month endpoint

June 2025

Added

  • Futures pricing endpoints:
    • /v1/futures/wti - WTI crude oil futures
    • /v1/futures/brent - Brent crude futures
    • /v1/futures/natural-gas - Natural gas futures
  • Contract expiration dates in futures responses

Changed

  • Historical data endpoints now support date range queries
  • Added start_date and end_date parameters

May 2025

Added

  • Currency conversion for all commodities:
    • _USD, _EUR, _GBP suffixes available
    • Real-time forex rates applied
  • New currency parameter on all price endpoints

Improved

  • Response times reduced by 40% with edge caching
  • Added Cloudflare CDN for global performance

April 2025

Added

  • Natural gas regional pricing:
    • NATURAL_GAS_EUR - European TTF
    • NATURAL_GAS_ASIA - JKM Asian LNG
    • DUTCH_TTF_GAS_EUR - Dutch TTF Natural Gas

Fixed

  • Corrected Business Insider data source parsing
  • Fixed timezone issues in created_at timestamps

March 2025

Added

  • Refined products expansion:
    • JET_FUEL_USD - Jet Fuel (Kerosene)
    • GASOLINE_USD - RBOB Gasoline
    • HEATING_OIL_USD - Heating Oil No. 2
    • DIESEL_USD - Ultra Low Sulfur Diesel

Changed

  • All prices now include metadata.source_description
  • Improved source accuracy documentation

February 2025

Added

  • Account endpoint /v1/account for usage tracking
  • Request analytics in dashboard
  • Geographic usage breakdown

Improved

  • Rate limit error messages now include reset time
  • Added Retry-After header on 429 responses

January 2025

Launch

  • OilPriceAPI v1 launched
  • Core endpoints:
    • /v1/prices/latest - Current prices
    • /v1/prices/past_day - 24-hour history
    • /v1/prices/past_week - 7-day history
    • /v1/prices/past_month - 30-day history
    • /v1/commodities - List all commodities
  • Initial commodities: WTI, Brent, Natural Gas
  • Token-based authentication
  • Rate limiting with usage headers

API Versioning Policy

  • v1 is stable: No breaking changes without 90-day notice
  • Deprecations: Announced via email and changelog
  • New features: Added without version bump
  • Breaking changes: Will trigger v2 with migration guide

Support

  • Email: support@oilpriceapi.com
  • Status: status.oilpriceapi.com
  • Documentation: docs.oilpriceapi.com
Last Updated: 10/23/26, 9:55 PM
Prev
SLA Overview