Oil Price API Documentation - Quick Start in 5 Minutes | REST API
GitHub
GitHub

Commodities Trading API

Category: Financial Services | Industry: Trading & Investment

Energy commodities are among the most actively traded assets globally. OilPriceAPI provides institutional-quality price data for oil, natural gas, coal, and related commodities, enabling traders, analysts, and financial applications to access real-time and historical market data. Build trading dashboards with our Power BI integration or Tableau integration.

The Challenge

Commodities traders and financial analysts face data quality and access challenges:

  • Data fragmentation across multiple sources creates inconsistency
  • High costs for institutional data feeds limit accessibility
  • API complexity of traditional providers increases integration time
  • Latency concerns impact trading decision quality
  • Historical data gaps complicate backtesting and analysis
  • Multi-commodity coverage requires multiple subscriptions

Without reliable, affordable access to commodity price data, smaller trading operations and fintech applications struggle to compete effectively. Compare our pricing with traditional providers: Quandl alternative, Alpha Vantage comparison, or Platts alternative.

The Solution

OilPriceAPI delivers comprehensive commodity price data through a developer-friendly API, making institutional-quality data accessible for trading applications, financial models, and market analysis tools.

Key Benefits

BenefitImpact
220+ commoditiesBroad coverage in a single API
Real-time updatesCurrent market prices for active trading
Historical depthBacktesting and trend analysis support
Simple integrationREST API with clear documentation
Affordable pricingAccessible for startups and smaller firms

Commodity Coverage

CategoryExamples
Crude OilWTI, Brent, Dubai, Urals
Refined ProductsGasoline, Diesel, Jet Fuel, Heating Oil
Natural GasHenry Hub, Dutch TTF, JKM LNG
CoalNewcastle, CME, PRB, Illinois Basin
Marine FuelsVLSFO, MGO, HFO across major ports
CarbonEU ETS Carbon Credits
CurrenciesEUR/USD, GBP/USD
DrillingUS, Canada, International Rig Counts

Relevant API Endpoints

Get Real-Time Prices

Retrieve current prices for trading decisions:

# Get major oil benchmarks
curl "https://api.oilpriceapi.com/v1/prices/latest?by_code=WTI_USD,BRENT_CRUDE_USD" \
  -H "Authorization: Token YOUR_API_KEY"

# Get all latest prices
curl "https://api.oilpriceapi.com/v1/prices/latest" \
  -H "Authorization: Token YOUR_API_KEY"

Response:

{
  "status": "success",
  "data": {
    "price": 78.45,
    "formatted": "$78.45",
    "currency": "USD",
    "code": "WTI_USD",
    "created_at": "2025-01-15T15:30:00.000Z",
    "type": "spot_price",
    "source": "oilprice.business_insider"
  }
}

Historical Price Data

Access time-series data for analysis and backtesting:

# Past year of WTI with weekly aggregation
curl "https://api.oilpriceapi.com/v1/prices/past_year?by_code=WTI_USD&interval=1w" \
  -H "Authorization: Token YOUR_API_KEY"

# Past month of natural gas with daily averages
curl "https://api.oilpriceapi.com/v1/prices/past_month?by_code=NATURAL_GAS_USD&interval=1d" \
  -H "Authorization: Token YOUR_API_KEY"

# High-frequency data for intraday analysis
curl "https://api.oilpriceapi.com/v1/prices/past_week?by_code=BRENT_CRUDE_USD&interval=1h" \
  -H "Authorization: Token YOUR_API_KEY"

List Available Commodities

Discover all available commodity codes:

curl "https://api.oilpriceapi.com/v1/commodities" \
  -H "Authorization: Token YOUR_API_KEY"

Premium Endpoints

Access advanced data for professional trading:

# Get all prices in one call
curl "https://api.oilpriceapi.com/v1/prices/all" \
  -H "Authorization: Token YOUR_API_KEY"

# Marine fuel prices across ports
curl "https://api.oilpriceapi.com/v1/prices/marine-fuels" \
  -H "Authorization: Token YOUR_API_KEY"

