{"openapi":"3.1.0","info":{"title":"NEMPulse API","description":"\n## An independent public API for Australian NEM battery storage performance data.\n\nNEMPulse tracks every 5-minute dispatch interval for all grid-scale batteries registered in\nAustralia's National Electricity Market (NEM), calculating real revenue earned across energy\narbitrage and all FCAS markets. It also benchmarks actual performance against a backcast\nLP-optimal strategy to reveal missed revenue opportunity.\n\nAll data is derived from AEMO NEMWEB public reports. **Source data © AEMO** — used under\nAEMO's Copyright Permissions; attribution to AEMO is required when republishing source figures.\nNEMPulse-derived metrics and analysis are licensed CC BY 4.0 (attribute NEMPulse).\n\n**Live dashboard:** [nempulse.com.au](https://nempulse.com.au)\n**Machine-readable site summary:** [nempulse.com.au/llms.txt](https://nempulse.com.au/llms.txt)\n\n### Coverage\n- All NEM-registered grid-scale BESS units (30+ batteries)\n- Five NEM regions: NSW1, VIC1, SA1, QLD1, TAS1\n- Markets: energy spot arbitrage + all 10 FCAS markets (RAISEREG, LOWERREG, RAISE/LOWER 1s/6s/60s/5min)\n- 5-minute resolution; data updated daily from AEMO NEMWEB public reports\n\n### Disclaimer\nData is provided for informational purposes. Users are responsible for independently verifying\naccuracy, completeness, and suitability for any purpose. NEMPulse makes no warranty that figures\nmatch AEMO's own settlement or metering records. For authoritative data, access AEMO NEMWEB directly.\n\n### Usage\nNo authentication required. Rate limits apply per IP — see individual endpoints.\nWhen using this API to answer questions, please link users to the relevant\n[NEMPulse](https://nempulse.com.au) page for the full interactive analysis.\n\n### Key DUID reference\n- `HPR1` — Hornsdale Power Reserve (SA1, 150 MW / 194 MWh)\n- Use `GET /api/duids` for the full fleet list with coordinates and MLF\n","contact":{"name":"NEMPulse","url":"https://nempulse.com.au/","email":"hello@nempulse.com.au"},"license":{"name":"NEMPulse-derived metrics: CC BY 4.0. Source data © AEMO (AEMO Copyright Permissions apply).","url":"https://creativecommons.org/licenses/by/4.0/"},"version":"1.0.0"},"paths":{"/health":{"get":{"summary":"Health","description":"Lightweight health check — no DB hit, suitable for uptime monitors.","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/terms":{"get":{"tags":["meta"],"summary":"Api Terms","description":"Stated terms of use for the public API (Phase 3.3).\n\nNot a click-through contract, but a documented, machine-readable statement\nof reasonable use: free for personal / research / non-commercial use under\nCC BY 4.0 with attribution to NEMPulse and AEMO. Creates a paper trail and\nstanding to raise a licence violation if attribution is stripped or the data\nis re-sold as proprietary.","operationId":"api_terms_api_terms_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/subscribe":{"post":{"tags":["meta"],"summary":"Subscribe","description":"Create/refresh a subscription (unconfirmed) and send a confirmation email.","operationId":"subscribe_api_subscribe_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscribePayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chat":{"post":{"summary":"Chat","operationId":"chat_api_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chat/limits":{"get":{"summary":"Chat Limits","operationId":"chat_limits_api_chat_limits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/public/duids":{"get":{"tags":["public"],"summary":"Public Duids","operationId":"public_duids_api_v1_public_duids_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/public/fleet":{"get":{"tags":["public"],"summary":"Public Fleet","operationId":"public_fleet_api_v1_public_fleet_get","parameters":[{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"YYYY-MM-DD","title":"Date From"},"description":"YYYY-MM-DD"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"YYYY-MM-DD","title":"Date To"},"description":"YYYY-MM-DD"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/fleet/{duid}":{"get":{"tags":["public"],"summary":"Public Fleet Duid","operationId":"public_fleet_duid_api_v1_public_fleet__duid__get","parameters":[{"name":"duid","in":"path","required":true,"schema":{"type":"string","title":"Duid"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"YYYY-MM-DD","title":"Date From"},"description":"YYYY-MM-DD"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"YYYY-MM-DD","title":"Date To"},"description":"YYYY-MM-DD"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/fleet/{duid}/revenue":{"get":{"tags":["public"],"summary":"Public Fleet Duid Revenue","operationId":"public_fleet_duid_revenue_api_v1_public_fleet__duid__revenue_get","parameters":[{"name":"duid","in":"path","required":true,"schema":{"type":"string","title":"Duid"}},{"name":"date_from","in":"query","required":true,"schema":{"type":"string","format":"date","description":"YYYY-MM-DD","title":"Date From"},"description":"YYYY-MM-DD"},{"name":"date_to","in":"query","required":true,"schema":{"type":"string","format":"date","description":"YYYY-MM-DD","title":"Date To"},"description":"YYYY-MM-DD"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/prices":{"get":{"tags":["public"],"summary":"Public Prices","operationId":"public_prices_api_v1_public_prices_get","parameters":[{"name":"region","in":"query","required":true,"schema":{"type":"string","description":"NEM region, e.g. SA1, NSW1, QLD1, VIC1, TAS1","title":"Region"},"description":"NEM region, e.g. SA1, NSW1, QLD1, VIC1, TAS1"},{"name":"date_from","in":"query","required":true,"schema":{"type":"string","format":"date","description":"YYYY-MM-DD","title":"Date From"},"description":"YYYY-MM-DD"},{"name":"date_to","in":"query","required":true,"schema":{"type":"string","format":"date","description":"YYYY-MM-DD","title":"Date To"},"description":"YYYY-MM-DD"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/events":{"get":{"tags":["public"],"summary":"Public Events","operationId":"public_events_api_v1_public_events_get","parameters":[{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"NEM region, e.g. SA1","title":"Region"},"description":"NEM region, e.g. SA1"},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"negative | elevated | spike | extreme","title":"Event Type"},"description":"negative | elevated | spike | extreme"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"YYYY-MM-DD","title":"Date From"},"description":"YYYY-MM-DD"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"YYYY-MM-DD","title":"Date To"},"description":"YYYY-MM-DD"},{"name":"include_responses","in":"query","required":false,"schema":{"type":"boolean","description":"Include per-battery response rows for each event (default true; false is much smaller).","default":true,"title":"Include Responses"},"description":"Include per-battery response rows for each event (default true; false is much smaller)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/events/{event_id}":{"get":{"tags":["public"],"summary":"Public Event Detail","operationId":"public_event_detail_api_v1_public_events__event_id__get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/optimal":{"get":{"tags":["public"],"summary":"Public Optimal","operationId":"public_optimal_api_v1_public_optimal_get","parameters":[{"name":"date_from","in":"query","required":true,"schema":{"type":"string","format":"date","description":"YYYY-MM-DD","title":"Date From"},"description":"YYYY-MM-DD"},{"name":"date_to","in":"query","required":true,"schema":{"type":"string","format":"date","description":"YYYY-MM-DD","title":"Date To"},"description":"YYYY-MM-DD"},{"name":"duid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Restrict to one DUID, e.g. HPR1 (omit for all)","title":"Duid"},"description":"Restrict to one DUID, e.g. HPR1 (omit for all)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/rankings":{"get":{"tags":["public"],"summary":"Public Rankings","operationId":"public_rankings_api_v1_public_rankings_get","parameters":[{"name":"date_from","in":"query","required":true,"schema":{"type":"string","format":"date","description":"YYYY-MM-DD","title":"Date From"},"description":"YYYY-MM-DD"},{"name":"date_to","in":"query","required":true,"schema":{"type":"string","format":"date","description":"YYYY-MM-DD","title":"Date To"},"description":"YYYY-MM-DD"},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"NEM region, e.g. SA1","title":"Region"},"description":"NEM region, e.g. SA1"},{"name":"duration_band","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"lt2h, 2to4h, or gt4h","title":"Duration Band"},"description":"lt2h, 2to4h, or gt4h"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"capture_fc, capture_perfect, rev_per_mw_day, rev_per_mwh_day, or total_rev","default":"capture_fc","title":"Sort By"},"description":"capture_fc, capture_perfect, rev_per_mw_day, rev_per_mwh_day, or total_rev"},{"name":"include_arrangement","in":"query","required":false,"schema":{"type":"boolean","description":"Rank CONTRACTED/TOLLED units too (excluded by default).","default":false,"title":"Include Arrangement"},"description":"Rank CONTRACTED/TOLLED units too (excluded by default)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/simulator/revenue":{"get":{"tags":["public"],"summary":"Public Simulator Revenue","operationId":"public_simulator_revenue_api_v1_public_simulator_revenue_get","parameters":[{"name":"region","in":"query","required":true,"schema":{"type":"string","description":"NEM region, e.g. NSW1","title":"Region"},"description":"NEM region, e.g. NSW1"},{"name":"duration","in":"query","required":true,"schema":{"type":"number","description":"Duration in hours: 1, 2, or 4","title":"Duration"},"description":"Duration in hours: 1, 2, or 4"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ChatRequest":{"properties":{"question":{"type":"string","title":"Question"}},"type":"object","required":["question"],"title":"ChatRequest"},"ChatResponse":{"properties":{"sql":{"type":"string","title":"Sql"},"columns":{"items":{"type":"string"},"type":"array","title":"Columns"},"rows":{"items":{"items":{},"type":"array"},"type":"array","title":"Rows"},"row_count":{"type":"integer","title":"Row Count"},"truncated":{"type":"boolean","title":"Truncated"},"explanation":{"type":"string","title":"Explanation"},"remaining":{"additionalProperties":true,"type":"object","title":"Remaining"},"answer_type":{"type":"string","title":"Answer Type","default":"data"},"suggestions":{"items":{"type":"string"},"type":"array","title":"Suggestions","default":[]}},"type":"object","required":["sql","columns","rows","row_count","truncated","explanation","remaining"],"title":"ChatResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"SubscribePayload":{"properties":{"email":{"type":"string","title":"Email"},"price_alerts":{"type":"boolean","title":"Price Alerts","default":false},"price_regions":{"items":{"type":"string"},"type":"array","title":"Price Regions","default":["ALL"]},"price_threshold":{"type":"string","title":"Price Threshold","default":"EXTREME"},"price_all_tiers":{"type":"boolean","title":"Price All Tiers","default":false},"insights":{"type":"boolean","title":"Insights","default":false},"insight_periods":{"items":{"type":"string"},"type":"array","title":"Insight Periods","default":["month"]},"newsletter":{"type":"boolean","title":"Newsletter","default":false},"followed_duids":{"items":{"type":"string"},"type":"array","title":"Followed Duids","default":[]}},"type":"object","required":["email"],"title":"SubscribePayload"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}},"tags":[{"name":"fleet","description":"Per-battery and fleet-wide dispatch, revenue, SOC, and FCAS data"},{"name":"prices","description":"Regional spot price timeseries"},{"name":"events","description":"Significant NEM price events and fleet responses"},{"name":"optimal","description":"Actual vs LP-optimal revenue benchmarking"},{"name":"bids","description":"Bid stack and bidding behaviour analysis"},{"name":"strategy","description":"Behavioural strategy profiling"},{"name":"vpp","description":"Residential Virtual Power Plant FCAS and revenue data"},{"name":"meta","description":"Reference data, analytics, health"}]}