Get the reading history for one device over a time range you choose. Each reading is the average of a 5-minute window. Newest first, up to 1000 readings per call.
For multiple devices or longer ranges, use
/v1/readings.csv instead. One streaming request is much
faster than walking /readings per device and uses one
rate-limit slot instead of many.
from and to must be ISO 8601 UTC, e.g. 2026-05-11T00:00:00Z.to must be after from.At most 1000 readings come back per call. If your range has
more, the response includes a next_cursor value at the end.
Send it back as ?cursor=... on your next call to get the
next batch, and keep going until next_cursor is null.
For a worked example, see Paging through long lists.
Documentation Index
Fetch the complete documentation index at: https://dev.1st.app/llms.txt
Use this file to discover all available pages before exploring further.
Your API key. Create one at dashboard.1st.app/integrations/api-keys.
The UUID of the device you want. You get a device's ID from
GET /v1/devices (look at the device_id field) or by
copying it from the dashboard URL.
"8a72a1c7-3c91-4f5b-b39e-1d2c4e3f5a7b"
The earliest time you want readings from. The reading right at this exact moment is included.
Format the timestamp like 2026-05-10T00:00:00Z. That's
ISO 8601 with a Z on the end to mean UTC. To pull "all of
May 10 in UTC", use 2026-05-10T00:00:00Z.
If your team is on UK time and you want "May 10 local", convert it to UTC first.
"2026-05-10T00:00:00Z"
The end time. Readings at this exact moment are not
included, so to pull a full day, set from to midnight on
day 1 and to to midnight on day 2.
Same format as from: 2026-05-11T00:00:00Z.
Must be later than from. The total range can't be more than
90 days; split longer pulls into multiple calls.
"2026-05-11T00:00:00Z"
For long time ranges that return more than 1000 readings.
On your first call, leave this empty. If the response
includes a next_cursor value, there are more readings
waiting. Send that value back here on your next call to
get the next batch. Repeat until next_cursor comes back
as null.
Like a bookmark for the API: save your place, pick up where you left off. You don't need to understand the value itself, just send it back as-is.
"eyJ0ZWFtX2lkIjoiOWIzYTNi..."