Integration Examples

Trading System Integration

Build commodity price feeds into your trading platform. For additional language support, see our Go, C#/.NET, or R guides:

import requests
from datetime import datetime, timedelta
from typing import Dict, List
import statistics

class CommodityTradingAPI:
    def __init__(self, api_key):
        self.api_key = api_key
        self.base_url = 'https://api.oilpriceapi.com/v1'
        self.headers = {'Authorization': f'Token {api_key}'}

    def get_current_prices(self, commodities: List[str]) -> Dict:
        """Get current prices for specified commodities."""
        response = requests.get(
            f'{self.base_url}/prices/latest',
            params={'by_code': ','.join(commodities)},
            headers=self.headers
        )
        return response.json()

    def get_spread(self, commodity_a: str, commodity_b: str) -> Dict:
        """Calculate spread between two commodities."""
        data = self.get_current_prices([commodity_a, commodity_b])

        # Parse response for both commodities
        prices = self._parse_prices(data)

        if commodity_a in prices and commodity_b in prices:
            spread = prices[commodity_a] - prices[commodity_b]
            return {
                'commodity_a': commodity_a,
                'commodity_b': commodity_b,
                'price_a': prices[commodity_a],
                'price_b': prices[commodity_b],
                'spread': round(spread, 2),
                'spread_pct': round((spread / prices[commodity_b]) * 100, 2)
            }
        return {'error': 'Could not calculate spread'}

    def _parse_prices(self, data) -> Dict[str, float]:
        """Parse API response to extract prices by code."""
        prices = {}
        if data.get('status') == 'success':
            d = data.get('data', {})
            if isinstance(d, dict) and 'code' in d:
                prices[d['code']] = d['price']
            elif isinstance(d, list):
                for item in d:
                    prices[item['code']] = item['price']
        return prices

    def analyze_trend(self, commodity: str, days: int = 30) -> Dict:
        """Analyze price trend for a commodity."""
        endpoint = 'past_week' if days <= 7 else 'past_month' if days <= 30 else 'past_year'
        response = requests.get(
            f'{self.base_url}/prices/{endpoint}',
            params={'by_code': commodity, 'interval': '1d'},
            headers=self.headers
        )
        data = response.json()
        prices = [p['price'] for p in data['data']['prices']]

        current = prices[0]
        avg = statistics.mean(prices)
        std_dev = statistics.stdev(prices) if len(prices) > 1 else 0

        # Calculate momentum
        if len(prices) >= 5:
            short_ma = statistics.mean(prices[:5])
            long_ma = statistics.mean(prices)
            momentum = 'bullish' if short_ma > long_ma else 'bearish'
        else:
            momentum = 'insufficient_data'

        return {
            'commodity': commodity,
            'current_price': current,
            'average': round(avg, 2),
            'std_deviation': round(std_dev, 3),
            'min': min(prices),
            'max': max(prices),
            'volatility_pct': round((std_dev / avg) * 100, 2),
            'momentum': momentum,
            'z_score': round((current - avg) / std_dev, 2) if std_dev > 0 else 0
        }

    def get_correlation_data(self, commodities: List[str], days: int = 30) -> Dict:
        """Get historical data for correlation analysis."""
        endpoint = 'past_month' if days <= 30 else 'past_year'
        results = {}

        for commodity in commodities:
            response = requests.get(
                f'{self.base_url}/prices/{endpoint}',
                params={'by_code': commodity, 'interval': '1d'},
                headers=self.headers
            )
            data = response.json()
            results[commodity] = [
                {'date': p['created_at'], 'price': p['price']}
                for p in data['data']['prices']
            ]

        return results

    def calculate_brent_wti_spread(self) -> Dict:
        """Calculate the Brent-WTI spread (common trading indicator)."""
        return self.get_spread('BRENT_CRUDE_USD', 'WTI_USD')

    def calculate_crack_spread(self) -> Dict:
        """Calculate 3-2-1 crack spread approximation."""
        commodities = ['WTI_USD', 'GASOLINE_USD', 'HEATING_OIL_USD']
        prices = self._parse_prices(self.get_current_prices(commodities))

        if all(c in prices for c in commodities):
            # Simplified crack spread: 2*gasoline + 1*heating oil - 3*crude
            # Note: Actual calculation requires barrel conversions
            crude = prices['WTI_USD']
            gasoline = prices['GASOLINE_USD'] * 42  # gallons to barrel approximation
            heating_oil = prices['HEATING_OIL_USD'] * 42

            crack_spread = (2 * gasoline + heating_oil) / 3 - crude

            return {
                'crude_price': crude,
                'gasoline_price': prices['GASOLINE_USD'],
                'heating_oil_price': prices['HEATING_OIL_USD'],
                'crack_spread': round(crack_spread, 2),
                'note': 'Simplified calculation - actual spread requires precise barrel conversions'
            }
        return {'error': 'Could not calculate crack spread'}

