Canvas Files API

The Files API from Canvas — 43 operation(s) for files.

Operations 53

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/courses/{course_id}/files List the files in a course · List files #
Ask an LLM
“How do I see every file uploaded to a Canvas course?”
“Can I search a course's files by name or filter them to only PDFs?”
Tell an agent
List all files in course {course_id}.
Search course {course_id}'s files for {search_term}.
GET /v1/courses/{course_id}/files/quota Check a course's file storage quota · Get quota information #
Ask an LLM
“How much file storage has a course used out of its quota?”
“Is a course close to running out of file space?”
Tell an agent
Show the storage quota and usage for course {course_id}.
Check how much file space course {course_id} has left.
GET /v1/groups/{group_id}/files/quota Check a group's file storage quota · Get quota information #
Ask an LLM
“How much file storage is a student group using?”
“What is the storage limit for a group's files?”
Tell an agent
Show the storage quota and usage for group {group_id}.
Check how much file space group {group_id} has left.
GET /v1/users/{user_id}/files/quota Check a user's personal file storage quota · Get quota information #
Ask an LLM
“How much of a user's personal file quota is used?”
“Is a student running out of space in their personal files?”
Tell an agent
Show the personal storage quota and usage for user {user_id}.
Check how much personal file space user {user_id} has left.
GET /v1/users/{user_id}/files List a user's personal files · List files #
Ask an LLM
“How do I list the files in a user's personal files area?”
“Can I search a student's personal files for a document name?”
Tell an agent
List the personal files of user {user_id}.
Search user {user_id}'s personal files for {search_term}.
GET /v1/groups/{group_id}/files List the files in a group · List files #
Ask an LLM
“What files has a student group uploaded?”
“Can I filter a group's files by content type?”
Tell an agent
List all files in group {group_id}.
Search group {group_id}'s files for {search_term}.
GET /v1/folders/{id}/files List the files inside a folder · List files #
Ask an LLM
“How do I see just the files inside one specific folder?”
“Can I sort the files in a folder by name or date?”
Tell an agent
List the files in folder {id}.
Search folder {id} for files matching {search_term}.
GET /v1/files/{id}/public_url Get a file's inline preview URL · Get public inline preview url #
Ask an LLM
“How do I get the URL used to preview a file inline?”
“Can I get a preview link for a file attached to a submission?”
Tell an agent
Get the inline preview URL for file {id}.
Get the preview URL for file {id} from submission {submission_id}.
GET /v1/files/{id} Get a file by its ID · Get file #
Ask an LLM
“How do I look up a file's details when I only have its file ID?”
“What metadata does Canvas return for a single file?”
Tell an agent
Get the details of file {id}.
Look up file {id} directly by its ID.
PUT /v1/files/{id} Rename, move or lock a file · Update file #
Ask an LLM
“How do I rename a file or move it to another folder?”
“Can I hide a file or lock it until a certain date?”
Tell an agent
Rename file {id} to {name}.
Move file {id} into folder {parent_folder_id}.
DELETE /v1/files/{id} Permanently delete a file · Delete file #
Ask an LLM
“How do I permanently delete a file from Canvas?”
“Is deleting a file reversible, or is it destroyed for good?”
Tell an agent destructive · confirm first
Permanently delete file {id}.
Destroy file {id} and replace it with a placeholder.
GET /v1/courses/{course_id}/files/{id} Get a file within a course · Get file #
Ask an LLM
“How do I fetch a specific file in the context of a course?”
“Can I get a course file's details along with its usage rights?”
Tell an agent
Get file {id} from course {course_id}.
Show the details of course {course_id}'s file {id}.
GET /v1/groups/{group_id}/files/{id} Get a file within a group · Get file #
Ask an LLM
“How do I fetch a specific file that belongs to a group?”
“What details can I see about a file in a group's files area?”
Tell an agent
Get file {id} from group {group_id}.
Show the details of group {group_id}'s file {id}.
GET /v1/users/{user_id}/files/{id} Get a file from a user's personal files · Get file #
Ask an LLM
“How do I fetch a specific file from a user's personal files?”
“Can I see details of a file a student stored in their own files?”
Tell an agent
Get file {id} from user {user_id}'s personal files.
Show the details of user {user_id}'s file {id}.
GET /v1/courses/{course_id}/files/file_ref/{migration_id} Resolve a course-copy file reference · Translate file reference #
Ask an LLM
“How do I find the file a course copy migration reference points to?”
“Can I translate a file migration ID into the copied file in my course?”
Tell an agent
Translate file reference {migration_id} in course {course_id}.
Find which file in course {course_id} came from migration reference {migration_id}.
GET /v1/files/{id}/icon_metadata Get Icon Maker metadata for a file · Get icon metadata #
Ask an LLM
“How do I read the Icon Maker settings stored on an icon file?”
“Can I see what shape and colors an Icon Maker icon was built with?”
Tell an agent
Get the Icon Maker metadata for file {id}.
Show how icon file {id} was configured in Icon Maker.
POST /v1/files/update_word_count Report a submission attachment's word count · Update word count #
Ask an LLM
“How does a document viewer report a submission's word count back?”
“Can an external viewer update the word count on a submitted attachment?”
Tell an agent
Set the word count to {word_count} for attachment token {attachment_jwt}.
Report {word_count} words for the submission attachment identified by {attachment_jwt}.
GET /v1/folders/{id}/folders List the subfolders directly in a folder · List folders #
Ask an LLM
“How do I see the folders nested one level inside a folder?”
“What subfolders does a given folder contain?”
Tell an agent
List the subfolders inside folder {id}.
Show the immediate child folders of folder {id}.
GET /v1/courses/{course_id}/folders List every folder in a course · List all folders #
Ask an LLM
“How do I get a flat list of all folders in a course, subfolders included?”
“Which folders exist anywhere in a course's files?”
Tell an agent
List every folder in course {course_id}.
Give me a flat list of all of course {course_id}'s folders.
POST /v1/courses/{course_id}/folders Create a folder in a course · Create folder #
Ask an LLM
“How do I create a new folder in a course's files?”
“Can I create a course folder that stays hidden or locked until a date?”
Tell an agent
Create a folder named {name} in course {course_id}.
Create course {course_id} folder {name} under {parent_folder_path}.
GET /v1/users/{user_id}/folders List every folder in a user's files · List all folders #
Ask an LLM
“How do I list all the folders in a user's personal files?”
“What folder structure does a student have in their own files?”
Tell an agent
List every folder in user {user_id}'s personal files.
Give me a flat list of user {user_id}'s folders.
POST /v1/users/{user_id}/folders Create a folder in a user's files · Create folder #
Ask an LLM
“How do I add a folder to a user's personal files?”
“Can I create a personal folder at a specific path?”
Tell an agent
Create a folder named {name} in user {user_id}'s files.
Create personal folder {name} for user {user_id} under {parent_folder_path}.
GET /v1/groups/{group_id}/folders List every folder in a group · List all folders #
Ask an LLM
“How do I list all the folders in a group's files?”
“What folders has a student group set up?”
Tell an agent
List every folder in group {group_id}.
Give me a flat list of group {group_id}'s folders.
POST /v1/groups/{group_id}/folders Create a folder in a group · Create folder #
Ask an LLM
“How do I create a folder in a group's files area?”
“Can I make a group folder hidden from members?”
Tell an agent
Create a folder named {name} in group {group_id}.
Create group {group_id} folder {name} under {parent_folder_path}.
GET /v1/courses/{course_id}/folders/by_path/*full_path Resolve a full folder path in a course · Resolve path #
Ask an LLM
“How do I turn a course folder path like 'Week 1/Readings' into its folder chain?”
“Can I get every folder from the course root down to a nested path?”
Tell an agent
Resolve a nested folder path in course {course_id} into its folder hierarchy.
Walk the folder chain from the root to a given path in course {course_id}.
GET /v1/courses/{course_id}/folders/by_path Get a course's root folder via path resolution · Resolve path #
Ask an LLM
“How do I resolve the root of a course's folder path with no subpath?”
“What does path resolution return for a course when no path is given?”
Tell an agent
Resolve the root folder path for course {course_id}.
Run folder path resolution on course {course_id} without a subpath.
GET /v1/users/{user_id}/folders/by_path/*full_path Resolve a full folder path in a user's files · Resolve path #
Ask an LLM
“How do I find the folders along a nested path in a user's personal files?”
“Can I resolve a personal folder path into each folder on the way down?”
Tell an agent
Resolve a nested folder path in user {user_id}'s files into its hierarchy.
Walk the folder chain to a given path in user {user_id}'s personal files.
GET /v1/users/{user_id}/folders/by_path Get a user's root folder via path resolution · Resolve path #
Ask an LLM
“How do I resolve the root of a user's personal folder path?”
“What does path resolution return for a user's files with no path?”
Tell an agent
Resolve the root folder path for user {user_id}.
Run folder path resolution on user {user_id}'s files without a subpath.
GET /v1/groups/{group_id}/folders/by_path/*full_path Resolve a full folder path in a group · Resolve path #
Ask an LLM
“How do I resolve a nested folder path inside a group's files?”
“Can I get each folder on the path to a deep group folder?”
Tell an agent
Resolve a nested folder path in group {group_id} into its hierarchy.
Walk the folder chain to a given path in group {group_id}.
GET /v1/groups/{group_id}/folders/by_path Get a group's root folder via path resolution · Resolve path #
Ask an LLM
“How do I resolve the root of a group's folder path?”
“What does path resolution return for a group with no path given?”
Tell an agent
Resolve the root folder path for group {group_id}.
Run folder path resolution on group {group_id} without a subpath.
GET /v1/courses/{course_id}/folders/{id} Get a folder within a course · Get folder #
Ask an LLM
“How do I get a course folder's details, including the root folder?”
“Can I use 'root' to fetch a course's top-level folder?”
Tell an agent
Get folder {id} in course {course_id}.
Show the root folder of course {course_id}.
GET /v1/users/{user_id}/folders/{id} Get a folder in a user's files · Get folder #
Ask an LLM
“How do I get details of a folder in a user's personal files?”
“Can I fetch the root of a student's personal files?”
Tell an agent
Get folder {id} in user {user_id}'s files.
Show the root personal folder of user {user_id}.
GET /v1/groups/{group_id}/folders/{id} Get a folder within a group · Get folder #
Ask an LLM
“How do I get details of a folder in a group's files?”
“Can I fetch a group's root folder?”
Tell an agent
Get folder {id} in group {group_id}.
Show the root folder of group {group_id}.
GET /v1/folders/{id} Get a folder by its ID · Get folder #
Ask an LLM
“How do I look up a folder when I only know its folder ID?”
“What details does Canvas return about a single folder?”
Tell an agent
Get folder {id} by its ID.
Look up the details of folder {id} directly.
PUT /v1/folders/{id} Rename, move or lock a folder · Update folder #
Ask an LLM
“How do I rename a folder or move it under another folder?”
“Can I hide a folder or lock it until a set date?”
Tell an agent
Rename folder {id} to {name}.
Move folder {id} under folder {parent_folder_id}.
DELETE /v1/folders/{id} Delete a folder · Delete folder #
Ask an LLM
“How do I delete a folder from Canvas files?”
“Can I delete a folder that still has files in it?”
Tell an agent destructive · confirm first
Delete empty folder {id}.
Force-delete folder {id} and everything inside it.
POST /v1/folders/{folder_id}/folders Create a subfolder inside a folder · Create folder #
Ask an LLM
“How do I create a subfolder inside an existing folder?”
“Can I set a position for a new subfolder within its parent?”
Tell an agent
Create subfolder {name} inside folder {folder_id}.
Add a locked subfolder {name} to folder {folder_id}.
POST /v1/accounts/{account_id}/folders Create a folder at the account level · Create folder #
Ask an LLM
“How do I create a folder in an account's files?”
“Can admins create folders for a whole account?”
Tell an agent
Create a folder named {name} in account {account_id}.
Create account {account_id} folder {name} under {parent_folder_path}.
POST /v1/folders/{folder_id}/files Start uploading a file to a folder · Upload a file #
Ask an LLM
“How do I upload a file into a specific Canvas folder?”
“What is the first step of the file upload workflow for a folder?”
Tell an agent
Start a file upload into folder {folder_id}.
Upload a new file to folder {folder_id}.
POST /v1/folders/{dest_folder_id}/copy_file Copy a file into a folder · Copy a file #
Ask an LLM
“How do I copy a file from one course into another course's folder?”
“What happens if a copied file has the same name as an existing one?”
Tell an agent
Copy file {source_file_id} into folder {dest_folder_id}.
Copy file {source_file_id} into folder {dest_folder_id} and {on_duplicate} on a name clash.
POST /v1/folders/{dest_folder_id}/copy_folder Copy a folder and its contents · Copy a folder #
Ask an LLM
“How do I copy a whole folder with its contents into another folder?”
“Can I copy a folder between courses in the same institution?”
Tell an agent
Copy folder {source_folder_id} into folder {dest_folder_id}.
Duplicate folder {source_folder_id} with all its files under {dest_folder_id}.
GET /v1/courses/{course_id}/folders/media Get my media upload folder in a course · Get uploaded media folder for user #
Ask an LLM
“Where do my uploaded media files go in a course?”
“Does Canvas create a course media upload folder if one doesn't exist?”
Tell an agent
Get my uploaded media folder in course {course_id}.
Find the course {course_id} folder I can upload media to.
GET /v1/groups/{group_id}/folders/media Get my media upload folder in a group · Get uploaded media folder for user #
Ask an LLM
“Where do my uploaded media files go in a group?”
“Which group folder am I allowed to upload media into?”
Tell an agent
Get my uploaded media folder in group {group_id}.
Find the group {group_id} folder I can upload media to.
PUT /v1/courses/{course_id}/usage_rights Set copyright info on course files · Set usage rights #
Ask an LLM
“How do I set copyright and license info on files in a course?”
“Can I apply a Creative Commons license to several course files at once?”
Tell an agent
Mark files {file_ids} in course {course_id} as {justification}.
License course {course_id} files {file_ids} under {license} with justification {justification}.
DELETE /v1/courses/{course_id}/usage_rights Remove copyright info from course files · Remove usage rights #
Ask an LLM
“How do I clear the copyright and license info from course files?”
“Can I remove usage rights from a whole folder in a course?”
Tell an agent destructive · confirm first
Remove usage rights from files {file_ids} in course {course_id}.
Clear the license info on course {course_id} files {file_ids}.
PUT /v1/groups/{group_id}/usage_rights Set copyright info on group files · Set usage rights #
Ask an LLM
“How do I set copyright and license info on a group's files?”
“Can I record a legal copyright holder for group files?”
Tell an agent
Mark files {file_ids} in group {group_id} as {justification}.
License group {group_id} files {file_ids} under {license} with justification {justification}.
DELETE /v1/groups/{group_id}/usage_rights Remove copyright info from group files · Remove usage rights #
Ask an LLM
“How do I clear usage rights from files in a group?”
“Can I remove license info from a group's folder in one call?”
Tell an agent destructive · confirm first
Remove usage rights from files {file_ids} in group {group_id}.
Clear the license info on group {group_id} files {file_ids}.
PUT /v1/users/{user_id}/usage_rights Set copyright info on a user's files · Set usage rights #
Ask an LLM
“How do I set copyright info on files in a user's personal files?”
“Can I license my own personal files under Creative Commons?”
Tell an agent
Mark files {file_ids} in user {user_id}'s files as {justification}.
License user {user_id}'s files {file_ids} under {license} with justification {justification}.
DELETE /v1/users/{user_id}/usage_rights Remove copyright info from a user's files · Remove usage rights #
Ask an LLM
“How do I clear usage rights from a user's personal files?”
“Can I strip license info from files in my own personal folder?”
Tell an agent destructive · confirm first
Remove usage rights from files {file_ids} in user {user_id}'s files.
Clear the license info on user {user_id}'s files {file_ids}.
GET /v1/courses/{course_id}/content_licenses List licenses available in a course · List licenses #
Ask an LLM
“Which content licenses can I apply to files in a course?”
“What Creative Commons options are available for course files?”
Tell an agent
List the content licenses available in course {course_id}.
Show which licenses I can apply to course {course_id}'s files.
GET /v1/groups/{group_id}/content_licenses List licenses available in a group · List licenses #
Ask an LLM
“Which content licenses can be applied to a group's files?”
“What license options does a group have for its uploads?”
Tell an agent
List the content licenses available in group {group_id}.
Show which licenses I can apply to group {group_id}'s files.
GET /v1/users/{user_id}/content_licenses List licenses available for a user's files · List licenses #
Ask an LLM
“Which content licenses can a user apply to personal files?”
“What license choices do I have for my own uploaded files?”
Tell an agent
List the content licenses available to user {user_id}.
Show which licenses user {user_id} can apply to personal files.

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-files-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-files-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Canvas LMS REST Files 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 (101 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/canvas/refs/heads/main/openapi/canvas-files-api-openapi.yml