BEN MyMeter API
Machine/IoT API — report metering data and query it back.
Contract version: 1.0 ·
OpenAPI specification
Quickstart — first data in minutes
- Create a workspace account (or accept your invitation) and log in.
- In Settings → API tokens, mint a token with the
data:reportscope. The token is shown exactly once — store it on the device. - Send your first readings — copy, insert the token, run:
curl -X POST https://mymeter.christoph-bimminger.at/api/v1/reportData \
-H 'Authorization: Bearer <your-token>' \
-H 'Content-Type: application/json' \
-d '{
"readings": [
{
"meter": "MTR-00012345",
"kind": "consumption",
"value": 1.25,
"unit": "kwh",
"recorded_at": "2026-08-15T10:00:00Z"
}
]
}'
Unknown meter identifiers are provisioned automatically and appear under "Ungrouped meters"; retries of the same report are idempotent and never double-count.
Verify the token separately with an authenticated ping:
curl -H 'Authorization: Bearer <your-token>' https://mymeter.christoph-bimminger.at/api/v1/ping
Minimal device example (Python)
# Report one consumption reading — the same payload as the curl quickstart.
import json, urllib.request
TOKEN = "<your-token>"
body = {
"readings": [{
"meter": "MTR-00012345", # your device identifier
"kind": "consumption", # consumption | saldo
"value": 1.25,
"unit": "kwh", # kwh | wh | m3 | l
"recorded_at": "2026-08-15T10:00:00Z",
}]
}
req = urllib.request.Request(
"https://mymeter.christoph-bimminger.at/api/v1/reportData",
data=json.dumps(body).encode(),
headers={"Authorization": "Bearer " + TOKEN,
"Content-Type": "application/json"},
)
print(urllib.request.urlopen(req).read().decode())
Endpoints
| Endpoint | Summary | Scope |
|---|---|---|
GET /api/v1/ping |
Authenticated liveness probe | — |
POST /api/v1/reportData |
Report consumption / saldo readings (batch) |
data:report
|
GET /api/v1/meters |
List the tenant's meters |
data:read
|
GET /api/v1/readings |
Query readings (raw or aggregated) |
data:read
|
GET /api/v1/statusReports |
Query device-status history | — |