{"openapi":"3.1.0","info":{"title":"DynVolt Open API","description":"Programmatic access to your DynVolt solar plants.","version":"1.0.0"},"paths":{"/v1/sites":{"get":{"tags":["sites"],"summary":"List the sites this API key can access","operationId":"list_sites_v1_sites_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/overview":{"get":{"tags":["plant"],"summary":"Full live plant snapshot (loggers, inverters, strings, sensors, weather, predictions)","operationId":"get_overview_v1_sites__site_id__overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/plant/status":{"get":{"tags":["plant"],"summary":"Aggregated live plant status","operationId":"get_plant_status_v1_sites__site_id__plant_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/plant/summary":{"get":{"tags":["plant"],"summary":"Per-logger daily energy summary (?date=YYYY-MM-DD)","operationId":"get_plant_summary_v1_sites__site_id__plant_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/locations":{"get":{"tags":["plant"],"summary":"Site locations","operationId":"get_locations_v1_sites__site_id__locations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/locations/{location_id}":{"get":{"tags":["plant"],"summary":"One location","operationId":"get_locations_location_id_v1_sites__site_id__locations__location_id__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/loggers":{"get":{"tags":["loggers"],"summary":"List SmartLoggers (plants)","operationId":"get_loggers_v1_sites__site_id__loggers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/loggers/{logger_id}/history":{"get":{"tags":["loggers"],"summary":"Logger telemetry history (?start&end&limit)","operationId":"get_loggers_logger_id_history_v1_sites__site_id__loggers__logger_id__history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/inverters":{"get":{"tags":["inverters"],"summary":"List inverters (?logger_id= to filter)","operationId":"get_inverters_v1_sites__site_id__inverters_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/inverters/{inverter_id}":{"get":{"tags":["inverters"],"summary":"One inverter with live telemetry","operationId":"get_inverters_inverter_id_v1_sites__site_id__inverters__inverter_id__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/inverters/{inverter_id}/history":{"get":{"tags":["inverters"],"summary":"Inverter telemetry history (?start&end&limit)","operationId":"get_inverters_inverter_id_history_v1_sites__site_id__inverters__inverter_id__history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/inverters/alarms/table":{"get":{"tags":["inverters"],"summary":"Manufacturer alarm reference table","operationId":"get_inverters_alarms_table_v1_sites__site_id__inverters_alarms_table_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/inverters/alarms/decode":{"get":{"tags":["inverters"],"summary":"Decode alarm bitmasks (?alarm_1..alarm_5)","operationId":"get_inverters_alarms_decode_v1_sites__site_id__inverters_alarms_decode_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/strings/inverter/{inverter_id}":{"get":{"tags":["strings"],"summary":"PV-string configuration for an inverter","operationId":"get_strings_inverter_inverter_id_v1_sites__site_id__strings_inverter__inverter_id__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/strings/inverter/{inverter_id}/current":{"get":{"tags":["strings"],"summary":"Live per-string telemetry","operationId":"get_strings_inverter_inverter_id_current_v1_sites__site_id__strings_inverter__inverter_id__current_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/strings/inverter/{inverter_id}/history":{"get":{"tags":["strings"],"summary":"Per-string history (?start&end&string_index&limit)","operationId":"get_strings_inverter_inverter_id_history_v1_sites__site_id__strings_inverter__inverter_id__history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/strings/inverter/{inverter_id}/hourly":{"get":{"tags":["strings"],"summary":"Per-string hourly energy (?start&end)","operationId":"get_strings_inverter_inverter_id_hourly_v1_sites__site_id__strings_inverter__inverter_id__hourly_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/sensors":{"get":{"tags":["sensors"],"summary":"Transformer-station sensor/fan nodes","operationId":"get_sensors_v1_sites__site_id__sensors_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/sensors/{node_id}/current":{"get":{"tags":["sensors"],"summary":"Live sensor-node reading (temp/humidity/fan currents)","operationId":"get_sensors_node_id_current_v1_sites__site_id__sensors__node_id__current_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/sensors/{node_id}/history":{"get":{"tags":["sensors"],"summary":"Sensor-node history (?start&end&limit)","operationId":"get_sensors_node_id_history_v1_sites__site_id__sensors__node_id__history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/gaps":{"get":{"tags":["plant"],"summary":"Telemetry gap records (?logger_id&start&end)","operationId":"get_gaps_v1_sites__site_id__gaps_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/gaps/logger/{logger_id}":{"get":{"tags":["plant"],"summary":"Telemetry gaps for one logger","operationId":"get_gaps_logger_logger_id_v1_sites__site_id__gaps_logger__logger_id__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/weather":{"get":{"tags":["weather"],"summary":"Latest on-site weather across all loggers (per-instrument under sensors[])","operationId":"get_weather_v1_sites__site_id__weather_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/weather/logger/{logger_id}":{"get":{"tags":["weather"],"summary":"Latest weather for one logger (plot average + per-instrument)","operationId":"get_weather_logger_logger_id_v1_sites__site_id__weather_logger__logger_id__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/weather/logger/{logger_id}/history":{"get":{"tags":["weather"],"summary":"Weather history 5-min buckets (?start&end&limit)","operationId":"get_weather_logger_logger_id_history_v1_sites__site_id__weather_logger__logger_id__history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/efficiency/loggers":{"get":{"tags":["efficiency"],"summary":"Logger specific-yield / capacity-factor rankings (?start&end)","operationId":"get_efficiency_loggers_v1_sites__site_id__efficiency_loggers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/efficiency/inverters":{"get":{"tags":["efficiency"],"summary":"Inverter rankings incl. efficiency (?start&end&logger_id)","operationId":"get_efficiency_inverters_v1_sites__site_id__efficiency_inverters_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/efficiency/strings":{"get":{"tags":["efficiency"],"summary":"String rankings by orientation group (?start&end&inverter_ids&orientation)","operationId":"get_efficiency_strings_v1_sites__site_id__efficiency_strings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/efficiency/health-matrix":{"get":{"tags":["efficiency"],"summary":"Per-string health grid vs peers (?start&end)","operationId":"get_efficiency_health_matrix_v1_sites__site_id__efficiency_health_matrix_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/efficiency/loss-analysis":{"get":{"tags":["efficiency"],"summary":"DC→AC conversion loss per inverter (?start&end)","operationId":"get_efficiency_loss_analysis_v1_sites__site_id__efficiency_loss_analysis_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/strings/inverter/{inverter_id}/compare":{"get":{"tags":["efficiency"],"summary":"All strings of an inverter side-by-side (?start&end)","operationId":"get_strings_inverter_inverter_id_compare_v1_sites__site_id__strings_inverter__inverter_id__compare_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/iv/modules":{"get":{"tags":["iv"],"summary":"Panel-model library","operationId":"get_iv_modules_v1_sites__site_id__iv_modules_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/iv/modules/search":{"get":{"tags":["iv"],"summary":"Search the CEC panel database (?q&limit)","operationId":"get_iv_modules_search_v1_sites__site_id__iv_modules_search_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/iv/modules/{params_id}":{"get":{"tags":["iv"],"summary":"One panel model","operationId":"get_iv_modules_params_id_v1_sites__site_id__iv_modules__params_id__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/iv/strings/{inverter_id}/{string_index}/expected":{"get":{"tags":["iv"],"summary":"Expected-vs-measured I-V series for a string (?start&end&limit)","operationId":"get_iv_strings_inverter_id_string_index_expected_v1_sites__site_id__iv_strings__inverter_id___string_index__expected_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/energy/hourly":{"get":{"tags":["energy"],"summary":"Day-by-hour energy matrix (?start&end&logger_ids)","operationId":"get_energy_hourly_v1_sites__site_id__energy_hourly_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/loggers/{logger_id}/hourly-energy":{"get":{"tags":["energy"],"summary":"Hourly production for one logger (?since=UTC ISO)","operationId":"get_loggers_logger_id_hourly_energy_v1_sites__site_id__loggers__logger_id__hourly_energy_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/curtailment":{"get":{"tags":["curtailment"],"summary":"Active + scheduled curtailment windows (rows carry group_id, applied, is_active)","operationId":"get_curtailment_v1_sites__site_id__curtailment_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/curtailment/suggest":{"get":{"tags":["curtailment"],"summary":"Suggest a power limit from forecast (?logger_id&date&start_hour&end_hour)","operationId":"get_curtailment_suggest_v1_sites__site_id__curtailment_suggest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/commands/relay-history":{"get":{"tags":["curtailment"],"summary":"Relay/fan command history (?node_id&limit)","operationId":"get_commands_relay_history_v1_sites__site_id__commands_relay_history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/markets":{"get":{"tags":["markets"],"summary":"Available markets","operationId":"get_markets_v1_sites__site_id__markets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/markets/{market_code}/prices":{"get":{"tags":["markets"],"summary":"Day-ahead prices for a market (?target_date)","operationId":"get_markets_market_code_prices_v1_sites__site_id__markets__market_code__prices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/markets/compare":{"get":{"tags":["markets"],"summary":"Cross-market price comparison (?target_date)","operationId":"get_markets_compare_v1_sites__site_id__markets_compare_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/earnings/summary":{"get":{"tags":["earnings"],"summary":"Earnings summary gross→fees→net (?start&end&logger_id)","operationId":"get_earnings_summary_v1_sites__site_id__earnings_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/earnings/hourly":{"get":{"tags":["earnings"],"summary":"Hourly earnings detail (?start&end&logger_id)","operationId":"get_earnings_hourly_v1_sites__site_id__earnings_hourly_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/earnings/market-assignments":{"get":{"tags":["earnings"],"summary":"Per-plant market assignment (?logger_id)","operationId":"get_earnings_market_assignments_v1_sites__site_id__earnings_market_assignments_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/earnings/cross-border-prices":{"get":{"tags":["earnings"],"summary":"Cross-border price series (?base&sold&start&end)","operationId":"get_earnings_cross_border_prices_v1_sites__site_id__earnings_cross_border_prices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/predictions/forecast":{"get":{"tags":["predictions"],"summary":"Production forecast, all plants (?date&refresh)","operationId":"get_predictions_forecast_v1_sites__site_id__predictions_forecast_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/predictions/forecast/logger/{logger_id}":{"get":{"tags":["predictions"],"summary":"Production forecast for one plant (?date)","operationId":"get_predictions_forecast_logger_logger_id_v1_sites__site_id__predictions_forecast_logger__logger_id__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/predictions/production":{"get":{"tags":["predictions"],"summary":"Forecast vs actual production (?start&end&logger_id)","operationId":"get_predictions_production_v1_sites__site_id__predictions_production_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/predictions/prices":{"get":{"tags":["predictions"],"summary":"Price forecast for the assigned market (?start&end)","operationId":"get_predictions_prices_v1_sites__site_id__predictions_prices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/predictions/model-status":{"get":{"tags":["predictions"],"summary":"Model accuracy metrics","operationId":"get_predictions_model_status_v1_sites__site_id__predictions_model_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess":{"get":{"tags":["bess"],"summary":"Battery-storage units","operationId":"get_bess_v1_sites__site_id__bess_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/fleet/summary":{"get":{"tags":["bess"],"summary":"BESS fleet aggregate","operationId":"get_bess_fleet_summary_v1_sites__site_id__bess_fleet_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/{bess_id}":{"get":{"tags":["bess"],"summary":"One BESS unit","operationId":"get_bess_bess_id_v1_sites__site_id__bess__bess_id__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/{bess_id}/current":{"get":{"tags":["bess"],"summary":"Live BESS telemetry","operationId":"get_bess_bess_id_current_v1_sites__site_id__bess__bess_id__current_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/{bess_id}/history":{"get":{"tags":["bess"],"summary":"BESS telemetry history (?start&end&limit)","operationId":"get_bess_bess_id_history_v1_sites__site_id__bess__bess_id__history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/{bess_id}/dashboard":{"get":{"tags":["bess"],"summary":"BESS unit dashboard (telemetry + schedule + deviations)","operationId":"get_bess_bess_id_dashboard_v1_sites__site_id__bess__bess_id__dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/{bess_id}/deviations":{"get":{"tags":["bess"],"summary":"Schedule-vs-actual deviations (?target_date)","operationId":"get_bess_bess_id_deviations_v1_sites__site_id__bess__bess_id__deviations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/{bess_id}/clusters":{"get":{"tags":["bess"],"summary":"Per-cluster summaries","operationId":"get_bess_bess_id_clusters_v1_sites__site_id__bess__bess_id__clusters_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/{bess_id}/clusters/{cluster_idx}":{"get":{"tags":["bess"],"summary":"Live cluster cell arrays","operationId":"get_bess_bess_id_clusters_cluster_idx_v1_sites__site_id__bess__bess_id__clusters__cluster_idx__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/{bess_id}/pcs/current":{"get":{"tags":["bess"],"summary":"PCS live telemetry","operationId":"get_bess_bess_id_pcs_current_v1_sites__site_id__bess__bess_id__pcs_current_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/{bess_id}/pcs/history":{"get":{"tags":["bess"],"summary":"PCS history (?start&end&limit)","operationId":"get_bess_bess_id_pcs_history_v1_sites__site_id__bess__bess_id__pcs_history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/{bess_id}/pcs/faults":{"get":{"tags":["bess"],"summary":"Live PCS fault words","operationId":"get_bess_bess_id_pcs_faults_v1_sites__site_id__bess__bess_id__pcs_faults_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/{bess_id}/alarms/states":{"get":{"tags":["bess"],"summary":"BESS alarm states (?only_set&severity)","operationId":"get_bess_bess_id_alarms_states_v1_sites__site_id__bess__bess_id__alarms_states_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/{bess_id}/alarms/history":{"get":{"tags":["bess"],"summary":"BESS alarm history (?code&limit)","operationId":"get_bess_bess_id_alarms_history_v1_sites__site_id__bess__bess_id__alarms_history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/{bess_id}/alarms/counts":{"get":{"tags":["bess"],"summary":"Alarm counts by severity","operationId":"get_bess_bess_id_alarms_counts_v1_sites__site_id__bess__bess_id__alarms_counts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/{bess_id}/dispatch-log":{"get":{"tags":["bess"],"summary":"Dispatch log (?start&end&limit)","operationId":"get_bess_bess_id_dispatch_log_v1_sites__site_id__bess__bess_id__dispatch_log_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/{bess_id}/control-log":{"get":{"tags":["bess"],"summary":"Control-write log (?tier&limit)","operationId":"get_bess_bess_id_control_log_v1_sites__site_id__bess__bess_id__control_log_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/{bess_id}/envelope":{"get":{"tags":["bess"],"summary":"Charge/discharge envelope + SOC","operationId":"get_bess_bess_id_envelope_v1_sites__site_id__bess__bess_id__envelope_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/{bess_id}/protection":{"get":{"tags":["bess"],"summary":"Protection thresholds","operationId":"get_bess_bess_id_protection_v1_sites__site_id__bess__bess_id__protection_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/{bess_id}/setup":{"get":{"tags":["bess"],"summary":"Device setup values","operationId":"get_bess_bess_id_setup_v1_sites__site_id__bess__bess_id__setup_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/{bess_id}/schedules":{"get":{"tags":["bess"],"summary":"Dispatch schedules for a unit (?target_date)","operationId":"get_bess_bess_id_schedules_v1_sites__site_id__bess__bess_id__schedules_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/schedules/{schedule_id}":{"get":{"tags":["bess"],"summary":"One dispatch schedule with hours","operationId":"get_bess_schedules_schedule_id_v1_sites__site_id__bess_schedules__schedule_id__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/alerts":{"get":{"tags":["alerts"],"summary":"Alerts (?status= repeatable; default active,acknowledged)","operationId":"get_alerts_v1_sites__site_id__alerts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/work-orders":{"get":{"tags":["work-orders"],"summary":"O&M work orders (filters: location_id, logger_id, status, start, end, offset, limit)","operationId":"get_work_orders_v1_sites__site_id__work_orders_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["work-orders"],"summary":"Create a work order","operationId":"post_work_orders_v1_sites__site_id__work_orders_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/work-orders/{wo_id}":{"get":{"tags":["work-orders"],"summary":"One work order","operationId":"get_work_orders_wo_id_v1_sites__site_id__work_orders__wo_id__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"tags":["work-orders"],"summary":"Update a work order","operationId":"put_work_orders_wo_id_v1_sites__site_id__work_orders__wo_id__put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/defects":{"get":{"tags":["defects"],"summary":"O&M defects (?location_id&logger_id&status&severity&offset&limit)","operationId":"get_defects_v1_sites__site_id__defects_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["defects"],"summary":"Log a defect","operationId":"post_defects_v1_sites__site_id__defects_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/defects/{defect_id}":{"get":{"tags":["defects"],"summary":"One defect","operationId":"get_defects_defect_id_v1_sites__site_id__defects__defect_id__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"tags":["defects"],"summary":"Update a defect","operationId":"put_defects_defect_id_v1_sites__site_id__defects__defect_id__put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/om/categories":{"get":{"tags":["work-orders"],"summary":"Inspection categories","operationId":"get_om_categories_v1_sites__site_id__om_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/om/notifications":{"get":{"tags":["work-orders"],"summary":"O&M notifications (?unread_only&offset&limit)","operationId":"get_om_notifications_v1_sites__site_id__om_notifications_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/om/notifications/unread-count":{"get":{"tags":["work-orders"],"summary":"Unread O&M notification count","operationId":"get_om_notifications_unread_count_v1_sites__site_id__om_notifications_unread_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/reports/overview":{"get":{"tags":["reports"],"summary":"Reports overview","operationId":"get_reports_overview_v1_sites__site_id__reports_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/reports/catalog":{"get":{"tags":["reports"],"summary":"Report template catalog","operationId":"get_reports_catalog_v1_sites__site_id__reports_catalog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/reports/runs":{"get":{"tags":["reports"],"summary":"Generated report runs (?limit)","operationId":"get_reports_runs_v1_sites__site_id__reports_runs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/reports/subscriptions":{"get":{"tags":["reports"],"summary":"Scheduled report subscriptions","operationId":"get_reports_subscriptions_v1_sites__site_id__reports_subscriptions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["reports"],"summary":"Create a report subscription","operationId":"post_reports_subscriptions_v1_sites__site_id__reports_subscriptions_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/work-orders/{wo_id}/items/{item_id}":{"put":{"tags":["work-orders"],"summary":"Update a work-order checklist item","operationId":"put_work_orders_wo_id_items_item_id_v1_sites__site_id__work_orders__wo_id__items__item_id__put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/work-orders/{wo_id}/approve":{"post":{"tags":["work-orders"],"summary":"Approve a completed work order","operationId":"post_work_orders_wo_id_approve_v1_sites__site_id__work_orders__wo_id__approve_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/om/notifications/{notification_id}/read":{"put":{"tags":["work-orders"],"summary":"Mark an O&M notification read","operationId":"put_om_notifications_notification_id_read_v1_sites__site_id__om_notifications__notification_id__read_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/alerts/{alert_id}/acknowledge":{"post":{"tags":["alerts"],"summary":"Acknowledge an alert","operationId":"post_alerts_alert_id_acknowledge_v1_sites__site_id__alerts__alert_id__acknowledge_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/alerts/{alert_id}/resolve":{"post":{"tags":["alerts"],"summary":"Resolve an alert","operationId":"post_alerts_alert_id_resolve_v1_sites__site_id__alerts__alert_id__resolve_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/reports/subscriptions/{sub_id}":{"delete":{"tags":["reports"],"summary":"Delete a report subscription","operationId":"delete_reports_subscriptions_sub_id_v1_sites__site_id__reports_subscriptions__sub_id__delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"patch":{"tags":["reports"],"summary":"Update a report subscription","operationId":"patch_reports_subscriptions_sub_id_v1_sites__site_id__reports_subscriptions__sub_id__patch","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/reports/subscriptions/{sub_id}/run":{"post":{"tags":["reports"],"summary":"Run a report subscription now","operationId":"post_reports_subscriptions_sub_id_run_v1_sites__site_id__reports_subscriptions__sub_id__run_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/{bess_id}/optimize":{"post":{"tags":["bess"],"summary":"Ask the AI to optimize this unit's dispatch","operationId":"post_bess_bess_id_optimize_v1_sites__site_id__bess__bess_id__optimize_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/optimize-all":{"post":{"tags":["bess"],"summary":"Optimize all units","operationId":"post_bess_optimize_all_v1_sites__site_id__bess_optimize_all_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/schedules/{schedule_id}/approve":{"post":{"tags":["bess"],"summary":"Approve a proposed dispatch schedule","operationId":"post_bess_schedules_schedule_id_approve_v1_sites__site_id__bess_schedules__schedule_id__approve_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/schedules/{schedule_id}/reject":{"post":{"tags":["bess"],"summary":"Reject a proposed dispatch schedule","operationId":"post_bess_schedules_schedule_id_reject_v1_sites__site_id__bess_schedules__schedule_id__reject_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/schedules/approve-all":{"post":{"tags":["bess"],"summary":"Approve all proposed schedules (?target_date)","operationId":"post_bess_schedules_approve_all_v1_sites__site_id__bess_schedules_approve_all_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/bess/schedules/{schedule_id}/hours/{hour}":{"put":{"tags":["bess"],"summary":"Edit one hour of a proposed schedule","operationId":"put_bess_schedules_schedule_id_hours_hour_v1_sites__site_id__bess_schedules__schedule_id__hours__hour__put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sites/{site_id}/curtailment/window":{"post":{"tags":["curtailment"],"summary":"Schedule a curtailment window (site or single plant)","operationId":"curtailment_window_v1_sites__site_id__curtailment_window_post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"requestBody":{"content":{"application/json":{"schema":{"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sites/{site_id}/curtailment/immediate":{"post":{"tags":["curtailment"],"summary":"Curtail now (applied within ~10s)","operationId":"curtailment_immediate_v1_sites__site_id__curtailment_immediate_post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"requestBody":{"content":{"application/json":{"schema":{"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sites/{site_id}/curtailment/group/{group_id}":{"delete":{"tags":["curtailment"],"summary":"Release a curtailment group (restores clamped power first)","operationId":"curtailment_release_v1_sites__site_id__curtailment_group__group_id__delete","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"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"}}}}