Sessions

One timetabled meeting, and the roll that belongs to it.

ProposedNot yet callable

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

What a session is

A session is a single timetabled meeting of a course: CS101 in Block C / 204, 09:00 to 10:00, on a given day. Attendance records hang off sessions, and sessions are how you reconcile in bulk instead of record by record.

Reading sessions

GET /v1/sessions?date=2026-07-19&course_code=CS101
GET /v1/sessions/ses_55ab20

A session carries its own status: scheduled, open, closed or cancelled. Only an open session accepts new device captures.

The roll

GET /v1/sessions/ses_55ab20/roll

Returns every enrolled student with their status for that session — including those with no record yet, which a plain record list cannot tell you. This is the shape most ERPs want for a nightly sync.

{
  "session": { "id": "ses_55ab20", "course_code": "CS101", "status": "closed" },
  "roll": [
    { "external_id": "2024CS118", "status": "present", "record_id": "att_7d3e91" },
    { "external_id": "2024CS119", "status": "absent",  "record_id": "att_7d3e92" },
    { "external_id": "2024CS120", "status": null,      "record_id": null }
  ]
}

A null status means nobody has marked that student either way. Treat it as unresolved rather than absent — the difference matters when a device failed mid-session.