Skip to content

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.

MethodEndpointReturns
GET/data/plant/listPlants your account can query, with metadata
POST/data/plant/dailySelected KPIs for one day
POST/data/plant/historicalSelected KPIs over a day range
POST/data/plant/last_24_hour_update_statusData-freshness status per day, ~30 days back

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.

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_power
  • real_time_plant_daily_yield
  • real_time_plant_total_yield
  • real_time_plant_irradiation
  • real_time_plant_irradiance
  • real_time_plant_daily_effective_pr
  • real_time_plant_overspill_energy
  • real_time_plant_overspill_power
  • real_time_plant_expected_power
  • real_time_plant_cell_temperature
  • real_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" }
]
}
}
]

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_yield
  • historical_plant_irradiation
  • historical_plant_daily_effective_pr
  • historical_plant_overspill_energy
  • historical_plant_cell_temperature
  • historical_plant_meter_yield
  • historical_plant_total_yield
  • historical_plant_effective_availability

The response envelope matches the daily endpoint, with multiple {ts, value} points per KPI — one per day in the range.

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.

  • Time zone: the day window is the plant’s local day, per tz_offset. ts is an epoch-millisecond day key derived from the date field, not the measurement timestamp — group and label points by date and tz_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: ts and value are 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.