# Generated by API Evangelist (build-phrasing.py). Our phrasing, not observed demand. overlay: 1.0.0 info: title: API Evangelist conversational phrasing for Canvas LMS REST Users API version: 1.0.0 extends: openapi/canvas-users-api-openapi.yml actions: - target: $.info update: x-apievangelist-phrasing: method: generated generated: '2026-10-01' generator: build-phrasing.py label: Generated by API Evangelist operations: 48 - target: $.paths['/v1/accounts/{account_id}/users'].get update: x-apievangelist-phrasing: intent: List users in an account effect: read questions: - How can I see every user that belongs to a Canvas account? - Can I search an account's users by name or login and sort the results? - Is there a way to include deleted users when listing an account's people? instructions: - text: List the users in account {account_id}. slots: account_id: path.account_id - text: Search account {account_id} for users matching {search_term}. slots: account_id: path.account_id search_term: query.search_term method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/users'].post update: x-apievangelist-phrasing: intent: Create a user with a login in an account effect: write questions: - How do I add a new person with a login to a Canvas account as an admin? - Can I set a new user's SIS ID and email address when I create them? - What's needed to provision a brand-new user and pseudonym in an account? instructions: - text: Create a user named {name} with login {unique_id} in account {account_id}. slots: name: requestBody.user[name] unique_id: requestBody.pseudonym[unique_id] account_id: path.account_id - text: Add a new user with login {unique_id} and SIS ID {sis_user_id} to account {account_id}. slots: unique_id: requestBody.pseudonym[unique_id] sis_user_id: requestBody.pseudonym[sis_user_id] account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{user_id}/files'].post update: x-apievangelist-phrasing: intent: Upload a file to a user's personal files effect: write questions: - How do I upload a file into a user's personal files area? - What's the first step to start a file upload to someone's own Canvas files? instructions: - text: Start uploading a file to the personal files of user {user_id}. slots: user_id: path.user_id - text: Begin a personal-files upload for user {user_id}. slots: user_id: path.user_id method: generated generated: '2026-10-01' - target: $.paths['/v1/users/self/activity_stream'].get update: x-apievangelist-phrasing: intent: List my activity stream effect: read questions: - How can I pull my own recent activity stream from the self endpoint? - Can I limit my activity stream to only my active courses? instructions: - text: Show my activity stream via users/self. - text: 'List my activity stream items, only for active courses: {only_active_courses}.' slots: only_active_courses: query.only_active_courses method: generated generated: '2026-10-01' - target: $.paths['/v1/users/self/activity_stream'].delete update: x-apievangelist-phrasing: intent: Hide every item in my activity stream effect: destructive questions: - Can I clear out my whole activity stream at once? - Is there a way to hide all of my stream items in one call? instructions: - text: Hide all items in my activity stream. - text: Clear every entry from my activity stream. method: generated generated: '2026-10-01' - target: $.paths['/v1/users/activity_stream'].get update: x-apievangelist-phrasing: intent: List my activity stream (alternate route) effect: read questions: - Is there an alternate route without self to fetch the current user's activity stream? - Which endpoint at users/activity_stream returns my global stream? instructions: - text: Fetch my global activity stream from the users/activity_stream route. - text: 'Get the current user''s stream via the alternate route, active courses only: {only_active_courses}.' slots: only_active_courses: query.only_active_courses method: generated generated: '2026-10-01' - target: $.paths['/v1/users/self/activity_stream/summary'].get update: x-apievangelist-phrasing: intent: Summarize my activity stream effect: read questions: - How do I get counts of what's in my activity stream by type? - Can I see a summary of unread stream items instead of the full stream? instructions: - text: Summarize my activity stream. - text: 'Give me an activity stream summary limited to active courses: {only_active_courses}.' slots: only_active_courses: query.only_active_courses method: generated generated: '2026-10-01' - target: $.paths['/v1/users/self/todo'].get update: x-apievangelist-phrasing: intent: List my to-do items effect: read questions: - What's on my Canvas to-do list right now? - Can I filter my to-do items to certain courses or submission status? instructions: - text: List my to-do items. - text: Show my to-do items for courses {course_ids}. slots: course_ids: query.course_ids method: generated generated: '2026-10-01' - target: $.paths['/v1/users/self/todo_item_count'].get update: x-apievangelist-phrasing: intent: Count my to-do items effect: read questions: - How many assignments do I have waiting to be graded or submitted? - Can I get just the number of to-do items rather than the list? instructions: - text: Count my to-do items. - text: Tell me how many assignments need grading or submitting for me. method: generated generated: '2026-10-01' - target: $.paths['/v1/users/self/upcoming_events'].get update: x-apievangelist-phrasing: intent: List my upcoming assignments and events effect: read questions: - What assignments and calendar events are coming up for me? - Is there a quick way to see my next due dates and events? instructions: - text: List my upcoming assignments and calendar events. - text: Show what's coming up next on my schedule. method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{user_id}/missing_submissions'].get update: x-apievangelist-phrasing: intent: List a student's missing submissions effect: read questions: - Which past-due assignments has a student not turned in? - Can a parent observer see a child's missing work in specific courses? instructions: - text: List missing submissions for student {user_id}. slots: user_id: path.user_id - text: Show past-due unsubmitted work for user {user_id} in courses {course_ids}. slots: user_id: path.user_id course_ids: query.course_ids method: generated generated: '2026-10-01' - target: $.paths['/v1/users/self/activity_stream/{id}'].delete update: x-apievangelist-phrasing: intent: Hide one activity stream item effect: destructive questions: - Can I hide a single item from my activity stream? - How do I dismiss one specific stream entry? instructions: - text: Hide stream item {id}. slots: id: path.id - text: Remove activity stream entry {id} from my view. slots: id: path.id method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{id}'].get update: x-apievangelist-phrasing: intent: Get a user's details effect: read questions: - How do I look up a specific user's details and permissions? - Can I see whether a user is allowed to change their own name? instructions: - text: Show details for user {id}. slots: id: path.id - text: Get user {id} including {include}. slots: id: path.id include: query.include method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{id}'].put update: x-apievangelist-phrasing: intent: Update a user's profile fields effect: write questions: - How do I change a user's display name, time zone or pronouns? - Can I update someone's bio or avatar through the API? instructions: - text: Rename user {id} to {name}. slots: id: path.id name: requestBody.user[name] - text: Set user {id}'s time zone to {time_zone}. slots: id: path.id time_zone: requestBody.user[time_zone] - text: Update the pronouns of user {id} to {pronouns}. slots: id: path.id pronouns: requestBody.user[pronouns] method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/self_registration'].post update: x-apievangelist-phrasing: intent: Self-register a user (deprecated) effect: write questions: - Can people still sign themselves up on an account using the old self-registration endpoint? - What does the deprecated self-registration call require, like accepting terms of use? instructions: - text: Self-register {name} with login {unique_id} on account {account_id} using the deprecated endpoint. slots: name: requestBody.user[name] unique_id: requestBody.pseudonym[unique_id] account_id: path.account_id - text: 'Use the legacy self-registration for {name} on account {account_id}, terms accepted: {terms_of_use}, login {unique_id}.' slots: name: requestBody.user[name] account_id: path.account_id terms_of_use: requestBody.user[terms_of_use] unique_id: requestBody.pseudonym[unique_id] method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{id}/settings'].get update: x-apievangelist-phrasing: intent: Update a user's UI settings effect: write questions: - How do I turn on manual mark-as-read for a user? - Can I collapse the global navigation by default for someone? instructions: - text: 'Enable manual mark-as-read for user {id}: {manual_mark_as_read}.' slots: id: path.id manual_mark_as_read: query.manual_mark_as_read - text: Set collapse global nav to {collapse_global_nav} for user {id}. slots: collapse_global_nav: query.collapse_global_nav id: path.id method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{id}/colors'].get update: x-apievangelist-phrasing: intent: Get all of a user's custom colors effect: read questions: - What custom course colors has a user saved? - Can I fetch every color a user picked for their calendar and courses? instructions: - text: Get all custom colors for user {id}. slots: id: path.id - text: List the saved color choices of user {id}. slots: id: path.id method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{id}/colors/{asset_string}'].get update: x-apievangelist-phrasing: intent: Get a user's color for one course or context effect: read questions: - What color has a user chosen for one particular course? - How do I read the custom color saved for a single context like course_42? instructions: - text: Get the custom color user {id} set for {asset_string}. slots: id: path.id asset_string: path.asset_string - text: Show which color user {id} uses for context {asset_string}. slots: id: path.id asset_string: path.asset_string method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{id}/colors/{asset_string}'].put update: x-apievangelist-phrasing: intent: Set a user's color for a course or context effect: write questions: - Can I change the color a course shows in someone's calendar? - How do I save a hex color for one context on a user's dashboard? instructions: - text: Set user {id}'s color for {asset_string} to {hexcode}. slots: id: path.id asset_string: path.asset_string hexcode: requestBody.hexcode - text: Change the {asset_string} color for user {id} to hex {hexcode}. slots: asset_string: path.asset_string id: path.id hexcode: requestBody.hexcode method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{id}/text_editor_preference'].put update: x-apievangelist-phrasing: intent: Set a user's preferred text editor effect: write questions: - Can I preset which rich content editor a user gets by default? - How do I stop the choose-an-editor prompt by saving someone's editor choice? instructions: - text: Set user {id}'s text editor preference to {text_editor_preference}. slots: id: path.id text_editor_preference: requestBody.text_editor_preference - text: Save {text_editor_preference} as the default editor for user {id}. slots: text_editor_preference: requestBody.text_editor_preference id: path.id method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{id}/files_ui_version_preference'].put update: x-apievangelist-phrasing: intent: Set a user's files UI version effect: write questions: - Can I choose which version of the files interface a user sees? - How do I save a user's preference between the old and new Files UI? instructions: - text: Set the files UI version for user {id} to {files_ui_version}. slots: id: path.id files_ui_version: requestBody.files_ui_version - text: Switch user {id} to files UI {files_ui_version}. slots: id: path.id files_ui_version: requestBody.files_ui_version method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{id}/dashboard_positions'].get update: x-apievangelist-phrasing: intent: Get a user's dashboard card positions effect: read questions: - In what order has a user arranged their dashboard cards? - Can I read the saved dashboard card positions for someone? instructions: - text: Get dashboard positions for user {id}. slots: id: path.id - text: Show how user {id} has ordered their dashboard cards. slots: id: path.id method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{id}/dashboard_positions'].put update: x-apievangelist-phrasing: intent: Reorder a user's dashboard cards effect: write questions: - How do I change the order of course cards on a user's dashboard? - Can I save new dashboard card positions for someone? instructions: - text: Update the dashboard card positions for user {id}. slots: id: path.id - text: Rearrange user {id}'s dashboard cards. slots: id: path.id method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{id}/sessions'].delete update: x-apievangelist-phrasing: intent: Sign a user out everywhere and revoke tokens effect: destructive questions: - How do I force a compromised user out of every browser session and access token? - Does ending a user's sessions also kill their manually generated tokens? instructions: - text: Terminate all sessions and access tokens for user {id}. slots: id: path.id - text: Log user {id} out of every session immediately. slots: id: path.id method: generated generated: '2026-10-01' - target: $.paths['/v1/users/mobile_sessions'].delete update: x-apievangelist-phrasing: intent: Log everyone out of mobile apps effect: destructive questions: - Can I expire every user's mobile app session across the whole account at once? - Is there a way to log all users out of mobile but skip admins? instructions: - text: Expire all users' mobile sessions account-wide. - text: 'Log everyone out of the mobile apps, skipping admins: {skip_admins}.' slots: skip_admins: query.skip_admins method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{id}/mobile_sessions'].delete update: x-apievangelist-phrasing: intent: Log one user out of mobile apps effect: destructive questions: - How do I force a single user to re-authorize on their mobile app? - Can I expire just one person's mobile sessions? instructions: - text: Log user {id} out of all mobile apps. slots: id: path.id - text: Expire the mobile sessions of user {id}. slots: id: path.id method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{id}/merge_into/{destination_user_id}'].put update: x-apievangelist-phrasing: intent: Merge a user into another user effect: destructive questions: - How do I combine two duplicate user records into one? - Is merging users reversible, and what happens to the source user's data? instructions: - text: Merge user {id} into user {destination_user_id}. slots: id: path.id destination_user_id: path.destination_user_id - text: Fold duplicate user {id} into {destination_user_id}. slots: id: path.id destination_user_id: path.destination_user_id method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{id}/merge_into/accounts/{destination_account_id}/users/{destination_user_id}'].put update: x-apievangelist-phrasing: intent: Merge a user into a user on another account effect: destructive questions: - Can I merge a user into someone on a different account or shard? - How do I specify the destination account when merging two users? instructions: - text: Merge user {id} into user {destination_user_id} on account {destination_account_id}. slots: id: path.id destination_user_id: path.destination_user_id destination_account_id: path.destination_account_id - text: Combine user {id} with {destination_user_id} in destination account {destination_account_id}. slots: id: path.id destination_user_id: path.destination_user_id destination_account_id: path.destination_account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{id}/split'].post update: x-apievangelist-phrasing: intent: Split a merged user back apart effect: write questions: - Can I undo a user merge that went wrong? - How much of a merged user can be restored by splitting them? instructions: - text: Split merged user {id} into separate users. slots: id: path.id - text: Undo the merge for user {id}. slots: id: path.id method: generated generated: '2026-10-01' - target: $.paths['/v1/users/self/pandata_events_token'].post update: x-apievangelist-phrasing: intent: Get a Pandata events token effect: write questions: - How does a mobile app get a token for sending events to Pandata? - When does the Pandata events JWT expire? instructions: - text: Get a Pandata events token for app key {app_key}. slots: app_key: requestBody.app_key - text: Issue a Pandata events JWT for mobile app {app_key}. slots: app_key: requestBody.app_key method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{id}/graded_submissions'].get update: x-apievangelist-phrasing: intent: List a user's recently graded submissions effect: read questions: - What has a student most recently had graded? - Can I limit recently graded work to current enrollments and published assignments? instructions: - text: Show the most recently graded submissions for user {id}. slots: id: path.id - text: 'List recent grades for user {id}, current enrollments only: {only_current_enrollments}.' slots: id: path.id only_current_enrollments: query.only_current_enrollments method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{user_id}/profile'].get update: x-apievangelist-phrasing: intent: Get a user's profile effect: read questions: - How do I get a user's name and profile picture? - Where can I find my own calendar feed URL and LTI user id? instructions: - text: Get the profile of user {user_id}. slots: user_id: path.user_id - text: Show profile info and picture for user {user_id}. slots: user_id: path.user_id method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{user_id}/avatars'].get update: x-apievangelist-phrasing: intent: List avatar choices for a user effect: read questions: - What avatar images can a user pick from? - Which avatar options are available to set on someone's profile? instructions: - text: List avatar options for user {user_id}. slots: user_id: path.user_id - text: Show the avatars user {user_id} can choose. slots: user_id: path.user_id method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{user_id}/page_views'].get update: x-apievangelist-phrasing: intent: List a user's page view history effect: read questions: - Can I see which pages a user visited and when? - How do I pull page views for a user between two dates, newest first? instructions: - text: List page views for user {user_id}. slots: user_id: path.user_id - text: Show page views for user {user_id} from {start_time} to {end_time}. slots: user_id: path.user_id start_time: query.start_time end_time: query.end_time method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{user_id}/page_views/query'].post update: x-apievangelist-phrasing: intent: Start an async page views export for a user effect: write questions: - How do I kick off a background export of one user's page views as CSV? - Can I queue a page views query for a date range and poll for it later? instructions: - text: Start a page views query for user {user_id} from {start_date} to {end_date}. slots: user_id: path.user_id start_date: requestBody.start_date end_date: requestBody.end_date - text: Queue a {results_format} page views export for user {user_id}. slots: results_format: requestBody.results_format user_id: path.user_id method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{user_id}/page_views/query/{query_id}'].get update: x-apievangelist-phrasing: intent: Check a user's page views query status effect: read questions: - Is my single-user page views query finished yet? - How do I tell if a user's page views export failed? instructions: - text: Check status of page views query {query_id} for user {user_id}. slots: query_id: path.query_id user_id: path.user_id - text: Poll user {user_id}'s page views query {query_id}. slots: user_id: path.user_id query_id: path.query_id method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{user_id}/page_views/query/{query_id}/results'].get update: x-apievangelist-phrasing: intent: Download a user's page views query results effect: read questions: - Where do I download the results of a finished page views query for one user? - Are single-user page view query results returned compressed? instructions: - text: Download results of page views query {query_id} for user {user_id}. slots: query_id: path.query_id user_id: path.user_id - text: Get the completed page view data from query {query_id} for user {user_id}. slots: query_id: path.query_id user_id: path.user_id method: generated generated: '2026-10-01' - target: $.paths['/v1/users/page_views/query'].post update: x-apievangelist-phrasing: intent: Start a page views export for many users effect: write questions: - Can I export page views for a whole list of users in one job? - How do I queue a multi-user page views query for a date range? instructions: - text: Start a batch page views query for users {user_ids} from {start_date} to {end_date}. slots: user_ids: requestBody.user_ids start_date: requestBody.start_date end_date: requestBody.end_date - text: Queue a multi-user page views export in {results_format} for {user_ids}. slots: results_format: requestBody.results_format user_ids: requestBody.user_ids method: generated generated: '2026-10-01' - target: $.paths['/v1/users/page_views/query/{query_id}'].get update: x-apievangelist-phrasing: intent: Check a batch page views query status effect: read questions: - Has my multi-user page views export finished? - How do I poll the status of a batch page views job? instructions: - text: Check status of batch page views query {query_id}. slots: query_id: path.query_id - text: Poll the multi-user page views job {query_id}. slots: query_id: path.query_id method: generated generated: '2026-10-01' - target: $.paths['/v1/users/page_views/query/{query_id}/results'].get update: x-apievangelist-phrasing: intent: Download batch page views query results effect: read questions: - How do I download the output of a completed multi-user page views query? - In what format do batch page view results come back? instructions: - text: Download results of batch page views query {query_id}. slots: query_id: path.query_id - text: Fetch the finished multi-user page view data for query {query_id}. slots: query_id: path.query_id method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{user_id}/custom_data'].get update: x-apievangelist-phrasing: intent: Read a user's stored custom data effect: read questions: - How can my integration read back the JSON it stored on a user? - Can I load custom user data for one namespace only? instructions: - text: Load custom data for user {user_id} in namespace {ns}. slots: user_id: path.user_id ns: query.ns - text: Read the {ns} custom data stored on user {user_id}. slots: ns: query.ns user_id: path.user_id method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{user_id}/custom_data'].put update: x-apievangelist-phrasing: intent: Save custom JSON data on a user effect: write questions: - Can an external service attach its own JSON data to a Canvas user? - How do I save arbitrary key-value data under my own namespace on a user? instructions: - text: Store {data} on user {user_id} under namespace {ns}. slots: data: requestBody.data user_id: path.user_id ns: requestBody.ns - text: Save custom data {data} for user {user_id} in the {ns} namespace. slots: data: requestBody.data user_id: path.user_id ns: requestBody.ns method: generated generated: '2026-10-01' - target: $.paths['/v1/users/{user_id}/custom_data'].delete update: x-apievangelist-phrasing: intent: Delete a user's stored custom data effect: destructive questions: - How do I remove the custom data my app stored on a user? - Can I delete custom user data for just one namespace? instructions: - text: Delete custom data for user {user_id} in namespace {ns}. slots: user_id: path.user_id ns: query.ns - text: Wipe the {ns} custom data from user {user_id}. slots: ns: query.ns user_id: path.user_id method: generated generated: '2026-10-01' - target: $.paths['/v1/users/self/course_nicknames'].get update: x-apievangelist-phrasing: intent: List my course nicknames effect: read questions: - What nicknames have I given my courses? - Can I see all the course nicknames I've set? instructions: - text: List my course nicknames. - text: Show every nickname I've set for my courses. method: generated generated: '2026-10-01' - target: $.paths['/v1/users/self/course_nicknames'].delete update: x-apievangelist-phrasing: intent: Remove all my course nicknames effect: destructive questions: - How do I reset all of my course nicknames at once? - Can I wipe every nickname and go back to the real course names? instructions: - text: Clear all my course nicknames. - text: Remove every course nickname I've set. method: generated generated: '2026-10-01' - target: $.paths['/v1/users/self/course_nicknames/{course_id}'].get update: x-apievangelist-phrasing: intent: Get my nickname for a course effect: read questions: - What nickname did I give a particular course? - Can I check whether one course has a nickname set? instructions: - text: Get my nickname for course {course_id}. slots: course_id: path.course_id - text: Show the nickname I use for course {course_id}. slots: course_id: path.course_id method: generated generated: '2026-10-01' - target: $.paths['/v1/users/self/course_nicknames/{course_id}'].put update: x-apievangelist-phrasing: intent: Give a course a nickname effect: write questions: - Can I rename a course just for myself so it shows a shorter name? - How do I set a personal nickname that replaces a course's name in my view? instructions: - text: Nickname course {course_id} as {nickname}. slots: course_id: path.course_id nickname: requestBody.nickname - text: Set my nickname for course {course_id} to {nickname}. slots: course_id: path.course_id nickname: requestBody.nickname method: generated generated: '2026-10-01' - target: $.paths['/v1/users/self/course_nicknames/{course_id}'].delete update: x-apievangelist-phrasing: intent: Remove my nickname for a course effect: destructive questions: - How do I drop the nickname from one course and see its real name again? - Can I remove a single course nickname without clearing the rest? instructions: - text: Remove my nickname for course {course_id}. slots: course_id: path.course_id - text: Restore the real name of course {course_id} by deleting its nickname. slots: course_id: path.course_id method: generated generated: '2026-10-01'