Asoba Ona Documentation

Partner API Overview

The Partner API provides high-performance access to pre-computed JSON snapshots of site data. It is specifically designed for embedding into partner dashboards and third-party applications where low latency and high reliability are critical.

Key Features

Base URL

https://8el3o25tc1.execute-api.af-south-1.amazonaws.com/prod

Authentication

The Partner API uses an x-api-key header for authentication. This key is specifically scoped to the sites you are permitted to access.

x-api-key: YOUR_PARTNER_API_KEY

Snapshot Types

The following pre-computed snapshots are currently available:

Endpoint Description
/kpi-rollup Aggregated performance metrics (system PR, availability, energy-at-risk, financial).
/maintenance-signals Detected anomalies and prioritised maintenance signals.
/forecast-snapshot Latest 24-hour solar production forecast (per-interval p10/p50/p90 + revenue).
/maintenance-schedule Preventive-maintenance task list for the next 90 days (per inverter).
/snapshot Generic access to other site-specific snapshot collections (by kind).

ETag Caching

To minimize latency and data transfer, the Partner API includes an ETag header in every successful response. When making subsequent requests, you should include this value in the If-None-Match header.

The Ona SDK handles this caching logic automatically.


Endpoints

KPI Rollup Snapshot

GET /kpi-rollup

Returns a summary of key performance indicators for the site.

Parameters

| Parameter | Type | Required | Description | |———–|——|———-|————-| | site_id | string | Yes | The identifier for the site (e.g., Sibaya). |

from ona_platform import OnaClient

client = OnaClient(partner_api_key="your_key")
snapshot = client.partner_api.get_kpi_rollup(site_id="Sibaya")
print(snapshot['performance']['system_pr'])

Maintenance Signals

GET /maintenance-signals

Returns active alerts and prioritized maintenance tasks.

Parameters

| Parameter | Type | Required | Description | |———–|——|———-|————-| | site_id | string | Yes | The identifier for the site. | | since | string | No | Filter signals occurring after this timestamp (ISO 8601). | | severity | string | No | Filter by severity: Critical, High, Medium, Low. |

signals = client.partner_api.get_maintenance_signals(
    site_id="Sibaya", 
    severity="High"
)

Forecast Snapshot

GET /forecast-snapshot

Returns the most recent solar energy forecast rollup for the entire site.

Parameters

| Parameter | Type | Required | Description | |———–|——|———-|————-| | site_id | string | Yes | The identifier for the site. | | horizon | string | No | Forecast window (e.g., 24h, 48h). Defaults to 24h. |

forecast = client.partner_api.get_forecast_snapshot(site_id="Sibaya")

Maintenance Schedule

GET /maintenance-schedule

Returns the preventive-maintenance task list for the next 90 days, derived per inverter from detected anomaly frequency and manufacturer service intervals.

Parameters

| Parameter | Type | Required | Description | |———–|——|———-|————-| | site_id | string | Yes | The identifier for the site. |

Response shape

{
  "site_id": "Sibaya",
  "generated_at": "2026-05-30T03:39:39Z",
  "horizon": { "start": "2026-05-30", "end": "2026-08-28" },
  "tasks": [
    {
      "asset_id": "INV-1000000054495190",
      "task_type": "inspection",
      "reason": "35 anomalies detected in the last 2 days",
      "recommended_date": "2026-06-06",
      "estimated_duration_hours": 2.0,
      "priority": "High"
    }
  ],
  "summary": { "total_tasks": 5, "by_priority": { "High": 5 }, "by_task_type": { "inspection": 5 } }
}
schedule = client.partner_api.get_maintenance_schedule(site_id="Sibaya")
print(schedule['summary']['total_tasks'])
for task in schedule['tasks']:
    print(task['recommended_date'], task['asset_id'], task['task_type'], task['priority'])