Helium API Documentation (2.2.15)

Download OpenAPI specification:

Helium is a smart, color-coded student planner that tracks classes, assignments, grades, and notes. The API exposes the full set of resources behind the app: class groups (terms), classes, recurring class schedules, weighted grading categories, assignments, events, reminders, notes, file attachments, resources, external calendar feeds (Google Calendar, iCloud, etc.), private iCal subscription feeds, and full account import/export.

Authentication

POST {"username": "<your email>", "password": "<your password>"} to /auth/token/ to obtain access and refresh tokens. Send subsequent requests with the Authorization: Bearer <access> header. Use /auth/token/refresh/ to rotate the access token before it expires.

Access tokens are short-lived and refresh tokens last several days. The exact values are published at runtime by GET /info/ as access_token_lifetime_minutes and refresh_token_lifetime_days. See /auth/token/refresh/ for the full refresh lifecycle.

Vocabulary (wire format vs. user-facing terms)

The wire format keeps some legacy names that differ from what users see in the Helium App. Each wire name (used in API paths and JSON keys) below corresponds to the term displayed in the app.

Wire (API) User-facing Notes
course_group class group (semester / quarter / term) Container for the classes a user is taking in a given period.
course class A single class within a class group. The API uses course to avoid the reserved word class.
homework assignment A graded item for a class. The API uses homework to avoid the reserved word assignment.
material resource A reference item (syllabus, textbook, link). The user-facing term is resource; material is the internal model name preserved in API paths (/planner/materials/) and as the stable bulk-import key (materials).
material_group resource group A container for resources. Same naming convention as materialmaterial_group on the wire, resource group in the app.

Integrations that surface these to end users should use the user-facing terms to match the Helium App.

Importing a schedule from a syllabus

Before constructing any datetimes, GET /auth/user/ and read settings.time_zone (an IANA name like America/Los_Angeles). Every start / end you send needs an offset consistent with that zone.

When ingesting a syllabus (or any external schedule), most resources are owned by a parent — POST them in this order so each create succeeds:

  1. POST /planner/coursegroups/ — the term (semester / quarter).
  2. POST /planner/coursegroups/{course_group}/courses/ — each class within the term.
  3. (Optional) POST /planner/coursegroups/{course_group}/courses/{course}/courseschedules/ — recurring weekly meeting times for the class (at most one schedule per class).
  4. (Optional) POST /planner/coursegroups/{course_group}/courses/{course}/categories/ — graded categories such as Homework, Exams. Sum of weight across a class's categories must stay ≤ 100. An Uncategorized category is auto-created on demand if you create homework without one.
  5. POST /planner/coursegroups/{course_group}/courses/{course}/homework/ — individual assignments. Set current_grade to "-1/100" for ungraded items.
  6. (Optional) POST /planner/events/ — non-class calendar items (study sessions, office hours). Events have no class dependency.
  7. (Optional) POST /planner/reminders/ — push/email reminders attached to exactly one parent (event, homework, or course).
  8. (Optional) POST /planner/notes/, POST /planner/attachments/ — rich-text notes and file uploads linked to a single parent entity each.

Bulk import via /importexport/import/

For anything beyond a handful of rows, prefer the bulk-import path over N individual POSTs. Produce a single JSON file matching the Export component schema (the same shape returned by GET /importexport/export/) and upload it as a multipart form field named file[] to POST /importexport/import/. The benefits:

  • One atomic call, no token-expiry exposure mid-import.
  • Predictable shape — every relationship is expressed as an integer id within the same file, so there is no GET-then-POST dance.
  • Forward-compatibility shims (e.g. legacy reminder types) are applied in one place.

The Export schema in this document is the canonical bulk-import target — its keys (course_groups, courses, course_schedules, categories, homework, events, reminders, notes, materials, material_groups, external_calendars) and per-row fields are exactly what the importer accepts. See the bulk_syllabus_import example on the /importexport/import/ operation for a trimmed payload.

Each CourseSchedule has 14 day-time fields (sun_start_time, sun_end_time, … sat_end_time). Omitted day-times default to 12:00:00, which may collide with real classes. Send 00:00:00 for off-days to make the schedule unambiguous.

Computing class meeting dates

There is no endpoint that returns enumerated class meeting occurrences — the client computes them itself from the CourseSchedule definition. To list every meeting of a class:

  1. Walk dates from course.start_date to course.end_date.
  2. For each date, look up the weekday position in course_schedule.days_of_week (a 7-character 0/1 string starting Sunday); skip the date if that position is 0.
  3. Skip the date if it appears in course.exceptions or the parent course_group.exceptions (both CSVs of YYYYMMDD strings, e.g. "20260309,20260310" for spring break).
  4. The meeting's start/end times are <day>_start_time / <day>_end_time on the schedule (mon_start_time, tue_end_time, etc.), interpreted in the user's settings.time_zone.

This is what the Flutter client does.

Common pitfalls

A few shapes that return 2xx but produce semantically wrong data:

  • One CourseSchedule per Course. A schedule supports a different start and end time on each day of the week, so a class that meets MWF at 10:00 and Thursdays at 14:00 fits cleanly in one schedule. Use separate Courses (e.g. "BIO 151 — Lecture" and "BIO 151 — Lab") only when a class has alternating-week patterns, or two separate meeting blocks on the same weekday. The API rejects a second schedule on a Course.
  • Biweekly CourseSchedule meetings. Helium has no biweekly CourseSchedule recurrence — use Course.exceptions (YYYYMMDD CSV) to skip every alternate week from a normal weekly schedule.
  • No recurrence on Homework or Events. A weekly problem set across a 15-week term must be 15 separate Homework rows; a weekly office-hour Event likewise. Three ways to handle this:
    1. Enumerate the rows up front and POST each one.
    2. Use the bulk-import path (preferred for fresh-term imports) — one JSON file, one call.
    3. For incremental additions mid-term, create a canonical row, then use the clone endpoints (POST /planner/coursegroups/{cg}/courses/{c}/homework/{id}/clone/ or POST /planner/events/{id}/clone/, both with no body) to duplicate it — clones copy reminders too — then PATCH each clone with its new start / end. This is what the Flutter client does.
  • No multi-part assignment grouping. A "draft + final" or "post + reply" pair is two independent Homework rows with descriptive titles ("Essay 1 — Draft", "Essay 1 — Final"). Helium has no parent/child or group concept for assignments.
  • Idempotency. Helium does not enforce uniqueness on title for CourseGroups or Courses — duplicates are valid. Always reference an existing entity by its id, never by its title alone. Before a re-import, GET /planner/coursegroups/ (and the nested Course list) and reuse the existing id for any entity you intend to keep; titles are display names, not identifiers.

auth.token

login

Authenticate the user with email and password and return an access/refresh token pair.

Request Body schema:
required
username
required
string (Email) non-empty

The user's email address.

password
required
string non-empty

The password for the user.

Responses

Request samples

Content type

The username field holds the user's email address.

{
  • "username": "student@example.com",
  • "password": "correct horse battery staple"
}

Response samples

Content type
application/json
{
  • "access": "string",
  • "refresh": "string"
}

logout

Takes a token and blacklists it.

Request Body schema:
required
refresh
required
string non-empty

Responses

Request samples

Content type
{
  • "refresh": "string"
}

oauth_login

Authenticate or create a user via OAuth Sign-In using a Firebase ID token.

Supports Google and Apple Sign-In. If the user's email already exists in the system, they will be logged in. If not, a new account will be created with is_active=True (no email verification needed).

Authorizations:
jwtAuthNone
Request Body schema:
required
id_token
required
string non-empty

Firebase ID token obtained from OAuth Sign-In on the client.

provider
required
string
Enum: "google" "apple"

The OAuth provider (google or apple).

  • google - Google
  • apple - Apple

Responses

Request samples

Content type
{
  • "id_token": "string",
  • "provider": "google"
}

Response samples

Content type
application/json
{
  • "access": "string",
  • "refresh": "string"
}

token_refresh

Exchange a valid refresh token for a new access token (and rotate the refresh token).

A 401 response with body {"code": "token_not_valid", ...} on any other endpoint means the access token has expired. POST the current refresh token here, replace the access token with the response's access, and retry the original request. The refresh endpoint also rotates the refresh token, so always store the most recently returned refresh value and use it on the next refresh call.

For long-running scripts, refresh proactively a minute or two before access_token_lifetime_minutes elapses to avoid an extra round-trip per request.

Example refresh cycle (pseudo-curl):

# 1. Initial login
curl -X POST https://api.heliumedu.com/auth/token/ \
  -H 'Content-Type: application/json' \
  -d '{"username": "student@example.com", "password": "..."}'
# Returns: {"access": "<A1>", "refresh": "<R1>"}

# 2. Refresh shortly before the access token expires
curl -X POST https://api.heliumedu.com/auth/token/refresh/ \
  -H 'Content-Type: application/json' \
  -d '{"refresh": "<R1>"}'
# Returns: {"access": "<A2>", "refresh": "<R2>"} -- use R2 next, NOT R1

# 3. Continue with Authorization: Bearer <A2>
Request Body schema:
required
refresh
required
string non-empty

Responses

Request samples

Content type
{
  • "refresh": "string"
}

Response samples

Content type
application/json
{
  • "refresh": "string",
  • "access": "string"
}

auth

auth_user_retrieve

Return the authenticated user instance, including settings details.

Authorizations:
jwtAuth

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "username": "string",
  • "email": "user@example.com",
  • "email_changing": "user@example.com",
  • "profile": {
    },
  • "settings": {
    },
  • "oauth_providers": [
    ],
  • "has_usable_password": true,
  • "has_oauth_providers": true
}

auth_user_update

Update the authenticated user instance. This endpoint only updates the fields given (i.e. no need to PATCH for partials data).

Authorizations:
jwtAuth
Request Body schema:
required
username
string <= 255 characters ^[\w.+-]+$

A unique name used to login to the system.

email
required
string <email> [ 1 .. 254 ] characters

A unique and valid email address.

old_password
string non-empty

The current password for the user (required when changing password or email).

password
string non-empty

A password to set for the user.

Responses

Request samples

Content type
{
  • "username": "string",
  • "email": "user@example.com",
  • "old_password": "string",
  • "password": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "username": "string",
  • "email": "user@example.com",
  • "email_changing": "user@example.com",
  • "profile": {
    },
  • "settings": {
    },
  • "oauth_providers": [
    ],
  • "has_usable_password": true,
  • "has_oauth_providers": true
}

auth_user_delete_destroy

Permanently delete the authenticated user's account and all associated data (courses, homework, events, attachments, reminders, notes, schedules, external calendars). This operation is irreversible.

For users with a usable password, the request body must include the user's current password to confirm the action:

{"password": "<current-password>"}

OAuth-only users (no usable password) may submit an empty body; the access token already proves authentication.

The response is immediate. Outstanding refresh tokens are blacklisted before returning, but the actual data deletion runs in the background — accounts and their data may persist for a short window after the response.

Authorizations:
jwtAuth

Responses

forgot_password

Reset the password for the user instance associated with the given email. Always responds with 202 (no body) regardless of whether the email is registered.

Authorizations:
jwtAuthNone
Request Body schema:
required
email
required
string non-empty

The email for the user.

Responses

Request samples

Content type
{
  • "email": "string"
}

auth_user_settings_update

Update the authenticated user's settings. This endpoint only updates the fields given (i.e. no need to PATCH for partials data).

Authorizations:
jwtAuth
Request Body schema:
time_zone
string
Enum: "Africa/Abidjan" "Africa/Accra" "Africa/Addis_Ababa" "Africa/Algiers" "Africa/Asmara" "Africa/Bamako" "Africa/Bangui" "Africa/Banjul" "Africa/Bissau" "Africa/Blantyre" "Africa/Brazzaville" "Africa/Bujumbura" "Africa/Cairo" "Africa/Casablanca" "Africa/Ceuta" "Africa/Conakry" "Africa/Dakar" "Africa/Dar_es_Salaam" "Africa/Djibouti" "Africa/Douala" "Africa/El_Aaiun" "Africa/Freetown" "Africa/Gaborone" "Africa/Harare" "Africa/Johannesburg" "Africa/Juba" "Africa/Kampala" "Africa/Khartoum" "Africa/Kigali" "Africa/Kinshasa" "Africa/Lagos" "Africa/Libreville" "Africa/Lome" "Africa/Luanda" "Africa/Lubumbashi" "Africa/Lusaka" "Africa/Malabo" "Africa/Maputo" "Africa/Maseru" "Africa/Mbabane" "Africa/Mogadishu" "Africa/Monrovia" "Africa/Nairobi" "Africa/Ndjamena" "Africa/Niamey" "Africa/Nouakchott" "Africa/Ouagadougou" "Africa/Porto-Novo" "Africa/Sao_Tome" "Africa/Tripoli" "Africa/Tunis" "Africa/Windhoek" "America/Adak" "America/Anchorage" "America/Anguilla" "America/Antigua" "America/Araguaina" "America/Argentina/Buenos_Aires" "America/Argentina/Catamarca" "America/Argentina/Cordoba" "America/Argentina/Jujuy" "America/Argentina/La_Rioja" "America/Argentina/Mendoza" "America/Argentina/Rio_Gallegos" "America/Argentina/Salta" "America/Argentina/San_Juan" "America/Argentina/San_Luis" "America/Argentina/Tucuman" "America/Argentina/Ushuaia" "America/Aruba" "America/Asuncion" "America/Atikokan" "America/Bahia" "America/Bahia_Banderas" "America/Barbados" "America/Belem" "America/Belize" "America/Blanc-Sablon" "America/Boa_Vista" "America/Bogota" "America/Boise" "America/Cambridge_Bay" "America/Campo_Grande" "America/Cancun" "America/Caracas" "America/Cayenne" "America/Cayman" "America/Chicago" "America/Chihuahua" "America/Ciudad_Juarez" "America/Costa_Rica" "America/Coyhaique" "America/Creston" "America/Cuiaba" "America/Curacao" "America/Danmarkshavn" "America/Dawson" "America/Dawson_Creek" "America/Denver" "America/Detroit" "America/Dominica" "America/Edmonton" "America/Eirunepe" "America/El_Salvador" "America/Fort_Nelson" "America/Fortaleza" "America/Glace_Bay" "America/Goose_Bay" "America/Grand_Turk" "America/Grenada" "America/Guadeloupe" "America/Guatemala" "America/Guayaquil" "America/Guyana" "America/Halifax" "America/Havana" "America/Hermosillo" "America/Indiana/Indianapolis" "America/Indiana/Knox" "America/Indiana/Marengo" "America/Indiana/Petersburg" "America/Indiana/Tell_City" "America/Indiana/Vevay" "America/Indiana/Vincennes" "America/Indiana/Winamac" "America/Inuvik" "America/Iqaluit" "America/Jamaica" "America/Juneau" "America/Kentucky/Louisville" "America/Kentucky/Monticello" "America/Kralendijk" "America/La_Paz" "America/Lima" "America/Los_Angeles" "America/Lower_Princes" "America/Maceio" "America/Managua" "America/Manaus" "America/Marigot" "America/Martinique" "America/Matamoros" "America/Mazatlan" "America/Menominee" "America/Merida" "America/Metlakatla" "America/Mexico_City" "America/Miquelon" "America/Moncton" "America/Monterrey" "America/Montevideo" "America/Montserrat" "America/Nassau" "America/New_York" "America/Nome" "America/Noronha" "America/North_Dakota/Beulah" "America/North_Dakota/Center" "America/North_Dakota/New_Salem" "America/Nuuk" "America/Ojinaga" "America/Panama" "America/Paramaribo" "America/Phoenix" "America/Port-au-Prince" "America/Port_of_Spain" "America/Porto_Velho" "America/Puerto_Rico" "America/Punta_Arenas" "America/Rankin_Inlet" "America/Recife" "America/Regina" "America/Resolute" "America/Rio_Branco" "America/Santarem" "America/Santiago" "America/Santo_Domingo" "America/Sao_Paulo" "America/Scoresbysund" "America/Sitka" "America/St_Barthelemy" "America/St_Johns" "America/St_Kitts" "America/St_Lucia" "America/St_Thomas" "America/St_Vincent" "America/Swift_Current" "America/Tegucigalpa" "America/Thule" "America/Tijuana" "America/Toronto" "America/Tortola" "America/Vancouver" "America/Whitehorse" "America/Winnipeg" "America/Yakutat" "Antarctica/Casey" "Antarctica/Davis" "Antarctica/DumontDUrville" "Antarctica/Macquarie" "Antarctica/Mawson" "Antarctica/McMurdo" "Antarctica/Palmer" "Antarctica/Rothera" "Antarctica/Syowa" "Antarctica/Troll" "Antarctica/Vostok" "Arctic/Longyearbyen" "Asia/Aden" "Asia/Almaty" "Asia/Amman" "Asia/Anadyr" "Asia/Aqtau" "Asia/Aqtobe" "Asia/Ashgabat" "Asia/Atyrau" "Asia/Baghdad" "Asia/Bahrain" "Asia/Baku" "Asia/Bangkok" "Asia/Barnaul" "Asia/Beirut" "Asia/Bishkek" "Asia/Brunei" "Asia/Chita" "Asia/Colombo" "Asia/Damascus" "Asia/Dhaka" "Asia/Dili" "Asia/Dubai" "Asia/Dushanbe" "Asia/Famagusta" "Asia/Gaza" "Asia/Hebron" "Asia/Ho_Chi_Minh" "Asia/Hong_Kong" "Asia/Hovd" "Asia/Irkutsk" "Asia/Jakarta" "Asia/Jayapura" "Asia/Jerusalem" "Asia/Kabul" "Asia/Kamchatka" "Asia/Karachi" "Asia/Kathmandu" "Asia/Khandyga" "Asia/Kolkata" "Asia/Krasnoyarsk" "Asia/Kuala_Lumpur" "Asia/Kuching" "Asia/Kuwait" "Asia/Macau" "Asia/Magadan" "Asia/Makassar" "Asia/Manila" "Asia/Muscat" "Asia/Nicosia" "Asia/Novokuznetsk" "Asia/Novosibirsk" "Asia/Omsk" "Asia/Oral" "Asia/Phnom_Penh" "Asia/Pontianak" "Asia/Pyongyang" "Asia/Qatar" "Asia/Qostanay" "Asia/Qyzylorda" "Asia/Riyadh" "Asia/Sakhalin" "Asia/Samarkand" "Asia/Seoul" "Asia/Shanghai" "Asia/Singapore" "Asia/Srednekolymsk" "Asia/Taipei" "Asia/Tashkent" "Asia/Tbilisi" "Asia/Tehran" "Asia/Thimphu" "Asia/Tokyo" "Asia/Tomsk" "Asia/Ulaanbaatar" "Asia/Urumqi" "Asia/Ust-Nera" "Asia/Vientiane" "Asia/Vladivostok" "Asia/Yakutsk" "Asia/Yangon" "Asia/Yekaterinburg" "Asia/Yerevan" "Atlantic/Azores" "Atlantic/Bermuda" "Atlantic/Canary" "Atlantic/Cape_Verde" "Atlantic/Faroe" "Atlantic/Madeira" "Atlantic/Reykjavik" "Atlantic/South_Georgia" "Atlantic/St_Helena" "Atlantic/Stanley" "Australia/Adelaide" "Australia/Brisbane" "Australia/Broken_Hill" "Australia/Darwin" "Australia/Eucla" "Australia/Hobart" "Australia/Lindeman" "Australia/Lord_Howe" "Australia/Melbourne" "Australia/Perth" "Australia/Sydney" "Canada/Atlantic" "Canada/Central" "Canada/Eastern" "Canada/Mountain" "Canada/Newfoundland" "Canada/Pacific" "Europe/Amsterdam" "Europe/Andorra" "Europe/Astrakhan" "Europe/Athens" "Europe/Belgrade" "Europe/Berlin" "Europe/Bratislava" "Europe/Brussels" "Europe/Bucharest" "Europe/Budapest" "Europe/Busingen" "Europe/Chisinau" "Europe/Copenhagen" "Europe/Dublin" "Europe/Gibraltar" "Europe/Guernsey" "Europe/Helsinki" "Europe/Isle_of_Man" "Europe/Istanbul" "Europe/Jersey" "Europe/Kaliningrad" "Europe/Kirov" "Europe/Kyiv" "Europe/Lisbon" "Europe/Ljubljana" "Europe/London" "Europe/Luxembourg" "Europe/Madrid" "Europe/Malta" "Europe/Mariehamn" "Europe/Minsk" "Europe/Monaco" "Europe/Moscow" "Europe/Oslo" "Europe/Paris" "Europe/Podgorica" "Europe/Prague" "Europe/Riga" "Europe/Rome" "Europe/Samara" "Europe/San_Marino" "Europe/Sarajevo" "Europe/Saratov" "Europe/Simferopol" "Europe/Skopje" "Europe/Sofia" "Europe/Stockholm" "Europe/Tallinn" "Europe/Tirane" "Europe/Ulyanovsk" "Europe/Vaduz" "Europe/Vatican" "Europe/Vienna" "Europe/Vilnius" "Europe/Volgograd" "Europe/Warsaw" "Europe/Zagreb" "Europe/Zurich" "GMT" "Indian/Antananarivo" "Indian/Chagos" "Indian/Christmas" "Indian/Cocos" "Indian/Comoro" "Indian/Kerguelen" "Indian/Mahe" "Indian/Maldives" "Indian/Mauritius" "Indian/Mayotte" "Indian/Reunion" "Pacific/Apia" "Pacific/Auckland" "Pacific/Bougainville" "Pacific/Chatham" "Pacific/Chuuk" "Pacific/Easter" "Pacific/Efate" "Pacific/Fakaofo" "Pacific/Fiji" "Pacific/Funafuti" "Pacific/Galapagos" "Pacific/Gambier" "Pacific/Guadalcanal" "Pacific/Guam" "Pacific/Honolulu" "Pacific/Kanton" "Pacific/Kiritimati" "Pacific/Kosrae" "Pacific/Kwajalein" "Pacific/Majuro" "Pacific/Marquesas" "Pacific/Midway" "Pacific/Nauru" "Pacific/Niue" "Pacific/Norfolk" "Pacific/Noumea" "Pacific/Pago_Pago" "Pacific/Palau" "Pacific/Pitcairn" "Pacific/Pohnpei" "Pacific/Port_Moresby" "Pacific/Rarotonga" "Pacific/Saipan" "Pacific/Tahiti" "Pacific/Tarawa" "Pacific/Tongatapu" "Pacific/Wake" "Pacific/Wallis" "US/Alaska" "US/Arizona" "US/Central" "US/Eastern" "US/Hawaii" "US/Mountain" "US/Pacific" "UTC"

