Wattweave API documentation
A read-only API (/api/v1/) for AGGL's other apps and systems to pull Wattweave's data. Not for park operators or third parties — this grants broad read access across every operator.
Authentication
Every request needs an Authorization header:
Authorization: Bearer wwk_...API keys are issued by a Wattweave platform admin (Admin → API keys) — there's no self-service signup. The raw key is only ever shown once at creation, so ask AGGL for one and store it securely on your end; it can't be retrieved again, only revoked and replaced.
Errors
All errors return { error: string } with the relevant HTTP status — 401 for a missing/invalid/ revoked key, 404 for an unknown resource.
Notes
- Read-only — nothing can be created or changed via this API.
- Demo data (
isDemo: true) is included, not filtered out — every operator/park record carries its own flag so you can filter client-side. - No rate limiting currently applied.
Endpoints
/api/v1/operatorsEvery operator (tenant).
{
"operators": [
{
"id": "cksj...",
"name": "Fairwood Holiday Parks Ltd",
"billingEmail": "billing@fairwoodlakes.example",
"isDemo": false,
"createdAt": "2026-08-14T11:11:04.815Z",
"parkCount": 1
}
]
}/api/v1/parksEvery park, across every operator.
{
"parks": [
{
"id": "cksj...",
"name": "Fairwood Lakes Holiday Park",
"address": "Fairwood Lane, Gower, Swansea, SA3 1AB",
"latitude": 51.586,
"longitude": -4.163,
"operatorId": "cksj...",
"operatorName": "Fairwood Holiday Parks Ltd",
"isDemo": false,
"pocCount": 1,
"lodgeCount": 12
}
]
}/api/v1/parks/{id}Full topology for one park — POCs, constraint set, lodges, assets, and central BESS.
{
"id": "cksj...",
"name": "Fairwood Lakes Holiday Park",
"address": "...",
"latitude": 51.586,
"longitude": -4.163,
"operatorId": "cksj...",
"operatorName": "Fairwood Holiday Parks Ltd",
"isDemo": false,
"centralBess": [
{
"id": "cksj...",
"name": "Wenergy",
"brand": "Wenergy",
"model": "BESS Cabinet",
"pcsBrand": "Yunt",
"pcsModel": "125kW G99",
"capacityKwh": 215,
"powerKw": 125,
"canGridForm": true,
"status": "COMMISSIONING"
}
],
"pocs": [
{
"id": "cksj...",
"mpan": "1200034567890",
"kvaImportLimit": 500,
"kvaExportLimit": 300,
"halfHourlySettled": true,
"constraintSet": {
"exportScheme": "G99",
"exportLimitKw": 250,
"voltageRiseLimitPercent": 3,
"defaultSocFloorPercent": 20,
"defaultSocCeilingPercent": 95
},
"lodges": [
{
"id": "cksj...",
"unitNumber": "1",
"ownership": "OPERATOR",
"phaseLabel": "L1",
"assets": [
{ "id": "cksj...", "type": "PV", "brand": "JA Solar", "model": "JAM54D40", "ratedKw": 4.5, "capacityKwh": null, "status": "COMMISSIONING" }
]
}
]
}
]
}/api/v1/parks/{id}/dynamic-load-sharingDynamic Load Sharing™ savings for one park — real, measured kWh, not an estimate.
{
"parkId": "cksj...",
"kwhSaved": 142.5,
"hasTelemetryConnection": true
}/api/v1/dynamic-load-sharingDynamic Load Sharing™ savings across every park, plus a total — the same data shown on Wattweave's own admin dashboard, but including demo parks (flagged via isDemo).
{
"totalKwh": 142.5,
"parks": [
{
"parkId": "cksj...",
"parkName": "Fairwood Lakes Holiday Park",
"operatorId": "cksj...",
"operatorName": "Fairwood Holiday Parks Ltd",
"isDemo": false,
"kwhSaved": 142.5,
"hasTelemetryConnection": true
}
]
}/api/v1/invoicesSelf-consumption invoices. Not the PDF itself — just the billing record.
Optional query params: operatorId, parkId
{
"invoices": [
{
"id": "cksj...",
"invoiceNumber": "WW-CMSSUJ-202607-0001",
"operatorId": "cksj...",
"parkId": "cksj...",
"pocId": "cksj...",
"periodStart": "2026-07-01T00:00:00.000Z",
"periodEnd": "2026-08-01T00:00:00.000Z",
"selfConsumedKwh": 2300,
"ratePencePerKwh": 24,
"subtotal": 552,
"vatAmount": 0,
"total": 552,
"currency": "GBP",
"status": "ISSUED",
"createdAt": "2026-08-14T11:11:05.361Z"
}
]
}