Skip to content
REST API

Get a week of lessons

GET
/schedules/week

Every lesson in one week across the user's active schedules, or one schedule, as dated occurrences in the user's time zone. External schedules are read from their provider, up to 7 seconds each; one that fails or times out is listed in sources with an issue and adds no lessons. Archived schedules are not part of the week, so a scheduleId naming one returns 404.

Required scopes: schedule:view

Authorization

AuthorizationBearer <token>

In: header

Query Parameters

date?string

Any day (YYYY-MM-DD) in the week to read. Defaults to today in the user's time zone. Only the previous, current and next week can be read.

Match^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
Formatdate
scheduleId?string

Only this schedule. Omit for every active schedule the user can read.

Match^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/schedules/week"
{  "data": {    "weekStart": "2026-01-12",    "timeZone": "Europe/London",    "sources": [      {        "scheduleId": "4d3c2b1a-0f9e-4d8c-8b7a-6f5e4d3c2b1a",        "name": "Year 12",        "external": null,        "owned": true,        "issue": null      }    ],    "occurrences": [      {        "scheduleId": "4d3c2b1a-0f9e-4d8c-8b7a-6f5e4d3c2b1a",        "date": "2026-01-12",        "endDate": null,        "time": {          "kind": "timed",          "startMinute": 540,          "endMinute": 600        },        "timeZone": null,        "title": "Biology",        "subtitle": "S2 · Dr Patel"      }    ]  }}