Plant data
Four endpoints return per-plant data. All require a Bearer token and a Plant or Device subscription; see Authentication and access. Try them interactively in the Swagger reference.
| Method | Endpoint | Returns |
|---|---|---|
| GET | /data/plant/list | Plants your account can query, with metadata |
| POST | /data/plant/daily | Selected KPIs for one day |
| POST | /data/plant/historical | Selected KPIs over a day range |
| POST | /data/plant/last_24_hour_update_status | Data-freshness status per day, ~30 days back |
List plants
Section titled “List plants”GET /data/plant/list — no parameters. Returns every plant visible to your account:
[ { "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "name": "DEMO-P001-Plant-1", "label": "DEMO-P001-Plant-1", "tz_offset": "+07:00", "country": "Vietnam", "plant_biz_model": "PPA Rooftop Zero Export", "plant_type": null, "string_count_per_scb": null }]Use id as the plant_id in the other requests. Attributes not configured for a plant are null. The list refreshes daily; a plant added to your account today may not appear until the next refresh.
Daily KPIs
Section titled “Daily KPIs”POST /data/plant/daily — current-day values (or pass date as YYYY-MM-DD for a specific day).
{ "plant_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "kpis": ["real_time_plant_active_power", "real_time_plant_daily_yield"], "date": "2025-03-17"}Available KPIs (up to 5 per request):
real_time_plant_active_powerreal_time_plant_daily_yieldreal_time_plant_total_yieldreal_time_plant_irradiationreal_time_plant_irradiancereal_time_plant_daily_effective_prreal_time_plant_overspill_energyreal_time_plant_overspill_powerreal_time_plant_expected_powerreal_time_plant_cell_temperaturereal_time_plant_meter_yield
Response — one entry per plant, one series per requested KPI:
[ { "plant_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "date": "2025-03-17", "tz_offset": "+07:00", "data": { "real_time_plant_active_power": [ { "ts": "1742976300000", "value": "57.753" } ], "real_time_plant_daily_yield": [ { "ts": "1742974200000", "value": "936.61" } ] } }]Historical KPIs
Section titled “Historical KPIs”POST /data/plant/historical — one value per day per KPI, for days days ending at date.
{ "plant_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "kpis": ["historical_plant_daily_yield", "historical_plant_cell_temperature"], "date": "2025-03-17", "days": 7}Available KPIs (up to 10 per request):
historical_plant_daily_yieldhistorical_plant_irradiationhistorical_plant_daily_effective_prhistorical_plant_overspill_energyhistorical_plant_cell_temperaturehistorical_plant_meter_yieldhistorical_plant_total_yieldhistorical_plant_effective_availability
The response envelope matches the daily endpoint, with multiple {ts, value} points per KPI — one per day in the range.
Update status
Section titled “Update status”POST /data/plant/last_24_hour_update_status — body {"plant_id": "..."}. For roughly the last 30 days, reports whether the plant delivered data within 24 hours of each day:
[ { "plant_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "tz_offset": "+07:00", "data": [ { "date": "2025-03-26", "last_data_update": "2025-03-26T13:34:26+0700", "update_status": "Update" }, { "date": "2025-03-23", "last_data_update": null, "update_status": "No Update" } ] }]Use this to detect stale plants before interpreting KPI values — see Data freshness and corrections for how freshness affects the numbers themselves.
Reading the values
Section titled “Reading the values”- Time zone: the day window is the plant’s local day, per
tz_offset.tsis an epoch-millisecond day key derived from thedatefield, not the measurement timestamp — group and label points bydateandtz_offset. - Missing data: a KPI with no data for a day is an empty list; an offline plant returns empty lists for all requested KPIs. Missing values inside a series are
null. - Strings:
tsandvalueare returned as strings; parse them numerically on your side. - Unknown KPI names are ignored rather than rejected — a typo yields a response without that key, not an error.