Get Schedule
Fetch the current plan for a system.
Furo re-optimizes hourly at 15-minute resolution, so pull once per interval — polling faster returns the same plan. Keep following the last plan you fetched if a pull fails.
status says what the response is: ok carries periods; no_plan means the
system is provisioned but has no valid plan right now (keep following the last
one until the watchdog expires); released means Furo has handed control back
(go to your default mode now). Only an unknown device_id is a 404.
What comes back
Plan-level, once per response:
| Field | Meaning |
|---|---|
status | ok, no_plan or released — see above |
control_enabled | false while the system runs in test mode: read along, do not act |
valid_until | end of the last interval; past it the plan is stale |
watchdog_timeout_seconds | fall back to your default mode when no pull has succeeded for this long |
allow_battery_to_grid | whether the site may discharge into the grid; no period commands it otherwise |
device_id | the system UUID the plan was fetched for |
plan_id, created_at | the optimization run behind the plan and when Furo computed it; null when status is not ok |
resolution_minutes | length of one interval |
Per quarter hour, in periods:
| Field | Meaning |
|---|---|
timestamp | start of the interval, UTC |
case | the energy-flow case the optimizer planned, e.g. grid_to_battery |
battery_setpoint_kw | signed battery setpoint — positive charges, negative discharges, 0 holds; null = no setpoint, self-consume within the limits |
battery_max_charge_kw, battery_max_discharge_kw | caps that always bind; 0 blocks that direction |
nap_max_import_kw, nap_max_export_kw | grid limits for this interval; they take precedence over the setpoint |
strategy | direct_command (follow the setpoint), self_consumption or peak_shaving |
battery_charge_kw, battery_discharge_kw, grid_import_kw, grid_export_kw, soc_percent, storage_fill_kwh, pv_curtailment_kw | the optimizer plan the values above were derived from |
All power values are kW, 15-minute means, two non-negative directions except the signed setpoint. The caps and grid limits always bind, whatever the setpoint says.
Note the timestamps: a period's timestamp is the start of its interval,
while a telemetry timestamp marks the end of the interval it measured.
Authorization
APIKeyHeader In: header
Query Parameters
uuidResponse Body
application/json
application/json
curl -X GET "https://example.com/v1/schedule?device_id=497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "device_id": "3bafab7b-4400-4bcf-8e6e-09f954699940", "status": "ok", "control_enabled": true, "plan_id": "string", "created_at": "2019-08-24T14:15:22Z", "valid_until": "2019-08-24T14:15:22Z", "resolution_minutes": 0, "watchdog_timeout_seconds": 0, "allow_battery_to_grid": true, "periods": []}{ "detail": [ { "loc": [ "string" ], "msg": "string", "type": "string", "input": null, "ctx": {} } ]}