A valid time zone choice.

  • Africa/Abidjan - Abidjan
  • Africa/Accra - Accra
  • Africa/Addis_Ababa - Addis_Ababa
  • Africa/Algiers - Algiers
  • Africa/Asmara - Asmara
  • Africa/Bamako - Bamako
  • Africa/Bangui - Bangui
  • Africa/Banjul - Banjul
  • Africa/Bissau - Bissau
  • Africa/Blantyre - Blantyre
  • Africa/Brazzaville - Brazzaville
  • Africa/Bujumbura - Bujumbura
  • Africa/Cairo - Cairo
  • Africa/Casablanca - Casablanca
  • Africa/Ceuta - Ceuta
  • Africa/Conakry - Conakry
  • Africa/Dakar - Dakar
  • Africa/Dar_es_Salaam - Dar_es_Salaam
  • Africa/Djibouti - Djibouti
  • Africa/Douala - Douala
  • Africa/El_Aaiun - El_Aaiun
  • Africa/Freetown - Freetown
  • Africa/Gaborone - Gaborone
  • Africa/Harare - Harare
  • Africa/Johannesburg - Johannesburg
  • Africa/Juba - Juba
  • Africa/Kampala - Kampala
  • Africa/Khartoum - Khartoum
  • Africa/Kigali - Kigali
  • Africa/Kinshasa - Kinshasa
  • Africa/Lagos - Lagos
  • Africa/Libreville - Libreville
  • Africa/Lome - Lome
  • Africa/Luanda - Luanda
  • Africa/Lubumbashi - Lubumbashi
  • Africa/Lusaka - Lusaka
  • Africa/Malabo - Malabo
  • Africa/Maputo - Maputo
  • Africa/Maseru - Maseru
  • Africa/Mbabane - Mbabane
  • Africa/Mogadishu - Mogadishu
  • Africa/Monrovia - Monrovia
  • Africa/Nairobi - Nairobi
  • Africa/Ndjamena - Ndjamena
  • Africa/Niamey - Niamey
  • Africa/Nouakchott - Nouakchott
  • Africa/Ouagadougou - Ouagadougou
  • Africa/Porto-Novo - Porto-Novo
  • Africa/Sao_Tome - Sao_Tome
  • Africa/Tripoli - Tripoli
  • Africa/Tunis - Tunis
  • Africa/Windhoek - Windhoek
  • America/Adak - Adak
  • America/Anchorage - Anchorage
  • America/Anguilla - Anguilla
  • America/Antigua - Antigua
  • America/Araguaina - Araguaina
  • America/Argentina/Buenos_Aires - Argentina - Buenos_Aires
  • America/Argentina/Catamarca - Argentina - Catamarca
  • America/Argentina/Cordoba - Argentina - Cordoba
  • America/Argentina/Jujuy - Argentina - Jujuy
  • America/Argentina/La_Rioja - Argentina - La_Rioja
  • America/Argentina/Mendoza - Argentina - Mendoza
  • America/Argentina/Rio_Gallegos - Argentina - Rio_Gallegos
  • America/Argentina/Salta - Argentina - Salta
  • America/Argentina/San_Juan - Argentina - San_Juan
  • America/Argentina/San_Luis - Argentina - San_Luis
  • America/Argentina/Tucuman - Argentina - Tucuman
  • America/Argentina/Ushuaia - Argentina - Ushuaia
  • America/Aruba - Aruba
  • America/Asuncion - Asuncion
  • America/Atikokan - Atikokan
  • America/Bahia - Bahia
  • America/Bahia_Banderas - Bahia_Banderas
  • America/Barbados - Barbados
  • America/Belem - Belem
  • America/Belize - Belize
  • America/Blanc-Sablon - Blanc-Sablon
  • America/Boa_Vista - Boa_Vista
  • America/Bogota - Bogota
  • America/Boise - Boise
  • America/Cambridge_Bay - Cambridge_Bay
  • America/Campo_Grande - Campo_Grande
  • America/Cancun - Cancun
  • America/Caracas - Caracas
  • America/Cayenne - Cayenne
  • America/Cayman - Cayman
  • America/Chicago - Chicago
  • America/Chihuahua - Chihuahua
  • America/Ciudad_Juarez - Ciudad_Juarez
  • America/Costa_Rica - Costa_Rica
  • America/Coyhaique - Coyhaique
  • America/Creston - Creston
  • America/Cuiaba - Cuiaba
  • America/Curacao - Curacao
  • America/Danmarkshavn - Danmarkshavn
  • America/Dawson - Dawson
  • America/Dawson_Creek - Dawson_Creek
  • America/Denver - Denver
  • America/Detroit - Detroit
  • America/Dominica - Dominica
  • America/Edmonton - Edmonton
  • America/Eirunepe - Eirunepe
  • America/El_Salvador - El_Salvador
  • America/Fort_Nelson - Fort_Nelson
  • America/Fortaleza - Fortaleza
  • America/Glace_Bay - Glace_Bay
  • America/Goose_Bay - Goose_Bay
  • America/Grand_Turk - Grand_Turk
  • America/Grenada - Grenada
  • America/Guadeloupe - Guadeloupe
  • America/Guatemala - Guatemala
  • America/Guayaquil - Guayaquil
  • America/Guyana - Guyana
  • America/Halifax - Halifax
  • America/Havana - Havana
  • America/Hermosillo - Hermosillo
  • America/Indiana/Indianapolis - Indiana - Indianapolis
  • America/Indiana/Knox - Indiana - Knox
  • America/Indiana/Marengo - Indiana - Marengo
  • America/Indiana/Petersburg - Indiana - Petersburg
  • America/Indiana/Tell_City - Indiana - Tell_City
  • America/Indiana/Vevay - Indiana - Vevay
  • America/Indiana/Vincennes - Indiana - Vincennes
  • America/Indiana/Winamac - Indiana - Winamac
  • America/Inuvik - Inuvik
  • America/Iqaluit - Iqaluit
  • America/Jamaica - Jamaica
  • America/Juneau - Juneau
  • America/Kentucky/Louisville - Kentucky - Louisville
  • America/Kentucky/Monticello - Kentucky - Monticello
  • America/Kralendijk - Kralendijk
  • America/La_Paz - La_Paz
  • America/Lima - Lima
  • America/Los_Angeles - Los_Angeles
  • America/Lower_Princes - Lower_Princes
  • America/Maceio - Maceio
  • America/Managua - Managua
  • America/Manaus - Manaus
  • America/Marigot - Marigot
  • America/Martinique - Martinique
  • America/Matamoros - Matamoros
  • America/Mazatlan - Mazatlan
  • America/Menominee - Menominee
  • America/Merida - Merida
  • America/Metlakatla - Metlakatla
  • America/Mexico_City - Mexico_City
  • America/Miquelon - Miquelon
  • America/Moncton - Moncton
  • America/Monterrey - Monterrey
  • America/Montevideo - Montevideo
  • America/Montserrat - Montserrat
  • America/Nassau - Nassau
  • America/New_York - New_York
  • America/Nome - Nome
  • America/Noronha - Noronha
  • America/North_Dakota/Beulah - North_Dakota - Beulah
  • America/North_Dakota/Center - North_Dakota - Center
  • America/North_Dakota/New_Salem - North_Dakota - New_Salem
  • America/Nuuk - Nuuk
  • America/Ojinaga - Ojinaga
  • America/Panama - Panama
  • America/Paramaribo - Paramaribo
  • America/Phoenix - Phoenix
  • America/Port-au-Prince - Port-au-Prince
  • America/Port_of_Spain - Port_of_Spain
  • America/Porto_Velho - Porto_Velho
  • America/Puerto_Rico - Puerto_Rico
  • America/Punta_Arenas - Punta_Arenas
  • America/Rankin_Inlet - Rankin_Inlet
  • America/Recife - Recife
  • America/Regina - Regina
  • America/Resolute - Resolute
  • America/Rio_Branco - Rio_Branco
  • America/Santarem - Santarem
  • America/Santiago - Santiago
  • America/Santo_Domingo - Santo_Domingo
  • America/Sao_Paulo - Sao_Paulo
  • America/Scoresbysund - Scoresbysund
  • America/Sitka - Sitka
  • America/St_Barthelemy - St_Barthelemy
  • America/St_Johns - St_Johns
  • America/St_Kitts - St_Kitts
  • America/St_Lucia - St_Lucia
  • America/St_Thomas - St_Thomas
  • America/St_Vincent - St_Vincent
  • America/Swift_Current - Swift_Current
  • America/Tegucigalpa - Tegucigalpa
  • America/Thule - Thule
  • America/Tijuana - Tijuana
  • America/Toronto - Toronto
  • America/Tortola - Tortola
  • America/Vancouver - Vancouver
  • America/Whitehorse - Whitehorse
  • America/Winnipeg - Winnipeg
  • America/Yakutat - Yakutat
  • Antarctica/Casey - Casey
  • Antarctica/Davis - Davis
  • Antarctica/DumontDUrville - DumontDUrville
  • Antarctica/Macquarie - Macquarie
  • Antarctica/Mawson - Mawson
  • Antarctica/McMurdo - McMurdo
  • Antarctica/Palmer - Palmer
  • Antarctica/Rothera - Rothera
  • Antarctica/Syowa - Syowa
  • Antarctica/Troll - Troll
  • Antarctica/Vostok - Vostok
  • Arctic/Longyearbyen - Longyearbyen
  • Asia/Aden - Aden
  • Asia/Almaty - Almaty
  • Asia/Amman - Amman
  • Asia/Anadyr - Anadyr
  • Asia/Aqtau - Aqtau
  • Asia/Aqtobe - Aqtobe
  • Asia/Ashgabat - Ashgabat
  • Asia/Atyrau - Atyrau
  • Asia/Baghdad - Baghdad
  • Asia/Bahrain - Bahrain
  • Asia/Baku - Baku
  • Asia/Bangkok - Bangkok
  • Asia/Barnaul - Barnaul
  • Asia/Beirut - Beirut
  • Asia/Bishkek - Bishkek
  • Asia/Brunei - Brunei
  • Asia/Chita - Chita
  • Asia/Colombo - Colombo
  • Asia/Damascus - Damascus
  • Asia/Dhaka - Dhaka
  • Asia/Dili - Dili
  • Asia/Dubai - Dubai
  • Asia/Dushanbe - Dushanbe
  • Asia/Famagusta - Famagusta
  • Asia/Gaza - Gaza
  • Asia/Hebron - Hebron
  • Asia/Ho_Chi_Minh - Ho_Chi_Minh
  • Asia/Hong_Kong - Hong_Kong
  • Asia/Hovd - Hovd
  • Asia/Irkutsk - Irkutsk
  • Asia/Jakarta - Jakarta
  • Asia/Jayapura - Jayapura
  • Asia/Jerusalem - Jerusalem
  • Asia/Kabul - Kabul
  • Asia/Kamchatka - Kamchatka
  • Asia/Karachi - Karachi
  • Asia/Kathmandu - Kathmandu
  • Asia/Khandyga - Khandyga
  • Asia/Kolkata - Kolkata
  • Asia/Krasnoyarsk - Krasnoyarsk
  • Asia/Kuala_Lumpur - Kuala_Lumpur
  • Asia/Kuching - Kuching
  • Asia/Kuwait - Kuwait
  • Asia/Macau - Macau
  • Asia/Magadan - Magadan
  • Asia/Makassar - Makassar
  • Asia/Manila - Manila
  • Asia/Muscat - Muscat
  • Asia/Nicosia - Nicosia
  • Asia/Novokuznetsk - Novokuznetsk
  • Asia/Novosibirsk - Novosibirsk
  • Asia/Omsk - Omsk
  • Asia/Oral - Oral
  • Asia/Phnom_Penh - Phnom_Penh
  • Asia/Pontianak - Pontianak
  • Asia/Pyongyang - Pyongyang
  • Asia/Qatar - Qatar
  • Asia/Qostanay - Qostanay
  • Asia/Qyzylorda - Qyzylorda
  • Asia/Riyadh - Riyadh
  • Asia/Sakhalin - Sakhalin
  • Asia/Samarkand - Samarkand
  • Asia/Seoul - Seoul
  • Asia/Shanghai - Shanghai
  • Asia/Singapore - Singapore
  • Asia/Srednekolymsk - Srednekolymsk
  • Asia/Taipei - Taipei
  • Asia/Tashkent - Tashkent
  • Asia/Tbilisi - Tbilisi
  • Asia/Tehran - Tehran
  • Asia/Thimphu - Thimphu
  • Asia/Tokyo - Tokyo
  • Asia/Tomsk - Tomsk
  • Asia/Ulaanbaatar - Ulaanbaatar
  • Asia/Urumqi - Urumqi
  • Asia/Ust-Nera - Ust-Nera
  • Asia/Vientiane - Vientiane
  • Asia/Vladivostok - Vladivostok
  • Asia/Yakutsk - Yakutsk
  • Asia/Yangon - Yangon
  • Asia/Yekaterinburg - Yekaterinburg
  • Asia/Yerevan - Yerevan
  • Atlantic/Azores - Azores
  • Atlantic/Bermuda - Bermuda
  • Atlantic/Canary - Canary
  • Atlantic/Cape_Verde - Cape_Verde
  • Atlantic/Faroe - Faroe
  • Atlantic/Madeira - Madeira
  • Atlantic/Reykjavik - Reykjavik
  • Atlantic/South_Georgia - South_Georgia
  • Atlantic/St_Helena - St_Helena
  • Atlantic/Stanley - Stanley
  • Australia/Adelaide - Adelaide
  • Australia/Brisbane - Brisbane
  • Australia/Broken_Hill - Broken_Hill
  • Australia/Darwin - Darwin
  • Australia/Eucla - Eucla
  • Australia/Hobart - Hobart
  • Australia/Lindeman - Lindeman
  • Australia/Lord_Howe - Lord_Howe
  • Australia/Melbourne - Melbourne
  • Australia/Perth - Perth
  • Australia/Sydney - Sydney
  • Canada/Atlantic - Atlantic
  • Canada/Central - Central
  • Canada/Eastern - Eastern
  • Canada/Mountain - Mountain
  • Canada/Newfoundland - Newfoundland
  • Canada/Pacific - Pacific
  • Europe/Amsterdam - Amsterdam
  • Europe/Andorra - Andorra
  • Europe/Astrakhan - Astrakhan
  • Europe/Athens - Athens
  • Europe/Belgrade - Belgrade
  • Europe/Berlin - Berlin
  • Europe/Bratislava - Bratislava
  • Europe/Brussels - Brussels
  • Europe/Bucharest - Bucharest
  • Europe/Budapest - Budapest
  • Europe/Busingen - Busingen
  • Europe/Chisinau - Chisinau
  • Europe/Copenhagen - Copenhagen
  • Europe/Dublin - Dublin
  • Europe/Gibraltar - Gibraltar
  • Europe/Guernsey - Guernsey
  • Europe/Helsinki - Helsinki
  • Europe/Isle_of_Man - Isle_of_Man
  • Europe/Istanbul - Istanbul
  • Europe/Jersey - Jersey
  • Europe/Kaliningrad - Kaliningrad
  • Europe/Kirov - Kirov
  • Europe/Kyiv - Kyiv
  • Europe/Lisbon - Lisbon
  • Europe/Ljubljana - Ljubljana
  • Europe/London - London
  • Europe/Luxembourg - Luxembourg
  • Europe/Madrid - Madrid
  • Europe/Malta - Malta
  • Europe/Mariehamn - Mariehamn
  • Europe/Minsk - Minsk
  • Europe/Monaco - Monaco
  • Europe/Moscow - Moscow
  • Europe/Oslo - Oslo
  • Europe/Paris - Paris
  • Europe/Podgorica - Podgorica
  • Europe/Prague - Prague
  • Europe/Riga - Riga
  • Europe/Rome - Rome
  • Europe/Samara - Samara
  • Europe/San_Marino - San_Marino
  • Europe/Sarajevo - Sarajevo
  • Europe/Saratov - Saratov
  • Europe/Simferopol - Simferopol
  • Europe/Skopje - Skopje
  • Europe/Sofia - Sofia
  • Europe/Stockholm - Stockholm
  • Europe/Tallinn - Tallinn
  • Europe/Tirane - Tirane
  • Europe/Ulyanovsk - Ulyanovsk
  • Europe/Vaduz - Vaduz
  • Europe/Vatican - Vatican
  • Europe/Vienna - Vienna
  • Europe/Vilnius - Vilnius
  • Europe/Volgograd - Volgograd
  • Europe/Warsaw - Warsaw
  • Europe/Zagreb - Zagreb
  • Europe/Zurich - Zurich
  • GMT - GMT
  • Indian/Antananarivo - Antananarivo
  • Indian/Chagos - Chagos
  • Indian/Christmas - Christmas
  • Indian/Cocos - Cocos
  • Indian/Comoro - Comoro
  • Indian/Kerguelen - Kerguelen
  • Indian/Mahe - Mahe
  • Indian/Maldives - Maldives
  • Indian/Mauritius - Mauritius
  • Indian/Mayotte - Mayotte
  • Indian/Reunion - Reunion
  • Pacific/Apia - Apia
  • Pacific/Auckland - Auckland
  • Pacific/Bougainville - Bougainville
  • Pacific/Chatham - Chatham
  • Pacific/Chuuk - Chuuk
  • Pacific/Easter - Easter
  • Pacific/Efate - Efate
  • Pacific/Fakaofo - Fakaofo
  • Pacific/Fiji - Fiji
  • Pacific/Funafuti - Funafuti
  • Pacific/Galapagos - Galapagos
  • Pacific/Gambier - Gambier
  • Pacific/Guadalcanal - Guadalcanal
  • Pacific/Guam - Guam
  • Pacific/Honolulu - Honolulu
  • Pacific/Kanton - Kanton
  • Pacific/Kiritimati - Kiritimati
  • Pacific/Kosrae - Kosrae
  • Pacific/Kwajalein - Kwajalein
  • Pacific/Majuro - Majuro
  • Pacific/Marquesas - Marquesas
  • Pacific/Midway - Midway
  • Pacific/Nauru - Nauru
  • Pacific/Niue - Niue
  • Pacific/Norfolk - Norfolk
  • Pacific/Noumea - Noumea
  • Pacific/Pago_Pago - Pago_Pago
  • Pacific/Palau - Palau
  • Pacific/Pitcairn - Pitcairn
  • Pacific/Pohnpei - Pohnpei
  • Pacific/Port_Moresby - Port_Moresby
  • Pacific/Rarotonga - Rarotonga
  • Pacific/Saipan - Saipan
  • Pacific/Tahiti - Tahiti
  • Pacific/Tarawa - Tarawa
  • Pacific/Tongatapu - Tongatapu
  • Pacific/Wake - Wake
  • Pacific/Wallis - Wallis
  • US/Alaska - Alaska
  • US/Arizona - Arizona
  • US/Central - Central
  • US/Eastern - Eastern
  • US/Hawaii - Hawaii
  • US/Mountain - Mountain
  • US/Pacific - Pacific
  • UTC - UTC
