Quickstart

Ask who is in a room right now.

ProposedNot yet callable

This documents a design under review. Endpoints, payloads and field names may change before release.

Take a snapshot

A snapshot is a plain GET. It needs the presence:read scope, which is separate from the attendance scopes.

curl "https://api.onetaplabs.com/v1/presence?room=block-c-204" \
  -H "Authorization: Bearer $ONETAP_KEY"
{
  "object": "list",
  "as_of": "2026-07-19T09:22:04Z",
  "data": [
    {
      "student": { "id": "stu_2a77c1", "external_id": "2024CS118" },
      "room": "block-c-204",
      "state": "present",
      "first_seen_at": "2026-07-19T09:01:12Z",
      "last_seen_at": "2026-07-19T09:21:47Z",
      "confidence": "high"
    }
  ]
}

as_of is when the snapshot was taken. Show it wherever you show the data — a presence figure without a timestamp invites people to trust a stale screen.

Filters

ParameterTypeNotes
roomstringRoom slug. Omit for the whole institution.
session_idstringEveryone present for a given session.
student_idstringNarrow to one student.
stateenumpresent | recently_left — defaults to present only.

Snapshot or stream

Poll a snapshot when a periodic refresh is enough — a dashboard tile updating every 30 seconds. Subscribe to the stream when something has to react the moment a person moves, like a roll-call screen or an evacuation check.

Do not poll the snapshot every second. That is what the stream is for, and the rate limit will stop you anyway.