Skip to content

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.

MethodEndpointReturns
GET/data/portfolio/listPortfolios in your account
GET/data/portfolio/plantsAll portfolios with their member plants
GET/data/portfolio/plants/{portfolio_id}Member plants of one portfolio
POST/data/portfolio/dailyAggregated KPIs for one day
POST/data/portfolio/historicalAggregated KPIs over a day range
POST/data/portfolio/last_24_hour_update_statusFreshness status per member plant

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.

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_power
  • real_time_portfolio_daily_yield
  • real_time_portfolio_irradiation
  • real_time_portfolio_irradiance
  • real_time_portfolio_overspill_energy
  • real_time_portfolio_overspill_power
  • real_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"
}
}

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_yield
  • historical_portfolio_irradiation
  • historical_portfolio_overspill_energy
  • historical_portfolio_meter_yield
  • historical_portfolio_avg_daily_pr
  • historical_portfolio_avg_daily_availability

portfolio_data is an array with one {kpi..., date} object per day.

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.

  • Sums vs averages: energy, irradiation, and power KPIs are plain sums over member plants. historical_portfolio_avg_daily_pr and historical_portfolio_avg_daily_availability are 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.