Changelog
All notable changes to the OilPriceAPI are documented here.
The format is based on Keep a Changelog.
September 2026
Added
- Denmark diesel list prices, daily since 2002 —
DIESEL_LIST_OK_DK_DKK(OK Danmark's station diesel list price) andDIESEL_TRUCK_LIST_OK_DK_DKK(OK's truck-station list, which matches the Danish majors' daily diesel list). DKK per litre, duties and 25% VAT included, before customer discounts, one value per calendar day withas_ofon the day it applies; the same price ex VAT and ex duties is in each row'smetadata. History back to 2002-08-23 via/v1/prices/historical.
Changed
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.
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