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.
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.
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 material — material_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.
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:
POST /planner/coursegroups/ — the term (semester / quarter).POST /planner/coursegroups/{course_group}/courses/ — each class within the term.POST /planner/coursegroups/{course_group}/courses/{course}/courseschedules/ — recurring weekly meeting times for the class (at most one schedule per class).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.POST /planner/coursegroups/{course_group}/courses/{course}/homework/ — individual assignments. Set current_grade to "-1/100" for ungraded items.POST /planner/events/ — non-class calendar items (study sessions, office hours). Events have no class dependency.POST /planner/reminders/ — push/email reminders attached to exactly one parent (event, homework, or course).POST /planner/notes/, POST /planner/attachments/ — rich-text notes and file uploads linked to a single parent entity each./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:
id within the same file, so there is no GET-then-POST dance.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.
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:
course.start_date to course.end_date.course_schedule.days_of_week (a 7-character 0/1 string starting Sunday); skip the date if that position is 0.course.exceptions or the parent course_group.exceptions (both CSVs of YYYYMMDD strings, e.g. "20260309,20260310" for spring break).<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.
A few shapes that return 2xx but produce semantically wrong data:
"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.Course.exceptions (YYYYMMDD CSV) to skip every alternate week from a normal weekly schedule.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."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.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.Authenticate the user with email and password and return an access/refresh token pair.
| username required | string (Email) non-empty The user's email address. |
| password required | string non-empty The password for the user. |
The username field holds the user's email address.
{- "username": "student@example.com",
- "password": "correct horse battery staple"
}{- "access": "string",
- "refresh": "string"
}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).
| 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).
|
{- "id_token": "string",
- "provider": "google"
}{- "access": "string",
- "refresh": "string"
}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>
| refresh required | string non-empty |
{- "refresh": "string"
}{- "refresh": "string",
- "access": "string"
}Return the authenticated user instance, including settings details.
{- "id": 0,
- "username": "string",
- "email": "user@example.com",
- "email_changing": "user@example.com",
- "profile": {
- "phone": "string",
- "phone_changing": "string",
- "phone_verified": true,
- "user": 0
}, - "settings": {
- "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
}, - "oauth_providers": [
- {
- "id": 0,
- "provider": "google",
- "provider_display": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "last_used_at": "2019-08-24T14:15:22Z"
}
], - "has_usable_password": true,
- "has_oauth_providers": true
}Update the authenticated user instance. This endpoint only updates the fields given (i.e. no need to PATCH for partials data).
| 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. |
{- "username": "string",
- "email": "user@example.com",
- "old_password": "string",
- "password": "string"
}{- "id": 0,
- "username": "string",
- "email": "user@example.com",
- "email_changing": "user@example.com",
- "profile": {
- "phone": "string",
- "phone_changing": "string",
- "phone_verified": true,
- "user": 0
}, - "settings": {
- "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
}, - "oauth_providers": [
- {
- "id": 0,
- "provider": "google",
- "provider_display": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "last_used_at": "2019-08-24T14:15:22Z"
}
], - "has_usable_password": true,
- "has_oauth_providers": true
}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.
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.
| email required | string non-empty The email for the user. |
{- "email": "string"
}Update the authenticated user's settings. This endpoint only updates the fields given (i.e. no need to PATCH for partials data).
| 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.
|
| default_view | integer [ 0 .. 9223372036854776000 ] Enum: 0 1 2 3 4 A valid default calendar view choice.
|
| week_starts_on | integer [ 0 .. 9223372036854776000 ] Enum: 0 1 2 3 4 5 6 A valid day on which the week should start choice.
|
| 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.
|
| 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.
|
| 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.
|
| 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. |
{- "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
}{- "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
}Return the authenticated user instance, including settings details.
{- "id": 0,
- "username": "string",
- "email": "user@example.com",
- "email_changing": "user@example.com",
- "profile": {
- "phone": "string",
- "phone_changing": "string",
- "phone_verified": true,
- "user": 0
}, - "settings": {
- "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
}, - "oauth_providers": [
- {
- "id": 0,
- "provider": "google",
- "provider_display": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "last_used_at": "2019-08-24T14:15:22Z"
}
], - "has_usable_password": true,
- "has_oauth_providers": true
}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.
| from | string <date-time> Lower bound (inclusive) of the date range filter. Must be provided together with |
| search | string A search term. |
| to | string <date-time> Upper bound (inclusive) of the date range filter. Must be provided together with |
[- {
- "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": [
- 0
], - "reminders": [
- 0
], - "user": 0,
- "calendar_item_type": 0
}
]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.
| course | integer |
| event | integer |
| homework | integer |
| id | integer |
| updated_at__gte | string <date-time> |
[- {
- "id": 0,
- "title": "string",
- "size": 0,
- "course": 0,
- "event": 0,
- "homework": 0,
- "user": 0
}
]Return a list of all category instances for the authenticated user.
| 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> |
[- {
- "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
}
]Return a list of all course group instances for the authenticated user.
| 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> |
[- {
- "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
}
]Return a list of all course instances for the authenticated user, including course schedule details.
| 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> |
[- {
- "id": 0,
- "title": "string",
- "room": "string",
- "credits": "string",
- "color": "string",
- "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": [
- {
- "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
}
], - "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
}
]Return a list of all course schedule instances for the authenticated user.
| id | integer |
| updated_at__gte | string <date-time> |
[- {
- "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
}
]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.
| from | string <date-time> Lower bound (inclusive) of the date range filter. Must be provided together with |
| 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 |
| updated_at__gte | string <date-time> |
[- {
- "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": [
- {
- "id": 0,
- "title": "string",
- "size": 0,
- "course": 0,
- "event": 0,
- "homework": 0,
- "user": 0
}
], - "reminders": [
- {
- "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
}
], - "user": 0,
- "calendar_item_type": 0
}
]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.
| 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 |
| id | integer |
| ordering | string Which field to use when ordering the results. |
| overdue | boolean
|
| 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 |
| updated_at__gte | string <date-time> |
[- {
- "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": [
- 0
], - "attachments": [
- {
- "id": 0,
- "title": "string",
- "size": 0,
- "course": 0,
- "event": 0,
- "homework": 0,
- "user": 0
}
], - "reminders": [
- {
- "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
}
], - "course": 0,
- "calendar_item_type": 0
}
]Return a list of all material group instances for the authenticated user.
| id | integer |
| shown_on_calendar | boolean |
| title | string |
| updated_at__gte | string <date-time> |
[- {
- "id": 0,
- "title": "string",
- "shown_on_calendar": true,
- "user": 0
}
]Return a list of all material instances for the authenticated user.
| courses | Array of integers Restrict the result to materials linked to any of the given class IDs. Repeat the parameter to pass multiple IDs: |
| 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> |
[- {
- "id": 0,
- "title": "string",
- "status": 0,
- "condition": 0,
- "price": "string",
- "details": "string",
- "material_group": 0,
- "courses": [
- 0
]
}
]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.
| 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.
|
| updated_at__gte | string <date-time> |
[- {
- "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
}
]Register a new user.
| 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.
|
| example_schedule | boolean Default: true If False, skip provisioning the user with an example schedule. |
{- "username": "string",
- "email": "string",
- "password": "string",
- "time_zone": "Africa/Abidjan",
- "example_schedule": true
}{- "id": 0,
- "username": "string",
- "email": "user@example.com",
- "email_changing": "user@example.com",
- "profile": {
- "phone": "string",
- "phone_changing": "string",
- "phone_verified": true,
- "user": 0
}, - "settings": {
- "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
}, - "oauth_providers": [
- {
- "id": 0,
- "provider": "google",
- "provider_display": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "last_used_at": "2019-08-24T14:15:22Z"
}
], - "has_usable_password": true,
- "has_oauth_providers": true
}Verify an email address for the user instance associated with the email and verification code.
Returns access and refresh tokens for immediate authentication.
| code | string The code sent to |
| username | string The user's email address. |
{- "access": "string",
- "refresh": "string"
}Create a new external calendar instance for the authenticated user.
| 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. |
{- "title": "string",
- "color": "string",
- "shown_on_calendar": true
}{- "id": 0,
- "title": "string",
- "color": "string",
- "shown_on_calendar": true,
- "user": 0
}{- "id": 0,
- "title": "string",
- "color": "string",
- "shown_on_calendar": true,
- "user": 0
}| id required | integer |
| 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. |
{- "title": "string",
- "color": "string",
- "shown_on_calendar": true
}{- "id": 0,
- "title": "string",
- "color": "string",
- "shown_on_calendar": true,
- "user": 0
}Partially update the given external calendar instance.
| id required | integer |
| 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. |
{- "title": "string",
- "color": "string",
- "shown_on_calendar": true
}{- "id": 0,
- "title": "string",
- "color": "string",
- "shown_on_calendar": true,
- "user": 0
}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.
| id required | integer |
| from | string <date-time> Lower bound (inclusive) of the date range filter. Must be provided together with |
| search | string A search term. |
| to | string <date-time> Upper bound (inclusive) of the date range filter. Must be provided together with |
[- {
- "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": [
- 0
], - "reminders": [
- 0
], - "user": 0,
- "calendar_item_type": 0
}
]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.
| from | string <date-time> Lower bound (inclusive) of the date range filter. Must be provided together with |
| search | string A search term. |
| to | string <date-time> Upper bound (inclusive) of the date range filter. Must be provided together with |
[- {
- "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": [
- 0
], - "reminders": [
- 0
], - "user": 0,
- "calendar_item_type": 0
}
]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.
| private_slug required | string |
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.
| private_slug required | string |
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.
| private_slug required | string |
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.
{
}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.
{- "external_calendars": [
- {
- "id": 0,
- "title": "string",
- "color": "string",
- "shown_on_calendar": true,
- "user": 0
}
], - "course_groups": [
- {
- "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
}
], - "courses": [
- {
- "id": 0,
- "title": "string",
- "room": "string",
- "credits": "string",
- "color": "string",
- "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": [
- {
- "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
}
], - "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
}
], - "course_schedules": [
- {
- "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
}
], - "categories": [
- {
- "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
}
], - "resource_groups": [
- {
- "id": 0,
- "title": "string",
- "shown_on_calendar": true,
- "user": 0
}
], - "resources": [
- {
- "id": 0,
- "title": "string",
- "status": 0,
- "condition": 0,
- "price": "string",
- "material_group": 0,
- "courses": [
- 0
]
}
], - "events": [
- {
- "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,
- "owner_id": "string",
- "color": "string",
- "location": "string",
- "attachments": [
- 0
], - "reminders": [
- 0
], - "user": 0,
- "calendar_item_type": 0
}
], - "homework": [
- {
- "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,
- "current_grade": "string",
- "completed": true,
- "category": 0,
- "materials": [
- 0
], - "attachments": [
- 0
], - "reminders": [
- 0
], - "course": 0,
- "calendar_item_type": 0
}
], - "reminders": [
- {
- "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
}
], - "notes": [
- {
- "id": 0,
- "title": "string",
- "content": null,
- "homework": [
- 0
], - "events": [
- 0
], - "resources": [
- 0
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
]
}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.
| file required | Array of strings <binary> [ items <binary > ] One or more exported JSON files, sent as the multipart |
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": [] }
{- "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
}Return runtime configuration: version, upload limits, token lifetimes, accepted file types, supported OAuth providers.
{- "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": [
- "string"
], - "import_file_types": [
- "string"
]
}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.
| course | integer |
| event | integer |
| homework | integer |
| id | integer |
| updated_at__gte | string <date-time> |
[- {
- "id": 0,
- "title": "string",
- "size": 0,
- "course": 0,
- "event": 0,
- "homework": 0,
- "user": 0
}
]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.
| file required | Array of strings <binary> [ items <binary > ] One or more files, sent as the multipart |
| course | integer The course with which to associate. |
| event | integer The event with which to associate. |
| homework | integer The homework with which to associate. |
[- {
- "id": 0,
- "title": "string",
- "size": 0,
- "course": 0,
- "event": 0,
- "homework": 0,
- "user": 0
}
]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.
| id required | integer |
{- "id": 0,
- "title": "string",
- "size": 0,
- "course": 0,
- "event": 0,
- "homework": 0,
- "user": 0
}Return a list of all category instances for the authenticated user.
| 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> |
[- {
- "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
}
]Return a list of all category instances for the given course.
| course required | integer |
| course_group required | integer |
| 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> |
[- {
- "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
}
]Create a new category instance for the given course.
Note that all weights associated with a single course cannot exceed a value of 100.
| course required | integer |
| course_group required | integer |
| 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. |
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"
}{- "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
}Return the given category instance.
| course required | integer |
| course_group required | integer |
| id required | integer |
{- "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
}Update the given category instance.
| course required | integer |
| course_group required | integer |
| id required | integer |
| 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. |
{- "title": "string",
- "weight": "string",
- "color": "string"
}{- "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
}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.
| course required | integer |
| course_group required | integer |
| id required | integer |
Return a list of all course group instances for the authenticated user.
| 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> |
[- {
- "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
}
]Create a new course group instance for the authenticated user.
| title required | string [ 1 .. 255 ] characters A display name. |
| start_date required | string <date> ISO-8601 date. Must be on-or-before |
| end_date required | string <date> ISO-8601 date. Must be on-or-after |
| shown_on_calendar | boolean Whether items should be shown on the calendar. |
| exceptions | string Comma-separated dates (YYYYMMDD) when no classes occur (holidays, breaks). |
{- "title": "string",
- "start_date": "2019-08-24",
- "end_date": "2019-08-24",
- "shown_on_calendar": true,
- "exceptions": "string"
}{- "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
}Return the given course group instance.
| id required | integer |
{- "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
}Update the given course group instance.
| id required | integer |
| title required | string [ 1 .. 255 ] characters A display name. |
| start_date required | string <date> ISO-8601 date. Must be on-or-before |
| end_date required | string <date> ISO-8601 date. Must be on-or-after |
| shown_on_calendar | boolean Whether items should be shown on the calendar. |
| exceptions | string Comma-separated dates (YYYYMMDD) when no classes occur (holidays, breaks). |
{- "title": "string",
- "start_date": "2019-08-24",
- "end_date": "2019-08-24",
- "shown_on_calendar": true,
- "exceptions": "string"
}{- "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
}Partially update the given course group instance.
| id required | integer |
| title | string [ 1 .. 255 ] characters A display name. |
| start_date | string <date> ISO-8601 date. Must be on-or-before |
| end_date | string <date> ISO-8601 date. Must be on-or-after |
| shown_on_calendar | boolean Whether items should be shown on the calendar. |
| exceptions | string Comma-separated dates (YYYYMMDD) when no classes occur (holidays, breaks). |
{- "title": "string",
- "start_date": "2019-08-24",
- "end_date": "2019-08-24",
- "shown_on_calendar": true,
- "exceptions": "string"
}{- "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
}Return a list of all course instances, including course schedule details, for the given course group.
| course_group required | integer |
| 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> |
[- {
- "id": 0,
- "title": "string",
- "room": "string",
- "credits": "string",
- "color": "string",
- "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": [
- {
- "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
}
], - "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
}
]Create a new course instance for the given course group.
| course_group required | integer |
| 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 required | string <date> ISO-8601 date. Must be on-or-after |
| exceptions | string Comma-separated dates (YYYYMMDD) when this course does not meet. |
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": ""
}{- "id": 0,
- "title": "string",
- "room": "string",
- "credits": "string",
- "color": "string",
- "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": [
- {
- "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
}
], - "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
}Return the given course instance, including course schedule details.
| course_group required | integer |
| id required | integer |
{- "id": 0,
- "title": "string",
- "room": "string",
- "credits": "string",
- "color": "string",
- "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": [
- {
- "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
}
], - "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
}Update the given course instance.
| course_group required | integer |
| id required | integer |
| 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 required | string <date> ISO-8601 date. Must be on-or-after |
| exceptions | string Comma-separated dates (YYYYMMDD) when this course does not meet. |
{- "title": "string",
- "room": "string",
- "credits": "string",
- "color": "string",
- "is_online": true,
- "teacher_name": "string",
- "teacher_email": "user@example.com",
- "start_date": "2019-08-24",
- "end_date": "2019-08-24",
- "exceptions": "string"
}{- "id": 0,
- "title": "string",
- "room": "string",
- "credits": "string",
- "color": "string",
- "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": [
- {
- "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
}
], - "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
}Partially update the given course instance.
| course_group required | integer |
| id required | integer |
| 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 | string <date> ISO-8601 date. Must be on-or-after |
| exceptions | string Comma-separated dates (YYYYMMDD) when this course does not meet. |
{- "title": "string",
- "room": "string",
- "credits": "string",
- "color": "string",
- "is_online": true,
- "teacher_name": "string",
- "teacher_email": "user@example.com",
- "start_date": "2019-08-24",
- "end_date": "2019-08-24",
- "exceptions": "string"
}{- "id": 0,
- "title": "string",
- "room": "string",
- "credits": "string",
- "color": "string",
- "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": [
- {
- "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
}
], - "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
}Return a list of all course instances for the authenticated user, including course schedule details.
| 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> |
[- {
- "id": 0,
- "title": "string",
- "room": "string",
- "credits": "string",
- "color": "string",
- "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": [
- {
- "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
}
], - "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
}
]Return a list of all course schedule instances for the given course.
| course required | integer |
| course_group required | integer |
| id | integer |
| updated_at__gte | string <date-time> |
[- {
- "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
}
]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).
| course required | integer |
| course_group required | integer |
| 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. |
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"
}{- "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
}Return the given course schedule instance.
| course required | integer |
| course_group required | integer |
| id required | integer |
{- "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
}Update the given course schedule instance.
| course required | integer |
| course_group required | integer |
| id required | integer |
| 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. |
{- "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"
}{- "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
}Return a list of all course schedule instances for the authenticated user.
| id | integer |
| updated_at__gte | string <date-time> |
[- {
- "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
}
]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.
| course required | integer |
| course_group required | integer |
| 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 |
| id | integer |
| overdue | boolean
|
| 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 |
| updated_at__gte | string <date-time> |
[- {
- "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": [
- 0
], - "attachments": [
- {
- "id": 0,
- "title": "string",
- "size": 0,
- "course": 0,
- "event": 0,
- "homework": 0,
- "user": 0
}
], - "reminders": [
- {
- "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
}
], - "course": 0,
- "calendar_item_type": 0
}
]Create a new homework instance for the given course.
| course required | integer |
| course_group required | integer |
| 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 required | string <date-time> ISO-8601 datetime. Must be on-or-after |
| 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 |
| completed | boolean Whether the homework has been completed. Flipping this to |
| category required | integer The category to associate this homework with. If omitted or null, the homework is placed in the course's |
| materials | Array of integers A list of materials with which to associate. |
| course required | integer The course with which to associate. |
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": [ ]
}{- "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": [
- 0
], - "attachments": [
- {
- "id": 0,
- "title": "string",
- "size": 0,
- "course": 0,
- "event": 0,
- "homework": 0,
- "user": 0
}
], - "reminders": [
- {
- "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
}
], - "course": 0,
- "calendar_item_type": 0
}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.
| course required | integer |
| course_group required | integer |
| id required | integer |
{- "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": [
- 0
], - "attachments": [
- {
- "id": 0,
- "title": "string",
- "size": 0,
- "course": 0,
- "event": 0,
- "homework": 0,
- "user": 0
}
], - "reminders": [
- {
- "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
}
], - "course": 0,
- "calendar_item_type": 0
}Update the given homework instance.
| course required | integer |
| course_group required | integer |
| id required | integer |
| 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 required | string <date-time> ISO-8601 datetime. Must be on-or-after |
| 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 |
| completed | boolean Whether the homework has been completed. Flipping this to |
| category required | integer The category to associate this homework with. If omitted or null, the homework is placed in the course's |
| materials | Array of integers A list of materials with which to associate. |
| course required | integer The course with which to associate. |
{- "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": [
- 0
], - "course": 0
}{- "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": [
- 0
], - "attachments": [
- {
- "id": 0,
- "title": "string",
- "size": 0,
- "course": 0,
- "event": 0,
- "homework": 0,
- "user": 0
}
], - "reminders": [
- {
- "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
}
], - "course": 0,
- "calendar_item_type": 0
}Update only the given attributes of the given homework instance.
| course required | integer |
| course_group required | integer |
| id required | integer |
| 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 | string <date-time> ISO-8601 datetime. Must be on-or-after |
| 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 |
| completed | boolean Whether the homework has been completed. Flipping this to |
| category | integer The category to associate this homework with. If omitted or null, the homework is placed in the course's |
| materials | Array of integers A list of materials with which to associate. |
| course | integer The course with which to associate. |
{- "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": [
- 0
], - "course": 0
}{- "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": [
- 0
], - "attachments": [
- {
- "id": 0,
- "title": "string",
- "size": 0,
- "course": 0,
- "event": 0,
- "homework": 0,
- "user": 0
}
], - "reminders": [
- {
- "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
}
], - "course": 0,
- "calendar_item_type": 0
}Clone the given homework instance, including its reminders.
| course required | integer |
| course_group required | integer |
| id required | integer |
{- "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": [
- 0
], - "attachments": [
- {
- "id": 0,
- "title": "string",
- "size": 0,
- "course": 0,
- "event": 0,
- "homework": 0,
- "user": 0
}
], - "reminders": [
- {
- "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
}
], - "course": 0,
- "calendar_item_type": 0
}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.
| 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 |
| id | integer |
| ordering | string Which field to use when ordering the results. |
| overdue | boolean
|
| 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 |
| updated_at__gte | string <date-time> |
[- {
- "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": [
- 0
], - "attachments": [
- {
- "id": 0,
- "title": "string",
- "size": 0,
- "course": 0,
- "event": 0,
- "homework": 0,
- "user": 0
}
], - "reminders": [
- {
- "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
}
], - "course": 0,
- "calendar_item_type": 0
}
]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.
| from | string <date-time> Lower bound (inclusive) of the date range filter. Must be provided together with |
| 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 |
| updated_at__gte | string <date-time> |
[- {
- "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": [
- {
- "id": 0,
- "title": "string",
- "size": 0,
- "course": 0,
- "event": 0,
- "homework": 0,
- "user": 0
}
], - "reminders": [
- {
- "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
}
], - "user": 0,
- "calendar_item_type": 0
}
]Create a new Helium Event instance for the authenticated user.
| 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 required | string <date-time> ISO-8601 datetime. Must be on-or-after |
| 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. |
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."
}{- "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": [
- {
- "id": 0,
- "title": "string",
- "size": 0,
- "course": 0,
- "event": 0,
- "homework": 0,
- "user": 0
}
], - "reminders": [
- {
- "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
}
], - "user": 0,
- "calendar_item_type": 0
}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.
| id required | integer |
{- "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": [
- {
- "id": 0,
- "title": "string",
- "size": 0,
- "course": 0,
- "event": 0,
- "homework": 0,
- "user": 0
}
], - "reminders": [
- {
- "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
}
], - "user": 0,
- "calendar_item_type": 0
}Update the given Helium Event instance.
| id required | integer |
| 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 required | string <date-time> ISO-8601 datetime. Must be on-or-after |
| 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. |
{- "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"
}{- "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": [
- {
- "id": 0,
- "title": "string",
- "size": 0,
- "course": 0,
- "event": 0,
- "homework": 0,
- "user": 0
}
], - "reminders": [
- {
- "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
}
], - "user": 0,
- "calendar_item_type": 0
}Update only the given attributes of the given Helium Event instance.
| id required | integer |
| 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 | string <date-time> ISO-8601 datetime. Must be on-or-after |
| 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. |
{- "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"
}{- "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": [
- {
- "id": 0,
- "title": "string",
- "size": 0,
- "course": 0,
- "event": 0,
- "homework": 0,
- "user": 0
}
], - "reminders": [
- {
- "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
}
], - "user": 0,
- "calendar_item_type": 0
}Clone the given event instance, including its reminders.
| id required | integer |
{- "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": [
- {
- "id": 0,
- "title": "string",
- "size": 0,
- "course": 0,
- "event": 0,
- "homework": 0,
- "user": 0
}
], - "reminders": [
- {
- "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
}
], - "user": 0,
- "calendar_item_type": 0
}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.
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].
{- "course_groups": [
- {
- "id": 0,
- "title": "string",
- "overall_grade": -999,
- "weight": -999,
- "color": "string",
- "grade_by_weight": -999,
- "trend": 0.1,
- "num_homework": 0,
- "num_homework_completed": 0,
- "num_homework_graded": 0,
- "has_weighted_grading": true,
- "grade_points": [
- null
], - "courses": [
- {
- "id": 0,
- "title": "string",
- "overall_grade": -999,
- "weight": -999,
- "color": "string",
- "grade_by_weight": -999,
- "trend": 0.1,
- "num_homework": 0,
- "num_homework_completed": 0,
- "num_homework_graded": 0,
- "has_weighted_grading": true,
- "grade_points": [
- null
], - "categories": [
- {
- "id": 0,
- "title": "string",
- "overall_grade": -999,
- "weight": -999,
- "color": "string",
- "grade_by_weight": -999,
- "trend": 0.1,
- "num_homework": 0,
- "num_homework_completed": 0,
- "num_homework_graded": 0,
- "has_weighted_grading": true,
- "grade_points": [
- null
]
}
]
}
]
}
]
}Return a list of all material group instances for the authenticated user.
| id | integer |
| shown_on_calendar | boolean |
| title | string |
| updated_at__gte | string <date-time> |
[- {
- "id": 0,
- "title": "string",
- "shown_on_calendar": true,
- "user": 0
}
]Create a new material group instance for the authenticated user.
| title required | string [ 1 .. 255 ] characters A display name. |
| shown_on_calendar | boolean Whether items should be shown on the calendar. |
{- "title": "string",
- "shown_on_calendar": true
}{- "id": 0,
- "title": "string",
- "shown_on_calendar": true,
- "user": 0
}Update the given material group instance.
| id required | integer |
| title required | string [ 1 .. 255 ] characters A display name. |
| shown_on_calendar | boolean Whether items should be shown on the calendar. |
{- "title": "string",
- "shown_on_calendar": true
}{- "id": 0,
- "title": "string",
- "shown_on_calendar": true,
- "user": 0
}Return a list of all material instances for the given material group.
| material_group required | integer |
| 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> |
[- {
- "id": 0,
- "title": "string",
- "status": 0,
- "condition": 0,
- "price": "string",
- "details": "string",
- "material_group": 0,
- "courses": [
- 0
]
}
]Create a new material instance for the given material group.
| material_group required | integer |
| 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.
|
| condition | integer [ 0 .. 9223372036854776000 ] Enum: 0 1 2 3 4 5 6 7 8 A valid material condition choice.
|
| 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. |
{- "title": "string",
- "status": 0,
- "condition": 0,
- "price": "string",
- "details": "string",
- "material_group": 0,
- "courses": [
- 0
]
}{- "id": 0,
- "title": "string",
- "status": 0,
- "condition": 0,
- "price": "string",
- "details": "string",
- "material_group": 0,
- "courses": [
- 0
]
}Return the given material instance.
| id required | integer |
| material_group required | integer |
{- "id": 0,
- "title": "string",
- "status": 0,
- "condition": 0,
- "price": "string",
- "details": "string",
- "material_group": 0,
- "courses": [
- 0
]
}Update the given material instance.
| id required | integer |
| material_group required | integer |
| 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.
|
| condition | integer [ 0 .. 9223372036854776000 ] Enum: 0 1 2 3 4 5 6 7 8 A valid material condition choice.
|
| 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. |
{- "title": "string",
- "status": 0,
- "condition": 0,
- "price": "string",
- "details": "string",
- "material_group": 0,
- "courses": [
- 0
]
}{- "id": 0,
- "title": "string",
- "status": 0,
- "condition": 0,
- "price": "string",
- "details": "string",
- "material_group": 0,
- "courses": [
- 0
]
}Return a list of all material instances for the authenticated user.
| courses | Array of integers Restrict the result to materials linked to any of the given class IDs. Repeat the parameter to pass multiple IDs: |
| 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> |
[- {
- "id": 0,
- "title": "string",
- "status": 0,
- "condition": 0,
- "price": "string",
- "details": "string",
- "material_group": 0,
- "courses": [
- 0
]
}
]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.
| event | integer Filter to the note linked to this event ID. |
| has_link | boolean
|
| homework | integer Filter to the note linked to this homework ID. |
| include_content | boolean By default the |
| linked_entity_type | string Filter by what kind of entity the note is linked to. One of |
| 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> |
[- {
- "id": 0,
- "title": "string",
- "homework": [
- 0
], - "events": [
- 0
], - "resources": [
- 0
], - "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"
}
]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.
| 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 |
| resources | Array of integers Linked resource. Mutually exclusive with |
{- "title": "string",
- "content": null,
- "homework": [
- 0
], - "events": [
- 0
], - "resources": [
- 0
]
}{- "id": 0,
- "title": "string",
- "content": null,
- "homework": [
- 0
], - "events": [
- 0
], - "resources": [
- 0
], - "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"
}Return the given Note instance.
| id required | integer |
{- "id": 0,
- "title": "string",
- "content": null,
- "homework": [
- 0
], - "events": [
- 0
], - "resources": [
- 0
], - "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"
}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.
| id required | integer |
| 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 |
| resources | Array of integers Linked resource. Mutually exclusive with |
{- "title": "string",
- "content": null,
- "homework": [
- 0
], - "events": [
- 0
], - "resources": [
- 0
]
}{- "id": 0,
- "title": "string",
- "content": null,
- "homework": [
- 0
], - "events": [
- 0
], - "resources": [
- 0
], - "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"
}Partially update the given note. Same linking rules and content-cleared deletion behavior as PUT.
| id required | integer |
| 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 |
| resources | Array of integers Linked resource. Mutually exclusive with |
{- "title": "string",
- "content": null,
- "homework": [
- 0
], - "events": [
- 0
], - "resources": [
- 0
]
}{- "id": 0,
- "title": "string",
- "content": null,
- "homework": [
- 0
], - "events": [
- 0
], - "resources": [
- 0
], - "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"
}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.
| 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.
|
| updated_at__gte | string <date-time> |
[- {
- "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
}
]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.
| 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 ( |
| offset | integer [ 0 .. 100 ] Default: 30 How far before the parent start time to fire, measured in |
| offset_type | integer [ 0 .. 9223372036854776000 ] Default: 0 Enum: 0 1 2 3 A valid reminder offset type choice.
|
| type | integer [ 0 .. 9223372036854776000 ] Default: 0 Enum: 0 1 2 3 A valid reminder type choice.
|
| 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. |
{- "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
}{- "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
}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.
| id required | integer |
{- "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
}Update the given reminder instance.
| id required | integer |
| 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 ( |
| offset | integer [ 0 .. 100 ] Default: 30 How far before the parent start time to fire, measured in |
| offset_type | integer [ 0 .. 9223372036854776000 ] Default: 0 Enum: 0 1 2 3 A valid reminder offset type choice.
|
| type | integer [ 0 .. 9223372036854776000 ] Default: 0 Enum: 0 1 2 3 A valid reminder type choice.
|
| 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. |
{- "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
}{- "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
}Update only the given attributes of the given reminder instance.
| id required | integer |
| 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 ( |
| offset | integer [ 0 .. 100 ] Default: 30 How far before the parent start time to fire, measured in |
| offset_type | integer [ 0 .. 9223372036854776000 ] Default: 0 Enum: 0 1 2 3 A valid reminder offset type choice.
|
| type | integer [ 0 .. 9223372036854776000 ] Default: 0 Enum: 0 1 2 3 A valid reminder type choice.
|
| 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. |
{- "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
}{- "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
}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.
| id required | integer |