Enverus NRF API Client¶
Client for the Enverus Nodal Resource Forecast (NRF) API, providing wind and solar power forecasts, extreme weather flags, and related data for US ISOs.
Authentication¶
The client requires an Enverus user ID, read from the ENVERUS_USERID environment variable or passed directly to the constructor. No separate API key or token is needed.
Core Workflow¶
from progridpy.utils.enverus_api import EnverusClient, EnverusDataType, WeatherModel
client = EnverusClient()
df = client.fetch_df(
"miso",
EnverusDataType.WIND_FORECAST,
"20260113", # Operating Day
model=WeatherModel.HRRR,
gen_hr=12, # 12:00 UTC model run (default for HRRR)
)
The client automatically requests the model run from OD-1 and filters the response to return only the requested operating day's 24-hour forecast.
Supported Data Types¶
| Enum Member | Description |
|---|---|
WIND_FORECAST |
Wind power forecast |
SOLAR_FORECAST |
Solar power forecast |
EXTREME_WIND_SPEED |
High wind speed flags (HRRR only) |
TURBINE_ICING |
Turbine icing flags (HRRR only) |
SOLAR_SMOKE |
Solar smoke flags (HRRR only) |
SOLAR_SNOW |
Solar snow cover flags (HRRR only) |
Weather Models¶
| Model | Default gen_hr |
Availability |
|---|---|---|
HRRR |
12 (12:00 UTC) | Hourly updates; data from 2020-12-03 |
ECMWF |
0 (00:00 UTC) | Longer forecast horizon; data from 2018-01-01 |
Enverus NRF API client for renewable energy forecasts.
Classes¶
EnverusClient
¶
Client for the Enverus NRF API.
Fetches wind/solar forecast data and extreme weather flags. For a date range, fetches the forecast generated on each day and extracts that day's data, providing the most accurate forecast for each day.
Args: userid: Enverus API user ID. Reads from ENVERUS_USERID env var if not provided. timeout: Request timeout in seconds.
Example: >>> client = EnverusClient(userid="your-userid") >>> df = client.fetch_df("miso", EnverusDataType.WIND_FORECAST, "20250101", "20250103")
Source code in src/progridpy/utils/enverus_api/client.py
Functions¶
fetch_df
¶
fetch_df(iso: str, feature: EnverusDataType, start_date: str | None = None, end_date: str | None = None, model: WeatherModel | None = None, gen_hr: int | None = None) -> DataFrame
Fetch forecast data for a date range (day-ahead style).
For each date in the range, fetches the forecast from the previous day's model run and extracts only that day's forecast data. This is designed for day-ahead trading where you need the full 24-hour forecast for the Operating Day (OD) using the latest model available on OD-1.
The HRRR 12:00 UTC model run produces ~48 hours of forecasts, so the OD-1 model run contains full 24-hour coverage for OD (00:00 to 23:59).
Args: iso: ISO identifier ('miso', 'ercot', 'spp', 'pjm', 'nyiso', 'isone', 'caiso'). feature: Feature type to fetch. start_date: Start date (YYYYMMDD), inclusive. This is the Operating Day you want forecasts for. Defaults to today. end_date: End date (YYYYMMDD), inclusive. Defaults to start_date. model: Weather model (ECMWF or HRRR). Defaults to feature's default model. gen_hr: Model generation hour (UTC). Defaults to 12 for HRRR, 0 for ECMWF. The 12 UTC run is recommended as it's the most recent forecast for trading.
Returns:
DataFrame with columns: [interval_start_local, node,
Raises: ValueError: If model is not supported for the feature.
Example: # On Jan 12 (OD-1), fetch forecast for Jan 13 (OD) >>> df = client.fetch_df("miso", EnverusDataType.WIND_FORECAST, "20260113") # Returns full 24-hour forecast for Jan 13 (00:00 to 23:59 local time)
Source code in src/progridpy/utils/enverus_api/client.py
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | |
EnverusAPIError
¶
Bases: Exception
Raised when the Enverus API returns an error or is unreachable.
Source code in src/progridpy/utils/enverus_api/exceptions.py
EnverusAuthError
¶
Bases: EnverusAPIError
Raised when authentication fails (missing or invalid userid).
Source code in src/progridpy/utils/enverus_api/exceptions.py
EnverusShapeError
¶
Bases: Exception
Raised when API response has unexpected structure or missing required fields.
EnverusDataType
¶
Bases: Enum
Supported Enverus NRF feature types.
WeatherModel
¶
Bases: Enum
Weather models available for forecasts.