The Open Electricity API exposes time-series data for the NEM and WEM networks at multiple intervals: 5-minute (Documentation Index
Fetch the complete documentation index at: https://docs.openelectricity.org.au/llms.txt
Use this file to discover all available pages before exploring further.
interval), hourly (hour), daily (day), weekly (week), monthly (month), quarterly (quarter), seasonal (season), and yearly (year). The 5-minute interval is the source resolution — every longer interval is aggregated from those 5-minute records.
How a metric aggregates depends on whether it is a rate (e.g. power in MW — an instantaneous measurement) or a quantity (e.g. energy in MWh — accumulated over an interval).
- Rates aggregate with averaging. Twelve 5-minute power readings, averaged, give the average power over the hour.
- Quantities aggregate with summing. Twelve 5-minute energy values, summed, give the total energy in the hour.
Generation data — /v4/data/network/{network_code} and /v4/data/facilities/{network_code}
| Metric | Unit | Type | 5-min source | Aggregation (hour+) |
|---|---|---|---|---|
power | MW | Rate | unit_intervals.generated | Average of source values over the interval |
energy | MWh | Quantity | unit_intervals.energy | Sum of source values |
emissions | tCO₂ | Quantity | unit_intervals.emissions | Sum of source values |
market_value | AUD | Quantity | unit_intervals.market_value | Sum of source values |
storage_battery | MWh | Rate (state of charge) | unit_intervals.energy_storage | Average of source values |
Aggregation details
-
Hourly (
hour) queries read from the 5-minute base table (unit_intervals) and applyavg()orsum()directly across the twelve 5-minute records in each hour. -
Daily and longer (
day,week,month,quarter,season,year) queries read from the daily materialised view (unit_intervals_daily_mv). The daily MV storesgeneratedas the daily sum of 5-minute power values plus aninterval_countcolumn. Forpower, the API computes an interval-weighted average across the queried daily rows:This is equivalent to the average of the original 5-minute readings over the queried window, including partial first/last days whereinterval_count < 288. -
energy,emissions,market_valuesum across the queried daily rows directly. -
storage_batteryuses an interval-weighted average over the daily MV’senergy_storage_sum / energy_storage_countcolumns.
How 5-minute energy values are produced
Each 5-minuteenergy value is computed by Open Electricity from the corresponding generated (MW) readings using the trapezoidal rule (area under the power curve):
Δt is the interval length in hours (e.g. 5/60 for NEM 5-minute data). At crawl time a placeholder value of generated × Δt is written immediately so freshly-ingested intervals have a value, then the energy worker (opennem/workers/energy.py) replaces it with the trapezoidal calculation and stamps energy_quality_flag = 2. The API returns the post-worker value; it does not re-derive energy from power at query time.
See the Energy guide for the full derivation and worked example.
Market data — /v4/market/network/{network_code}
| Metric | Unit | Type | Aggregation (hour+) |
|---|---|---|---|
price | AUD/MWh | Rate | Interval-weighted average |
demand | MW | Rate | |
demand_energy | MWh | Quantity | Sum |
demand_gross | MW | Rate | |
demand_gross_energy | MWh | Quantity | Sum |
generation_renewable | MW | Rate | |
generation_renewable_energy | MWh | Quantity | Sum |
generation_renewable_with_storage | MW | Rate | |
generation_renewable_with_storage_energy | MWh | Quantity | Sum |
curtailment | MW | Rate | |
curtailment_solar_utility | MW | Rate | |
curtailment_wind | MW | Rate | |
curtailment_energy | MWh | Quantity | Sum |
curtailment_solar_utility_energy | MWh | Quantity | Sum |
curtailment_wind_energy | MWh | Quantity | Sum |
flow_imports | MW | Rate | |
flow_exports | MW | Rate | |
flow_imports_energy | MWh | Quantity | Sum |
flow_exports_energy | MWh | Quantity | Sum |
renewable_proportion | % | Ratio | sum(generation_renewable) / sum(demand_gross) × 100 over the queried window |
renewable_with_storage_proportion | % | Ratio | sum(generation_renewable_with_storage) / sum(demand_gross) × 100 over the queried window |
price aggregation
price is averaged because it is a per-MWh rate. For hourly aggregation, the API takes the simple average of the 5-minute prices in the hour. For daily and longer, it uses an interval-weighted average from the market_summary daily materialised view: sum(price_sum) / sum(price_count).
Proportion metrics
renewable_proportion and renewable_with_storage_proportion are ratios computed over the whole queried window per row, not averaged from the underlying 5-minute proportions. The sums of the numerator and denominator are taken first, then divided.
Known issues
Generation aggregation — fully fixed
/v4/data/network/{network_code} and /v4/data/facilities/{network_code} return correct averages and sums per the table above, including for batteries (storage_battery). The behaviour was corrected in opennem#523 — prior to that fix, power was summed across 5-minute intervals which produced values 12× the true hourly average.
See also
- Data Limits — maximum date ranges per interval
- Energy guide — what energy is and how it differs from power
- Power guide — instantaneous generation rate
- Demand guide — how demand is measured and reported

