Weekly petroleum inventory data from the EIA Weekly Petroleum Status Report (WPSR).
Source: EIA Weekly Petroleum Status Report Release: Every Wednesday at 10:30 AM ET Tier Required: Reservoir Mastery
| Method | Endpoint | Description |
|---|
| GET | /v1/dark_data/oil_inventories | List paginated reports |
| GET | /v1/dark_data/oil_inventories/latest | Latest full report |
| GET | /v1/dark_data/oil_inventories/summary | Current levels summary |
| GET | /v1/dark_data/oil_inventories/by_product | Filter by product type |
| GET | /v1/dark_data/oil_inventories/cushing | Cushing, OK levels (WTI delivery) |
| GET | /v1/dark_data/oil_inventories/historical | Historical data |
| GET | /v1/dark_data/oil_inventories/:id | Specific report by ID |
GET /v1/dark_data/oil_inventories
| Parameter | Type | Default | Description |
|---|
page | integer | 1 | Page number |
per_page | integer | 10 | Results per page (max 50) |
GET /v1/dark_data/oil_inventories/latest
{
"data": {
"week_ending": "2025-01-09",
"crude_commercial": {
"volume_mmbbl": 421.2,
"change_mmbbl": 2.3,
"direction": "build"
},
"gasoline": {
"volume_mmbbl": 237.8,
"change_mmbbl": 4.1,
"direction": "build"
},
"distillate": {
"volume_mmbbl": 118.5,
"change_mmbbl": -1.2,
"direction": "draw"
},
"cushing": {
"volume_mmbbl": 23.4,
"change_mmbbl": 0.8
}
}
}
GET /v1/dark_data/oil_inventories/summary
{
"data": {
"week_ending": "2025-01-09",
"inventories": [
{
"product": "crude_commercial",
"volume": "421.2 MMbbl",
"change": "+2.3 MMbbl",
"direction": "build"
},
{
"product": "gasoline",
"volume": "237.8 MMbbl",
"change": "+4.1 MMbbl",
"direction": "build"
}
],
"headline": "U.S. commercial crude stocks rose by 2.3 million barrels"
}
}
GET /v1/dark_data/oil_inventories/by_product
| Parameter | Type | Required | Description |
|---|
products | string | No | Comma-separated product types |
date | date | No | Week ending date |
| Product Code | Description |
|---|
crude | Total crude oil |
crude_commercial | Commercial crude (excl. SPR) |
gasoline | Motor gasoline |
distillate | Distillate fuel oil |
jet_fuel | Jet fuel / kerosene |
propane | Propane/propylene |
residual | Residual fuel oil |
{
"data": {
"week_ending": "2025-01-09",
"products": [
{
"product": "crude_commercial",
"volume_mmbbl": 421.2,
"change_mmbbl": 2.3,
"week_over_week_pct": 0.55,
"five_year_avg": 435.6,
"vs_five_year_pct": -3.3
}
]
}
}
WTI crude oil delivery point inventory levels.
GET /v1/dark_data/oil_inventories/cushing
| Parameter | Type | Default | Description |
|---|
weeks | integer | 52 | Weeks of history (max 260 = 5 years) |
{
"data": {
"location": "Cushing, Oklahoma",
"description": "WTI crude oil delivery point inventory levels",
"latest": {
"week_ending": "2025-01-09",
"volume_mmbbl": 23.4,
"change_mmbbl": 0.8,
"utilization_pct": 29.3
},
"history": [
{
"week_ending": "2025-01-09",
"volume_mmbbl": 23.4
},
{
"week_ending": "2025-01-02",
"volume_mmbbl": 22.6
}
],
"capacity_mmbbl": 80.0
}
}
GET /v1/dark_data/oil_inventories/historical
| Parameter | Type | Default | Description |
|---|
product | string | crude_commercial | Product type |
location | string | total | PADD region or total |
weeks | integer | 52 | Weeks of data (max 520) |
| Location | Description |
|---|
total | US Total |
padd1 | East Coast |
padd2 | Midwest |
padd3 | Gulf Coast |
padd4 | Rocky Mountain |
padd5 | West Coast |
import requests
response = requests.get(
"https://api.oilpriceapi.com/v1/dark_data/oil_inventories/cushing",
headers={"Authorization": "Token YOUR_API_KEY"},
params={"weeks": 12}
)
data = response.json()
print(f"Cushing: {data['data']['latest']['volume_mmbbl']} MMbbl")
print(f"Utilization: {data['data']['latest']['utilization_pct']}%")
history = data['data']['history']
if history[0]['volume_mmbbl'] > history[-1]['volume_mmbbl']:
print("Trend: Building")
else:
print("Trend: Drawing")
const response = await fetch(
"https://api.oilpriceapi.com/v1/dark_data/oil_inventories/by_product?" +
"products=crude_commercial,gasoline,distillate",
{ headers: { "Authorization": "Token YOUR_API_KEY" } }
);
const data = await response.json();
data.data.products.forEach(p => {
const direction = p.change_mmbbl > 0 ? "BUILD" : "DRAW";
console.log(`${p.product}: ${direction} ${Math.abs(p.change_mmbbl)} MMbbl`);
});
- Price Impact: Unexpected builds/draws move crude prices
- Cushing Premium: Low Cushing = wider WTI-Brent spread
- Seasonal Patterns: Gasoline builds in winter, draws in summer
- Refinery Utilization: Product builds signal demand weakness