Settings
Use when you need the user's language, clock format (12h/24h) or first day of the week, for example to format a time or date in the way the user expects. Do not use to read per-module settings such as the calendar default view; use settings.value.get.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
Successful Response
application/json- response
locale*|Interface language; null follows the browser
theme*ThemeLight, dark, or follow the system
"system""light""dark"accent*AccentAccent color of buttons and highlights
"neutral""blue""violet""green""orange""rose""teal""amber"time_format*Time Format12-hour or 24-hour clock; auto follows locale
"auto""12h""24h"week_start*Week StartFirst day of the week; 0 follows the language
017reduce_motion*Reduce MotionReduce animations; system follows the OS
"system""on""off"start_page*Start PageThe page the app opens on
"last""today""overview""calendar""tasks""grades""files""assistant""summary"keep_course_tab*Keep Course TabSwitching courses from a course page opens the same tab of the other course
active_program_id*|The Program currently being viewed
updated_at*|Null until the first change
curl -X GET 'https://example.com/me/preferences'{ "locale": "en", "theme": "system", "accent": "neutral", "time_format": "auto", "week_start": 0, "reduce_motion": "system", "start_page": "last", "keep_course_tab": true, "active_program_id": "string", "updated_at": "2019-08-24T14:15:22Z"}Partial update: only the fields that are sent change. Not for agents.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
application/json- body
locale?|Interface language, or null
theme?|Light, dark, or follow the system
accent?|Accent color
time_format?|12-hour or 24-hour clock
week_start?|First day of the week
reduce_motion?|Reduce animations
start_page?|The page the app opens on
keep_course_tab?|Switching courses keeps the open tab
active_program_id?|The Program currently being viewed, or null
Successful Response
application/json- response
locale*|Interface language; null follows the browser
theme*ThemeLight, dark, or follow the system
"system""light""dark"accent*AccentAccent color of buttons and highlights
"neutral""blue""violet""green""orange""rose""teal""amber"time_format*Time Format12-hour or 24-hour clock; auto follows locale
"auto""12h""24h"week_start*Week StartFirst day of the week; 0 follows the language
017reduce_motion*Reduce MotionReduce animations; system follows the OS
"system""on""off"start_page*Start PageThe page the app opens on
"last""today""overview""calendar""tasks""grades""files""assistant""summary"keep_course_tab*Keep Course TabSwitching courses from a course page opens the same tab of the other course
active_program_id*|The Program currently being viewed
updated_at*|Null until the first change
curl -X PATCH 'https://example.com/me/preferences' \ -H 'Content-Type: application/json' \ -d '{}'{ "locale": "en", "theme": "system", "accent": "neutral", "time_format": "auto", "week_start": 0, "reduce_motion": "system", "start_page": "last", "keep_course_tab": true, "active_program_id": "string", "updated_at": "2019-08-24T14:15:22Z"}Use before changing a module setting to find the namespace, the field names, their allowed values and the levels (account, program, term, course) where they can be set. Do not use to read current values; use settings.value.get.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
Successful Response
application/json- response
items*array<>curl -X GET 'https://example.com/me/settings-schemas'{ "items": [ { "namespace": "string", "levels": [ "account" ], "plugin_id": "string", "agent_writable": true, "json_schema": {} } ]}Reads interface state (sort orders, collapsed panels) by key or key prefix. Not available to agents.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
application/json- body
keys?array<>Exact keys to read
items <= 200prefixes?array<>Read every key that starts with one of these, e.g. 'layout.'
items <= 20Successful Response
application/json- response
items*Existing keys and their values
curl -X POST 'https://example.com/me/ui-state:get' \ -H 'Content-Type: application/json' \ -d '{}'{ "items": { "property1": null, "property2": null }}Stores interface state under a key. Not available to agents.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
key*Key'.[.]', at most 128 characters
application/json- body
value*JsonValueAny JSON value up to 16 KB
Successful Response
application/json- response
key*Keyvalue*JsonValuecurl -X PUT 'https://example.com/me/ui-state/string' \ -H 'Content-Type: application/json' \ -d '{ "value": null}'{ "key": "string", "value": null}Use when the user asks how a module is configured, e.g. the default calendar view. Returns the effective value of every field and the level it is inherited from (default, account, program, term or course). Do not use for personal preferences such as language or theme; use settings.preference.get.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
namespace*NamespaceSettings namespace, e.g. 'calendar' or 'plugin.pomodoro'
scope_type?Scope TypeScope level to resolve for
"account""account""program""term""course"scope_id?|Id of the scope; omit for 'account'
Successful Response
application/json- response
namespace*Namespacescope_type*Scope Type"account""program""term""course"scope_id*string|nullvalues*Effective value of every field
sources*Where each effective value comes from
inherited*What every field resolves to from the levels above, ignoring this level's own values: what 'follow' shows and what a reset brings back
curl -X GET 'https://example.com/me/settings/string'{ "namespace": "string", "scope_type": "account", "scope_id": "string", "values": {}, "sources": { "property1": "default", "property2": "default" }, "inherited": { "property1": { "value": null, "source": "default" }, "property2": { "value": null, "source": "default" } }}Use when the user wants to change a module setting, e.g. make the calendar open in month view. Only the given fields are set at that level; deeper levels still override them. Look up namespace and field names with settings.schema.list first. Namespaces whose schema says agent_writable false can only be changed by the user in the settings page: tell the user where to find it instead. Do not use to change language, theme or other personal preferences.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
namespace*NamespaceSettings namespace
application/json- body
scope_type?Scope TypeLevel to write the values at
"account""account""program""term""course"scope_id?|Id of the scope; omit for 'account'
values*Fields to set at this level; other levels are not touched
1 <= propertiesSuccessful Response
application/json- response
namespace*Namespacescope_type*Scope Type"account""program""term""course"scope_id*string|nullvalues*Effective value of every field
sources*Where each effective value comes from
inherited*What every field resolves to from the levels above, ignoring this level's own values: what 'follow' shows and what a reset brings back
curl -X PATCH 'https://example.com/me/settings/string' \ -H 'Content-Type: application/json' \ -d '{ "values": { "property1": null, "property2": null }}'{ "namespace": "string", "scope_type": "account", "scope_id": "string", "values": {}, "sources": { "property1": "default", "property2": "default" }, "inherited": { "property1": { "value": null, "source": "default" }, "property2": { "value": null, "source": "default" } }}Restores a field to the value of the level above (or the default). Not available to agents.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
namespace*NamespaceSettings namespace
key*KeyField to restore to the value inherited from the level above
scope_type?Scope TypeLevel to remove the value from
"account""account""program""term""course"scope_id?|Id of the scope; omit for 'account'
Successful Response
application/json- response
namespace*Namespacescope_type*Scope Type"account""program""term""course"scope_id*string|nullvalues*Effective value of every field
sources*Where each effective value comes from
inherited*What every field resolves to from the levels above, ignoring this level's own values: what 'follow' shows and what a reset brings back
curl -X DELETE 'https://example.com/me/settings/string/keys/string'{ "namespace": "string", "scope_type": "account", "scope_id": "string", "values": {}, "sources": { "property1": "default", "property2": "default" }, "inherited": { "property1": { "value": null, "source": "default" }, "property2": { "value": null, "source": "default" } }}