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.

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.

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:

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.

Customer Success Story

"We switched from a legacy data provider to OilPriceAPI for our commodity trading desk analytics. Integration took one day instead of two weeks, and we cut our data costs by 70% while maintaining the coverage we needed for our energy-focused strategies."

-- [Customer Success Story Placeholder]

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

Related Resources

  • API Reference - Complete endpoint documentation
  • Commodities List - All available commodities
  • Historical Prices - Time-series data
  • WebSocket Streaming - Real-time price updates
  • API Authentication - Secure access setup
Last Updated: 12/28/25, 12:24 AM