# Usage example
trading = CommodityTradingAPI('YOUR_API_KEY')

# Get Brent-WTI spread
spread = trading.calculate_brent_wti_spread()
print(f"Brent-WTI spread: ${spread['spread']}")

# Analyze WTI trend
trend = trading.analyze_trend('WTI_USD', days=30)
print(f"WTI momentum: {trend['momentum']}, Z-score: {trend['z_score']}")

JavaScript/Node.js Financial Application

class CommodityDataService {
  constructor(apiKey) {
    this.apiKey = apiKey;
    this.baseUrl = 'https://api.oilpriceapi.com/v1';
  }

  async getPrices(commodities) {
    const response = await fetch(
      `${this.baseUrl}/prices/latest?by_code=${commodities.join(',')}`,
      {
        headers: { 'Authorization': `Token ${this.apiKey}` }
      }
    );
    return response.json();
  }

  async getHistoricalPrices(commodity, interval = '1d', period = 'past_month') {
    const response = await fetch(
      `${this.baseUrl}/prices/${period}?by_code=${commodity}&interval=${interval}`,
      {
        headers: { 'Authorization': `Token ${this.apiKey}` }
      }
    );
    return response.json();
  }

  async buildPriceMatrix(commodities) {
    const matrix = {};

    for (const commodity of commodities) {
      const data = await this.getHistoricalPrices(commodity, '1d', 'past_month');
      matrix[commodity] = data.data.prices.map(p => ({
        date: p.created_at,
        price: p.price
      }));
    }

    return matrix;
  }

  async calculateVolatility(commodity, days = 30) {
    const data = await this.getHistoricalPrices(commodity, '1d', 'past_month');
    const prices = data.data.prices.map(p => p.price);

    // Calculate daily returns
    const returns = [];
    for (let i = 1; i < prices.length; i++) {
      returns.push((prices[i - 1] - prices[i]) / prices[i]);
    }

    // Calculate standard deviation of returns
    const avgReturn = returns.reduce((a, b) => a + b, 0) / returns.length;
    const variance = returns.reduce((sum, r) => sum + Math.pow(r - avgReturn, 2), 0) / returns.length;
    const dailyVol = Math.sqrt(variance);

    // Annualize volatility
    const annualizedVol = dailyVol * Math.sqrt(252);

    return {
      commodity,
      dailyVolatility: Math.round(dailyVol * 10000) / 100,
      annualizedVolatility: Math.round(annualizedVol * 10000) / 100,
      period: `${days} days`
    };
  }

  async getMarketSnapshot() {
    const keyBenchmarks = [
      'WTI_USD', 'BRENT_CRUDE_USD', 'NATURAL_GAS_USD',
      'GASOLINE_USD', 'DIESEL_USD', 'JET_FUEL_USD'
    ];

    const current = await this.getPrices(keyBenchmarks);

    // Get yesterday's prices for change calculation
    const historical = await this.getHistoricalPrices(keyBenchmarks[0], '1d', 'past_week');

    return {
      timestamp: new Date().toISOString(),
      benchmarks: current.data,
      marketStatus: 'live'
    };
  }
}

// Portfolio energy exposure analysis
const dataService = new CommodityDataService(process.env.OILPRICE_API_KEY);

