Telemetry
Query Historical Telemetry
Returns time-series telemetry data for an energy meter within a time range.
Path Parameters
| Parameter | Description | |
|---|---|---|
meterId |
UUID of the energy meter | * |
Query Parameters
| Parameter | Description | |
|---|---|---|
startTs |
Start time in Unix timestamp (milliseconds) | * |
endTs |
End time in Unix timestamp (milliseconds) | * |
keys |
Comma-separated keys: import_kwh, export_kwh. Default: both |
|
agg |
Aggregation: NONE, AVG, SUM, MIN, MAX, COUNT. Default: NONE |
|
limit |
Max data points per key (1–10000). Default: 1000 |
|
orderBy |
ASC or DESC. Default: ASC |
Tip
Use aggregation to reduce response size for large time ranges. For example, agg=AVG with a 30-day range returns averaged values instead of every raw reading.
Example
meter_id = "5aa268e0-0666-11f1-a8a4-2bf9576f784e"
params = {
"startTs": 1774000000000,
"endTs": 1774008000000,
"keys": "import_kwh,export_kwh",
"limit": 5,
}
response = requests.get(
f"{BASE_URL}/energy-meters/{meter_id}/telemetry",
headers=headers,
params=params,
)
telemetry = response.json()
for point in telemetry["data"]["import_kwh"]:
print(f"{point['timestamp']}: {point['value']} kWh")
const meterId = "5aa268e0-0666-11f1-a8a4-2bf9576f784e";
const params = new URLSearchParams({
startTs: "1774000000000",
endTs: "1774008000000",
keys: "import_kwh,export_kwh",
limit: "5",
});
const response = await fetch(
`${BASE_URL}/energy-meters/${meterId}/telemetry?${params}`,
{ headers: { "X-API-Key": API_KEY } },
);
const { data } = await response.json();
data.import_kwh.forEach((point) => {
console.log(`${point.timestamp}: ${point.value} kWh`);
});
Response
{
"data": {
"import_kwh": [
{ "timestamp": "2026-03-20T09:47:33.865Z", "value": 6695.29 },
{ "timestamp": "2026-03-20T09:48:33.916Z", "value": 6695.30 },
{ "timestamp": "2026-03-20T09:49:34.019Z", "value": 6695.31 },
{ "timestamp": "2026-03-20T09:50:34.036Z", "value": 6695.32 },
{ "timestamp": "2026-03-20T09:51:33.974Z", "value": 6695.33 }
],
"export_kwh": [
{ "timestamp": "2026-03-20T09:47:33.865Z", "value": 19.01 },
{ "timestamp": "2026-03-20T09:48:33.916Z", "value": 19.01 },
{ "timestamp": "2026-03-20T09:49:34.019Z", "value": 19.01 },
{ "timestamp": "2026-03-20T09:50:34.036Z", "value": 19.01 },
{ "timestamp": "2026-03-20T09:51:33.974Z", "value": 19.01 }
]
}
}
| Field | Type | Description |
|---|---|---|
timestamp |
string |
ISO 8601 timestamp |
value |
number |
Telemetry value in kWh |
Get Latest Telemetry
Returns the most recent reading for each telemetry key on an energy meter.
| Parameter | Description | |
|---|---|---|
meterId |
UUID of the energy meter | * |
Example
const meterId = "5aa268e0-0666-11f1-a8a4-2bf9576f784e";
const response = await fetch(
`${BASE_URL}/energy-meters/${meterId}/telemetry/latest`,
{ headers: { "X-API-Key": API_KEY } },
);
const { data } = await response.json();
console.log(`Import: ${data.import_kwh.value} kWh`);
console.log(`Export: ${data.export_kwh.value} kWh`);
Response
{
"data": {
"import_kwh": {
"timestamp": "2026-03-20T12:05:37.539Z",
"value": 6697.73
},
"export_kwh": {
"timestamp": "2026-03-20T12:05:37.539Z",
"value": 19.01
}
}
}
| Field | Type | Description |
|---|---|---|
timestamp |
string |
ISO 8601 timestamp of the reading |
value |
number |
Most recent value in kWh |
Tip
Use this endpoint for live dashboards. Energy meters typically report every 60 seconds, so polling more frequently than that won't yield new data.