default_view
integer [ 0 .. 9223372036854776000 ]
Enum: 0 1 2 3 4

A valid default calendar view choice.

  • 0 - Month
  • 1 - Week
  • 2 - Day
  • 3 - List
  • 4 - Agenda
week_starts_on
integer [ 0 .. 9223372036854776000 ]
Enum: 0 1 2 3 4 5 6

A valid day on which the week should start choice.

  • 0 - Sunday
  • 1 - Monday
  • 2 - Tuesday
  • 3 - Wednesday
  • 4 - Thursday
  • 5 - Friday
  • 6 - Saturday
show_getting_started
boolean

Whether the "Getting Started" dialog should be shown.

whats_new_version_seen
integer <int64> [ 0 .. 9223372036854776000 ]

The "What's New" dialog version the user has seen.

events_color
string [ 1 .. 7 ] characters

A valid hex color code choice to determine the color events will be shown on the calendar.

grade_color
string [ 1 .. 7 ] characters

A valid hex color code choice to determine the color grade badges will be.

material_color
string [ 1 .. 7 ] characters

A valid hex color code choice to determine the color material badges will be.

remember_filter_state
boolean

Remember filter states for the Calendar within a session.

color_scheme_theme
integer [ 0 .. 9223372036854776000 ]
Enum: 0 1 2

A valid color scheme theme.

  • 0 - Light
  • 1 - Dark
  • 2 - System
calendar_event_limit
boolean

Whether calendar events should collapse to "+ more" when a day is full.

default_reminder_type
integer [ 0 .. 9223372036854776000 ]
Enum: 0 1 2 3

A valid default type of reminder choice when creating a new reminder.

  • 0 - Popup
  • 1 - Email
  • 2 - Text
  • 3 - Push
default_reminder_offset
integer <int64> [ 0 .. 9223372036854776000 ]

The default offset when creating a new reminder.

default_reminder_offset_type
integer [ 0 .. 9223372036854776000 ]
Enum: 0 1 2 3

A valid default type of time offset choice when creating a new reminder.

  • 0 - minutes
  • 1 - hours
  • 2 - days
  • 3 - weeks
calendar_use_category_colors
boolean

Whether calendar items for classes should be shown in category colors instead of class colors.

show_planner_tooltips
boolean

Whether planner item hover tooltips should be shown.

drag_and_drop_on_mobile
boolean

Whether drag-and-drop is enabled on touch/mobile devices.

at_risk_threshold
integer [ 0 .. 100 ]

The grade percentage below which a course is flagged as at-risk.

on_track_tolerance
integer [ 0 .. 100 ]

The percentage tolerance within which a course grade is considered on track.

show_week_numbers
boolean

Whether week numbers should be shown on the calendar.

receive_emails_from_admin
boolean

Whether the user wants to receive Helium update emails.

Responses

Request samples

Content type
{
  • "time_zone": "Africa/Abidjan",
  • "default_view": 0,
  • "week_starts_on": 0,
  • "show_getting_started": true,
  • "whats_new_version_seen": 9223372036854776000,
  • "events_color": "string",
  • "grade_color": "string",
  • "material_color": "string",
  • "remember_filter_state": true,
  • "color_scheme_theme": 0,
  • "calendar_event_limit": true,
  • "default_reminder_type": 0,
  • "default_reminder_offset": 9223372036854776000,
  • "default_reminder_offset_type": 0,
  • "calendar_use_category_colors": true,
  • "show_planner_tooltips": true,
  • "drag_and_drop_on_mobile": true,
  • "at_risk_threshold": 100,
  • "on_track_tolerance": 100,
  • "show_week_numbers": true,
  • "receive_emails_from_admin": true
}

Response samples

Content type
application/json
{
  • "time_zone": "Africa/Abidjan",
  • "default_view": 0,
  • "week_starts_on": 0,
  • "show_getting_started": true,
  • "is_setup_complete": true,
  • "whats_new_version_seen": 9223372036854776000,
  • "events_color": "string",
  • "grade_color": "string",
  • "material_color": "string",
  • "remember_filter_state": true,
  • "color_scheme_theme": 0,
  • "calendar_event_limit": true,
  • "default_reminder_type": 0,
  • "default_reminder_offset": 9223372036854776000,
  • "default_reminder_offset_type": 0,
  • "calendar_use_category_colors": true,
  • "show_planner_tooltips": true,
  • "drag_and_drop_on_mobile": true,
  • "at_risk_threshold": 100,
  • "on_track_tolerance": 100,
  • "show_week_numbers": true,
  • "receive_emails_from_admin": true,
  • "private_slug": "string",
  • "user": 0,
  • "prompt_for_review": true
}

calendar.user

auth_user_retrieve

Return the authenticated user instance, including settings details.

Authorizations:
jwtAuth

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "username": "string",
  • "email": "user@example.com",
  • "email_changing": "user@example.com",
  • "profile": {
    },
  • "settings": {
    },
  • "oauth_providers": [
    ],
  • "has_usable_password": true,
  • "has_oauth_providers": true
}

feed_externalcalendars_events_list

Return all external calendar events the user has shown on their calendar, flattened across every subscribed external calendar.

The id on each event is sequential within this response only — not stable across requests, and not an Event primary key. Do not persist these IDs client-side.

Side effect: if a subscribed external calendar fails to fetch or parse periodically, it is auto-disabled (shown_on_calendar flipped to false). PATCH it back to true once the upstream feed is fixed.

Authorizations:
jwtAuth
query Parameters
from
string <date-time>

Lower bound (inclusive) of the date range filter. Must be provided together with to. Date-only strings (e.g. 2026-02-02) are interpreted as midnight in the user's timezone.

search
string

A search term.

to
string <date-time>

Upper bound (inclusive) of the date range filter. Must be provided together with from.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner_attachments_list

Return a list of all attachment instances for the authenticated user. To download the attachment, follow the link contained in the attachment field of an instance, which will direct you to attached media URL.

Authorizations:
jwtAuth
query Parameters
course
integer
event
integer
homework
integer
id
integer
updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner_categories_list

Return a list of all category instances for the authenticated user.

Authorizations:
jwtAuth
query Parameters
course
integer
id
integer
shown_on_calendar
boolean

Restrict to categories whose parent class group is visible on the user's calendar.

title
string
updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner_coursegroups_list

Return a list of all course group instances for the authenticated user.

Authorizations:
jwtAuth
query Parameters
end_date
string <date>
end_date__lte
string <date>
id
integer
shown_on_calendar
boolean
start_date
string <date>
start_date__gte
string <date>
title
string
updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner_courses_list

Return a list of all course instances for the authenticated user, including course schedule details.

Authorizations:
jwtAuth
query Parameters
end_date
string <date>
end_date__lte
string <date>
id
integer
shown_on_calendar
boolean

Restrict to classes whose parent class group is visible on the user's calendar.

start_date
string <date>
start_date__gte
string <date>
title
string
updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner_courseschedules_list

Return a list of all course schedule instances for the authenticated user.

Authorizations:
jwtAuth
query Parameters
id
integer
updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner_events_list

Return a list of all Helium Event instances for the authenticated user. For convenience, Helium Events on a GET are serialized with representations of associated attachments and reminders to avoid the need for redundant API calls.

Authorizations:
jwtAuth
query Parameters
from
string <date-time>

Lower bound (inclusive) of the date range filter. Must be provided together with to. Date-only strings (e.g. 2026-02-02) are interpreted as midnight in the user's timezone.

id
integer
ordering
string

Which field to use when ordering the results.

search
string

A search term.

title
string
to
string <date-time>

Upper bound (inclusive) of the date range filter. Must be provided together with from.

updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner_homework_list

Return a list of all homework instances for the authenticated user. For convenience, homework instances on a GET are serialized with representations of associated attachments and reminders to avoid the need for redundant API calls.

Authorizations:
jwtAuth
query Parameters
category__id
Array of strings

Multiple values may be separated by commas.

category__id__in
Array of integers

Multiple values may be separated by commas.

category__title__in
string

Restrict to homework whose category title matches any value in the given comma-separated list.

completed
boolean
course__id
Array of strings

Multiple values may be separated by commas.

course__id__in
Array of integers

Multiple values may be separated by commas.

from
string <date-time>

Lower bound (inclusive) of the date range filter. Must be provided together with to. Date-only strings (e.g. 2026-02-02) are interpreted as midnight in the user's timezone.

id
integer
ordering
string

Which field to use when ordering the results.

overdue
boolean

true returns incomplete homework whose start is in the past. false returns homework that is either completed or has a start in the future.

search
string

A search term.

shown_on_calendar
boolean

Restrict to homework whose parent class group is visible on the user's calendar.

title
string
to
string <date-time>

Upper bound (inclusive) of the date range filter. Must be provided together with from.

updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner_materialgroups_list

Return a list of all material group instances for the authenticated user.

Authorizations:
jwtAuth
query Parameters
id
integer
shown_on_calendar
boolean
title
string
updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner_materials_list

Return a list of all material instances for the authenticated user.

Authorizations:
jwtAuth
query Parameters
courses
Array of integers

Restrict the result to materials linked to any of the given class IDs. Repeat the parameter to pass multiple IDs: ?courses=1&courses=2.

id
integer
shown_on_calendar
boolean

Restrict to resources whose parent resource group is visible on the user's calendar.

title
string
updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner_reminders_list

Return a list of all reminder instances for the authenticated user. For convenience, reminder instances on a GET are serialized to a depth of two to avoid the need for redundant API calls.

Authorizations:
jwtAuth
query Parameters
course
integer
dismissed
boolean
event
integer
homework
integer
id
integer
sent
boolean
start_of_range__lte
string <date-time>
title
string
type
integer
Enum: 0 1 2 3

A valid reminder type choice.

  • 0 - Popup
  • 1 - Email
  • 2 - Text
  • 3 - Push
updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

auth.register

register

Register a new user.

Authorizations:
jwtAuthNone
Request Body schema:
required
username
string

A unique name used to login to the system.

email
required
string non-empty

A unique and valid email address.

password
required
string non-empty
time_zone
required
string
Enum: "Africa/Abidjan" "Africa/Accra" "Africa/Addis_Ababa" "Africa/Algiers" "Africa/Asmara" "Africa/Bamako" "Africa/Bangui" "Africa/Banjul" "Africa/Bissau" "Africa/Blantyre" "Africa/Brazzaville" "Africa/Bujumbura" "Africa/Cairo" "Africa/Casablanca" "Africa/Ceuta" "Africa/Conakry" "Africa/Dakar" "Africa/Dar_es_Salaam" "Africa/Djibouti" "Africa/Douala" "Africa/El_Aaiun" "Africa/Freetown" "Africa/Gaborone" "Africa/Harare" "Africa/Johannesburg" "Africa/Juba" "Africa/Kampala" "Africa/Khartoum" "Africa/Kigali" "Africa/Kinshasa" "Africa/Lagos" "Africa/Libreville" "Africa/Lome" "Africa/Luanda" "Africa/Lubumbashi" "Africa/Lusaka" "Africa/Malabo" "Africa/Maputo" "Africa/Maseru" "Africa/Mbabane" "Africa/Mogadishu" "Africa/Monrovia" "Africa/Nairobi" "Africa/Ndjamena" "Africa/Niamey" "Africa/Nouakchott" "Africa/Ouagadougou" "Africa/Porto-Novo" "Africa/Sao_Tome" "Africa/Tripoli" "Africa/Tunis" "Africa/Windhoek" "America/Adak" "America/Anchorage" "America/Anguilla" "America/Antigua" "America/Araguaina" "America/Argentina/Buenos_Aires" "America/Argentina/Catamarca" "America/Argentina/Cordoba" "America/Argentina/Jujuy" "America/Argentina/La_Rioja" "America/Argentina/Mendoza" "America/Argentina/Rio_Gallegos" "America/Argentina/Salta" "America/Argentina/San_Juan" "America/Argentina/San_Luis" "America/Argentina/Tucuman" "America/Argentina/Ushuaia" "America/Aruba" "America/Asuncion" "America/Atikokan" "America/Bahia" "America/Bahia_Banderas" "America/Barbados" "America/Belem" "America/Belize" "America/Blanc-Sablon" "America/Boa_Vista" "America/Bogota" "America/Boise" "America/Cambridge_Bay" "America/Campo_Grande" "America/Cancun" "America/Caracas" "America/Cayenne" "America/Cayman" "America/Chicago" "America/Chihuahua" "America/Ciudad_Juarez" "America/Costa_Rica" "America/Coyhaique" "America/Creston" "America/Cuiaba" "America/Curacao" "America/Danmarkshavn" "America/Dawson" "America/Dawson_Creek" "America/Denver" "America/Detroit" "America/Dominica" "America/Edmonton" "America/Eirunepe" "America/El_Salvador" "America/Fort_Nelson" "America/Fortaleza" "America/Glace_Bay" "America/Goose_Bay" "America/Grand_Turk" "America/Grenada" "America/Guadeloupe" "America/Guatemala" "America/Guayaquil" "America/Guyana" "America/Halifax" "America/Havana" "America/Hermosillo" "America/Indiana/Indianapolis" "America/Indiana/Knox" "America/Indiana/Marengo" "America/Indiana/Petersburg" "America/Indiana/Tell_City" "America/Indiana/Vevay" "America/Indiana/Vincennes" "America/Indiana/Winamac" "America/Inuvik" "America/Iqaluit" "America/Jamaica" "America/Juneau" "America/Kentucky/Louisville" "America/Kentucky/Monticello" "America/Kralendijk" "America/La_Paz" "America/Lima" "America/Los_Angeles" "America/Lower_Princes" "America/Maceio" "America/Managua" "America/Manaus" "America/Marigot" "America/Martinique" "America/Matamoros" "America/Mazatlan" "America/Menominee" "America/Merida" "America/Metlakatla" "America/Mexico_City" "America/Miquelon" "America/Moncton" "America/Monterrey" "America/Montevideo" "America/Montserrat" "America/Nassau" "America/New_York" "America/Nome" "America/Noronha" "America/North_Dakota/Beulah" "America/North_Dakota/Center" "America/North_Dakota/New_Salem" "America/Nuuk" "America/Ojinaga" "America/Panama" "America/Paramaribo" "America/Phoenix" "America/Port-au-Prince" "America/Port_of_Spain" "America/Porto_Velho" "America/Puerto_Rico" "America/Punta_Arenas" "America/Rankin_Inlet" "America/Recife" "America/Regina" "America/Resolute" "America/Rio_Branco" "America/Santarem" "America/Santiago" "America/Santo_Domingo" "America/Sao_Paulo" "America/Scoresbysund" "America/Sitka" "America/St_Barthelemy" "America/St_Johns" "America/St_Kitts" "America/St_Lucia" "America/St_Thomas" "America/St_Vincent" "America/Swift_Current" "America/Tegucigalpa" "America/Thule" "America/Tijuana" "America/Toronto" "America/Tortola" "America/Vancouver" "America/Whitehorse" "America/Winnipeg" "America/Yakutat" "Antarctica/Casey" "Antarctica/Davis" "Antarctica/DumontDUrville" "Antarctica/Macquarie" "Antarctica/Mawson" "Antarctica/McMurdo" "Antarctica/Palmer" "Antarctica/Rothera" "Antarctica/Syowa" "Antarctica/Troll" "Antarctica/Vostok" "Arctic/Longyearbyen" "Asia/Aden" "Asia/Almaty" "Asia/Amman" "Asia/Anadyr" "Asia/Aqtau" "Asia/Aqtobe" "Asia/Ashgabat" "Asia/Atyrau" "Asia/Baghdad" "Asia/Bahrain" "Asia/Baku" "Asia/Bangkok" "Asia/Barnaul" "Asia/Beirut" "Asia/Bishkek" "Asia/Brunei" "Asia/Chita" "Asia/Colombo" "Asia/Damascus" "Asia/Dhaka" "Asia/Dili" "Asia/Dubai" "Asia/Dushanbe" "Asia/Famagusta" "Asia/Gaza" "Asia/Hebron" "Asia/Ho_Chi_Minh" "Asia/Hong_Kong" "Asia/Hovd" "Asia/Irkutsk" "Asia/Jakarta" "Asia/Jayapura" "Asia/Jerusalem" "Asia/Kabul" "Asia/Kamchatka" "Asia/Karachi" "Asia/Kathmandu" "Asia/Khandyga" "Asia/Kolkata" "Asia/Krasnoyarsk" "Asia/Kuala_Lumpur" "Asia/Kuching" "Asia/Kuwait" "Asia/Macau" "Asia/Magadan" "Asia/Makassar" "Asia/Manila" "Asia/Muscat" "Asia/Nicosia" "Asia/Novokuznetsk" "Asia/Novosibirsk" "Asia/Omsk" "Asia/Oral" "Asia/Phnom_Penh" "Asia/Pontianak" "Asia/Pyongyang" "Asia/Qatar" "Asia/Qostanay" "Asia/Qyzylorda" "Asia/Riyadh" "Asia/Sakhalin" "Asia/Samarkand" "Asia/Seoul" "Asia/Shanghai" "Asia/Singapore" "Asia/Srednekolymsk" "Asia/Taipei" "Asia/Tashkent" "Asia/Tbilisi" "Asia/Tehran" "Asia/Thimphu" "Asia/Tokyo" "Asia/Tomsk" "Asia/Ulaanbaatar" "Asia/Urumqi" "Asia/Ust-Nera" "Asia/Vientiane" "Asia/Vladivostok" "Asia/Yakutsk" "Asia/Yangon" "Asia/Yekaterinburg" "Asia/Yerevan" "Atlantic/Azores" "Atlantic/Bermuda" "Atlantic/Canary" "Atlantic/Cape_Verde" "Atlantic/Faroe" "Atlantic/Madeira" "Atlantic/Reykjavik" "Atlantic/South_Georgia" "Atlantic/St_Helena" "Atlantic/Stanley" "Australia/Adelaide" "Australia/Brisbane" "Australia/Broken_Hill" "Australia/Darwin" "Australia/Eucla" "Australia/Hobart" "Australia/Lindeman" "Australia/Lord_Howe" "Australia/Melbourne" "Australia/Perth" "Australia/Sydney" "Canada/Atlantic" "Canada/Central" "Canada/Eastern" "Canada/Mountain" "Canada/Newfoundland" "Canada/Pacific" "Europe/Amsterdam" "Europe/Andorra" "Europe/Astrakhan" "Europe/Athens" "Europe/Belgrade" "Europe/Berlin" "Europe/Bratislava" "Europe/Brussels" "Europe/Bucharest" "Europe/Budapest" "Europe/Busingen" "Europe/Chisinau" "Europe/Copenhagen" "Europe/Dublin" "Europe/Gibraltar" "Europe/Guernsey" "Europe/Helsinki" "Europe/Isle_of_Man" "Europe/Istanbul" "Europe/Jersey" "Europe/Kaliningrad" "Europe/Kirov" "Europe/Kyiv" "Europe/Lisbon" "Europe/Ljubljana" "Europe/London" "Europe/Luxembourg" "Europe/Madrid" "Europe/Malta" "Europe/Mariehamn" "Europe/Minsk" "Europe/Monaco" "Europe/Moscow" "Europe/Oslo" "Europe/Paris" "Europe/Podgorica" "Europe/Prague" "Europe/Riga" "Europe/Rome" "Europe/Samara" "Europe/San_Marino" "Europe/Sarajevo" "Europe/Saratov" "Europe/Simferopol" "Europe/Skopje" "Europe/Sofia" "Europe/Stockholm" "Europe/Tallinn" "Europe/Tirane" "Europe/Ulyanovsk" "Europe/Vaduz" "Europe/Vatican" "Europe/Vienna" "Europe/Vilnius" "Europe/Volgograd" "Europe/Warsaw" "Europe/Zagreb" "Europe/Zurich" "GMT" "Indian/Antananarivo" "Indian/Chagos" "Indian/Christmas" "Indian/Cocos" "Indian/Comoro" "Indian/Kerguelen" "Indian/Mahe" "Indian/Maldives" "Indian/Mauritius" "Indian/Mayotte" "Indian/Reunion" "Pacific/Apia" "Pacific/Auckland" "Pacific/Bougainville" "Pacific/Chatham" "Pacific/Chuuk" "Pacific/Easter" "Pacific/Efate" "Pacific/Fakaofo" "Pacific/Fiji" "Pacific/Funafuti" "Pacific/Galapagos" "Pacific/Gambier" "Pacific/Guadalcanal" "Pacific/Guam" "Pacific/Honolulu" "Pacific/Kanton" "Pacific/Kiritimati" "Pacific/Kosrae" "Pacific/Kwajalein" "Pacific/Majuro" "Pacific/Marquesas" "Pacific/Midway" "Pacific/Nauru" "Pacific/Niue" "Pacific/Norfolk" "Pacific/Noumea" "Pacific/Pago_Pago" "Pacific/Palau" "Pacific/Pitcairn" "Pacific/Pohnpei" "Pacific/Port_Moresby" "Pacific/Rarotonga" "Pacific/Saipan" "Pacific/Tahiti" "Pacific/Tarawa" "Pacific/Tongatapu" "Pacific/Wake" "Pacific/Wallis" "US/Alaska" "US/Arizona" "US/Central" "US/Eastern" "US/Hawaii" "US/Mountain" "US/Pacific" "UTC"

