Portfolio data
Portfolios group plants for aggregate reporting. Six endpoints return portfolio data; all require a Bearer token and any active subscription tier (Portfolio, Plant, or Device). Try them interactively in the Swagger reference.
| Method | Endpoint | Returns |
|---|---|---|
| GET | /data/portfolio/list | Portfolios in your account |
| GET | /data/portfolio/plants | All portfolios with their member plants |
| GET | /data/portfolio/plants/{portfolio_id} | Member plants of one portfolio |
| POST | /data/portfolio/daily | Aggregated KPIs for one day |
| POST | /data/portfolio/historical | Aggregated KPIs over a day range |
| POST | /data/portfolio/last_24_hour_update_status | Freshness status per member plant |
Membership
Section titled “Membership”GET /data/portfolio/list returns each portfolio’s id, portfolio_name, customer_id, and date_created. The /plants variants add plants: [{plant_id, portfolio_id}] so you can map aggregates back to the plant list. Portfolios are configured in the platform; contact support to change membership.
Daily KPIs
Section titled “Daily KPIs”POST /data/portfolio/daily — current-day aggregate (or pass date).
{ "portfolio_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "kpis": ["real_time_portfolio_active_power", "real_time_portfolio_daily_yield"]}Available KPIs (up to 5 per request):
real_time_portfolio_active_powerreal_time_portfolio_daily_yieldreal_time_portfolio_irradiationreal_time_portfolio_irradiancereal_time_portfolio_overspill_energyreal_time_portfolio_overspill_powerreal_time_portfolio_meter_yield
Response — one value per KPI, summed across member plants and rounded to two decimals:
{ "portfolio_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "date": "2025-03-17", "tz_offset": "+07:00", "portfolio_data": { "real_time_portfolio_active_power": 1240.55, "real_time_portfolio_daily_yield": 18234.02, "date": "2025-03-17" }}Historical KPIs
Section titled “Historical KPIs”POST /data/portfolio/historical — one aggregated entry per day for days days ending at date. Same request shape as daily, plus date and days.
Available KPIs (up to 5 per request):
historical_portfolio_daily_yieldhistorical_portfolio_irradiationhistorical_portfolio_overspill_energyhistorical_portfolio_meter_yieldhistorical_portfolio_avg_daily_prhistorical_portfolio_avg_daily_availability
portfolio_data is an array with one {kpi..., date} object per day.
Update status
Section titled “Update status”POST /data/portfolio/last_24_hour_update_status — body {"portfolio_id": "..."}. Returns the same per-day freshness records as the plant update status, one entry per member plant, so you can spot which plant is dragging an aggregate down.
Reading the aggregates
Section titled “Reading the aggregates”- Sums vs averages: energy, irradiation, and power KPIs are plain sums over member plants.
historical_portfolio_avg_daily_prandhistorical_portfolio_avg_daily_availabilityare fleet averages, not sums. - Missing plants: a member plant with no value for a KPI contributes 0 to the sum, and a plant without a configured time zone is skipped entirely — check the update-status endpoint before treating a low aggregate as production loss.
- Interpretation: for what PR and availability mean and when comparisons are valid, see PR calculation and Availability and energy loss.