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.
2026-05-14 — V2 surface (pre-launch reshape)
Public API reshape. Pre-launch reset: no customer integrations existed against the V1 shape, so the legacy/api/v1/teams/{team_id}/... paths
and 1st_pk_ prefix are gone. New surface:
GET /v1/team— echo the team this key is scoped to.GET /v1/sensors(+?metadata.<k>=<v>filter) — list sensors.GET /v1/sensors/current— latest reading per sensor in one call.GET /v1/sensors/{id}— single sensor.PATCH /v1/sensors/{id}— updatedisplay_nameandmetadata(requiresread_writescope, supportsIdempotency-Keyfor safe retries).GET /v1/sensors/{id}/readings— time-series, cursor-paginated.GET /v1/readings.csv— bulk CSV.?shape=widefor spreadsheet pivot,?key=...query-param auth for Google Sheets / Excel connectors.
1st_pk_<id>.<secret> → 1st_sk_<id>.<secret>. The
sk_ prefix matches Stripe convention for secret keys — pk_ reads
as publishable in Stripe docs, which would tell any AI agent trained
on Stripe to treat the key as safe-to-share.
New error codes: api_key_expired, insufficient_scope. Removed:
team_mismatch, team_not_found. Path-based team mismatch is gone
because team_id no longer appears in the URL — the key alone scopes
the request.
Endpoints removed in this pass: async exports (POST /teams/{id}/exports,
GET /teams/{id}/exports/{id}) and alerts (GET /teams/{id}/alerts).
Async exports replaced by streaming /v1/readings.csv (250k-row cap).
Alerts removed pending the customer-facing alerts UI.
Deprecation policy
Stable contract:- Error
codestrings. - Endpoint paths.
- Response field names that exist today.
- HTTP status codes per error condition.
- Error
messagetext (tuning for clarity / AI legibility). - Doc URLs.
- Adding required fields to request bodies.
- Removing endpoints.
- Changing response field types.
/v1.0/...) when a
backwards-compatible path is feasible.