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
| Param | Required | Meaning |
|---|---|---|
token | yes | Device token (ds_live_…). Treat as a password. |
device | yes | Local device id (the one in the dashboard). |
temp | one of | Temperature in °C (Shelly omits if no sensor). |
hum | one of | Humidity in %. |
battery | no | Battery percentage (Gen1) or volts (Gen3). |
signal | no | RSSI in dBm. |
ts | no | RFC 3339 UTC. Omit to use server-receive time. |
lwt | no | online / 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".