> ## Documentation Index
> Fetch the complete documentation index at: https://docs.modulex.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Instructure Canvas LMS Integration for AI Agents & Workflows

> Learning management system for course, assignment, and user management via the Canvas REST API.

{/* Self-hosted logo — build-time vendored from modulex.json / Iconify (see scripts/lib/logo.js). */}

<img src="https://mintcdn.com/modulexaillc/zKB2qsP6Q61VNLfB/logos/instructure-canvas.svg?fit=max&auto=format&n=zKB2qsP6Q61VNLfB&q=85&s=6f7ce89863dd85801a632b9b5f3fbb12" alt="Instructure Canvas LMS logo" width="72" height="72" data-path="logos/instructure-canvas.svg" />

## Overview

Add **Instructure Canvas LMS** to any ModuleX agent or workflow. Learning management system integration for [Instructure Canvas](https://www.instructure.com/canvas) — course, assignment, and user management via the Canvas REST API (`https://{your-domain}/api/v1`).

<Info>
  **Categories**: Education · Learning Management · **Auth**: Canvas OAuth Token + Domain · **Actions**: 5
</Info>

## Authentication

### Canvas OAuth Token + Domain

Authenticate using a Canvas access token and your instance domain. Canvas LMS is self-hosted, so both the domain and token are required.

<Steps>
  <Step title="Step 1">
    Log into your Canvas instance.
  </Step>

  <Step title="Step 2">
    Go to Account > Settings > Approved Integrations (or generate a new access token).
  </Step>

  <Step title="Step 3">
    Copy your access token and note your Canvas domain (e.g. myschool.instructure.com).
  </Step>
</Steps>

#### Required Credentials

| Field         | Description                                                 | Required | Format                                       |
| ------------- | ----------------------------------------------------------- | -------- | -------------------------------------------- |
| Canvas Domain | Your Canvas instance domain (e.g. myschool.instructure.com) | Yes      | `myschool.instructure.com`                   |
| Access Token  | Your Canvas API access token                                | Yes      | `7~xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` |

## Available Actions

<AccordionGroup>
  <Accordion title="list_accounts — List Canvas accounts accessible to the authenticated user.">
    ### Response

    ```json theme={null}
    {
      "$defs": {
        "AccountOption": {
          "additionalProperties": false,
          "description": "A Canvas account option.",
          "properties": {
            "id": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Id"
            },
            "name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Name"
            }
          },
          "title": "AccountOption",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "accounts": {
          "items": {
            "$ref": "#/$defs/AccountOption"
          },
          "title": "Accounts",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListAccountsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_assignments — Retrieve a list of assignments for a user in a specific course.">
    ### Parameters

    <ResponseField name="user_id" type="string" required>
      The ID of the user whose assignments to list.
    </ResponseField>

    <ResponseField name="course_id" type="string" required>
      The ID of the course to list assignments from.
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "AssignmentSummary": {
          "additionalProperties": false,
          "description": "A Canvas assignment.",
          "properties": {
            "id": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Id"
            },
            "name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Name"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Description"
            },
            "due_at": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Due At"
            },
            "points_possible": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Points Possible"
            },
            "grading_type": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Grading Type"
            },
            "submission_types": {
              "items": {
                "type": "string"
              },
              "title": "Submission Types",
              "type": "array"
            },
            "course_id": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Course Id"
            },
            "allowed_attempts": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Allowed Attempts"
            },
            "omit_from_final_grade": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Omit From Final Grade"
            }
          },
          "title": "AssignmentSummary",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "assignments": {
          "items": {
            "$ref": "#/$defs/AssignmentSummary"
          },
          "title": "Assignments",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListAssignmentsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_courses — List all courses associated with a given user.">
    ### Parameters

    <ResponseField name="user_id" type="string" required>
      The ID of the user whose courses to list.
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "CourseSummary": {
          "additionalProperties": false,
          "description": "A Canvas course.",
          "properties": {
            "id": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Id"
            },
            "name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Name"
            },
            "course_code": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Course Code"
            },
            "workflow_state": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Workflow State"
            },
            "enrollment_term_id": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Enrollment Term Id"
            }
          },
          "title": "CourseSummary",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "courses": {
          "items": {
            "$ref": "#/$defs/CourseSummary"
          },
          "title": "Courses",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListCoursesOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="search_course_content — Search for content in a course using Canvas smart search.">
    ### Parameters

    <ResponseField name="course_id" type="string" required>
      The ID of the course to search within.
    </ResponseField>

    <ResponseField name="query" type="string" required>
      The search query string.
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "SearchResultItem": {
          "additionalProperties": false,
          "description": "A search result from Canvas smart search.",
          "properties": {
            "content_id": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Content Id"
            },
            "content_type": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Content Type"
            },
            "title": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Title"
            },
            "body": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Body"
            },
            "html_url": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Html Url"
            },
            "distance": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Distance"
            },
            "readable_type": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Readable Type"
            },
            "relevance": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Relevance"
            }
          },
          "title": "SearchResultItem",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "results": {
          "items": {
            "$ref": "#/$defs/SearchResultItem"
          },
          "title": "Results",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "SearchCourseContentOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="update_assignment — Update an existing assignment in a course.">
    ### Parameters

    <ResponseField name="course_id" type="string" required>
      The ID of the course containing the assignment.
    </ResponseField>

    <ResponseField name="assignment_id" type="string" required>
      The ID of the assignment to update.
    </ResponseField>

    <ResponseField name="name" type="string">
      The new name of the assignment.
    </ResponseField>

    <ResponseField name="description" type="string">
      The new description of the assignment (supports HTML).
    </ResponseField>

    <ResponseField name="submission_type" type="string">
      Submission type: online\_quiz, none, on\_paper, discussion\_topic, external\_tool, online\_upload, online\_text\_entry, online\_url, media\_recording, student\_annotation.
    </ResponseField>

    <ResponseField name="notify_of_update" type="boolean">
      Whether to notify students of the update.
    </ResponseField>

    <ResponseField name="points_possible" type="integer">
      Maximum points possible on the assignment.
    </ResponseField>

    <ResponseField name="grading_type" type="string">
      Grading strategy: pass\_fail, percent, letter\_grade, gpa\_scale, points, not\_graded.
    </ResponseField>

    <ResponseField name="due_at" type="string">
      Due date/time in ISO 8601 format (e.g. 2014-10-21T18:48:00Z).
    </ResponseField>

    <ResponseField name="omit_from_final_grade" type="boolean">
      Whether to omit this assignment from the student's final grade.
    </ResponseField>

    <ResponseField name="allowed_attempts" type="integer">
      Number of submission attempts allowed (-1 for unlimited).
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "AssignmentSummary": {
          "additionalProperties": false,
          "description": "A Canvas assignment.",
          "properties": {
            "id": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Id"
            },
            "name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Name"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Description"
            },
            "due_at": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Due At"
            },
            "points_possible": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Points Possible"
            },
            "grading_type": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Grading Type"
            },
            "submission_types": {
              "items": {
                "type": "string"
              },
              "title": "Submission Types",
              "type": "array"
            },
            "course_id": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Course Id"
            },
            "allowed_attempts": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Allowed Attempts"
            },
            "omit_from_final_grade": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Omit From Final Grade"
            }
          },
          "title": "AssignmentSummary",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "assignment": {
          "anyOf": [
            {
              "$ref": "#/$defs/AssignmentSummary"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        }
      },
      "required": [
        "success"
      ],
      "title": "UpdateAssignmentOutput",
      "type": "object"
    }
    ```
  </Accordion>
</AccordionGroup>

## Limits & Quotas

* **Rate limits**: Canvas enforces per-user rate limits (typically 700 requests per 10 minutes for the default configuration, varies by institution).
* **Pagination**: List endpoints may return paginated results; current implementation fetches the first page.
* **Error model**: Non-2xx responses and timeouts are caught and returned as `success=False` + `error` rather than raising.

## Links

* [Instructure Canvas LMS](https://www.instructure.com/canvas)