const volatility = await dataService.calculateVolatility('BRENT_CRUDE_USD', 30);
console.log(`Brent annualized volatility: ${volatility.annualizedVolatility}%`);

const snapshot = await dataService.getMarketSnapshot();
console.log('Market snapshot:', snapshot);

Use Cases

1. Algorithmic Trading

Feed real-time commodity prices into trading algorithms and automated execution systems.

2. Portfolio Risk Analysis

Calculate energy commodity exposure and volatility metrics for portfolio risk management.

3. Spread Trading

Monitor and trade spreads between related commodities (Brent-WTI, crack spreads, calendar spreads).

4. Market Research

Access historical data for quantitative analysis, backtesting, and market research reports.

5. Fintech Applications

Build commodity price features into financial apps, robo-advisors, or investment platforms.

6. Price Alert Systems

Trigger notifications when commodities reach specific price levels or volatility thresholds.

ROI and Value Proposition

MetricTypical Improvement
Data integration time90% faster than traditional providers
Cost reduction60-80% vs. institutional data feeds
Coverage breadthSingle API for 220+ commodities
Development velocityHours instead of weeks to integrate

For a quantitative trading operation spending $50,000+ annually on data feeds, OilPriceAPI can reduce costs by $30,000-40,000 while providing comparable coverage.

Why Traders Choose OilPriceAPI

Our API provides institutional-quality commodity price data at accessible pricing. With simple REST integration and comprehensive coverage of 220+ commodities, trading desks can reduce data costs while maintaining the coverage needed for energy-focused strategies.

Getting Started

  1. Sign up at oilpriceapi.com/signup
  2. Get your API key from the dashboard
  3. Explore commodities using the list endpoint
  4. Integrate real-time and historical data into your systems
  5. Build trading signals, risk metrics, and analytics

Frequently Asked Questions

How often is commodity price data updated?

OilPriceAPI updates prices every 15 minutes during market hours, with major benchmarks like WTI, Brent, and natural gas refreshed multiple times per hour. This frequency supports intraday trading strategies and real-time portfolio monitoring.

What commodities are available through the API?

We cover 220+ commodities including crude oil (WTI, Brent, Dubai, Urals), refined products (gasoline, diesel, jet fuel, heating oil), natural gas (Henry Hub, TTF, JKM LNG), coal, marine fuels, EU carbon credits, and related currencies and rig counts.

Can I access historical data for backtesting trading strategies?

Yes, all plans include historical data access. Use the /v1/prices/past_year endpoint with configurable intervals (1h, 1d, 1w) for backtesting. The data supports volatility calculations, correlation analysis, and quantitative strategy development.

How quickly can I integrate the API into our trading systems?

Most developers integrate within 1-2 hours using our code examples. The free tier is available immediately after signup, allowing you to test endpoints and build prototypes before committing to a paid plan suitable for production trading.

How do I calculate spreads like Brent-WTI or crack spreads?

Query multiple commodities in a single API request using comma-separated codes. Our code examples demonstrate spread calculations including the Brent-WTI differential and simplified crack spread formulas for refining margin analysis.

Is WebSocket streaming available for real-time trading?

Yes, premium tiers include WebSocket access for real-time price updates. This enables push-based notifications for trading algorithms, price alerts, and live dashboard updates without polling the REST API.

Related Resources

  • Power BI Integration - Build trading dashboards
  • Tableau Integration - Visual analytics for trading
  • Looker Integration - Enterprise analytics platform
  • Google Sheets Integration - Spreadsheet analysis
  • Quandl Alternative - Compare vs. Quandl
  • Alpha Vantage Alternative - API comparison
  • Platts Alternative - Enterprise data comparison
  • Commodity Data API Comparison - Market overview
  • Maritime Bunker API - Marine fuel trading
  • Aviation Fuel API - Jet fuel trading
  • API Reference - Complete endpoint documentation
  • WebSocket Streaming - Real-time price updates
  • API Authentication - Secure access setup
Last Updated: 12/28/25, 11:07 AM