GET /v1/ingest/shelly

Legacy query-string ingest for Shelly devices

A query-string variant of the ingest endpoint, designed to fit inside the Shelly H&T's URL-action template. It exists because Shelly's older firmware can only do GET with query params, not POST with a JSON body. For everything else, use POST /v1/ingest.

Endpoint

Query parameters

ParamRequiredMeaning
tokenyesDevice token (ds_live_…). Treat as a password.
deviceyesLocal device id (the one in the dashboard).
tempone ofTemperature in °C (Shelly omits if no sensor).
humone ofHumidity in %.
batterynoBattery percentage (Gen1) or volts (Gen3).
signalnoRSSI in dBm.
tsnoRFC 3339 UTC. Omit to use server-receive time.
lwtnoonline / offline. Used for last-will (rare).

"One of" means: at least one of temp / hum must be present.

Example URL

The URL the dashboard generates for you when you add a Shelly device. Paste this whole thing into the device's Reporting URL field:

Shelly's firmware substitutes $temperature, $humidity, $bat, $rssi (and others) before issuing the request.

Response

Same JSON as POST /v1/ingest, accepted count, etc. Shelly does not parse the response body; it only checks the HTTP status. We return 200 OK on success.

Why a GET and not a POST?

Shelly's Gen1 firmware can be configured to issue a GET with query parameters; doing POST with a body is convoluted. The simpler the URL, the harder it is for the operator to misconfigure. The pragmatic trade-off is that the token is in the URL, which means:

  • It appears in our HTTP access logs (we redact token= server-side before persisting the log line).
  • It may appear in your home router's logs if your router logs URLs (most do not).
  • It is not transmitted in cleartext — TLS encrypts the query string.

On Gen3 we recommend using POST /v1/ingest instead with the Authorization header. Gen1 customers stay on this endpoint.

Errors

Identical to POST /v1/ingest, with one Shelly-specific addition: if the device sends nan or null for one of the values (SHT chip not yet warm), the offending field is dropped silently and the rest of the reading is stored. We do not 422 a partially-broken Shelly because the most common cause is "still booting".