A valid time zone choice.

  • Africa/Abidjan - Abidjan
  • Africa/Accra - Accra
  • Africa/Addis_Ababa - Addis_Ababa
  • Africa/Algiers - Algiers
  • Africa/Asmara - Asmara
  • Africa/Bamako - Bamako
  • Africa/Bangui - Bangui
  • Africa/Banjul - Banjul
  • Africa/Bissau - Bissau
  • Africa/Blantyre - Blantyre
  • Africa/Brazzaville - Brazzaville
  • Africa/Bujumbura - Bujumbura
  • Africa/Cairo - Cairo
  • Africa/Casablanca - Casablanca
  • Africa/Ceuta - Ceuta
  • Africa/Conakry - Conakry
  • Africa/Dakar - Dakar
  • Africa/Dar_es_Salaam - Dar_es_Salaam
  • Africa/Djibouti - Djibouti
  • Africa/Douala - Douala
  • Africa/El_Aaiun - El_Aaiun
  • Africa/Freetown - Freetown
  • Africa/Gaborone - Gaborone
  • Africa/Harare - Harare
  • Africa/Johannesburg - Johannesburg
  • Africa/Juba - Juba
  • Africa/Kampala - Kampala
  • Africa/Khartoum - Khartoum
  • Africa/Kigali - Kigali
  • Africa/Kinshasa - Kinshasa
  • Africa/Lagos - Lagos
  • Africa/Libreville - Libreville
  • Africa/Lome - Lome
  • Africa/Luanda - Luanda
  • Africa/Lubumbashi - Lubumbashi
  • Africa/Lusaka - Lusaka
  • Africa/Malabo - Malabo
  • Africa/Maputo - Maputo
  • Africa/Maseru - Maseru
  • Africa/Mbabane - Mbabane
  • Africa/Mogadishu - Mogadishu
  • Africa/Monrovia - Monrovia
  • Africa/Nairobi - Nairobi
  • Africa/Ndjamena - Ndjamena
  • Africa/Niamey - Niamey
  • Africa/Nouakchott - Nouakchott
  • Africa/Ouagadougou - Ouagadougou
  • Africa/Porto-Novo - Porto-Novo
  • Africa/Sao_Tome - Sao_Tome
  • Africa/Tripoli - Tripoli
  • Africa/Tunis - Tunis
  • Africa/Windhoek - Windhoek
  • America/Adak - Adak
  • America/Anchorage - Anchorage
  • America/Anguilla - Anguilla
  • America/Antigua - Antigua
  • America/Araguaina - Araguaina
  • America/Argentina/Buenos_Aires - Argentina - Buenos_Aires
  • America/Argentina/Catamarca - Argentina - Catamarca
  • America/Argentina/Cordoba - Argentina - Cordoba
  • America/Argentina/Jujuy - Argentina - Jujuy
  • America/Argentina/La_Rioja - Argentina - La_Rioja
  • America/Argentina/Mendoza - Argentina - Mendoza
  • America/Argentina/Rio_Gallegos - Argentina - Rio_Gallegos
  • America/Argentina/Salta - Argentina - Salta
  • America/Argentina/San_Juan - Argentina - San_Juan
  • America/Argentina/San_Luis - Argentina - San_Luis
  • America/Argentina/Tucuman - Argentina - Tucuman
  • America/Argentina/Ushuaia - Argentina - Ushuaia
  • America/Aruba - Aruba
  • America/Asuncion - Asuncion
  • America/Atikokan - Atikokan
  • America/Bahia - Bahia
  • America/Bahia_Banderas - Bahia_Banderas
  • America/Barbados - Barbados
  • America/Belem - Belem
  • America/Belize - Belize
  • America/Blanc-Sablon - Blanc-Sablon
  • America/Boa_Vista - Boa_Vista
  • America/Bogota - Bogota
  • America/Boise - Boise
  • America/Cambridge_Bay - Cambridge_Bay
  • America/Campo_Grande - Campo_Grande
  • America/Cancun - Cancun
  • America/Caracas - Caracas
  • America/Cayenne - Cayenne
  • America/Cayman - Cayman
  • America/Chicago - Chicago
  • America/Chihuahua - Chihuahua
  • America/Ciudad_Juarez - Ciudad_Juarez
  • America/Costa_Rica - Costa_Rica
  • America/Coyhaique - Coyhaique
  • America/Creston - Creston
  • America/Cuiaba - Cuiaba
  • America/Curacao - Curacao
  • America/Danmarkshavn - Danmarkshavn
  • America/Dawson - Dawson
  • America/Dawson_Creek - Dawson_Creek
  • America/Denver - Denver
  • America/Detroit - Detroit
  • America/Dominica - Dominica
  • America/Edmonton - Edmonton
  • America/Eirunepe - Eirunepe
  • America/El_Salvador - El_Salvador
  • America/Fort_Nelson - Fort_Nelson
  • America/Fortaleza - Fortaleza
  • America/Glace_Bay - Glace_Bay
  • America/Goose_Bay - Goose_Bay
  • America/Grand_Turk - Grand_Turk
  • America/Grenada - Grenada
  • America/Guadeloupe - Guadeloupe
  • America/Guatemala - Guatemala
  • America/Guayaquil - Guayaquil
  • America/Guyana - Guyana
  • America/Halifax - Halifax
  • America/Havana - Havana
  • America/Hermosillo - Hermosillo
  • America/Indiana/Indianapolis - Indiana - Indianapolis
  • America/Indiana/Knox - Indiana - Knox
  • America/Indiana/Marengo - Indiana - Marengo
  • America/Indiana/Petersburg - Indiana - Petersburg
  • America/Indiana/Tell_City - Indiana - Tell_City
  • America/Indiana/Vevay - Indiana - Vevay
  • America/Indiana/Vincennes - Indiana - Vincennes
  • America/Indiana/Winamac - Indiana - Winamac
  • America/Inuvik - Inuvik
  • America/Iqaluit - Iqaluit
  • America/Jamaica - Jamaica
  • America/Juneau - Juneau
  • America/Kentucky/Louisville - Kentucky - Louisville
  • America/Kentucky/Monticello - Kentucky - Monticello
  • America/Kralendijk - Kralendijk
  • America/La_Paz - La_Paz
  • America/Lima - Lima
  • America/Los_Angeles - Los_Angeles
  • America/Lower_Princes - Lower_Princes
  • America/Maceio - Maceio
  • America/Managua - Managua
  • America/Manaus - Manaus
  • America/Marigot - Marigot
  • America/Martinique - Martinique
  • America/Matamoros - Matamoros
  • America/Mazatlan - Mazatlan
  • America/Menominee - Menominee
  • America/Merida - Merida
  • America/Metlakatla - Metlakatla
  • America/Mexico_City - Mexico_City
  • America/Miquelon - Miquelon
  • America/Moncton - Moncton
  • America/Monterrey - Monterrey
  • America/Montevideo - Montevideo
  • America/Montserrat - Montserrat
  • America/Nassau - Nassau
  • America/New_York - New_York
  • America/Nome - Nome
  • America/Noronha - Noronha
  • America/North_Dakota/Beulah - North_Dakota - Beulah
  • America/North_Dakota/Center - North_Dakota - Center
  • America/North_Dakota/New_Salem - North_Dakota - New_Salem
  • America/Nuuk - Nuuk
  • America/Ojinaga - Ojinaga
  • America/Panama - Panama
  • America/Paramaribo - Paramaribo
  • America/Phoenix - Phoenix
  • America/Port-au-Prince - Port-au-Prince
  • America/Port_of_Spain - Port_of_Spain
  • America/Porto_Velho - Porto_Velho
  • America/Puerto_Rico - Puerto_Rico
  • America/Punta_Arenas - Punta_Arenas
  • America/Rankin_Inlet - Rankin_Inlet
  • America/Recife - Recife
  • America/Regina - Regina
  • America/Resolute - Resolute
  • America/Rio_Branco - Rio_Branco
  • America/Santarem - Santarem
  • America/Santiago - Santiago
  • America/Santo_Domingo - Santo_Domingo
  • America/Sao_Paulo - Sao_Paulo
  • America/Scoresbysund - Scoresbysund
  • America/Sitka - Sitka
  • America/St_Barthelemy - St_Barthelemy
  • America/St_Johns - St_Johns
  • America/St_Kitts - St_Kitts
  • America/St_Lucia - St_Lucia
  • America/St_Thomas - St_Thomas
  • America/St_Vincent - St_Vincent
  • America/Swift_Current - Swift_Current
  • America/Tegucigalpa - Tegucigalpa
  • America/Thule - Thule
  • America/Tijuana - Tijuana
  • America/Toronto - Toronto
  • America/Tortola - Tortola
  • America/Vancouver - Vancouver
  • America/Whitehorse - Whitehorse
  • America/Winnipeg - Winnipeg
  • America/Yakutat - Yakutat
  • Antarctica/Casey - Casey
  • Antarctica/Davis - Davis
  • Antarctica/DumontDUrville - DumontDUrville
  • Antarctica/Macquarie - Macquarie
  • Antarctica/Mawson - Mawson
  • Antarctica/McMurdo - McMurdo
  • Antarctica/Palmer - Palmer
  • Antarctica/Rothera - Rothera
  • Antarctica/Syowa - Syowa
  • Antarctica/Troll - Troll
  • Antarctica/Vostok - Vostok
  • Arctic/Longyearbyen - Longyearbyen
  • Asia/Aden - Aden
  • Asia/Almaty - Almaty
  • Asia/Amman - Amman
  • Asia/Anadyr - Anadyr
  • Asia/Aqtau - Aqtau
  • Asia/Aqtobe - Aqtobe
  • Asia/Ashgabat - Ashgabat
  • Asia/Atyrau - Atyrau
  • Asia/Baghdad - Baghdad
  • Asia/Bahrain - Bahrain
  • Asia/Baku - Baku
  • Asia/Bangkok - Bangkok
  • Asia/Barnaul - Barnaul
  • Asia/Beirut - Beirut
  • Asia/Bishkek - Bishkek
  • Asia/Brunei - Brunei
  • Asia/Chita - Chita
  • Asia/Colombo - Colombo
  • Asia/Damascus - Damascus
  • Asia/Dhaka - Dhaka
  • Asia/Dili - Dili
  • Asia/Dubai - Dubai
  • Asia/Dushanbe - Dushanbe
  • Asia/Famagusta - Famagusta
  • Asia/Gaza - Gaza
  • Asia/Hebron - Hebron
  • Asia/Ho_Chi_Minh - Ho_Chi_Minh
  • Asia/Hong_Kong - Hong_Kong
  • Asia/Hovd - Hovd
  • Asia/Irkutsk - Irkutsk
  • Asia/Jakarta - Jakarta
  • Asia/Jayapura - Jayapura
  • Asia/Jerusalem - Jerusalem
  • Asia/Kabul - Kabul
  • Asia/Kamchatka - Kamchatka
  • Asia/Karachi - Karachi
  • Asia/Kathmandu - Kathmandu
  • Asia/Khandyga - Khandyga
  • Asia/Kolkata - Kolkata
  • Asia/Krasnoyarsk - Krasnoyarsk
  • Asia/Kuala_Lumpur - Kuala_Lumpur
  • Asia/Kuching - Kuching
  • Asia/Kuwait - Kuwait
  • Asia/Macau - Macau
  • Asia/Magadan - Magadan
  • Asia/Makassar - Makassar
  • Asia/Manila - Manila
  • Asia/Muscat - Muscat
  • Asia/Nicosia - Nicosia
  • Asia/Novokuznetsk - Novokuznetsk
  • Asia/Novosibirsk - Novosibirsk
  • Asia/Omsk - Omsk
  • Asia/Oral - Oral
  • Asia/Phnom_Penh - Phnom_Penh
  • Asia/Pontianak - Pontianak
  • Asia/Pyongyang - Pyongyang
  • Asia/Qatar - Qatar
  • Asia/Qostanay - Qostanay
  • Asia/Qyzylorda - Qyzylorda
  • Asia/Riyadh - Riyadh
  • Asia/Sakhalin - Sakhalin
  • Asia/Samarkand - Samarkand
  • Asia/Seoul - Seoul
  • Asia/Shanghai - Shanghai
  • Asia/Singapore - Singapore
  • Asia/Srednekolymsk - Srednekolymsk
  • Asia/Taipei - Taipei
  • Asia/Tashkent - Tashkent
  • Asia/Tbilisi - Tbilisi
  • Asia/Tehran - Tehran
  • Asia/Thimphu - Thimphu
  • Asia/Tokyo - Tokyo
  • Asia/Tomsk - Tomsk
  • Asia/Ulaanbaatar - Ulaanbaatar
  • Asia/Urumqi - Urumqi
  • Asia/Ust-Nera - Ust-Nera
  • Asia/Vientiane - Vientiane
  • Asia/Vladivostok - Vladivostok
  • Asia/Yakutsk - Yakutsk
  • Asia/Yangon - Yangon
  • Asia/Yekaterinburg - Yekaterinburg
  • Asia/Yerevan - Yerevan
  • Atlantic/Azores - Azores
  • Atlantic/Bermuda - Bermuda
  • Atlantic/Canary - Canary
  • Atlantic/Cape_Verde - Cape_Verde
  • Atlantic/Faroe - Faroe
  • Atlantic/Madeira - Madeira
  • Atlantic/Reykjavik - Reykjavik
  • Atlantic/South_Georgia - South_Georgia
  • Atlantic/St_Helena - St_Helena
  • Atlantic/Stanley - Stanley
  • Australia/Adelaide - Adelaide
  • Australia/Brisbane - Brisbane
  • Australia/Broken_Hill - Broken_Hill
  • Australia/Darwin - Darwin
  • Australia/Eucla - Eucla
  • Australia/Hobart - Hobart
  • Australia/Lindeman - Lindeman
  • Australia/Lord_Howe - Lord_Howe
  • Australia/Melbourne - Melbourne
  • Australia/Perth - Perth
  • Australia/Sydney - Sydney
  • Canada/Atlantic - Atlantic
  • Canada/Central - Central
  • Canada/Eastern - Eastern
  • Canada/Mountain - Mountain
  • Canada/Newfoundland - Newfoundland
  • Canada/Pacific - Pacific
  • Europe/Amsterdam - Amsterdam
  • Europe/Andorra - Andorra
  • Europe/Astrakhan - Astrakhan
  • Europe/Athens - Athens
  • Europe/Belgrade - Belgrade
  • Europe/Berlin - Berlin
  • Europe/Bratislava - Bratislava
  • Europe/Brussels - Brussels
  • Europe/Bucharest - Bucharest
  • Europe/Budapest - Budapest
  • Europe/Busingen - Busingen
  • Europe/Chisinau - Chisinau
  • Europe/Copenhagen - Copenhagen
  • Europe/Dublin - Dublin
  • Europe/Gibraltar - Gibraltar
  • Europe/Guernsey - Guernsey
  • Europe/Helsinki - Helsinki
  • Europe/Isle_of_Man - Isle_of_Man
  • Europe/Istanbul - Istanbul
  • Europe/Jersey - Jersey
  • Europe/Kaliningrad - Kaliningrad
  • Europe/Kirov - Kirov
  • Europe/Kyiv - Kyiv
  • Europe/Lisbon - Lisbon
  • Europe/Ljubljana - Ljubljana
  • Europe/London - London
  • Europe/Luxembourg - Luxembourg
  • Europe/Madrid - Madrid
  • Europe/Malta - Malta
  • Europe/Mariehamn - Mariehamn
  • Europe/Minsk - Minsk
  • Europe/Monaco - Monaco
  • Europe/Moscow - Moscow
  • Europe/Oslo - Oslo
  • Europe/Paris - Paris
  • Europe/Podgorica - Podgorica
  • Europe/Prague - Prague
  • Europe/Riga - Riga
  • Europe/Rome - Rome
  • Europe/Samara - Samara
  • Europe/San_Marino - San_Marino
  • Europe/Sarajevo - Sarajevo
  • Europe/Saratov - Saratov
  • Europe/Simferopol - Simferopol
  • Europe/Skopje - Skopje
  • Europe/Sofia - Sofia
  • Europe/Stockholm - Stockholm
  • Europe/Tallinn - Tallinn
  • Europe/Tirane - Tirane
  • Europe/Ulyanovsk - Ulyanovsk
  • Europe/Vaduz - Vaduz
  • Europe/Vatican - Vatican
  • Europe/Vienna - Vienna
  • Europe/Vilnius - Vilnius
  • Europe/Volgograd - Volgograd
  • Europe/Warsaw - Warsaw
  • Europe/Zagreb - Zagreb
  • Europe/Zurich - Zurich
  • GMT - GMT
  • Indian/Antananarivo - Antananarivo
  • Indian/Chagos - Chagos
  • Indian/Christmas - Christmas
  • Indian/Cocos - Cocos
  • Indian/Comoro - Comoro
  • Indian/Kerguelen - Kerguelen
  • Indian/Mahe - Mahe
  • Indian/Maldives - Maldives
  • Indian/Mauritius - Mauritius
  • Indian/Mayotte - Mayotte
  • Indian/Reunion - Reunion
  • Pacific/Apia - Apia
  • Pacific/Auckland - Auckland
  • Pacific/Bougainville - Bougainville
  • Pacific/Chatham - Chatham
  • Pacific/Chuuk - Chuuk
  • Pacific/Easter - Easter
  • Pacific/Efate - Efate
  • Pacific/Fakaofo - Fakaofo
  • Pacific/Fiji - Fiji
  • Pacific/Funafuti - Funafuti
  • Pacific/Galapagos - Galapagos
  • Pacific/Gambier - Gambier
  • Pacific/Guadalcanal - Guadalcanal
  • Pacific/Guam - Guam
  • Pacific/Honolulu - Honolulu
  • Pacific/Kanton - Kanton
  • Pacific/Kiritimati - Kiritimati
  • Pacific/Kosrae - Kosrae
  • Pacific/Kwajalein - Kwajalein
  • Pacific/Majuro - Majuro
  • Pacific/Marquesas - Marquesas
  • Pacific/Midway - Midway
  • Pacific/Nauru - Nauru
  • Pacific/Niue - Niue
  • Pacific/Norfolk - Norfolk
  • Pacific/Noumea - Noumea
  • Pacific/Pago_Pago - Pago_Pago
  • Pacific/Palau - Palau
  • Pacific/Pitcairn - Pitcairn
  • Pacific/Pohnpei - Pohnpei
  • Pacific/Port_Moresby - Port_Moresby
  • Pacific/Rarotonga - Rarotonga
  • Pacific/Saipan - Saipan
  • Pacific/Tahiti - Tahiti
  • Pacific/Tarawa - Tarawa
  • Pacific/Tongatapu - Tongatapu
  • Pacific/Wake - Wake
  • Pacific/Wallis - Wallis
  • US/Alaska - Alaska
  • US/Arizona - Arizona
  • US/Central - Central
  • US/Eastern - Eastern
  • US/Hawaii - Hawaii
  • US/Mountain - Mountain
  • US/Pacific - Pacific
  • UTC - UTC
