{"openapi":"3.1.0","info":{"title":"WattMarkets API","description":"Free, transparent ERCOT coincident-peak prediction. Every probability ships with its driver vector; every call is publicly scored. Attribution required for republication: \"Peak data by WattMarkets\".","version":"1.0.0"},"paths":{"/v1/programs":{"get":{"tags":["programs"],"summary":"Get Programs","operationId":"get_programs_v1_programs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ProgramOut"},"type":"array","title":"Response Get Programs V1 Programs Get"}}}}}}},"/v1/predictions/daily":{"get":{"tags":["predictions"],"summary":"Predictions Daily","operationId":"predictions_daily_v1_predictions_daily_get","parameters":[{"name":"program","in":"query","required":false,"schema":{"type":"string","default":"ercot-4cp-2026","title":"Program"}},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DailyPredictionOut"},{"type":"null"}],"title":"Response Predictions Daily V1 Predictions Daily Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/predictions/intervals":{"get":{"tags":["predictions"],"summary":"Predictions Intervals","operationId":"predictions_intervals_v1_predictions_intervals_get","parameters":[{"name":"program","in":"query","required":false,"schema":{"type":"string","default":"ercot-4cp-2026","title":"Program"}},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IntervalStripOut"},{"type":"null"}],"title":"Response Predictions Intervals V1 Predictions Intervals Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/load/forecast/band":{"get":{"tags":["load"],"summary":"Forecast Band","description":"P10-P90 of ERCOT forecast error, measured from our own stored history: hourly\nactuals paired with the newest forecast vintage at least an hour old. Returns null\nuntil 200+ paired hours exist — the band is measured, never invented.","operationId":"forecast_band_v1_load_forecast_band_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/load/actual":{"get":{"tags":["load"],"summary":"Load Actual","operationId":"load_actual_v1_load_actual_get","parameters":[{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}},{"name":"resolution","in":"query","required":false,"schema":{"type":"string","default":"5min","title":"Resolution"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LoadPointOut"},"title":"Response Load Actual V1 Load Actual Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/load/forecast":{"get":{"tags":["load"],"summary":"Load Forecast","operationId":"load_forecast_v1_load_forecast_get","parameters":[{"name":"asof","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asof"}},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ForecastPointOut"},"title":"Response Load Forecast V1 Load Forecast Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/peaks":{"get":{"tags":["peaks"],"summary":"Peaks","operationId":"peaks_v1_peaks_get","parameters":[{"name":"program","in":"query","required":false,"schema":{"type":"string","default":"ercot-4cp-2026","title":"Program"}},{"name":"season","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Season"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PeakOut"},"title":"Response Peaks V1 Peaks Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/season/verdicts":{"get":{"tags":["scorecard"],"summary":"Season Verdicts","description":"Month-by-month verdicts for the live season, straight from our own call log and\nthe peaks table (positioning §3). \"Flagged\" means we published WARNING or higher on\nthe peak day before the peak interval arrived — no hindsight.","operationId":"season_verdicts_v1_season_verdicts_get","parameters":[{"name":"program","in":"query","required":false,"schema":{"type":"string","default":"ercot-4cp-2026","title":"Program"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/peaks/history":{"get":{"tags":["peaks"],"summary":"Peaks History","description":"Peak hour per eligible month of a historical year, from ERCOT's official settled\nhourly load (the /peaks/{year} evergreen pages, §17.2). Hourly resolution — labeled\nas such; the official 15-min interval report is reconciled in December (§ Sprint 5).","operationId":"peaks_history_v1_peaks_history_get","parameters":[{"name":"year","in":"query","required":true,"schema":{"type":"integer","maximum":2030,"minimum":2019,"title":"Year"}},{"name":"months","in":"query","required":false,"schema":{"type":"string","default":"6,7,8,9","title":"Months"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/season/days":{"get":{"tags":["peaks"],"summary":"Season Days","description":"Per-day max system load for the season's eligible months (the Month Ladder,\n§6.6). Day boundaries in CT; provisional-peak day flagged per month.","operationId":"season_days_v1_season_days_get","parameters":[{"name":"program","in":"query","required":false,"schema":{"type":"string","default":"ercot-4cp-2026","title":"Program"}},{"name":"season","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Season"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/scorecard":{"get":{"tags":["scorecard"],"summary":"Scorecard","operationId":"scorecard_v1_scorecard_get","parameters":[{"name":"program","in":"query","required":false,"schema":{"type":"string","default":"ercot-4cp-2026","title":"Program"}},{"name":"season","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Season"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ScorecardMetricOut"},"title":"Response Scorecard V1 Scorecard Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/scorecard/calibration":{"get":{"tags":["scorecard"],"summary":"Scorecard Calibration","description":"Empirical calibration from the frozen backtest: within each probability band,\nhow often did the month's true peak actually land on days we scored there? Rates\ncarry Wilson 95% intervals. This is what the dial's plain-English range quotes.","operationId":"scorecard_calibration_v1_scorecard_calibration_get","parameters":[{"name":"program","in":"query","required":false,"schema":{"type":"string","default":"ercot-4cp-2026","title":"Program"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/scorecard/calls":{"get":{"tags":["scorecard"],"summary":"Scorecard Calls","operationId":"scorecard_calls_v1_scorecard_calls_get","parameters":[{"name":"program","in":"query","required":false,"schema":{"type":"string","default":"ercot-4cp-2026","title":"Program"}},{"name":"season","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Season"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ScorecardCallOut"},"title":"Response Scorecard Calls V1 Scorecard Calls Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/scorecard/attestations":{"get":{"tags":["scorecard"],"summary":"Attestations","description":"Published call-log terminal hashes — anyone can verify non-retroactivity (§19.5).","operationId":"attestations_v1_scorecard_attestations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/zones/current":{"get":{"tags":["zones"],"summary":"Zones Current","operationId":"zones_current_v1_zones_current_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ZoneCurrentOut"},"type":"array","title":"Response Zones Current V1 Zones Current Get"}}}}}}},"/v1/zones/frames":{"get":{"tags":["zones"],"summary":"Zones Frames","description":"Hourly per-zone frames for the map's time scrubber (§6.2): temp + anomaly from the\nlatest ERCOT vintage per hour, zone load where observed. One request, no network per\nscrub tick.","operationId":"zones_frames_v1_zones_frames_get","parameters":[{"name":"hours_back","in":"query","required":false,"schema":{"type":"integer","maximum":72,"minimum":1,"default":24,"title":"Hours Back"}},{"name":"hours_fwd","in":"query","required":false,"schema":{"type":"integer","maximum":72,"minimum":0,"default":48,"title":"Hours Fwd"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoneFramesOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/zones/cities":{"get":{"tags":["zones"],"summary":"Zones Cities","description":"Latest NWS observation per metro station (the map's city markers).","operationId":"zones_cities_v1_zones_cities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CityTempOut"},"type":"array","title":"Response Zones Cities V1 Zones Cities Get"}}}}}}},"/v1/calendar.ics":{"get":{"tags":["alerts"],"summary":"Calendar Ics","description":"Subscribe-able calendar: every WATCH+ day this season as a tentative event over\nits risk window — quietly brilliant for meeting planning (§8).","operationId":"calendar_ics_v1_calendar_ics_get","parameters":[{"name":"program","in":"query","required":false,"schema":{"type":"string","default":"ercot-4cp-2026","title":"Program"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks":{"post":{"tags":["webhooks"],"summary":"Webhook Create","operationId":"webhook_create_v1_webhooks_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreateIn"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks/{webhook_id}":{"get":{"tags":["webhooks"],"summary":"Webhook Get","operationId":"webhook_get_v1_webhooks__webhook_id__get","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["webhooks"],"summary":"Webhook Delete","operationId":"webhook_delete_v1_webhooks__webhook_id__delete","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks/{webhook_id}/deliveries":{"get":{"tags":["webhooks"],"summary":"Webhook Deliveries","operationId":"webhook_deliveries_v1_webhooks__webhook_id__deliveries_get","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks/{webhook_id}/test":{"post":{"tags":["webhooks"],"summary":"Webhook Test","description":"Send a signed test event synchronously (§9.3 'Send test event').","operationId":"webhook_test_v1_webhooks__webhook_id__test_post","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/replay/fixtures":{"get":{"tags":["replay"],"summary":"Replay Fixtures","description":"Golden days available for Replay — real captured ERCOT days (§19.3).","operationId":"replay_fixtures_v1_replay_fixtures_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/replay/{name}":{"get":{"tags":["replay"],"summary":"Replay Day","description":"Run a golden day through the exact production pipeline, hour by hour.","operationId":"replay_day_v1_replay__name__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/content/drafts":{"get":{"tags":["content"],"summary":"Content Drafts","description":"Auto-drafted marketing assets, human-reviewed before posting. Transparent by\ndesign — the copy is public data about public calls.","operationId":"content_drafts_v1_content_drafts_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"draft","title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/status":{"get":{"tags":["status"],"summary":"Status","operationId":"status_v1_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusOut"}}}}}}},"/v1/stream":{"get":{"tags":["stream"],"summary":"Stream","description":"Server-Sent Events (§7). Heartbeat every 30s carries server time (drives the\ncountdown re-sync); watt_events NOTIFY payloads are forwarded as they arrive.","operationId":"stream_v1_stream_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/auth/magic-link":{"post":{"tags":["auth"],"summary":"Request Magic Link","operationId":"request_magic_link_v1_auth_magic_link_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MagicLinkIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/verify":{"get":{"tags":["auth"],"summary":"Verify","operationId":"verify_v1_auth_verify_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/me":{"get":{"tags":["auth"],"summary":"Me","operationId":"me_v1_auth_me_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/me/alerts":{"put":{"tags":["auth"],"summary":"Set Alert Prefs","operationId":"set_alert_prefs_v1_auth_me_alerts_put","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertPrefsIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"tags":["status"],"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AlertPrefsIn":{"properties":{"channel":{"type":"string","title":"Channel"},"levels":{"items":{"type":"string"},"type":"array","title":"Levels"},"program":{"type":"string","title":"Program","default":"ercot-4cp-2026"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"quiet_start_ct":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quiet Start Ct"},"quiet_end_ct":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quiet End Ct"},"action_overrides_quiet":{"type":"boolean","title":"Action Overrides Quiet","default":true}},"type":"object","required":["channel","levels"],"title":"AlertPrefsIn"},"CityTempOut":{"properties":{"station":{"type":"string","title":"Station"},"city":{"type":"string","title":"City"},"zone":{"type":"string","title":"Zone"},"lat":{"type":"number","title":"Lat"},"lon":{"type":"number","title":"Lon"},"ts":{"type":"string","format":"date-time","title":"Ts"},"temp_f":{"type":"number","title":"Temp F"}},"type":"object","required":["station","city","zone","lat","lon","ts","temp_f"],"title":"CityTempOut"},"DailyPredictionOut":{"properties":{"program":{"type":"string","title":"Program"},"date":{"type":"string","format":"date","title":"Date"},"p_peak_day":{"type":"number","maximum":1.0,"minimum":0.0,"title":"P Peak Day"},"level":{"type":"string","title":"Level"},"window":{"anyOf":[{"$ref":"#/components/schemas/WindowOut"},{"type":"null"}]},"tight_window":{"anyOf":[{"$ref":"#/components/schemas/TightWindowOut"},{"type":"null"}]},"drivers":{"$ref":"#/components/schemas/DriverVectorOut"},"model_version":{"type":"string","title":"Model Version"},"computed_at":{"type":"string","format":"date-time","title":"Computed At"}},"type":"object","required":["program","date","p_peak_day","level","drivers","model_version","computed_at"],"title":"DailyPredictionOut"},"DriverVectorOut":{"properties":{"forecast_max_mw":{"type":"number","title":"Forecast Max Mw"},"month_max_mw":{"type":"number","title":"Month Max Mw"},"margin_mw":{"type":"number","title":"Margin Mw"},"temp_anomaly_f":{"type":"number","title":"Temp Anomaly F"},"est_curtailment_mw":{"type":"number","title":"Est Curtailment Mw"},"est_battery_mw":{"type":"number","title":"Est Battery Mw"},"dow_factor":{"type":"number","title":"Dow Factor"},"days_remaining_in_month":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Days Remaining In Month"},"p_raw":{"type":"number","title":"P Raw"},"p_final":{"type":"number","title":"P Final"}},"type":"object","required":["forecast_max_mw","month_max_mw","margin_mw","temp_anomaly_f","est_curtailment_mw","est_battery_mw","dow_factor","p_raw","p_final"],"title":"DriverVectorOut"},"FeedHealthOut":{"properties":{"feed":{"type":"string","title":"Feed"},"status":{"type":"string","title":"Status"},"last_success_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Success At"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"}},"type":"object","required":["feed","status"],"title":"FeedHealthOut"},"ForecastPointOut":{"properties":{"ts":{"type":"string","format":"date-time","title":"Ts"},"mw":{"type":"number","title":"Mw"},"asof":{"type":"string","format":"date-time","title":"Asof"}},"type":"object","required":["ts","mw","asof"],"title":"ForecastPointOut"},"FreshnessOut":{"properties":{"server_time":{"type":"string","format":"date-time","title":"Server Time"},"state":{"type":"string","title":"State"},"newest_observation":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Newest Observation"},"age_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Age Seconds"}},"type":"object","required":["server_time","state"],"title":"FreshnessOut"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IntervalOut":{"properties":{"interval_start":{"type":"string","format":"date-time","title":"Interval Start"},"p":{"type":"number","title":"P"},"expected_mw":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Expected Mw"},"margin_mw":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Margin Mw"},"temp_f":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Temp F"},"is_modal":{"type":"boolean","title":"Is Modal"}},"type":"object","required":["interval_start","p","is_modal"],"title":"IntervalOut"},"IntervalStripOut":{"properties":{"program":{"type":"string","title":"Program"},"date":{"type":"string","format":"date","title":"Date"},"computed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Computed At"},"intervals":{"items":{"$ref":"#/components/schemas/IntervalOut"},"type":"array","title":"Intervals"}},"type":"object","required":["program","date","intervals"],"title":"IntervalStripOut"},"LoadPointOut":{"properties":{"ts":{"type":"string","format":"date-time","title":"Ts"},"mw":{"type":"number","title":"Mw"}},"type":"object","required":["ts","mw"],"title":"LoadPointOut"},"MagicLinkIn":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"MagicLinkIn"},"PeakOut":{"properties":{"program":{"type":"string","title":"Program"},"season":{"type":"integer","title":"Season"},"period_key":{"type":"string","title":"Period Key"},"interval_start":{"type":"string","format":"date-time","title":"Interval Start"},"mw":{"type":"number","title":"Mw"},"status":{"type":"string","title":"Status"}},"type":"object","required":["program","season","period_key","interval_start","mw","status"],"title":"PeakOut"},"ProgramOut":{"properties":{"id":{"type":"string","title":"Id"},"iso":{"type":"string","title":"Iso"},"season":{"type":"integer","title":"Season"},"label":{"type":"string","title":"Label"},"peaks":{"additionalProperties":true,"type":"object","title":"Peaks"},"eligible_months":{"items":{"type":"integer"},"type":"array","title":"Eligible Months"},"interval_minutes":{"type":"integer","title":"Interval Minutes"},"eligible_window_ct":{"items":{"type":"string"},"type":"array","title":"Eligible Window Ct"},"load_basis":{"type":"string","title":"Load Basis"},"levels":{"additionalProperties":true,"type":"object","title":"Levels"},"status":{"type":"string","title":"Status"},"timezone":{"type":"string","title":"Timezone"}},"type":"object","required":["id","iso","season","label","peaks","eligible_months","interval_minutes","eligible_window_ct","load_basis","levels","status","timezone"],"title":"ProgramOut"},"ScorecardCallOut":{"properties":{"target_date":{"type":"string","format":"date","title":"Target Date"},"level":{"type":"string","title":"Level"},"probability":{"type":"number","title":"Probability"},"outcome":{"type":"string","title":"Outcome"},"is_true_peak":{"type":"boolean","title":"Is True Peak"},"kind":{"type":"string","title":"Kind","default":"BACKTEST"}},"type":"object","required":["target_date","level","probability","outcome","is_true_peak"],"title":"ScorecardCallOut"},"ScorecardMetricOut":{"properties":{"precision_ci":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Precision Ci"},"recall_ci":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Recall Ci"},"season":{"type":"integer","title":"Season"},"model_kind":{"type":"string","title":"Model Kind"},"precision":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Precision"},"recall":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Recall"},"avg_lead_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Lead Hours"},"false_alarm_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"False Alarm Hours"},"flagged_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Flagged Days"},"true_peaks":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"True Peaks"}},"type":"object","required":["season","model_kind"],"title":"ScorecardMetricOut"},"StatusOut":{"properties":{"freshness":{"$ref":"#/components/schemas/FreshnessOut"},"feeds":{"items":{"$ref":"#/components/schemas/FeedHealthOut"},"type":"array","title":"Feeds"}},"type":"object","required":["freshness","feeds"],"title":"StatusOut"},"TightWindowOut":{"properties":{"start":{"type":"string","format":"date-time","title":"Start"},"end":{"type":"string","format":"date-time","title":"End"},"coverage":{"type":"number","title":"Coverage"}},"type":"object","required":["start","end","coverage"],"title":"TightWindowOut"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WebhookCreateIn":{"properties":{"url":{"type":"string","title":"Url"},"events":{"items":{"type":"string"},"type":"array","title":"Events"},"program":{"type":"string","title":"Program","default":"ercot-4cp-2026"},"secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secret"}},"type":"object","required":["url","events"],"title":"WebhookCreateIn"},"WindowOut":{"properties":{"start":{"type":"string","format":"date-time","title":"Start"},"end":{"type":"string","format":"date-time","title":"End"}},"type":"object","required":["start","end"],"title":"WindowOut"},"ZoneCurrentOut":{"properties":{"zone":{"type":"string","title":"Zone"},"load_mw":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Load Mw"},"temp_f":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Temp F"},"anomaly_f":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Anomaly F"},"load_share":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Load Share"}},"type":"object","required":["zone"],"title":"ZoneCurrentOut"},"ZoneFrameCellOut":{"properties":{"temp_f":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Temp F"},"anomaly_f":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Anomaly F"},"load_mw":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Load Mw"}},"type":"object","title":"ZoneFrameCellOut"},"ZoneFrameOut":{"properties":{"ts":{"type":"string","format":"date-time","title":"Ts"},"future":{"type":"boolean","title":"Future"},"zones":{"additionalProperties":{"$ref":"#/components/schemas/ZoneFrameCellOut"},"type":"object","title":"Zones"}},"type":"object","required":["ts","future","zones"],"title":"ZoneFrameOut"},"ZoneFramesOut":{"properties":{"server_time":{"type":"string","format":"date-time","title":"Server Time"},"hours_back":{"type":"integer","title":"Hours Back"},"hours_fwd":{"type":"integer","title":"Hours Fwd"},"frames":{"items":{"$ref":"#/components/schemas/ZoneFrameOut"},"type":"array","title":"Frames"}},"type":"object","required":["server_time","hours_back","hours_fwd","frames"],"title":"ZoneFramesOut"}}}}