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_USDandHFO_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_USDshorthand — the reference now documents thatLPG_USDandLPGresolve toPROPANE_MONT_BELVIEU_USDon 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_USDis the Henry Hub front-month futures quote again; EIA daily spot moves toNATURAL_GAS_HENRY_HUB_SPOT_USD—/v1/prices/latest?by_code=NATURAL_GAS_USD(and its aliasesNG,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, withsource_date,as_of,instrument_type: physical_spotand the EIA publication-cadence freshness window.NATGAS_FUTURESis unchanged and continues to return the explicit contract code (for exampleNATGAS_FUTURES_2026_11). Spot and futures are distinct benchmarks and can differ by several percent./v1/prices/historicalfollows the same split:NATURAL_GAS_USDhistory contains only the futures quote (from December 2023) and no longer includes EIA spot observations.Henry Hub daily spot identity —
NATURAL_GAS_USDnow 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; readsource_date,as_ofandfreshnessbefore using a price. For intraday natural-gas futures, request/v1/prices/latest?by_code=NATGAS_FUTURESand 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-tradesnow returns410 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_USDandLSMGO_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, andmetadata.price_typeisbroker_indication. The sheet covers the Maltese bunkering area rather than one berth, sometadata.locationnames 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_USDandLSMGO_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 carriesmetadata.unchanged_run_daysandmetadata.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.geographyisnationalandport_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 inmetadata.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_codefor 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_VNDandMAZUT_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, withmetadata.usd_per_mtalongside. 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}_USDandMF180_05S_LIST_CPC_{PORT}_USD, plusMF380_LIST_CPC_TWKHH_USDat Kaohsiung only. USD per metric ton. This is CPC's posted spot list price, not a market assessment; CPC's contract price sits alongside inmetadata.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_CNYandHSFO_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 inmetadata.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}_USDfor delivered 0.5% marine fuel,LSMGO_DELIVERED_MONTHLY_OMSLL_USDfor delivered 0.1%S LSMGO at Salalah, andLSMGO_DELIVERED_MONTHLY_AVG_OMSLL_USDfor 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 inmetadata.range_lowandmetadata.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 andmetadata.locationsays 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_USDandLSMGO_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_ofis 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 inmetadata.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) andFO_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_CNYandFO_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_USDandMGO_01S_KRPUS_USDfor 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 ownMGO_01Stoken;MGO_05S_KRPUS_USDremains 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, withGASOIL_CUSTOMS_{LOCODE}_USDat 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}_USDandMARINE_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) andDIESEL_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 inmetadata, 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) andGASOLINE_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 carriesnearest_contract(the unexpired contract with the fewestdays_to_expiry, held through its own last trading day),is_nearest_contracton each contract, andmetadata.front_month_selectionstating howfront_monthwas chosen.front_monthitself is unchanged: it still rolls 7 days before the current contract's last trading day. Pairnearest_contractwithdays_to_expiry/expiry_dateto roll on your own terms. See the futures reference.
Changed
Busan is served on
/v1/bunker-fuels—/v1/bunker-fuels/ports/PUSand/ports/KRPUSreturn prices instead of a 404, and Busan appears in/v1/bunker-fuels/all, in/exportdefaults 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_locodebeside 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-fuelsstill 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-gasoiland/v1/futures/natural-gasreturn503 LIVE_DATA_STALEwith the market-hours context (freshness_status,market_status,stale_by_minutes,market_timezone, …) instead of serving stale ticks (their/intradayendpoints refuse under the same rule). Distinct from the 96-hourDATA_TOO_STALEbound, 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/historicalreturns400listingvalid_intervals. Endpoints that previously tolerated unknown intervals keep their fallback behaviour.Gasoil crack at weekends —
/v1/spreads/gasoil-cracknow uses the same 96-hour serving bound as the futures endpoints, so weekend and holiday closures serve the last trading session instead of returning404.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 answeredinvalid_codealthough 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) andno_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 fromsuggestionsanddid_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'scontract_monthand the conversion applied. - Point-in-time history —
past_day,past_week,past_monthandpast_yearaccept?as_of=<ISO 8601>(requiresinterval=raw) and answer withX-Vintage-As-OfandX-Vintage-Revision-Coverage-Sinceheaders. Revisions are tracked from 2026-07-28.past_day?at=YYYY-MM-DDreturns one calendar day, and/v1/prices/YYYY-MM-DDis 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_USDandSINGAPORE_MOGAS_92_USDare calendar-month average futures, not spot prices./v1/prices/latestand/v1/commodities/{code}return aninstrument_disclosureobject for them (withcontract_monthwhen known);past_*andhistoricalcarrymetadata.instrument_disclosures[]. Omitted from CSV. - Withheld historical values — historical responses carry
metadata.quarantinewhen verified-unreliable dates were excluded from the window. Source rows are not deleted. - Discovery hint —
/v1/prices/latestmay include an additivemetadata.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 schema2.0.0with/schemas/product-facts-v2.schema.json.GET /v1/healthis a keyless liveness alias. - Futures bars carry
open_interestalongsidevolume;/v1/futures/*/curvecontracts carryexpiry_date, and contracts past their last trading day are excluded from the curve. - Futures OHLC history to five years —
dayson/v1/futures/*/ohlcaccepts up to 1825; larger values are served as 1825 withtruncated: true,days_requestedanddays_served. - Rig counts —
/v1/rig-counts/historicalacceptsperiodandby_periodwindows up to 15 years (weekly data held back to 2013-01-04); theperiodobject reportscoverage_from,coverage_to,earliest_available,observationsandcomplete; responses paginate at 100 withLinkheaders. - Well permits freshness —
as_ofon/v1/ei/well-permits/*is the newestpermit_dateheld (not the request time), withdata_age_days,staleandas_of_basis; multi-state responses addby_state_as_ofandstale_states. - Well production —
/v1/well-production/summarynationalreportsdata_availableandprovisionalinstead ofnullor zero while state filings are still landing;GET /v1/well-production/wells/:api_number404s includereason(unknown_state_prefix,state_not_covered,well_not_in_source) withstateandsource. - Drilling intelligence — per-state
current_activity_status,indexing_recommendationandcurrent_activity_reasonon/v1/pseo/drilling-intelligence/states/:state/fulland/v1/ei/well-permits/states/:state_code. - Spreads history —
/v1/spreads/crack/historicalreportscoverage(from,to,observations,complete) anddata_revised_at. - Six physical crude benchmarks —
BONNY_LIGHT_USD,ESPO_CRUDE_USDandJOHAN_SVERDRUP_USDjoinMURBAN_CRUDE_USD,MARS_USDandLOUISIANA_LIGHT_USD; each has its own publication cadence, so readas_of,data_statusandstaleper series. - Better
invalid_codeerrors — the 400 body includesdid_you_mean[]withcode,name,description,availableand, whenfalse,unavailable_reason; when a suggested code is not in the default/v1/commoditieslisting the message points at?include_unavailable=true.WCS,CANADIAN_CRUDE,CANADIAN_CRUDE_USD,WESTERN_CANADIAN_SELECTandWESTERN_CANADIAN_SELECT_USDresolve toWCS_CRUDE_USD. - Query-parameter authentication —
?api_key=is accepted onGET/HEADfor clients that cannot send headers (Google SheetsIMPORTDATA); anAuthorizationheader always wins. - Marine fuels —
/v1/prices/marine-fuels/latestand/historicalacceptport_code(the OpenAPI name);portremains 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 return429withMONTHLY_QUOTA_EXCEEDED/TRIAL_LIMIT_EXCEEDED, distinct from the rolling-windowRATE_LIMIT_EXCEEDED. Every quota block carriescurrent_usage,reset(the real window end),efficiencyandreduce_usage— the free ways to need fewer requests — and the Free-tier402also sizesrecommended_planon attempted volume. Full body on Rate Limiting. - A
304 Not Modifiedno longer counts against your quota (it still uses a rate-limit slot). SendIf-None-Matchwith the ETag from your previous response. X-RateLimit-Window(daily_counter,monthly_counter,trial_counter) andX-RateLimit-Stateheaders say which window theX-RateLimit-*counters describe. TheX-Monthly-Remainingheader never existed; useX-RateLimit-Remaining.- Futures on the Free tier — free-plan calls to
/v1/futures/*count against the daily allowance and return402 FREE_TIER_LIMIT_EXCEEDEDpast it. Futures Data is included in Professional and above and available to other paid plans as a $39/month add-on; the403names the add-on and links to billing. - Stale futures are refused, not warned —
/v1/futures/*returns503 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 withdata_age_warning. settlementon futures bars is the exchange-published settlement when captured andnullotherwise; it is no longer a copy ofclose.- Spreads on trial — active 7-day trials can call
/v1/spreads/*. /v1/commoditiesdefault listing omits codes not backed by data even where they remain callable; pass?include_unavailable=truefor every configured code withhas_dataand 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-tradesreturns404 DATA_NOT_AVAILABLEuntil 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,daysceiling, plan and add-on access); the stale spreads entitlement caveat is gone. /api-reference/ei/drilling-intelligence,/api-reference/spreads/gasoil-crackand/api-reference/prices/demoare 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 Requiredon 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 toeua-carbon/curve. Note the URL slug isuk-carbon(contract codes remainUKA_FUTURES_*). - Fuel Surcharge API reference for carrier-published LTL and parcel surcharge schedules:
GET /v1/fuel-surcharge- latest LTL surcharges by covered carrierGET /v1/fuel-surcharge/:carrier/latestand/history- one LTL carrierGET /v1/fuel-surcharge/parcel- latest parcel surcharges grouped by carrier and service levelGET /v1/fuel-surcharge/parcel/:carrier/latestand/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_KEYfor 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_sourcefields in API responses now report a consistent value for non-government data: series drawn from published market reporting returnmarket_reporting, while government-sourced series continue to name their agency (for exampleEIA,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 thesourcestring, update it to treatmarket_reportingas 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, andopa_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 summaryGET /v1/well-production/states— supported states with metadataGET /v1/well-production/states/:code— state production history (well-level monthly)GET /v1/well-production/wells/:api— individual well production by API numberGET /v1/well-production/top-producers— top producing wells by stateGET /v1/well-production/cycle-time— permit-to-first-production cycle timeGET /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/runandGET /v1/prices/excel-latestbacking 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/historicaland/allvariants - 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-brentnow returns the front-month contract and its codes/v1/pricesauto-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 CoalCOAL_EUR- Rotterdam CoalCOKING_COAL_USD- Premium Hard Coking CoalCOAL_SOUTH_AFRICA_USD- Richards Bay CoalCOAL_INDONESIA_USD- Indonesian Coal (ICI4)COAL_CHINA_USD- China Qinhuangdao CoalCOAL_AUSTRALIA_USD- Australian Thermal CoalANTHRACITE_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_CONNECTendpoint atwss://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-UsedandX-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 OilHSFO_USD- High Sulphur Fuel OilMGO_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_monthendpoint
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_dateandend_dateparameters
May 2025
Added
- Currency conversion for all commodities:
_USD,_EUR,_GBPsuffixes available- Real-time forex rates applied
- New
currencyparameter 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 TTFNATURAL_GAS_ASIA- JKM Asian LNGDUTCH_TTF_GAS_EUR- Dutch TTF Natural Gas
Fixed
- Corrected Business Insider data source parsing
- Fixed timezone issues in
created_attimestamps
March 2025
Added
- Refined products expansion:
JET_FUEL_USD- Jet Fuel (Kerosene)GASOLINE_USD- RBOB GasolineHEATING_OIL_USD- Heating Oil No. 2DIESEL_USD- Ultra Low Sulfur Diesel
Changed
- All prices now include
metadata.source_description - Improved source accuracy documentation
February 2025
Added
- Account endpoint
/v1/accountfor usage tracking - Request analytics in dashboard
- Geographic usage breakdown
Improved
- Rate limit error messages now include reset time
- Added
Retry-Afterheader 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