example_schedule
boolean
Default: true

If False, skip provisioning the user with an example schedule.

Responses

Request samples

Content type
{
  • "username": "string",
  • "email": "string",
  • "password": "string",
  • "time_zone": "Africa/Abidjan",
  • "example_schedule": true
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "username": "string",
  • "email": "user@example.com",
  • "email_changing": "user@example.com",
  • "profile": {
    },
  • "settings": {
    },
  • "oauth_providers": [
    ],
  • "has_usable_password": true,
  • "has_oauth_providers": true
}

verify_email

Verify an email address for the user instance associated with the email and verification code.

Returns access and refresh tokens for immediate authentication.

Authorizations:
jwtAuthNone
query Parameters
code
string

The code sent to email when registering or changing an email address.

username
string

The user's email address.

Responses

Response samples

Content type
application/json
{
  • "access": "string",
  • "refresh": "string"
}

resend_verification_email

Resend the verification email for an inactive user account, or for an active user who has requested an email change.

Authorizations:
jwtAuthNone
query Parameters
username
string

The user's email address.

Responses

feed.externalcalendar

feed_externalcalendars_list

Authorizations:
jwtAuth
query Parameters
shown_on_calendar
boolean
updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

feed_externalcalendars_create

Create a new external calendar instance for the authenticated user.

Authorizations:
jwtAuth
Request Body schema:
required
title
required
string [ 1 .. 255 ] characters

A display name.

url
required
string <uri> [ 1 .. 3000 ] characters

A public-facing URL to a valid iCal feed. On create and on URL change, the server fetches the URL and validates the response is a parseable iCal feed; unreachable or invalid feeds are rejected at write time.

color
string [ 1 .. 7 ] characters

A valid hex color code choice to determine the color items will be shown on the calendar.

shown_on_calendar
boolean

Whether items should be shown on the calendar.

Responses

Request samples

Content type
{}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "color": "string",
  • "shown_on_calendar": true,
  • "user": 0
}

feed_externalcalendars_retrieve

Authorizations:
jwtAuth
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "color": "string",
  • "shown_on_calendar": true,
  • "user": 0
}

feed_externalcalendars_update

Authorizations:
jwtAuth
path Parameters
id
required
integer
Request Body schema:
required
title
required
string [ 1 .. 255 ] characters

A display name.

url
required
string <uri> [ 1 .. 3000 ] characters

A public-facing URL to a valid iCal feed. On create and on URL change, the server fetches the URL and validates the response is a parseable iCal feed; unreachable or invalid feeds are rejected at write time.

color
string [ 1 .. 7 ] characters

A valid hex color code choice to determine the color items will be shown on the calendar.

shown_on_calendar
boolean

Whether items should be shown on the calendar.

Responses

Request samples

Content type
{}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "color": "string",
  • "shown_on_calendar": true,
  • "user": 0
}

feed_externalcalendars_partial_update

Partially update the given external calendar instance.

Authorizations:
jwtAuth
path Parameters
id
required
integer
Request Body schema:
title
string [ 1 .. 255 ] characters

A display name.

url
string <uri> [ 1 .. 3000 ] characters

A public-facing URL to a valid iCal feed. On create and on URL change, the server fetches the URL and validates the response is a parseable iCal feed; unreachable or invalid feeds are rejected at write time.

color
string [ 1 .. 7 ] characters

A valid hex color code choice to determine the color items will be shown on the calendar.

shown_on_calendar
boolean

Whether items should be shown on the calendar.

Responses

Request samples

Content type
{}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "color": "string",
  • "shown_on_calendar": true,
  • "user": 0
}

feed_externalcalendars_destroy

Delete the given external calendar instance.

Authorizations:
jwtAuth
path Parameters
id
required
integer

Responses

feed.externalcalendar.event

feed_externalcalendar_events_list

Return the events from a single subscribed external calendar's iCal feed.

The id on each event is sequential within this response only — not stable across requests, and not an Event primary key. Do not persist these IDs client-side.

If the upstream iCal fetch fails or the feed cannot be parsed, the request fails AND, as a side effect, the external calendar is auto-disabled (shown_on_calendar flipped to false). PATCH it back to true once the upstream feed is fixed.

Authorizations:
jwtAuth
path Parameters
id
required
integer
query Parameters
from
string <date-time>

Lower bound (inclusive) of the date range filter. Must be provided together with to. Date-only strings (e.g. 2026-02-02) are interpreted as midnight in the user's timezone.

search
string

A search term.

to
string <date-time>

Upper bound (inclusive) of the date range filter. Must be provided together with from.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

feed_externalcalendars_events_list

Return all external calendar events the user has shown on their calendar, flattened across every subscribed external calendar.

The id on each event is sequential within this response only — not stable across requests, and not an Event primary key. Do not persist these IDs client-side.

Side effect: if a subscribed external calendar fails to fetch or parse periodically, it is auto-disabled (shown_on_calendar flipped to false). PATCH it back to true once the upstream feed is fixed.

Authorizations:
jwtAuth
query Parameters
from
string <date-time>

Lower bound (inclusive) of the date range filter. Must be provided together with to. Date-only strings (e.g. 2026-02-02) are interpreted as midnight in the user's timezone.

search
string

A search term.

to
string <date-time>

Upper bound (inclusive) of the date range filter. Must be provided together with from.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

feed.private.event

feed_private_courseschedules_ical

Return an iCalendar (text/calendar) feed of all course schedule instances for the given private slug. Intended for subscription in calendar applications (Google Calendar, Apple Calendar, etc.) — the response is plain iCalendar text, not JSON.

Private feeds are opt-in. A user's private_slug (on their settings) is null while feeds are disabled; calling PUT /feed/private/enable/ generates a new slug and returns the three feed URLs (events, homework, course schedules). PUT /feed/private/disable/ clears the slug and immediately invalidates all existing feed URLs.

A Content-Disposition: attachment; filename=Helium_<user>_coursescheduleevents.ics header is set so that browser-initiated requests download the feed as a file.

Authorizations:
jwtAuthNone
path Parameters
private_slug
required
string

Responses

feed_private_events_ical

Return an iCalendar (text/calendar) feed of all event instances for the given private slug. Intended for subscription in calendar applications (Google Calendar, Apple Calendar, etc.) — the response is plain iCalendar text, not JSON.

Private feeds are opt-in. A user's private_slug (on their settings) is null while feeds are disabled; calling PUT /feed/private/enable/ generates a new slug and returns the three feed URLs (events, homework, course schedules). PUT /feed/private/disable/ clears the slug and immediately invalidates all existing feed URLs.

A Content-Disposition: attachment; filename=Helium_<user>_events.ics header is set so that browser-initiated requests download the feed as a file.

Authorizations:
jwtAuthNone
path Parameters
private_slug
required
string

Responses

feed_private_homework_ical

Return an iCalendar (text/calendar) feed of all homework instances for the given private slug. Intended for subscription in calendar applications (Google Calendar, Apple Calendar, etc.) — the response is plain iCalendar text, not JSON.

Private feeds are opt-in. A user's private_slug (on their settings) is null while feeds are disabled; calling PUT /feed/private/enable/ generates a new slug and returns the three feed URLs (events, homework, course schedules). PUT /feed/private/disable/ clears the slug and immediately invalidates all existing feed URLs.

A Content-Disposition: attachment; filename=Helium_<user>_homework.ics header is set so that browser-initiated requests download the feed as a file.

Authorizations:
jwtAuthNone
path Parameters
private_slug
required
string

Responses

feed.private

feed_private_disable_update

Disable the private feed URLs for the authenticated user.

Authorizations:
jwtAuth

Responses

feed_private_enable_update

Enable the private feed URLs for the authenticated user. It is safe to make this request multiple times, and if private feeds are already enabled, the response will simply contain links to the feeds.

Authorizations:
jwtAuth

Responses

Response samples

Content type
application/json
{}

importexport

importexport_export_retrieve

Return an export of all non-sensitive data for the user. The response sets Content-Disposition to attachment; filename=Helium_<email-local-part>_<YYYY-MM-DD>.json (the local-part is the segment of the user's email before @), so a browser will save it as a dated download.

The exported data for each model type will match that of the documented APIs.

Authorizations:
jwtAuth

Responses

Response samples

Content type
application/json
{
  • "external_calendars": [
    ],
  • "course_groups": [
    ],
  • "courses": [
    ],
  • "course_schedules": [
    ],
  • "categories": [
    ],
  • "resource_groups": [
    ],
  • "resources": [
    ],
  • "events": [
    ],
  • "homework": [
    ],
  • "reminders": [
    ],
  • "notes": [
    ]
}

importexport_import_create

Import the resources for the authenticated user from the uploaded file. Exactly one file must be uploaded per request in the file[] field; submitting zero or more than one file returns 400.

The file may not exceed the max_upload_size (bytes) returned by GET /info/.

Each model will be imported in a schema matching that of the documented APIs.

Authorizations:
jwtAuth
Request Body schema: multipart/form-data
required
file
required
Array of strings <binary> [ items <binary > ]

One or more exported JSON files, sent as the multipart file[] field.

Responses

Request samples

Content type
multipart/form-data

The body of the file[] multipart field. Exactly one file must be uploaded per request; submitting zero or more than one file returns 400. Matches the Export component schema (the shape returned by GET /importexport/export/) — same top-level keys, same per-row fields. Relationships are expressed as integer id values that resolve within the file: a CourseGroup id is referenced by each Course's course_group; a Course id is referenced by its CourseSchedule, Categories, and Homework rows; a Category id is referenced by each Homework. id values only need to be unique and stable within the file; the importer assigns fresh database id values on insert. All datetimes are tz-aware ISO-8601.

{
  "external_calendars": [],
  "course_groups": [
    {
      "id": 1,
      "title": "Fall 2026",
      "start_date": "2026-09-02",
      "end_date": "2026-12-13",
      "shown_on_calendar": true,
      "exceptions": ""
    }
  ],
  "courses": [
    {
      "id": 10,
      "title": "BIO 151 — Lecture",
      "room": "Bagley 131",
      "credits": "3.00",
      "color": "#4986e7",
      "website": "https://canvas.example.edu/bio-151",
      "is_online": false,
      "teacher_name": "Dr. Jane Smith",
      "teacher_email": "jsmith@example.edu",
      "start_date": "2026-09-02",
      "end_date": "2026-12-13",
      "exceptions": "",
      "course_group": 1
    },
    {
      "id": 11,
      "title": "BIO 151 — Lab",
      "room": "Bagley 312",
      "credits": "1.00",
      "color": "#4986e7",
      "is_online": false,
      "teacher_name": "Dr. Jane Smith",
      "teacher_email": "jsmith@example.edu",
      "start_date": "2026-09-02",
      "end_date": "2026-12-13",
      "exceptions": "",
      "course_group": 1
    }
  ],
  "course_schedules": [
    {
      "id": 100,
      "days_of_week": "0101010",
      "sun_start_time": "00:00:00",
      "sun_end_time": "00:00:00",
      "mon_start_time": "10:00:00",
      "mon_end_time": "10:50:00",
      "tue_start_time": "00:00:00",
      "tue_end_time": "00:00:00",
      "wed_start_time": "10:00:00",
      "wed_end_time": "10:50:00",
      "thu_start_time": "00:00:00",
      "thu_end_time": "00:00:00",
      "fri_start_time": "10:00:00",
      "fri_end_time": "10:50:00",
      "sat_start_time": "00:00:00",
      "sat_end_time": "00:00:00",
      "course": 10
    },
    {
      "id": 101,
      "days_of_week": "0000100",
      "sun_start_time": "00:00:00",
      "sun_end_time": "00:00:00",
      "mon_start_time": "00:00:00",
      "mon_end_time": "00:00:00",
      "tue_start_time": "00:00:00",
      "tue_end_time": "00:00:00",
      "wed_start_time": "00:00:00",
      "wed_end_time": "00:00:00",
      "thu_start_time": "13:30:00",
      "thu_end_time": "16:20:00",
      "fri_start_time": "00:00:00",
      "fri_end_time": "00:00:00",
      "sat_start_time": "00:00:00",
      "sat_end_time": "00:00:00",
      "course": 11
    }
  ],
  "categories": [
    {
      "id": 200,
      "title": "Homework",
      "weight": "20.00",
      "color": "#16a765",
      "course": 10
    },
    {
      "id": 201,
      "title": "Exams",
      "weight": "50.00",
      "color": "#cd74e6",
      "course": 10
    },
    {
      "id": 202,
      "title": "Participation",
      "weight": "30.00",
      "color": "#fad165",
      "course": 10
    },
    {
      "id": 203,
      "title": "Lab Reports",
      "weight": "100.00",
      "color": "#16a765",
      "course": 11
    }
  ],
  "resource_groups": [],
  "resources": [],
  "events": [],
  "homework": [
    {
      "id": 300,
      "title": "Problem Set 1",
      "all_day": false,
      "show_end_time": false,
      "start": "2026-09-14T23:59:00-07:00",
      "end": "2026-09-14T23:59:00-07:00",
      "priority": 50,
      "current_grade": "-1/100",
      "completed": false,
      "category": 200,
      "materials": [],
      "course": 10
    },
    {
      "id": 301,
      "title": "Midterm Exam",
      "all_day": false,
      "show_end_time": true,
      "start": "2026-10-14T10:00:00-07:00",
      "end": "2026-10-14T11:30:00-07:00",
      "priority": 80,
      "current_grade": "-1/100",
      "completed": false,
      "category": 201,
      "materials": [],
      "course": 10
    },
    {
      "id": 310,
      "title": "Lab 1 Report",
      "all_day": false,
      "show_end_time": false,
      "start": "2026-09-17T23:59:00-07:00",
      "end": "2026-09-17T23:59:00-07:00",
      "priority": 50,
      "current_grade": "-1/100",
      "completed": false,
      "category": 203,
      "materials": [],
      "course": 11
    }
  ],
  "reminders": [],
  "notes": []
}

Response samples

Content type
application/json
{
  • "external_calendars": 0,
  • "course_groups": 0,
  • "courses": 0,
  • "course_schedules": 0,
  • "categories": 0,
  • "resource_groups": 0,
  • "resources": 0,
  • "events": 0,
  • "homework": 0,
  • "reminders": 0,
  • "notes": 0
}

info

info_retrieve

Return runtime configuration: version, upload limits, token lifetimes, accepted file types, supported OAuth providers.

Authorizations:
jwtAuthNone

Responses

Response samples

Content type
application/json
{
  • "name": "string",
  • "tagline": "string",
  • "version": "string",
  • "support_email": "user@example.com",
  • "max_upload_size": 0,
  • "access_token_lifetime_minutes": 0,
  • "refresh_token_lifetime_days": 0,
  • "oauth_providers": [
    ],
  • "import_file_types": [
    ]
}

planner.attachment

planner_attachments_list

Return a list of all attachment instances for the authenticated user. To download the attachment, follow the link contained in the attachment field of an instance, which will direct you to attached media URL.

Authorizations:
jwtAuth
query Parameters
course
integer
event
integer
homework
integer
id
integer
updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner_attachments_create

Create new attachment instances and upload the associated files for the authenticated user. Multiple files can be passed in the file[] field, but note that even if only one file is created, the response will still contain a list.

The title attribute is set dynamically by the filename field passed for each file to be uploaded.

Each file may not exceed the max_upload_size (bytes) returned by GET /info/.

Exactly one of course, event, or homework must be given — the attachment is associated with that single owning entity.

Authorizations:
jwtAuth
Request Body schema: multipart/form-data
required
file
required
Array of strings <binary> [ items <binary > ]

One or more files, sent as the multipart file[] field.

course
integer

The course with which to associate.

event
integer

The event with which to associate.

homework
integer

The homework with which to associate.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner_attachments_retrieve

Return the given attachment instance. To download the attachment, follow the link contained in the attachment field of an instance, which will direct you to attached media URL.

Authorizations:
jwtAuth
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "attachment": "http://example.com",
  • "size": 0,
  • "course": 0,
  • "event": 0,
  • "homework": 0,
  • "user": 0
}

