Canvas Users API

The Users API from Canvas — 38 operation(s) for users.

Operations 48

Each operation below carries the questions people ask an LLM about it and the instructions they give an agent to run it. Generated by API Evangelist overlay

GET /v1/accounts/{account_id}/users List users in an account · List users in account #
Ask an LLM
“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?”
Tell an agent
List the users in account {account_id}.
Search account {account_id} for users matching {search_term}.
POST /v1/accounts/{account_id}/users Create a user with a login in an account · Create a user #
Ask an LLM
“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?”
Tell an agent
Create a user named {name} with login {unique_id} in account {account_id}.
Add a new user with login {unique_id} and SIS ID {sis_user_id} to account {account_id}.
POST /v1/users/{user_id}/files Upload a file to a user's personal files · Upload a file #
Ask an LLM
“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?”
Tell an agent
Start uploading a file to the personal files of user {user_id}.
Begin a personal-files upload for user {user_id}.
GET /v1/users/self/activity_stream List my activity stream · List the activity stream #
Ask an LLM
“How can I pull my own recent activity stream from the self endpoint?”
“Can I limit my activity stream to only my active courses?”
Tell an agent
Show my activity stream via users/self.
List my activity stream items, only for active courses: {only_active_courses}.
DELETE /v1/users/self/activity_stream Hide every item in my activity stream · Hide all stream items #
Ask an LLM
“Can I clear out my whole activity stream at once?”
“Is there a way to hide all of my stream items in one call?”
Tell an agent destructive · confirm first
Hide all items in my activity stream.
Clear every entry from my activity stream.
GET /v1/users/activity_stream List my activity stream (alternate route) · List the activity stream #
Ask an LLM
“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?”
Tell an agent
Fetch my global activity stream from the users/activity_stream route.
Get the current user's stream via the alternate route, active courses only: {only_active_courses}.
GET /v1/users/self/activity_stream/summary Summarize my activity stream · Activity stream summary #
Ask an LLM
“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?”
Tell an agent
Summarize my activity stream.
Give me an activity stream summary limited to active courses: {only_active_courses}.
GET /v1/users/self/todo List my to-do items · List the TODO items #
Ask an LLM
“What's on my Canvas to-do list right now?”
“Can I filter my to-do items to certain courses or submission status?”
Tell an agent
List my to-do items.
Show my to-do items for courses {course_ids}.
GET /v1/users/self/todo_item_count Count my to-do items · List counts for todo items #
Ask an LLM
“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?”
Tell an agent
Count my to-do items.
Tell me how many assignments need grading or submitting for me.
GET /v1/users/self/upcoming_events List my upcoming assignments and events · List upcoming assignments, calendar events #
Ask an LLM
“What assignments and calendar events are coming up for me?”
“Is there a quick way to see my next due dates and events?”
Tell an agent
List my upcoming assignments and calendar events.
Show what's coming up next on my schedule.
GET /v1/users/{user_id}/missing_submissions List a student's missing submissions · List Missing Submissions #
Ask an LLM
“Which past-due assignments has a student not turned in?”
“Can a parent observer see a child's missing work in specific courses?”
Tell an agent
List missing submissions for student {user_id}.
Show past-due unsubmitted work for user {user_id} in courses {course_ids}.
DELETE /v1/users/self/activity_stream/{id} Hide one activity stream item · Hide a stream item #
Ask an LLM
“Can I hide a single item from my activity stream?”
“How do I dismiss one specific stream entry?”
Tell an agent destructive · confirm first
Hide stream item {id}.
Remove activity stream entry {id} from my view.
GET /v1/users/{id} Get a user's details · Show user details #
Ask an LLM
“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?”
Tell an agent
Show details for user {id}.
Get user {id} including {include}.
PUT /v1/users/{id} Update a user's profile fields · Edit a user #
Ask an LLM
“How do I change a user's display name, time zone or pronouns?”
“Can I update someone's bio or avatar through the API?”
Tell an agent
Rename user {id} to {name}.
Set user {id}'s time zone to {time_zone}.
POST /v1/accounts/{account_id}/self_registration Self-register a user (deprecated) · [DEPRECATED] Self register a user #
Ask an LLM
“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?”
Tell an agent
Self-register {name} with login {unique_id} on account {account_id} using the deprecated endpoint.
Use the legacy self-registration for {name} on account {account_id}, terms accepted: {terms_of_use}, login {unique_id}.
GET /v1/users/{id}/settings Update a user's UI settings · Update user settings #
Ask an LLM
“How do I turn on manual mark-as-read for a user?”
“Can I collapse the global navigation by default for someone?”
Tell an agent
Enable manual mark-as-read for user {id}: {manual_mark_as_read}.
Set collapse global nav to {collapse_global_nav} for user {id}.
GET /v1/users/{id}/colors Get all of a user's custom colors · Get custom colors #
Ask an LLM
“What custom course colors has a user saved?”
“Can I fetch every color a user picked for their calendar and courses?”
Tell an agent
Get all custom colors for user {id}.
List the saved color choices of user {id}.
GET /v1/users/{id}/colors/{asset_string} Get a user's color for one course or context · Get custom color #
Ask an LLM
“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?”
Tell an agent
Get the custom color user {id} set for {asset_string}.
Show which color user {id} uses for context {asset_string}.
PUT /v1/users/{id}/colors/{asset_string} Set a user's color for a course or context · Update custom color #
Ask an LLM
“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?”
Tell an agent
Set user {id}'s color for {asset_string} to {hexcode}.
Change the {asset_string} color for user {id} to hex {hexcode}.
PUT /v1/users/{id}/text_editor_preference Set a user's preferred text editor · Update text editor preference #
Ask an LLM
“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?”
Tell an agent
Set user {id}'s text editor preference to {text_editor_preference}.
Save {text_editor_preference} as the default editor for user {id}.
PUT /v1/users/{id}/files_ui_version_preference Set a user's files UI version · Update files UI version preference #
Ask an LLM
“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?”
Tell an agent
Set the files UI version for user {id} to {files_ui_version}.
Switch user {id} to files UI {files_ui_version}.
GET /v1/users/{id}/dashboard_positions Get a user's dashboard card positions · Get dashboard positions #
Ask an LLM
“In what order has a user arranged their dashboard cards?”
“Can I read the saved dashboard card positions for someone?”
Tell an agent
Get dashboard positions for user {id}.
Show how user {id} has ordered their dashboard cards.
PUT /v1/users/{id}/dashboard_positions Reorder a user's dashboard cards · Update dashboard positions #
Ask an LLM
“How do I change the order of course cards on a user's dashboard?”
“Can I save new dashboard card positions for someone?”
Tell an agent
Update the dashboard card positions for user {id}.
Rearrange user {id}'s dashboard cards.
DELETE /v1/users/{id}/sessions Sign a user out everywhere and revoke tokens · Terminate all user sessions #
Ask an LLM
“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?”
Tell an agent destructive · confirm first
Terminate all sessions and access tokens for user {id}.
Log user {id} out of every session immediately.
DELETE /v1/users/mobile_sessions Log everyone out of mobile apps · Log users out of all mobile apps #
Ask an LLM
“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?”
Tell an agent destructive · confirm first
Expire all users' mobile sessions account-wide.
Log everyone out of the mobile apps, skipping admins: {skip_admins}.
DELETE /v1/users/{id}/mobile_sessions Log one user out of mobile apps · Log users out of all mobile apps #
Ask an LLM
“How do I force a single user to re-authorize on their mobile app?”
“Can I expire just one person's mobile sessions?”
Tell an agent destructive · confirm first
Log user {id} out of all mobile apps.
Expire the mobile sessions of user {id}.
PUT /v1/users/{id}/merge_into/{destination_user_id} Merge a user into another user · Merge user into another user #
Ask an LLM
“How do I combine two duplicate user records into one?”
“Is merging users reversible, and what happens to the source user's data?”
Tell an agent destructive · confirm first
Merge user {id} into user {destination_user_id}.
Fold duplicate user {id} into {destination_user_id}.
PUT /v1/users/{id}/merge_into/accounts/{destination_account_id}/users/{destination_user_id} Merge a user into a user on another account · Merge user into another user #
Ask an LLM
“Can I merge a user into someone on a different account or shard?”
“How do I specify the destination account when merging two users?”
Tell an agent destructive · confirm first
Merge user {id} into user {destination_user_id} on account {destination_account_id}.
Combine user {id} with {destination_user_id} in destination account {destination_account_id}.
POST /v1/users/{id}/split Split a merged user back apart · Split merged users into separate users #
Ask an LLM
“Can I undo a user merge that went wrong?”
“How much of a merged user can be restored by splitting them?”
Tell an agent
Split merged user {id} into separate users.
Undo the merge for user {id}.
POST /v1/users/self/pandata_events_token Get a Pandata events token · Get a Pandata Events jwt token and its expiration date #
Ask an LLM
“How does a mobile app get a token for sending events to Pandata?”
“When does the Pandata events JWT expire?”
Tell an agent
Get a Pandata events token for app key {app_key}.
Issue a Pandata events JWT for mobile app {app_key}.
GET /v1/users/{id}/graded_submissions List a user's recently graded submissions · Get a users most recently graded submissions #
Ask an LLM
“What has a student most recently had graded?”
“Can I limit recently graded work to current enrollments and published assignments?”
Tell an agent
Show the most recently graded submissions for user {id}.
List recent grades for user {id}, current enrollments only: {only_current_enrollments}.
GET /v1/users/{user_id}/profile Get a user's profile · Get user profile #
Ask an LLM
“How do I get a user's name and profile picture?”
“Where can I find my own calendar feed URL and LTI user id?”
Tell an agent
Get the profile of user {user_id}.
Show profile info and picture for user {user_id}.
GET /v1/users/{user_id}/avatars List avatar choices for a user · List avatar options #
Ask an LLM
“What avatar images can a user pick from?”
“Which avatar options are available to set on someone's profile?”
Tell an agent
List avatar options for user {user_id}.
Show the avatars user {user_id} can choose.
GET /v1/users/{user_id}/page_views List a user's page view history · List user page views #
Ask an LLM
“Can I see which pages a user visited and when?”
“How do I pull page views for a user between two dates, newest first?”
Tell an agent
List page views for user {user_id}.
Show page views for user {user_id} from {start_time} to {end_time}.
POST /v1/users/{user_id}/page_views/query Start an async page views export for a user · BETA - Initiate page views query #
Ask an LLM
“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?”
Tell an agent
Start a page views query for user {user_id} from {start_date} to {end_date}.
Queue a {results_format} page views export for user {user_id}.
GET /v1/users/{user_id}/page_views/query/{query_id} Check a user's page views query status · BETA - Poll query status #
Ask an LLM
“Is my single-user page views query finished yet?”
“How do I tell if a user's page views export failed?”
Tell an agent
Check status of page views query {query_id} for user {user_id}.
Poll user {user_id}'s page views query {query_id}.
GET /v1/users/{user_id}/page_views/query/{query_id}/results Download a user's page views query results · BETA - Get query results #
Ask an LLM
“Where do I download the results of a finished page views query for one user?”
“Are single-user page view query results returned compressed?”
Tell an agent
Download results of page views query {query_id} for user {user_id}.
Get the completed page view data from query {query_id} for user {user_id}.
POST /v1/users/page_views/query Start a page views export for many users · BETA - Initiate batch page views query #
Ask an LLM
“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?”
Tell an agent
Start a batch page views query for users {user_ids} from {start_date} to {end_date}.
Queue a multi-user page views export in {results_format} for {user_ids}.
GET /v1/users/page_views/query/{query_id} Check a batch page views query status · BETA - Poll batch query status #
Ask an LLM
“Has my multi-user page views export finished?”
“How do I poll the status of a batch page views job?”
Tell an agent
Check status of batch page views query {query_id}.
Poll the multi-user page views job {query_id}.
GET /v1/users/page_views/query/{query_id}/results Download batch page views query results · BETA - Get batch query results #
Ask an LLM
“How do I download the output of a completed multi-user page views query?”
“In what format do batch page view results come back?”
Tell an agent
Download results of batch page views query {query_id}.
Fetch the finished multi-user page view data for query {query_id}.
PUT /v1/users/{user_id}/custom_data Save custom JSON data on a user · Store custom data #
Ask an LLM
“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?”
Tell an agent
Store {data} on user {user_id} under namespace {ns}.
Save custom data {data} for user {user_id} in the {ns} namespace.
GET /v1/users/{user_id}/custom_data Read a user's stored custom data · Load custom data #
Ask an LLM
“How can my integration read back the JSON it stored on a user?”
“Can I load custom user data for one namespace only?”
Tell an agent
Load custom data for user {user_id} in namespace {ns}.
Read the {ns} custom data stored on user {user_id}.
DELETE /v1/users/{user_id}/custom_data Delete a user's stored custom data · Delete custom data #
Ask an LLM
“How do I remove the custom data my app stored on a user?”
“Can I delete custom user data for just one namespace?”
Tell an agent destructive · confirm first
Delete custom data for user {user_id} in namespace {ns}.
Wipe the {ns} custom data from user {user_id}.
GET /v1/users/self/course_nicknames List my course nicknames · List course nicknames #
Ask an LLM
“What nicknames have I given my courses?”
“Can I see all the course nicknames I've set?”
Tell an agent
List my course nicknames.
Show every nickname I've set for my courses.
DELETE /v1/users/self/course_nicknames Remove all my course nicknames · Clear course nicknames #
Ask an LLM
“How do I reset all of my course nicknames at once?”
“Can I wipe every nickname and go back to the real course names?”
Tell an agent destructive · confirm first
Clear all my course nicknames.
Remove every course nickname I've set.
GET /v1/users/self/course_nicknames/{course_id} Get my nickname for a course · Get course nickname #
Ask an LLM
“What nickname did I give a particular course?”
“Can I check whether one course has a nickname set?”
Tell an agent
Get my nickname for course {course_id}.
Show the nickname I use for course {course_id}.
PUT /v1/users/self/course_nicknames/{course_id} Give a course a nickname · Set course nickname #
Ask an LLM
“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?”
Tell an agent
Nickname course {course_id} as {nickname}.
Set my nickname for course {course_id} to {nickname}.
DELETE /v1/users/self/course_nicknames/{course_id} Remove my nickname for a course · Remove course nickname #
Ask an LLM
“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?”
Tell an agent destructive · confirm first
Remove my nickname for course {course_id}.
Restore the real name of course {course_id} by deleting its nickname.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/canvas:canvas-users-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

canvas-users-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Canvas LMS REST Users API
  version: v1
  summary: The complete Canvas LMS REST API, converted from the Swagger 1.2 documents Instructure publishes under https://canvas.instructure.com/doc/api/.
  description: The Canvas LMS REST API covers courses, assignments, quizzes, grades, users, enrollments, accounts, files, modules, rubrics, submissions, SIS imports, LTI, analytics and account administration.
  contact:
    name: Instructure Canvas
    url: https://canvas.instructure.com/doc/api/
  license:
    name: AGPL-3.0
    url: https://github.com/instructure/canvas-lms/blob/master/LICENSE
servers:
- url: https://canvas.instructure.com/api
  description: Instructure-hosted Canvas (canvas.instructure.com)
- url: https://{canvas_host}/api
  description: Any Canvas instance; Canvas is multi-tenant and self-hostable, so the host is the institution's Canvas domain.
  variables:
    canvas_host:
      default: canvas.instructure.com
      description: Your institution's Canvas hostname, e.g. school.instructure.com
security:
- bearerAuth: []
- oauth2: []
tags:


# --- truncated at 32 KB (118 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/canvas/refs/heads/main/openapi/canvas-users-api-openapi.yml