Status Codes
Error bodies have the same shape:
Rate Limit
120 requests per 60 seconds per device credential. The limit is per key, not per IP address, so one device cannot starve another. Over the limit the API returns429 with a retry-after header in seconds. A device reporting every 15 minutes uses a fraction of the allowance; a bridge flushing a backlog after an outage is the case that meets it.
Rules For Every Reading
- The server sets the timestamp. Any
timestampin the request is ignored. A reading buffered offline and sent later is stored with the time it arrived, not the time it was taken. - One reading per request. There’s no batch endpoint. Post each field of a multi-channel uplink as its own request.
- Values are stored as strings. Send a number or a numeric string. A value you want to chart must parse as a number.
- Units aren’t converted. Convert to the catalogue unit on the device or in the bridge. See Metrics.
- Don’t send filler. A device that goes quiet is shown as stale in the app. A repeated old value looks current and isn’t.
Health Probes
Two probes report whether the service is up. Both are unauthenticated and exempt from the rate limit, so a load balancer or a monitoring job can call them as often as it needs.
A device doesn’t need to call either. If a post fails with a connection error, back off and retry.