planner_attachments_destroy

Delete the given attachment instance.

Authorizations:
jwtAuth
path Parameters
id
required
integer

Responses

planner.category

planner_categories_list

Return a list of all category instances for the authenticated user.

Authorizations:
jwtAuth
query Parameters
course
integer
id
integer
shown_on_calendar
boolean

Restrict to categories whose parent class group is visible on the user's calendar.

title
string
updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner_coursegroups_courses_categories_list

Return a list of all category instances for the given course.

Authorizations:
jwtAuth
path Parameters
course
required
integer
course_group
required
integer
query Parameters
course
integer
id
integer
shown_on_calendar
boolean

Restrict to categories whose parent class group is visible on the user's calendar.

title
string
updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner_coursegroups_courses_categories_create

Create a new category instance for the given course.

Note that all weights associated with a single course cannot exceed a value of 100.

Authorizations:
jwtAuth
path Parameters
course
required
integer
course_group
required
integer
Request Body schema:
required
title
required
string [ 1 .. 255 ] characters

A display name. Must be unique within the parent course.

weight
required
string <decimal> ^-?\d{0,3}(?:\.\d{0,2})?$

A decimal weight for this category's homework (note that all weights associated with a single course cannot exceed a value of 100).

color
string [ 1 .. 7 ] characters

A valid hex color code choice to determine the color items will be shown on the calendar.

Responses

Request samples

Content type

A graded category contributing 40% of the final grade. Weights across all categories on a single course must sum to ≤ 100.

{
  • "title": "Exams",
  • "weight": "40.00",
  • "color": "#cd74e6"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "weight": "string",
  • "average_grade": "string",
  • "grade_by_weight": "string",
  • "trend": 0.1,
  • "color": "string",
  • "course": 0,
  • "num_homework": 0,
  • "num_homework_completed": 0,
  • "num_homework_graded": 0
}

planner_coursegroups_courses_categories_retrieve

Return the given category instance.

Authorizations:
jwtAuth
path Parameters
course
required
integer
course_group
required
integer
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "weight": "string",
  • "average_grade": "string",
  • "grade_by_weight": "string",
  • "trend": 0.1,
  • "color": "string",
  • "course": 0,
  • "num_homework": 0,
  • "num_homework_completed": 0,
  • "num_homework_graded": 0
}

planner_coursegroups_courses_categories_update

Update the given category instance.

Authorizations:
jwtAuth
path Parameters
course
required
integer
course_group
required
integer
id
required
integer
Request Body schema:
required
title
required
string [ 1 .. 255 ] characters

A display name. Must be unique within the parent course.

weight
required
string <decimal> ^-?\d{0,3}(?:\.\d{0,2})?$

A decimal weight for this category's homework (note that all weights associated with a single course cannot exceed a value of 100).

color
string [ 1 .. 7 ] characters

A valid hex color code choice to determine the color items will be shown on the calendar.

Responses

Request samples

Content type
{
  • "title": "string",
  • "weight": "string",
  • "color": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "weight": "string",
  • "average_grade": "string",
  • "grade_by_weight": "string",
  • "trend": 0.1,
  • "color": "string",
  • "course": 0,
  • "num_homework": 0,
  • "num_homework_completed": 0,
  • "num_homework_graded": 0
}

planner_coursegroups_courses_categories_destroy

Delete the given category. The course's Uncategorized category cannot itself be deleted.

Any homework previously linked to this category is reassigned to the course's Uncategorized category, which is created on the fly if it doesn't already exist.

Authorizations:
jwtAuth
path Parameters
course
required
integer
course_group
required
integer
id
required
integer

Responses

planner.coursegroup

planner_coursegroups_list

Return a list of all course group instances for the authenticated user.

Authorizations:
jwtAuth
query Parameters
end_date
string <date>
end_date__lte
string <date>
id
integer
shown_on_calendar
boolean
start_date
string <date>
start_date__gte
string <date>
title
string
updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner_coursegroups_create

Create a new course group instance for the authenticated user.

Authorizations:
jwtAuth
Request Body schema:
required
title
required
string [ 1 .. 255 ] characters

A display name.

start_date
required
string <date>

ISO-8601 date. Must be on-or-before end_date.

end_date
required
string <date>

ISO-8601 date. Must be on-or-after start_date.

shown_on_calendar
boolean

Whether items should be shown on the calendar.

exceptions
string

Comma-separated dates (YYYYMMDD) when no classes occur (holidays, breaks).

Responses

Request samples

Content type
{
  • "title": "string",
  • "start_date": "2019-08-24",
  • "end_date": "2019-08-24",
  • "shown_on_calendar": true,
  • "exceptions": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "start_date": "2019-08-24",
  • "end_date": "2019-08-24",
  • "shown_on_calendar": true,
  • "overall_grade": "string",
  • "trend": 0.1,
  • "private_slug": "string",
  • "exceptions": "string",
  • "user": 0,
  • "num_days": 0,
  • "num_days_completed": 0,
  • "num_homework": 0,
  • "num_homework_completed": 0,
  • "num_homework_graded": 0
}

planner_coursegroups_retrieve

Return the given course group instance.

Authorizations:
jwtAuth
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "start_date": "2019-08-24",
  • "end_date": "2019-08-24",
  • "shown_on_calendar": true,
  • "overall_grade": "string",
  • "trend": 0.1,
  • "private_slug": "string",
  • "exceptions": "string",
  • "user": 0,
  • "num_days": 0,
  • "num_days_completed": 0,
  • "num_homework": 0,
  • "num_homework_completed": 0,
  • "num_homework_graded": 0
}

planner_coursegroups_update

Update the given course group instance.

Authorizations:
jwtAuth
path Parameters
id
required
integer
Request Body schema:
required
title
required
string [ 1 .. 255 ] characters

A display name.

start_date
required
string <date>

ISO-8601 date. Must be on-or-before end_date.

end_date
required
string <date>

ISO-8601 date. Must be on-or-after start_date.

shown_on_calendar
boolean

Whether items should be shown on the calendar.

exceptions
string

Comma-separated dates (YYYYMMDD) when no classes occur (holidays, breaks).

Responses

Request samples

Content type
{
  • "title": "string",
  • "start_date": "2019-08-24",
  • "end_date": "2019-08-24",
  • "shown_on_calendar": true,
  • "exceptions": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "start_date": "2019-08-24",
  • "end_date": "2019-08-24",
  • "shown_on_calendar": true,
  • "overall_grade": "string",
  • "trend": 0.1,
  • "private_slug": "string",
  • "exceptions": "string",
  • "user": 0,
  • "num_days": 0,
  • "num_days_completed": 0,
  • "num_homework": 0,
  • "num_homework_completed": 0,
  • "num_homework_graded": 0
}

planner_coursegroups_partial_update

Partially update the given course group instance.

Authorizations:
jwtAuth
path Parameters
id
required
integer
Request Body schema:
title
string [ 1 .. 255 ] characters

A display name.

start_date
string <date>

ISO-8601 date. Must be on-or-before end_date.

end_date
string <date>

ISO-8601 date. Must be on-or-after start_date.

shown_on_calendar
boolean

Whether items should be shown on the calendar.

exceptions
string

Comma-separated dates (YYYYMMDD) when no classes occur (holidays, breaks).

Responses

Request samples

Content type
{
  • "title": "string",
  • "start_date": "2019-08-24",
  • "end_date": "2019-08-24",
  • "shown_on_calendar": true,
  • "exceptions": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "start_date": "2019-08-24",
  • "end_date": "2019-08-24",
  • "shown_on_calendar": true,
  • "overall_grade": "string",
  • "trend": 0.1,
  • "private_slug": "string",
  • "exceptions": "string",
  • "user": 0,
  • "num_days": 0,
  • "num_days_completed": 0,
  • "num_homework": 0,
  • "num_homework_completed": 0,
  • "num_homework_graded": 0
}

planner_coursegroups_destroy

Delete the given course group instance.

Authorizations:
jwtAuth
path Parameters
id
required
integer

Responses

planner.course

planner_coursegroups_courses_list

Return a list of all course instances, including course schedule details, for the given course group.

Authorizations:
jwtAuth
path Parameters
course_group
required
integer
query Parameters
end_date
string <date>
end_date__lte
string <date>
id
integer
shown_on_calendar
boolean

Restrict to classes whose parent class group is visible on the user's calendar.

start_date
string <date>
start_date__gte
string <date>
title
string
updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner_coursegroups_courses_create

Create a new course instance for the given course group.

Authorizations:
jwtAuth
path Parameters
course_group
required
integer
Request Body schema:
required
title
required
string [ 1 .. 255 ] characters

A display name.

room
string <= 255 characters

An arbitrary string.

credits
required
string <decimal> ^-?\d{0,2}(?:\.\d{0,2})?$

A decimal corresponding to credit hours.

color
string [ 1 .. 7 ] characters

A valid hex color code choice to determine the color events will be shown on the calendar.

website
string or null <uri> <= 3000 characters

A valid URL.

is_online
boolean

Whether the course is online.

teacher_name
string <= 255 characters

A display name for the teacher.

teacher_email
string or null <email> <= 254 characters

A valid email address.

start_date
required
string <date>

ISO-8601 date. Must be on-or-before end_date.

end_date
required
string <date>

ISO-8601 date. Must be on-or-after start_date.

exceptions
string

Comma-separated dates (YYYYMMDD) when this course does not meet.

Responses

Request samples

Content type
Example

A standard in-person class with a room and weekly meeting times.

{
  • "title": "BIO 151",
  • "room": "Bagley Hall 131",
  • "credits": "4.00",
  • "color": "#4986e7",
  • "is_online": false,
  • "teacher_name": "Dr. Jane Smith",
  • "teacher_email": "jsmith@example.edu",
  • "start_date": "2026-09-02",
  • "end_date": "2026-12-13",
  • "exceptions": ""
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "room": "string",
  • "credits": "string",
  • "color": "string",
  • "website": "http://example.com",
  • "is_online": true,
  • "current_grade": "string",
  • "trend": 0.1,
  • "teacher_name": "string",
  • "teacher_email": "user@example.com",
  • "start_date": "2019-08-24",
  • "end_date": "2019-08-24",
  • "exceptions": "string",
  • "schedules": [
    ],
  • "course_group": 0,
  • "num_days": 0,
  • "num_days_completed": 0,
  • "has_weighted_grading": true,
  • "num_homework": 0,
  • "num_homework_completed": 0,
  • "num_homework_graded": 0
}

planner_coursegroups_courses_retrieve

Return the given course instance, including course schedule details.

Authorizations:
jwtAuth
path Parameters
course_group
required
integer
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "room": "string",
  • "credits": "string",
  • "color": "string",
  • "website": "http://example.com",
  • "is_online": true,
  • "current_grade": "string",
  • "trend": 0.1,
  • "teacher_name": "string",
  • "teacher_email": "user@example.com",
  • "start_date": "2019-08-24",
  • "end_date": "2019-08-24",
  • "exceptions": "string",
  • "schedules": [
    ],
  • "course_group": 0,
  • "num_days": 0,
  • "num_days_completed": 0,
  • "has_weighted_grading": true,
  • "num_homework": 0,
  • "num_homework_completed": 0,
  • "num_homework_graded": 0
}

planner_coursegroups_courses_update

Update the given course instance.

Authorizations:
jwtAuth
path Parameters
course_group
required
integer
id
required
integer
Request Body schema:
required
title
required
string [ 1 .. 255 ] characters

A display name.

room
string <= 255 characters

An arbitrary string.

credits
required
string <decimal> ^-?\d{0,2}(?:\.\d{0,2})?$

A decimal corresponding to credit hours.

color
string [ 1 .. 7 ] characters

A valid hex color code choice to determine the color events will be shown on the calendar.

website
string or null <uri> <= 3000 characters

A valid URL.

is_online
boolean

Whether the course is online.

teacher_name
string <= 255 characters

A display name for the teacher.

teacher_email
string or null <email> <= 254 characters

A valid email address.

start_date
required
string <date>

ISO-8601 date. Must be on-or-before end_date.

end_date
required
string <date>

ISO-8601 date. Must be on-or-after start_date.

exceptions
string

Comma-separated dates (YYYYMMDD) when this course does not meet.

Responses

Request samples

Content type
{
  • "title": "string",
  • "room": "string",
  • "credits": "string",
  • "color": "string",
  • "website": "http://example.com",
  • "is_online": true,
  • "teacher_name": "string",
  • "teacher_email": "user@example.com",
  • "start_date": "2019-08-24",
  • "end_date": "2019-08-24",
  • "exceptions": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "room": "string",
  • "credits": "string",
  • "color": "string",
  • "website": "http://example.com",
  • "is_online": true,
  • "current_grade": "string",
  • "trend": 0.1,
  • "teacher_name": "string",
  • "teacher_email": "user@example.com",
  • "start_date": "2019-08-24",
  • "end_date": "2019-08-24",
  • "exceptions": "string",
  • "schedules": [
    ],
  • "course_group": 0,
  • "num_days": 0,
  • "num_days_completed": 0,
  • "has_weighted_grading": true,
  • "num_homework": 0,
  • "num_homework_completed": 0,
  • "num_homework_graded": 0
}

planner_coursegroups_courses_partial_update

Partially update the given course instance.

Authorizations:
jwtAuth
path Parameters
course_group
required
integer
id
required
integer
Request Body schema:
title
string [ 1 .. 255 ] characters

A display name.

room
string <= 255 characters

An arbitrary string.

credits
string <decimal> ^-?\d{0,2}(?:\.\d{0,2})?$

A decimal corresponding to credit hours.

color
string [ 1 .. 7 ] characters

A valid hex color code choice to determine the color events will be shown on the calendar.

website
string or null <uri> <= 3000 characters

A valid URL.

is_online
boolean

Whether the course is online.

teacher_name
string <= 255 characters

A display name for the teacher.

teacher_email
string or null <email> <= 254 characters

A valid email address.

start_date
string <date>

ISO-8601 date. Must be on-or-before end_date.

end_date
string <date>

ISO-8601 date. Must be on-or-after start_date.

exceptions
string

Comma-separated dates (YYYYMMDD) when this course does not meet.

Responses

Request samples

Content type
{
  • "title": "string",
  • "room": "string",
  • "credits": "string",
  • "color": "string",
  • "website": "http://example.com",
  • "is_online": true,
  • "teacher_name": "string",
  • "teacher_email": "user@example.com",
  • "start_date": "2019-08-24",
  • "end_date": "2019-08-24",
  • "exceptions": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "room": "string",
  • "credits": "string",
  • "color": "string",
  • "website": "http://example.com",
  • "is_online": true,
  • "current_grade": "string",
  • "trend": 0.1,
  • "teacher_name": "string",
  • "teacher_email": "user@example.com",
  • "start_date": "2019-08-24",
  • "end_date": "2019-08-24",
  • "exceptions": "string",
  • "schedules": [
    ],
  • "course_group": 0,
  • "num_days": 0,
  • "num_days_completed": 0,
  • "has_weighted_grading": true,
  • "num_homework": 0,
  • "num_homework_completed": 0,
  • "num_homework_graded": 0
}

planner_coursegroups_courses_destroy

Delete the given course instance.

Authorizations:
jwtAuth
path Parameters
course_group
required
integer
id
required
integer

Responses

planner_courses_list

Return a list of all course instances for the authenticated user, including course schedule details.

Authorizations:
jwtAuth
query Parameters
end_date
string <date>
end_date__lte
string <date>
id
integer
shown_on_calendar
boolean

Restrict to classes whose parent class group is visible on the user's calendar.

start_date
string <date>
start_date__gte
string <date>
title
string
updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner.courseschedule

planner_coursegroups_courses_courseschedules_list

Return a list of all course schedule instances for the given course.

Authorizations:
jwtAuth
path Parameters
course
required
integer
course_group
required
integer
query Parameters
id
integer
updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner_coursegroups_courses_courseschedules_create

Create the course schedule for the given course. A course has at most one schedule — repeated calls on a course that already has one are rejected.

days_of_week is a string of seven 0/1 characters starting Sunday (e.g. 0101010 for Mon/Wed/Fri). Each day has its own <day>_start_time / <day>_end_time pair; for each day the start must be on-or-before the end. Days flagged 0 in days_of_week are not meetings, but the time fields are still accepted and stored (typically left at the defaults).

Authorizations:
jwtAuth
path Parameters
course
required
integer
course_group
required
integer
Request Body schema:
days_of_week
string = 7 characters ^[0-1]+$

Seven booleans (0 or 1) indicating which days of the week the course is on (week starts on Sunday).

sun_start_time
string <time>

An ISO-8601 time.

sun_end_time
string <time>

An ISO-8601 time.

mon_start_time
string <time>

An ISO-8601 time.

mon_end_time
string <time>

An ISO-8601 time.

tue_start_time
string <time>

An ISO-8601 time.

tue_end_time
string <time>

An ISO-8601 time.

wed_start_time
string <time>

An ISO-8601 time.

wed_end_time
string <time>

An ISO-8601 time.

thu_start_time
string <time>

An ISO-8601 time.

thu_end_time
string <time>

An ISO-8601 time.

fri_start_time
string <time>

An ISO-8601 time.

fri_end_time
string <time>

An ISO-8601 time.

sat_start_time
string <time>

An ISO-8601 time.

sat_end_time
string <time>

An ISO-8601 time.

Responses

Request samples

Content type
Example

days_of_week is a 7-character 0/1 string starting Sunday. 0101010 flags Monday, Wednesday, and Friday as meetings; the matching <day>_start_time and <day>_end_time carry the actual times. Off-day fields are left at 00:00:00.

{
  • "days_of_week": "0101010",
  • "sun_start_time": "00:00:00",
  • "sun_end_time": "00:00:00",
  • "mon_start_time": "10:00:00",
  • "mon_end_time": "10:50:00",
  • "tue_start_time": "00:00:00",
  • "tue_end_time": "00:00:00",
  • "wed_start_time": "10:00:00",
  • "wed_end_time": "10:50:00",
  • "thu_start_time": "00:00:00",
  • "thu_end_time": "00:00:00",
  • "fri_start_time": "10:00:00",
  • "fri_end_time": "10:50:00",
  • "sat_start_time": "00:00:00",
  • "sat_end_time": "00:00:00"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "days_of_week": "strings",
  • "sun_start_time": "14:15:22Z",
  • "sun_end_time": "14:15:22Z",
  • "mon_start_time": "14:15:22Z",
  • "mon_end_time": "14:15:22Z",
  • "tue_start_time": "14:15:22Z",
  • "tue_end_time": "14:15:22Z",
  • "wed_start_time": "14:15:22Z",
  • "wed_end_time": "14:15:22Z",
  • "thu_start_time": "14:15:22Z",
  • "thu_end_time": "14:15:22Z",
  • "fri_start_time": "14:15:22Z",
  • "fri_end_time": "14:15:22Z",
  • "sat_start_time": "14:15:22Z",
  • "sat_end_time": "14:15:22Z",
  • "course": 0
}

planner_coursegroups_courses_courseschedules_retrieve

Return the given course schedule instance.

