Furo Docs
OperateTelemetrie-API

Receive Telemetry

POST
/v1/telemetry

Push one measurement or a batch of them.

Authentication

Send the API key Furo issued for your system in the X-API-Key header. One key per system. The device_id in the body is the system's UUID, issued together with the key.

Cadence and timestamps

Send each measurement as soon as it is available. Any resolution between 1 and 15 minutes works. Every _kw value is the average power over the interval ending at timestamp, not an instantaneous reading. Timestamps are ISO 8601 with a timezone offset (2026-09-14T10:15:00Z or 2026-09-14T12:15:00+02:00); UTC is preferred and a timestamp without an offset is rejected.

Batching

The body is either a single object or an array of them — at most 5000 items and 2 MB per request.

Idempotency

Rows are upserted on (system, timestamp). Resending a point you already sent is safe, and a field sent as null (or omitted) never overwrites a stored value — so retries and backfills can never destroy data. Unknown fields are ignored.

What to send

gross_load_kw, pv_kw, grid_import_kw and grid_export_kw are required (pv_kw is 0 without PV). Add chp_kw where the site has a CHP/BHKW. soc_percent and the battery_* fields describe a physical battery's measured operation; leave them out when there is none.

Errors

StatusMeaning
422Payload failed validation
401Missing or invalid X-API-Key
404Unknown device_id
413Body larger than 2 MB

Authorization

APIKeyHeader
X-API-Key<token>

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

One measurement at one timestamp.

Response Body

application/json

application/json

curl -X POST "https://example.com/v1/telemetry" \  -H "Content-Type: application/json" \  -d '{    "chp_kw": 55,    "device_id": "3f2b9c14-7a55-4a0e-9f2a-5b1c8d7e4a10",    "grid_export_kw": 0,    "grid_import_kw": 261.2,    "gross_load_kw": 412.5,    "pv_kw": 96.3,    "timestamp": "2026-09-14T10:15:00Z"  }'
{  "status": "ok",  "measurements_stored": 0}