Enverus NRF API Knowledge Base¶
Overview¶
The Enverus NRF (Nodal Resource Forecast) API provides wind and solar power forecasts for various ISOs across the US. This document covers the key concepts for using the API effectively for day-ahead trading.
Key Concept: start_date vs Forecast Date¶
Important: The API's start_date parameter specifies when the forecast model is generated, NOT the date of the forecasted data.
For example:
- start_date=20260111 requests the forecast generated on Jan 11
- This forecast contains predictions for Jan 11, Jan 12, and part of Jan 13 (~48 hours for HRRR)
Day-Ahead Trading Workflow¶
Terminology¶
- OD (Operating Day): The day you are trading/forecasting for
- OD-1: The day before the operating day (when you place trades)
How the Client Works¶
When you call fetch_df("miso", EnverusDataType.WIND_FORECAST, "20260113"):
- The client requests the model run from OD-1 (Jan 12's model run)
- The HRRR 12:00 UTC model produces ~48 hours of forecasts
- This includes full 24-hour coverage for OD (Jan 13, 00:00 to 23:59)
- The client filters and returns only Jan 13 data
Example: Trading Jan 13 (OD)¶
from progridpy.utils.enverus_api import EnverusClient, EnverusDataType, WeatherModel
client = EnverusClient()
# On Jan 12 (OD-1), fetch forecast for Jan 13 (OD)
df = client.fetch_df(
"miso",
EnverusDataType.WIND_FORECAST,
"20260113", # Operating Day you want forecast for
model=WeatherModel.HRRR
)
# Returns full 24-hour forecast: 00:00 to 23:59 local time
print(df["interval_start_local"].min()) # 2026-01-13 00:00:00
print(df["interval_start_local"].max()) # 2026-01-13 23:00:00
Model Run Times (gen_hr)¶
The gen_hr parameter specifies the model generation hour (UTC):
| Model | gen_hr | Model Run (UTC) | First Forecast Hour (Local) |
|---|---|---|---|
| HRRR | 0 | 00:00 UTC | ~18:00 previous day |
| HRRR | 6 | 06:00 UTC | ~00:00 same day |
| HRRR | 12 | 12:00 UTC | ~06:00 same day |
| HRRR | 18 | 18:00 UTC | ~12:00 same day |
| ECMWF | 0 | 00:00 UTC | ~18:00 previous day |
Default: gen_hr=12 for HRRR (final forecast before market close)
Model Run Availability at 8 AM Local Time¶
When fetching forecast for OD on OD-1 at 8 AM local time:
MISO/SPP/ERCOT (Central Time: 8 AM CST = 14:00 UTC)¶
| Model | gen_hr | Model Run (UTC) | Available at 8 AM? | OD Coverage |
|---|---|---|---|---|
| HRRR | 0 | 00:00 UTC | Yes (14 hrs old) | Full 24 hrs |
| HRRR | 6 | 06:00 UTC | Yes (8 hrs old) | Full 24 hrs |
| HRRR | 12 | 12:00 UTC | Yes (2 hrs old) | Full 24 hrs |
| ECMWF | 0 | 00:00 UTC | Yes | Full 24 hrs |
PJM/NYISO (Eastern Time: 8 AM EST = 13:00 UTC)¶
| Model | gen_hr | Model Run (UTC) | Available at 8 AM? | OD Coverage |
|---|---|---|---|---|
| HRRR | 0 | 00:00 UTC | Yes (13 hrs old) | Full 24 hrs |
| HRRR | 6 | 06:00 UTC | Yes (7 hrs old) | Full 24 hrs |
| HRRR | 12 | 12:00 UTC | TIGHT (1 hr old) | Full 24 hrs |
| ECMWF | 0 | 00:00 UTC | Yes | Full 24 hrs |
Example: Using Different gen_hr Values¶
# Safe for 8 AM trading (default)
df = client.fetch_df("miso", EnverusDataType.WIND_FORECAST, "20260113")
# Latest forecast for 10 AM trading
df = client.fetch_df("miso", EnverusDataType.WIND_FORECAST, "20260113", gen_hr=12)
Data Structure¶
The API returns data in long format with these columns:
| Column | Description |
|---|---|
interval_start_local |
Start of the forecast interval (local time) |
node |
Power node identifier (e.g., ALTE.CEDARDGE) |
wind_forecast / solar_forecast |
Forecasted power output (MW) |
Supported Features¶
from progridpy.utils.enverus_api import EnverusDataType, WeatherModel
# Forecast types
EnverusDataType.WIND_FORECAST # Wind power forecast
EnverusDataType.SOLAR_FORECAST # Solar power forecast
EnverusDataType.EXTREME_WIND_SPEED # High wind speed flags (HRRR only)
EnverusDataType.TURBINE_ICING # Turbine icing flags (HRRR only)
EnverusDataType.SOLAR_SMOKE # Solar smoke flags (HRRR only)
EnverusDataType.SOLAR_SNOW # Solar snow cover flags (HRRR only)
# Weather models
WeatherModel.HRRR # High-Resolution Rapid Refresh (hourly updates)
WeatherModel.ECMWF # European model (longer forecast horizon)
ISOs Supported¶
miso- Midcontinent ISOercot- ERCOT (Texas)spp- Southwest Power Poolpjm- PJM Interconnectionnyiso- New York ISOisone- ISO New Englandcaiso- California ISO
API Limitations¶
- AWS Timeout: Large date ranges may timeout. Fetch one day at a time.
- Historical Data: HRRR forecasts available from 12/3/2020, ECMWF from 1/1/2018.
- Missing Data: Some historical forecasts may be unavailable (shown as -999).
Reference¶
For full API documentation, see the official Enverus NRF API User Guide (ST NRF - API User Guide.pdf).