Authorizations:
jwtAuth
path Parameters
course
required
integer
course_group
required
integer
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "days_of_week": "strings",
  • "sun_start_time": "14:15:22Z",
  • "sun_end_time": "14:15:22Z",
  • "mon_start_time": "14:15:22Z",
  • "mon_end_time": "14:15:22Z",
  • "tue_start_time": "14:15:22Z",
  • "tue_end_time": "14:15:22Z",
  • "wed_start_time": "14:15:22Z",
  • "wed_end_time": "14:15:22Z",
  • "thu_start_time": "14:15:22Z",
  • "thu_end_time": "14:15:22Z",
  • "fri_start_time": "14:15:22Z",
  • "fri_end_time": "14:15:22Z",
  • "sat_start_time": "14:15:22Z",
  • "sat_end_time": "14:15:22Z",
  • "course": 0
}

planner_coursegroups_courses_courseschedules_update

Update the given course schedule instance.

Authorizations:
jwtAuth
path Parameters
course
required
integer
course_group
required
integer
id
required
integer
Request Body schema:
days_of_week
string = 7 characters ^[0-1]+$

Seven booleans (0 or 1) indicating which days of the week the course is on (week starts on Sunday).

sun_start_time
string <time>

An ISO-8601 time.

sun_end_time
string <time>

An ISO-8601 time.

mon_start_time
string <time>

An ISO-8601 time.

mon_end_time
string <time>

An ISO-8601 time.

tue_start_time
string <time>

An ISO-8601 time.

tue_end_time
string <time>

An ISO-8601 time.

wed_start_time
string <time>

An ISO-8601 time.

wed_end_time
string <time>

An ISO-8601 time.

thu_start_time
string <time>

An ISO-8601 time.

thu_end_time
string <time>

An ISO-8601 time.

fri_start_time
string <time>

An ISO-8601 time.

fri_end_time
string <time>

An ISO-8601 time.

sat_start_time
string <time>

An ISO-8601 time.

sat_end_time
string <time>

An ISO-8601 time.

Responses

Request samples

Content type
{
  • "days_of_week": "strings",
  • "sun_start_time": "14:15:22Z",
  • "sun_end_time": "14:15:22Z",
  • "mon_start_time": "14:15:22Z",
  • "mon_end_time": "14:15:22Z",
  • "tue_start_time": "14:15:22Z",
  • "tue_end_time": "14:15:22Z",
  • "wed_start_time": "14:15:22Z",
  • "wed_end_time": "14:15:22Z",
  • "thu_start_time": "14:15:22Z",
  • "thu_end_time": "14:15:22Z",
  • "fri_start_time": "14:15:22Z",
  • "fri_end_time": "14:15:22Z",
  • "sat_start_time": "14:15:22Z",
  • "sat_end_time": "14:15:22Z"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "days_of_week": "strings",
  • "sun_start_time": "14:15:22Z",
  • "sun_end_time": "14:15:22Z",
  • "mon_start_time": "14:15:22Z",
  • "mon_end_time": "14:15:22Z",
  • "tue_start_time": "14:15:22Z",
  • "tue_end_time": "14:15:22Z",
  • "wed_start_time": "14:15:22Z",
  • "wed_end_time": "14:15:22Z",
  • "thu_start_time": "14:15:22Z",
  • "thu_end_time": "14:15:22Z",
  • "fri_start_time": "14:15:22Z",
  • "fri_end_time": "14:15:22Z",
  • "sat_start_time": "14:15:22Z",
  • "sat_end_time": "14:15:22Z",
  • "course": 0
}

planner_courseschedules_list

Return a list of all course schedule instances for the authenticated user.

Authorizations:
jwtAuth
query Parameters
id
integer
updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner.homework

planner_coursegroups_courses_homework_list

Return a list of all homework instances for the given course. For convenience, homework instances on a GET are serialized with representations of associated attachments and reminders to avoid the need for redundant API calls.

Authorizations:
jwtAuth
path Parameters
course
required
integer
course_group
required
integer
query Parameters
category__id
Array of strings

Multiple values may be separated by commas.

category__id__in
Array of integers

Multiple values may be separated by commas.

category__title__in
string

Restrict to homework whose category title matches any value in the given comma-separated list.

completed
boolean
course__id
Array of strings

Multiple values may be separated by commas.

course__id__in
Array of integers

Multiple values may be separated by commas.

from
string <date-time>

Lower bound (inclusive) of the date range filter. Must be provided together with to. Date-only strings (e.g. 2026-02-02) are interpreted as midnight in the user's timezone.

id
integer
overdue
boolean

true returns incomplete homework whose start is in the past. false returns homework that is either completed or has a start in the future.

shown_on_calendar
boolean

Restrict to homework whose parent class group is visible on the user's calendar.

title
string
to
string <date-time>

Upper bound (inclusive) of the date range filter. Must be provided together with from.

updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner_coursegroups_courses_homework_create

Create a new homework instance for the given course.

Authorizations:
jwtAuth
path Parameters
course
required
integer
course_group
required
integer
Request Body schema:
required
title
required
string [ 1 .. 255 ] characters

A display name.

all_day
boolean

Whether it is an all day event.

show_end_time
boolean

Whether the end time should be shown on the calendar.

start
required
string <date-time>

ISO-8601 datetime. Must be on-or-before end.

end
required
string <date-time>

ISO-8601 datetime. Must be on-or-after start.

priority
integer [ 0 .. 100 ]

A priority integer between 0 and 100.

comments
string

An arbitrary string (which may contain HTML formatting).

current_grade
required
string [ 1 .. 255 ] characters

Fraction of points earned in "numerator/denominator" form (e.g. "25/30"). Use "-1/100" to indicate ungraded.

completed
boolean

Whether the homework has been completed. Flipping this to true sets completed_at to the current time automatically.

category
required
integer

The category to associate this homework with. If omitted or null, the homework is placed in the course's Uncategorized category (auto-created on first use).

materials
Array of integers

A list of materials with which to associate.

course
required
integer

The course with which to associate.

Responses

Request samples

Content type
Example

An ungraded assignment. current_grade uses the sentinel -1/100; the gradebook ignores rows with that value.

{
  • "title": "Problem Set 3",
  • "all_day": false,
  • "show_end_time": false,
  • "start": "2026-09-21T23:59:00-07:00",
  • "end": "2026-09-21T23:59:00-07:00",
  • "priority": 50,
  • "comments": "",
  • "current_grade": "-1/100",
  • "completed": false,
  • "category": 4242,
  • "materials": [ ]
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "all_day": true,
  • "show_end_time": true,
  • "start": "2019-08-24T14:15:22Z",
  • "end": "2019-08-24T14:15:22Z",
  • "priority": 100,
  • "comments": "string",
  • "current_grade": "string",
  • "completed": true,
  • "category": 0,
  • "materials": [
    ],
  • "attachments": [
    ],
  • "reminders": [
    ],
  • "course": 0,
  • "calendar_item_type": 0
}

planner_coursegroups_courses_homework_retrieve

Return the given homework instance. For convenience, homework instances on a GET are serialized with representations of associated attachments and reminders to avoid the need for redundant API calls.

Authorizations:
jwtAuth
path Parameters
course
required
integer
course_group
required
integer
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "all_day": true,
  • "show_end_time": true,
  • "start": "2019-08-24T14:15:22Z",
  • "end": "2019-08-24T14:15:22Z",
  • "priority": 100,
  • "comments": "string",
  • "current_grade": "string",
  • "completed": true,
  • "category": 0,
  • "materials": [
    ],
  • "attachments": [
    ],
  • "reminders": [
    ],
  • "course": 0,
  • "calendar_item_type": 0
}

planner_coursegroups_courses_homework_update

Update the given homework instance.

Authorizations:
jwtAuth
path Parameters
course
required
integer
course_group
required
integer
id
required
integer
Request Body schema:
required
title
required
string [ 1 .. 255 ] characters

A display name.

all_day
boolean

Whether it is an all day event.

show_end_time
boolean

Whether the end time should be shown on the calendar.

start
required
string <date-time>

ISO-8601 datetime. Must be on-or-before end.

end
required
string <date-time>

ISO-8601 datetime. Must be on-or-after start.

priority
integer [ 0 .. 100 ]

A priority integer between 0 and 100.

comments
string

An arbitrary string (which may contain HTML formatting).

current_grade
required
string [ 1 .. 255 ] characters

Fraction of points earned in "numerator/denominator" form (e.g. "25/30"). Use "-1/100" to indicate ungraded.

completed
boolean

Whether the homework has been completed. Flipping this to true sets completed_at to the current time automatically.

category
required
integer

The category to associate this homework with. If omitted or null, the homework is placed in the course's Uncategorized category (auto-created on first use).

materials
Array of integers

A list of materials with which to associate.

course
required
integer

The course with which to associate.

Responses

Request samples

Content type
{
  • "title": "string",
  • "all_day": true,
  • "show_end_time": true,
  • "start": "2019-08-24T14:15:22Z",
  • "end": "2019-08-24T14:15:22Z",
  • "priority": 100,
  • "comments": "string",
  • "current_grade": "string",
  • "completed": true,
  • "category": 0,
  • "materials": [
    ],
  • "course": 0
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "all_day": true,
  • "show_end_time": true,
  • "start": "2019-08-24T14:15:22Z",
  • "end": "2019-08-24T14:15:22Z",
  • "priority": 100,
  • "comments": "string",
  • "current_grade": "string",
  • "completed": true,
  • "category": 0,
  • "materials": [
    ],
  • "attachments": [
    ],
  • "reminders": [
    ],
  • "course": 0,
  • "calendar_item_type": 0
}

planner_coursegroups_courses_homework_partial_update

Update only the given attributes of the given homework instance.

Authorizations:
jwtAuth
path Parameters
course
required
integer
course_group
required
integer
id
required
integer
Request Body schema:
title
string [ 1 .. 255 ] characters

A display name.

all_day
boolean

Whether it is an all day event.

show_end_time
boolean

Whether the end time should be shown on the calendar.

start
string <date-time>

ISO-8601 datetime. Must be on-or-before end.

end
string <date-time>

ISO-8601 datetime. Must be on-or-after start.

priority
integer [ 0 .. 100 ]

A priority integer between 0 and 100.

comments
string

An arbitrary string (which may contain HTML formatting).

current_grade
string [ 1 .. 255 ] characters

Fraction of points earned in "numerator/denominator" form (e.g. "25/30"). Use "-1/100" to indicate ungraded.

completed
boolean

Whether the homework has been completed. Flipping this to true sets completed_at to the current time automatically.

category
integer

The category to associate this homework with. If omitted or null, the homework is placed in the course's Uncategorized category (auto-created on first use).

materials
Array of integers

A list of materials with which to associate.

course
integer

The course with which to associate.

Responses

Request samples

Content type
{
  • "title": "string",
  • "all_day": true,
  • "show_end_time": true,
  • "start": "2019-08-24T14:15:22Z",
  • "end": "2019-08-24T14:15:22Z",
  • "priority": 100,
  • "comments": "string",
  • "current_grade": "string",
  • "completed": true,
  • "category": 0,
  • "materials": [
    ],
  • "course": 0
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "all_day": true,
  • "show_end_time": true,
  • "start": "2019-08-24T14:15:22Z",
  • "end": "2019-08-24T14:15:22Z",
  • "priority": 100,
  • "comments": "string",
  • "current_grade": "string",
  • "completed": true,
  • "category": 0,
  • "materials": [
    ],
  • "attachments": [
    ],
  • "reminders": [
    ],
  • "course": 0,
  • "calendar_item_type": 0
}

planner_coursegroups_courses_homework_destroy

Delete the given homework instance.

Authorizations:
jwtAuth
path Parameters
course
required
integer
course_group
required
integer
id
required
integer

Responses

planner_coursegroups_courses_homework_clone_create

Clone the given homework instance, including its reminders.

Authorizations:
jwtAuth
path Parameters
course
required
integer
course_group
required
integer
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "all_day": true,
  • "show_end_time": true,
  • "start": "2019-08-24T14:15:22Z",
  • "end": "2019-08-24T14:15:22Z",
  • "priority": 100,
  • "comments": "string",
  • "current_grade": "string",
  • "completed": true,
  • "category": 0,
  • "materials": [
    ],
  • "attachments": [
    ],
  • "reminders": [
    ],
  • "course": 0,
  • "calendar_item_type": 0
}

planner_homework_list

Return a list of all homework instances for the authenticated user. For convenience, homework instances on a GET are serialized with representations of associated attachments and reminders to avoid the need for redundant API calls.

Authorizations:
jwtAuth
query Parameters
category__id
Array of strings

Multiple values may be separated by commas.

category__id__in
Array of integers

Multiple values may be separated by commas.

category__title__in
string

Restrict to homework whose category title matches any value in the given comma-separated list.

completed
boolean
course__id
Array of strings

Multiple values may be separated by commas.

course__id__in
Array of integers

Multiple values may be separated by commas.

from
string <date-time>

Lower bound (inclusive) of the date range filter. Must be provided together with to. Date-only strings (e.g. 2026-02-02) are interpreted as midnight in the user's timezone.

id
integer
ordering
string

Which field to use when ordering the results.

overdue
boolean

true returns incomplete homework whose start is in the past. false returns homework that is either completed or has a start in the future.

search
string

A search term.

shown_on_calendar
boolean

Restrict to homework whose parent class group is visible on the user's calendar.

title
string
to
string <date-time>

Upper bound (inclusive) of the date range filter. Must be provided together with from.

updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner.event

planner_events_list

Return a list of all Helium Event instances for the authenticated user. For convenience, Helium Events on a GET are serialized with representations of associated attachments and reminders to avoid the need for redundant API calls.

Authorizations:
jwtAuth
query Parameters
from
string <date-time>

Lower bound (inclusive) of the date range filter. Must be provided together with to. Date-only strings (e.g. 2026-02-02) are interpreted as midnight in the user's timezone.

id
integer
ordering
string

Which field to use when ordering the results.

search
string

A search term.

title
string
to
string <date-time>

Upper bound (inclusive) of the date range filter. Must be provided together with from.

updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner_events_create

Create a new Helium Event instance for the authenticated user.

Authorizations:
jwtAuth
Request Body schema:
required
title
required
string [ 1 .. 255 ] characters

A display name.

all_day
boolean

Whether it is an all day event.

show_end_time
boolean

Whether the end time should be shown on the calendar.

start
required
string <date-time>

ISO-8601 datetime. Must be on-or-before end.

end
required
string <date-time>

ISO-8601 datetime. Must be on-or-after start.

priority
integer [ 0 .. 100 ]

A priority integer between 0 and 100.

url
string or null <uri> <= 3000 characters

An optional URL that the calendar item references.

comments
string

An arbitrary string (which may contain HTML formatting).

owner_id
string or null <= 255 characters

An arbitrary string identifying the owning resource.

Responses

Request samples

Content type

A single Event occurrence. For recurring events, enumerate one row per occurrence, use the bulk-import path, or clone-and-PATCH a canonical row.

{
  • "title": "Office Hours — Prof. Smith",
  • "all_day": false,
  • "show_end_time": true,
  • "start": "2026-09-23T15:00:00-07:00",
  • "end": "2026-09-23T16:30:00-07:00",
  • "priority": 30,
  • "comments": "Drop-in Q&A in Bagley 412 or on Zoom."
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "all_day": true,
  • "show_end_time": true,
  • "start": "2019-08-24T14:15:22Z",
  • "end": "2019-08-24T14:15:22Z",
  • "priority": 100,
  • "comments": "string",
  • "owner_id": "string",
  • "color": "string",
  • "location": "string",
  • "attachments": [
    ],
  • "reminders": [
    ],
  • "user": 0,
  • "calendar_item_type": 0
}

planner_events_retrieve

Return the given Helium Event instance. For convenience, Helium Event instances on a GET are serialized with representations of associated attachments and reminders to avoid the need for redundant API calls.

Authorizations:
jwtAuth
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "all_day": true,
  • "show_end_time": true,
  • "start": "2019-08-24T14:15:22Z",
  • "end": "2019-08-24T14:15:22Z",
  • "priority": 100,
  • "comments": "string",
  • "owner_id": "string",
  • "color": "string",
  • "location": "string",
  • "attachments": [
    ],
  • "reminders": [
    ],
  • "user": 0,
  • "calendar_item_type": 0
}

planner_events_update

Update the given Helium Event instance.

Authorizations:
jwtAuth
path Parameters
id
required
integer
Request Body schema:
required
title
required
string [ 1 .. 255 ] characters

A display name.

all_day
boolean

Whether it is an all day event.

show_end_time
boolean

Whether the end time should be shown on the calendar.

start
required
string <date-time>

ISO-8601 datetime. Must be on-or-before end.

end
required
string <date-time>

ISO-8601 datetime. Must be on-or-after start.

priority
integer [ 0 .. 100 ]

A priority integer between 0 and 100.

url
string or null <uri> <= 3000 characters

An optional URL that the calendar item references.

comments
string

An arbitrary string (which may contain HTML formatting).

owner_id
string or null <= 255 characters

An arbitrary string identifying the owning resource.

Responses

Request samples

Content type
{
  • "title": "string",
  • "all_day": true,
  • "show_end_time": true,
  • "start": "2019-08-24T14:15:22Z",
  • "end": "2019-08-24T14:15:22Z",
  • "priority": 100,
  • "comments": "string",
  • "owner_id": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "all_day": true,
  • "show_end_time": true,
  • "start": "2019-08-24T14:15:22Z",
  • "end": "2019-08-24T14:15:22Z",
  • "priority": 100,
  • "comments": "string",
  • "owner_id": "string",
  • "color": "string",
  • "location": "string",
  • "attachments": [
    ],
  • "reminders": [
    ],
  • "user": 0,
  • "calendar_item_type": 0
}

planner_events_partial_update

Update only the given attributes of the given Helium Event instance.

Authorizations:
jwtAuth
path Parameters
id
required
integer
Request Body schema:
title
string [ 1 .. 255 ] characters

A display name.

all_day
boolean

Whether it is an all day event.

show_end_time
boolean

Whether the end time should be shown on the calendar.

start
string <date-time>

ISO-8601 datetime. Must be on-or-before end.

end
string <date-time>

ISO-8601 datetime. Must be on-or-after start.

priority
integer [ 0 .. 100 ]

A priority integer between 0 and 100.

url
string or null <uri> <= 3000 characters

An optional URL that the calendar item references.

comments
string

An arbitrary string (which may contain HTML formatting).

owner_id
string or null <= 255 characters

An arbitrary string identifying the owning resource.

Responses

Request samples

Content type
{
  • "title": "string",
  • "all_day": true,
  • "show_end_time": true,
  • "start": "2019-08-24T14:15:22Z",
  • "end": "2019-08-24T14:15:22Z",
  • "priority": 100,
  • "comments": "string",
  • "owner_id": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "all_day": true,
  • "show_end_time": true,
  • "start": "2019-08-24T14:15:22Z",
  • "end": "2019-08-24T14:15:22Z",
  • "priority": 100,
  • "comments": "string",
  • "owner_id": "string",
  • "color": "string",
  • "location": "string",
  • "attachments": [
    ],
  • "reminders": [
    ],
  • "user": 0,
  • "calendar_item_type": 0
}

planner_events_destroy

Delete the given Helium Event instance.

Authorizations:
jwtAuth
path Parameters
id
required
integer

Responses

planner_events_clone_create

Clone the given event instance, including its reminders.

Authorizations:
jwtAuth
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "all_day": true,
  • "show_end_time": true,
  • "start": "2019-08-24T14:15:22Z",
  • "end": "2019-08-24T14:15:22Z",
  • "priority": 100,
  • "comments": "string",
  • "owner_id": "string",
  • "color": "string",
  • "location": "string",
  • "attachments": [
    ],
  • "reminders": [
    ],
  • "user": 0,
  • "calendar_item_type": 0
}

