TheDocumentation Index
Fetch the complete documentation index at: https://dev.1st.app/llms.txt
Use this file to discover all available pages before exploring further.
/readings endpoint is for interactive use, last 24h, single device.
For bulk pulls across many devices and long time ranges, use
GET /v1/readings.csv instead. One request, one rate-limit hit, returns
a streamed CSV body you save to disk.
Picking a time range
The simplest way is?last=, no timestamps to compute:
| Want | Pass |
|---|---|
| Last 24 hours | ?last=24h |
| Last 7 days | ?last=7d |
| Last 30 days | ?last=30d |
| Last 90 days (the cap) | ?last=90d |
from and to (ISO 8601 UTC):
from and to defaults to “now”. With nothing set,
you get the last 24 hours by default.
Example
shape=long returns one row per (device, bucket).
Columns:
bucket_at, device_id, display_name, co2_ppm, temp_c, humidity_pct, lux, spl_db, valid_mask.
Spreadsheet-friendly wide shape
Add?shape=wide to get one row per bucket with one column per
(device × metric), the layout spreadsheets actually want:
bucket_at, room4.co2_ppm, room4.temp_c, room12.co2_ppm, ....
Column names are derived from each device’s display_name (lowercased,
non-alphanumeric replaced with _, collision suffixes when needed).
Devices filter
To restrict the export to a subset, pass?devices= with a comma-
separated list of UUIDs:
devices to include every device in the team.
Sheets / Excel direct
Both connectors can fetch the CSV directly if you pass the key as a query parameter (they can’t set headers):Limits
- Max range: 90 days per request.
- Max rows: 250,000 per request. Wider requests get 413, narrow the range or device list and re-call.
- Floats are rounded to 2 decimals.
- Timestamps are ISO 8601 UTC (Excel-parseable).
Python
Nightly job pattern
For unattended nightly pulls, use aread-scope key with a meaningful
name (“Nightly BigQuery sync”) and call the CSV endpoint once. If the
response exceeds 250k rows, split the range, e.g. 30 days per call,
12 calls per year of history.