planner_events_delete_all_destroy

Permanently delete every Event instance owned by the authenticated user, along with any notes attached to those events. This operation is irreversible and cannot be filtered or scoped — it affects the entire user's event history. Course-derived schedules and homework are not touched.

Authorizations:
jwtAuth

Responses

planner

planner_grades_retrieve

Return the grades for the authenticated user.

The result is a list of course groups. Each course group contains a nested list of courses. Each course contains a nested list of categories.

Each entity contains at least three fields: id, overall_grade, and grade_points. An overall_grade of -1 is the sentinel for "no graded homework yet" — not a real percentage.

grade_points represents a list of grades accumulating over time. This is a list made up of individual grade points, each a tuple containing values of the format [time, grade_at_time, homework_id, homework_title, homework_grade, category_id, course_id].

Authorizations:
jwtAuth

Responses

Response samples

Content type
application/json
{
  • "course_groups": [
    ]
}

planner.materialgroup

planner_materialgroups_list

Return a list of all material group instances for the authenticated user.

Authorizations:
jwtAuth
query Parameters
id
integer
shown_on_calendar
boolean
title
string
updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner_materialgroups_create

Create a new material group instance for the authenticated user.

Authorizations:
jwtAuth
Request Body schema:
required
title
required
string [ 1 .. 255 ] characters

A display name.

shown_on_calendar
boolean

Whether items should be shown on the calendar.

Responses

Request samples

Content type
{
  • "title": "string",
  • "shown_on_calendar": true
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "shown_on_calendar": true,
  • "user": 0
}

planner_materialgroups_retrieve

Return the given material group instance.

Authorizations:
jwtAuth
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "shown_on_calendar": true,
  • "user": 0
}

planner_materialgroups_update

Update the given material group instance.

Authorizations:
jwtAuth
path Parameters
id
required
integer
Request Body schema:
required
title
required
string [ 1 .. 255 ] characters

A display name.

shown_on_calendar
boolean

Whether items should be shown on the calendar.

Responses

Request samples

Content type
{
  • "title": "string",
  • "shown_on_calendar": true
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "shown_on_calendar": true,
  • "user": 0
}

planner_materialgroups_destroy

Delete the given material group instance.

Authorizations:
jwtAuth
path Parameters
id
required
integer

Responses

planner.material

planner_materialgroups_materials_list

Return a list of all material instances for the given material group.

Authorizations:
jwtAuth
path Parameters
material_group
required
integer
query Parameters
id
integer
shown_on_calendar
boolean

Restrict to resources whose parent resource group is visible on the user's calendar.

title
string
updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner_materialgroups_materials_create

Create a new material instance for the given material group.

Authorizations:
jwtAuth
path Parameters
material_group
required
integer
Request Body schema:
required
title
required
string [ 1 .. 255 ] characters

A display name.

status
integer [ 0 .. 9223372036854776000 ]
Enum: 0 1 2 3 4 5 6 7

A valid material status choice.

  • 0 - Owned
  • 1 - Rented
  • 2 - Ordered
  • 3 - Shipped
  • 4 - Need
  • 5 - Received
  • 6 - To Sell
  • 7 - Digital
condition
integer [ 0 .. 9223372036854776000 ]
Enum: 0 1 2 3 4 5 6 7 8

A valid material condition choice.

  • 0 - Brand New
  • 1 - Refurbished
  • 2 - Used - Like New
  • 3 - Used - Very Good
  • 4 - Used - Good
  • 5 - Used - Acceptable
  • 6 - Used - Poor
  • 7 - Broken
  • 8 - Digital
website
string or null <uri> <= 3000 characters

A valid URL.

price
string <= 255 characters

A price string.

details
string

An arbitrary string (which may contain HTML formatting).

material_group
required
integer

The material group with which to associate.

courses
Array of integers

A list of courses with which to associate.

Responses

Request samples

Content type
{
  • "title": "string",
  • "status": 0,
  • "condition": 0,
  • "website": "http://example.com",
  • "price": "string",
  • "details": "string",
  • "material_group": 0,
  • "courses": [
    ]
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "status": 0,
  • "condition": 0,
  • "website": "http://example.com",
  • "price": "string",
  • "details": "string",
  • "material_group": 0,
  • "courses": [
    ]
}

planner_materialgroups_materials_retrieve

Return the given material instance.

Authorizations:
jwtAuth
path Parameters
id
required
integer
material_group
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "status": 0,
  • "condition": 0,
  • "website": "http://example.com",
  • "price": "string",
  • "details": "string",
  • "material_group": 0,
  • "courses": [
    ]
}

planner_materialgroups_materials_update

Update the given material instance.

Authorizations:
jwtAuth
path Parameters
id
required
integer
material_group
required
integer
Request Body schema:
required
title
required
string [ 1 .. 255 ] characters

A display name.

status
integer [ 0 .. 9223372036854776000 ]
Enum: 0 1 2 3 4 5 6 7

A valid material status choice.

  • 0 - Owned
  • 1 - Rented
  • 2 - Ordered
  • 3 - Shipped
  • 4 - Need
  • 5 - Received
  • 6 - To Sell
  • 7 - Digital
condition
integer [ 0 .. 9223372036854776000 ]
Enum: 0 1 2 3 4 5 6 7 8

A valid material condition choice.

  • 0 - Brand New
  • 1 - Refurbished
  • 2 - Used - Like New
  • 3 - Used - Very Good
  • 4 - Used - Good
  • 5 - Used - Acceptable
  • 6 - Used - Poor
  • 7 - Broken
  • 8 - Digital
website
string or null <uri> <= 3000 characters

A valid URL.

price
string <= 255 characters

A price string.

details
string

An arbitrary string (which may contain HTML formatting).

material_group
required
integer

The material group with which to associate.

courses
Array of integers

A list of courses with which to associate.

Responses

Request samples

Content type
{
  • "title": "string",
  • "status": 0,
  • "condition": 0,
  • "website": "http://example.com",
  • "price": "string",
  • "details": "string",
  • "material_group": 0,
  • "courses": [
    ]
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "status": 0,
  • "condition": 0,
  • "website": "http://example.com",
  • "price": "string",
  • "details": "string",
  • "material_group": 0,
  • "courses": [
    ]
}

planner_materialgroups_materials_destroy

Delete the given material instance.

Authorizations:
jwtAuth
path Parameters
id
required
integer
material_group
required
integer

Responses

planner_materials_list

Return a list of all material instances for the authenticated user.

Authorizations:
jwtAuth
query Parameters
courses
Array of integers

Restrict the result to materials linked to any of the given class IDs. Repeat the parameter to pass multiple IDs: ?courses=1&courses=2.

id
integer
shown_on_calendar
boolean

Restrict to resources whose parent resource group is visible on the user's calendar.

title
string
updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner.note

planner_notes_list

Return all notes for the authenticated user. By default the content field is omitted from each note — pass include_content=true to receive the full Quill Delta JSON.

Authorizations:
jwtAuth
query Parameters
event
integer

Filter to the note linked to this event ID.

has_link
boolean

true returns only notes linked to an entity; false returns only standalone notes.

homework
integer

Filter to the note linked to this homework ID.

include_content
boolean

By default the content field is omitted from list responses to keep them light. Pass true to include the full Quill Delta JSON of each note.

linked_entity_type
string

Filter by what kind of entity the note is linked to. One of homework, event, resource, or standalone (no link).

ordering
string

Which field to use when ordering the results.

resource
integer

Filter to the note linked to this resource ID.

search
string

A search term.

title
string
title__icontains
string
updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner_notes_create

Create a note for the authenticated user. content is rich-text JSON (Quill Delta compatible).

Linking is optional but constrained: a note may be linked to a single entity — pass a one-item list under homework, events, or resources — or omit them all to create a standalone note. The three link fields are mutually exclusive, and each target entity may have at most one linked note.

Authorizations:
jwtAuth
Request Body schema:
title
string <= 255 characters

Display title for the note.

content
any or null

Rich-text JSON (Quill Delta compatible). Setting this to empty on a note that has a linked entity deletes the note and returns 204.

homework
Array of integers

Linked homework. A note may be linked to one homework, one event, or one resource — never more than one type, and never more than one entity within a type.

events
Array of integers

Linked event. Mutually exclusive with homework and resources (see homework help).

resources
Array of integers

Linked resource. Mutually exclusive with homework and events (see homework help).

Responses

Request samples

Content type
{
  • "title": "string",
  • "content": null,
  • "homework": [
    ],
  • "events": [
    ],
  • "resources": [
    ]
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "content": null,
  • "homework": [
    ],
  • "events": [
    ],
  • "resources": [
    ],
  • "created_at": "2019-08-24T14:15:22Z",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "linked_entity_type": "string",
  • "linked_entity_title": "string",
  • "linked_entity_due": "2019-08-24T14:15:22Z",
  • "linked_entity_completed": true,
  • "course_color": "string",
  • "category_color": "string"
}

planner_notes_retrieve

Return the given Note instance.

Authorizations:
jwtAuth
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "content": null,
  • "homework": [
    ],
  • "events": [
    ],
  • "resources": [
    ],
  • "created_at": "2019-08-24T14:15:22Z",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "linked_entity_type": "string",
  • "linked_entity_title": "string",
  • "linked_entity_due": "2019-08-24T14:15:22Z",
  • "linked_entity_completed": true,
  • "course_color": "string",
  • "category_color": "string"
}

planner_notes_update

Update the given note. content is rich-text JSON (Quill Delta compatible).

Linking rules from create still apply on update (at most one linked entity, mutually exclusive). If a linked note has its content cleared (empty Delta), the note is deleted and no body is returned — see the alternate response for this case.

Authorizations:
jwtAuth
path Parameters
id
required
integer
Request Body schema:
title
string <= 255 characters

Display title for the note.

content
any or null

Rich-text JSON (Quill Delta compatible). Setting this to empty on a note that has a linked entity deletes the note and returns 204.

homework
Array of integers

Linked homework. A note may be linked to one homework, one event, or one resource — never more than one type, and never more than one entity within a type.

events
Array of integers

Linked event. Mutually exclusive with homework and resources (see homework help).

resources
Array of integers

Linked resource. Mutually exclusive with homework and events (see homework help).

Responses

Request samples

Content type
{
  • "title": "string",
  • "content": null,
  • "homework": [
    ],
  • "events": [
    ],
  • "resources": [
    ]
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "content": null,
  • "homework": [
    ],
  • "events": [
    ],
  • "resources": [
    ],
  • "created_at": "2019-08-24T14:15:22Z",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "linked_entity_type": "string",
  • "linked_entity_title": "string",
  • "linked_entity_due": "2019-08-24T14:15:22Z",
  • "linked_entity_completed": true,
  • "course_color": "string",
  • "category_color": "string"
}

planner_notes_partial_update

Partially update the given note. Same linking rules and content-cleared deletion behavior as PUT.

Authorizations:
jwtAuth
path Parameters
id
required
integer
Request Body schema:
title
string <= 255 characters

Display title for the note.

content
any or null

Rich-text JSON (Quill Delta compatible). Setting this to empty on a note that has a linked entity deletes the note and returns 204.

homework
Array of integers

Linked homework. A note may be linked to one homework, one event, or one resource — never more than one type, and never more than one entity within a type.

events
Array of integers

Linked event. Mutually exclusive with homework and resources (see homework help).

resources
Array of integers

Linked resource. Mutually exclusive with homework and events (see homework help).

Responses

Request samples

Content type
{
  • "title": "string",
  • "content": null,
  • "homework": [
    ],
  • "events": [
    ],
  • "resources": [
    ]
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "content": null,
  • "homework": [
    ],
  • "events": [
    ],
  • "resources": [
    ],
  • "created_at": "2019-08-24T14:15:22Z",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "linked_entity_type": "string",
  • "linked_entity_title": "string",
  • "linked_entity_due": "2019-08-24T14:15:22Z",
  • "linked_entity_completed": true,
  • "course_color": "string",
  • "category_color": "string"
}

planner_notes_destroy

Delete the given Note instance.

Authorizations:
jwtAuth
path Parameters
id
required
integer

Responses

planner.reminder

planner_reminders_list

Return a list of all reminder instances for the authenticated user. For convenience, reminder instances on a GET are serialized to a depth of two to avoid the need for redundant API calls.

Authorizations:
jwtAuth
query Parameters
course
integer
dismissed
boolean
event
integer
homework
integer
id
integer
sent
boolean
start_of_range__lte
string <date-time>
title
string
type
integer
Enum: 0 1 2 3

A valid reminder type choice.

  • 0 - Popup
  • 1 - Email
  • 2 - Text
  • 3 - Push
updated_at__gte
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

planner_reminders_create

Create a reminder for the authenticated user.

Exactly one of event, homework, or course must be given — that's the parent the reminder fires against. course-typed reminders are repeating: only one active reminder is kept per (course, type, offset, offset_type) combination, and the next occurrence is rolled forward by the server as each one fires.

Authorizations:
jwtAuth
Request Body schema:
required
title
required
string [ 1 .. 255 ] characters

A display name.

message
required
string non-empty

A string that will be used as the reminder message (may contain HTML formatting).

start_of_range
string or null <date-time>

Datetime the reminder fires. Server-computed from the parent (event, homework, or course) start time minus offset × offset_type whenever the parent or offset changes; do not send on create.

offset
integer [ 0 .. 100 ]
Default: 30

How far before the parent start time to fire, measured in offset_type units. Capped at 100.

offset_type
integer [ 0 .. 9223372036854776000 ]
Default: 0
Enum: 0 1 2 3

A valid reminder offset type choice.

  • 0 - minutes
  • 1 - hours
  • 2 - days
  • 3 - weeks
type
integer [ 0 .. 9223372036854776000 ]
Default: 0
Enum: 0 1 2 3

A valid reminder type choice.

  • 0 - Popup
  • 1 - Email
  • 2 - Text
  • 3 - Push
sent
boolean
Default: false

Whether the reminder has been sent.

dismissed
boolean
Default: false

Whether the reminder has been dismissed.

homework
integer or null

The homework with which to associate.

event
integer or null

The event with which to associate.

course
integer or null

The course with which to associate.

Responses

Request samples

Content type
{
  • "title": "string",
  • "message": "string",
  • "start_of_range": "2019-08-24T14:15:22Z",
  • "offset": 30,
  • "offset_type": 0,
  • "type": 0,
  • "sent": false,
  • "dismissed": false,
  • "homework": 0,
  • "event": 0,
  • "course": 0
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "message": "string",
  • "start_of_range": "2019-08-24T14:15:22Z",
  • "offset": 30,
  • "offset_type": 0,
  • "type": 0,
  • "sent": false,
  • "dismissed": false,
  • "homework": 0,
  • "event": 0,
  • "course": 0,
  • "user": 0
}

planner_reminders_retrieve

Return the given reminder instance. For convenience, reminder instances on a GET are serialized to a depth of two to avoid the need for redundant API calls.

Authorizations:
jwtAuth
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "message": "string",
  • "start_of_range": "2019-08-24T14:15:22Z",
  • "offset": 30,
  • "offset_type": 0,
  • "type": 0,
  • "sent": false,
  • "dismissed": false,
  • "homework": 0,
  • "event": 0,
  • "course": 0,
  • "user": 0
}

planner_reminders_update

Update the given reminder instance.

Authorizations:
jwtAuth
path Parameters
id
required
integer
Request Body schema:
required
title
required
string [ 1 .. 255 ] characters

A display name.

message
required
string non-empty

A string that will be used as the reminder message (may contain HTML formatting).

start_of_range
string or null <date-time>

Datetime the reminder fires. Server-computed from the parent (event, homework, or course) start time minus offset × offset_type whenever the parent or offset changes; do not send on create.

offset
integer [ 0 .. 100 ]
Default: 30

How far before the parent start time to fire, measured in offset_type units. Capped at 100.

offset_type
integer [ 0 .. 9223372036854776000 ]
Default: 0
Enum: 0 1 2 3

A valid reminder offset type choice.

  • 0 - minutes
  • 1 - hours
  • 2 - days
  • 3 - weeks
type
integer [ 0 .. 9223372036854776000 ]
Default: 0
Enum: 0 1 2 3

A valid reminder type choice.

  • 0 - Popup
  • 1 - Email
  • 2 - Text
  • 3 - Push
sent
boolean
Default: false

Whether the reminder has been sent.

dismissed
boolean
Default: false

Whether the reminder has been dismissed.

homework
integer or null

The homework with which to associate.

event
integer or null

The event with which to associate.

course
integer or null

The course with which to associate.

Responses

Request samples

Content type
{
  • "title": "string",
  • "message": "string",
  • "start_of_range": "2019-08-24T14:15:22Z",
  • "offset": 30,
  • "offset_type": 0,
  • "type": 0,
  • "sent": false,
  • "dismissed": false,
  • "homework": 0,
  • "event": 0,
  • "course": 0
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "message": "string",
  • "start_of_range": "2019-08-24T14:15:22Z",
  • "offset": 30,
  • "offset_type": 0,
  • "type": 0,
  • "sent": false,
  • "dismissed": false,
  • "homework": 0,
  • "event": 0,
  • "course": 0,
  • "user": 0
}

planner_reminders_partial_update

Update only the given attributes of the given reminder instance.

Authorizations:
jwtAuth
path Parameters
id
required
integer
Request Body schema:
title
string [ 1 .. 255 ] characters

A display name.

message
string non-empty

A string that will be used as the reminder message (may contain HTML formatting).

start_of_range
string or null <date-time>

Datetime the reminder fires. Server-computed from the parent (event, homework, or course) start time minus offset × offset_type whenever the parent or offset changes; do not send on create.

offset
integer [ 0 .. 100 ]
Default: 30

How far before the parent start time to fire, measured in offset_type units. Capped at 100.

offset_type
integer [ 0 .. 9223372036854776000 ]
Default: 0
Enum: 0 1 2 3

A valid reminder offset type choice.

  • 0 - minutes
  • 1 - hours
  • 2 - days
  • 3 - weeks
type
integer [ 0 .. 9223372036854776000 ]
Default: 0
Enum: 0 1 2 3

A valid reminder type choice.

  • 0 - Popup
  • 1 - Email
  • 2 - Text
  • 3 - Push
sent
boolean
Default: false

Whether the reminder has been sent.

dismissed
boolean
Default: false

Whether the reminder has been dismissed.

homework
integer or null

The homework with which to associate.

event
integer or null

The event with which to associate.

course
integer or null

The course with which to associate.

Responses

Request samples

Content type
{
  • "title": "string",
  • "message": "string",
  • "start_of_range": "2019-08-24T14:15:22Z",
  • "offset": 30,
  • "offset_type": 0,
  • "type": 0,
  • "sent": false,
  • "dismissed": false,
  • "homework": 0,
  • "event": 0,
  • "course": 0
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "title": "string",
  • "message": "string",
  • "start_of_range": "2019-08-24T14:15:22Z",
  • "offset": 30,
  • "offset_type": 0,
  • "type": 0,
  • "sent": false,
  • "dismissed": false,
  • "homework": 0,
  • "event": 0,
  • "course": 0,
  • "user": 0
}

planner_reminders_destroy

Delete the given reminder.

For course-typed reminders, this also deletes every active reminder in the same series (matched on course, type, offset, offset_type) plus any past sent-but-undismissed reminders for that course / type — so the series is fully torn down, not just the single targeted row.

Authorizations:
jwtAuth
path Parameters
id
required
integer

Responses