Canvas Courses API

The Courses resource of the Canvas LMS REST API — 31 operations covering course creation, settings, users and enrollment counts, course copy, blueprint associations, effective due dates, bulk course updates, conclude/delete and course reset. Split from the first-party contract Instructure publishes at https://canvas.instructure.com/doc/api/courses.json.

Operations 31

POST /v1/accounts/{account_id}/courses Create a new course #
PUT /v1/accounts/{account_id}/courses Update courses #
GET /v1/courses List your courses #
GET /v1/users/{user_id}/courses List courses for a user #
GET /v1/courses/{course_id}/users/{user_id}/progress Get user progress #
POST /v1/courses/{course_id}/files Upload a file #
GET /v1/courses/{course_id}/students List students #
GET /v1/courses/{course_id}/users List users in course #
GET /v1/courses/{course_id}/search_users List users in course #
GET /v1/courses/{course_id}/recent_students List recently logged in students #
GET /v1/courses/{course_id}/users/{id} Get single user #
GET /v1/courses/{course_id}/content_share_users Search for content share users #
POST /v1/courses/{course_id}/preview_html Preview processed html #
GET /v1/courses/{course_id}/activity_stream Course activity stream #
GET /v1/courses/{course_id}/activity_stream/summary Course activity stream summary #
GET /v1/courses/{course_id}/todo Course TODO items #
DELETE /v1/courses/{id} Delete/Conclude a course #
GET /v1/courses/{id} Get a single course #
PUT /v1/courses/{id} Update a course #
GET /v1/courses/{course_id}/settings Get course settings #
PUT /v1/courses/{course_id}/settings Update course settings #
GET /v1/courses/{course_id}/student_view_student Return test student for course #
GET /v1/accounts/{account_id}/courses/{id} Get a single course #
POST /v1/courses/{course_id}/reset_content Reset a course #
GET /v1/courses/{course_id}/effective_due_dates Get effective due dates #
GET /v1/courses/{course_id}/permissions Permissions #
GET /v1/courses/{course_id}/bulk_user_progress Get bulk user progress #
POST /v1/courses/{id}/dismiss_migration_limitation_message Remove quiz migration alert #
POST /v1/courses/{course_id}/restore/{version_id} Restore course syllabus version #
GET /v1/courses/{course_id}/course_copy/{id} Get course copy status #
POST /v1/courses/{course_id}/course_copy Copy course content #

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-courses-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-courses-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Canvas LMS Courses API
  version: v1
  summary: The Courses resource of the Canvas LMS REST API, converted from the first-party Swagger 1.2 document Instructure publishes at https://canvas.instructure.com/doc/api/courses.json.
  description: |-
    Courses, course settings, course users, enrollment counts, course copy, blueprint associations, effective due dates, bulk course updates and course deletion.

    PROVENANCE: mechanically converted from https://canvas.instructure.com/doc/api/courses.json (Swagger 1.2, first-party, fetched 2026-09-05, HTTP 200). The verbatim harvest is at openapi/_original/swagger-1.2/courses.json. Supersedes a hand-authored 25-operation subset now quarantined at openapi/_scaffold/canvas-openapi-scaffold.yml.
  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
externalDocs:
  description: Canvas LMS REST API Documentation
  url: https://canvas.instructure.com/doc/api/
x-generated-from: https://canvas.instructure.com/doc/api/courses.json
x-provenance:
  method: derived
  derived_by: API Evangelist enrichment pipeline (Swagger 1.2 -> OpenAPI 3.1 conversion)
  source: openapi/_original/swagger-1.2/courses.json
  source_url: https://canvas.instructure.com/doc/api/courses.json
  fetched: '2026-09-05'
  http_status: 200
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:
- name: Courses
  x-resource: courses
  externalDocs:
    url: https://canvas.instructure.com/doc/api/courses.html
paths:
  /v1/accounts/{account_id}/courses:
    post:
      tags:
      - Courses
      operationId: create_new_course
      summary: Create a new course
      description: Create a new course
      parameters:
      - name: account_id
        in: path
        schema:
          type: string
        required: true
        description: ID
      requestBody:
        required: false
        content:
          application/json:
            schema: &id001
              type: object
              properties:
                course[name]:
                  type: string
                  description: |-
                    The name of the course. If omitted, the course will be named "Unnamed
                    Course."
                course[course_code]:
                  type: string
                  description: The course code for the course.
                course[start_at]:
                  type: string
                  format: date-time
                  description: |-
                    Course start date in ISO8601 format, e.g. 2011-01-01T01:00Z
                    This value is ignored unless 'restrict_enrollments_to_course_dates' is set to true.
                course[end_at]:
                  type: string
                  format: date-time
                  description: |-
                    Course end date in ISO8601 format. e.g. 2011-01-01T01:00Z
                    This value is ignored unless 'restrict_enrollments_to_course_dates' is set to true.
                course[license]:
                  type: string
                  description: |-
                    The name of the licensing. Should be one of the following abbreviations
                    (a descriptive name is included in parenthesis for reference):
                    - 'private' (Private Copyrighted)
                    - 'cc_by_nc_nd' (CC Attribution Non-Commercial No Derivatives)
                    - 'cc_by_nc_sa' (CC Attribution Non-Commercial Share Alike)
                    - 'cc_by_nc' (CC Attribution Non-Commercial)
                    - 'cc_by_nd' (CC Attribution No Derivatives)
                    - 'cc_by_sa' (CC Attribution Share Alike)
                    - 'cc_by' (CC Attribution)
                    - 'public_domain' (Public Domain).
                course[is_public]:
                  type: boolean
                  description: Set to true if course is public to both authenticated and unauthenticated users.
                course[is_public_to_auth_users]:
                  type: boolean
                  description: Set to true if course is public only to authenticated users.
                course[public_syllabus]:
                  type: boolean
                  description: Set to true to make the course syllabus public.
                course[public_syllabus_to_auth]:
                  type: boolean
                  description: Set to true to make the course syllabus public for authenticated users.
                course[public_description]:
                  type: string
                  description: A publicly visible description of the course.
                course[allow_student_wiki_edits]:
                  type: boolean
                  description: If true, students will be able to modify the course wiki.
                course[allow_wiki_comments]:
                  type: boolean
                  description: If true, course members will be able to comment on wiki pages.
                course[allow_student_forum_attachments]:
                  type: boolean
                  description: If true, students can attach files to forum posts.
                course[open_enrollment]:
                  type: boolean
                  description: Set to true if the course is open enrollment.
                course[self_enrollment]:
                  type: boolean
                  description: Set to true if the course is self enrollment.
                course[restrict_enrollments_to_course_dates]:
                  type: boolean
                  description: |-
                    Set to true to restrict user enrollments to the start and end dates of the
                    course. This value must be set to true
                    in order to specify a course start date and/or end date.
                course[term_id]:
                  type: string
                  description: The unique ID of the term to create to course in.
                course[sis_course_id]:
                  type: string
                  description: The unique SIS identifier.
                course[integration_id]:
                  type: string
                  description: The unique Integration identifier.
                course[hide_final_grades]:
                  type: boolean
                  description: |-
                    If this option is set to true, the totals in student grades summary will
                    be hidden.
                course[apply_assignment_group_weights]:
                  type: boolean
                  description: Set to true to weight final grade based on assignment groups percentages.
                course[time_zone]:
                  type: string
                  description: |-
                    The time zone for the course. Allowed time zones are
                    {http://www.iana.org/time-zones IANA time zones} or friendlier
                    {http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html Ruby on Rails time zones}.
                offer:
                  type: boolean
                  description: |-
                    If this option is set to true, the course will be available to students
                    immediately.
                enroll_me:
                  type: boolean
                  description: Set to true to enroll the current user as the teacher.
                skip_course_template:
                  type: boolean
                  description: |-
                    If this option is set to true, the template of the account will not be applied to this course
                    It means copy_from_course_template will not be executed. This option is thought for a course copy.
                course[default_view]:
                  type: string
                  enum:
                  - feed
                  - wiki
                  - modules
                  - syllabus
                  - assignments
                  description: |-
                    The type of page that users will see when they first visit the course
                    * 'feed' Recent Activity Dashboard
                    * 'modules' Course Modules/Sections Page
                    * 'assignments' Course Assignments List
                    * 'syllabus' Course Syllabus Page
                    other types may be added in the future
                course[syllabus_body]:
                  type: string
                  description: The syllabus body for the course
                course[grading_standard_id]:
                  type: integer
                  format: int64
                  description: The grading standard id to set for the course.  If no value is provided for this argument the current grading_standard will be un-set from this course.
                course[grade_passback_setting]:
                  type: string
                  description: Optional. The grade_passback_setting for the course. Only 'nightly_sync', 'disabled', and '' are allowed
                course[course_format]:
                  type: string
                  description: Optional. Specifies the format of the course. (Should be 'on_campus', 'online', or 'blended')
                course[post_manually]:
                  type: boolean
                  description: |-
                    Default is false.
                    When true, all grades in the course must be posted manually, and will not be automatically posted.
                    When false, all grades in the course will be automatically posted.
                enable_sis_reactivation:
                  type: boolean
                  description: When true, will first try to re-activate a deleted course with matching sis_course_id if possible.
          application/x-www-form-urlencoded:
            schema: *id001
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Course'
      externalDocs:
        url: https://canvas.instructure.com/doc/api/courses.html
    put:
      tags:
      - Courses
      operationId: update_courses
      summary: Update courses
      description: |-
        Update multiple courses in an account.  Operates asynchronously; use the {api:ProgressController#show progress endpoint}
        to query the status of an operation.
      parameters:
      - name: account_id
        in: path
        schema:
          type: string
        required: true
        description: ID
      requestBody:
        required: false
        content:
          application/json:
            schema: &id002
              type: object
              properties:
                course_ids:
                  type: array
                  items:
                    type: string
                  description: List of ids of courses to update. At most 500 courses may be updated in one call.
                event:
                  type: string
                  enum:
                  - offer
                  - conclude
                  - delete
                  - undelete
                  description: |-
                    The action to take on each course.  Must be one of 'offer', 'conclude', 'delete', or 'undelete'.
                    * 'offer' makes a course visible to students. This action is also called "publish" on the web site.
                    * 'conclude' prevents future enrollments and makes a course read-only for all participants. The course still appears
                      in prior-enrollment lists.
                    * 'delete' completely removes the course from the web site (including course menus and prior-enrollment lists).
                      All enrollments are deleted. Course content may be physically deleted at a future date.
                    * 'undelete' attempts to recover a course that has been deleted. (Recovery is not guaranteed; please conclude
                      rather than delete a course if there is any possibility the course will be used again.) The recovered course
                      will be unpublished. Deleted enrollments will not be recovered.
              required:
              - course_ids
              - event
          application/x-www-form-urlencoded:
            schema: *id002
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: string
                x-canvas-declared-type: Progress
      externalDocs:
        url: https://canvas.instructure.com/doc/api/courses.html
  /v1/courses:
    get:
      tags:
      - Courses
      operationId: list_your_courses
      summary: List your courses
      description: Returns the paginated list of active courses for the current user.
      parameters:
      - name: enrollment_type
        in: query
        schema:
          type: string
          enum:
          - teacher
          - student
          - ta
          - observer
          - designer
        required: false
        description: |-
          When set, only return courses where the user is enrolled as this type. For
          example, set to "teacher" to return only courses where the user is
          enrolled as a Teacher.  This argument is ignored if enrollment_role is given.
      - name: enrollment_role
        in: query
        schema:
          type: string
        required: false
        description: |-
          Deprecated
          When set, only return courses where the user is enrolled with the specified
          course-level role.  This can be a role created with the
          {api:RoleOverridesController#add_role Add Role API} or a base role type of
          'StudentEnrollment', 'TeacherEnrollment', 'TaEnrollment', 'ObserverEnrollment',
          or 'DesignerEnrollment'.
      - name: enrollment_role_id
        in: query
        schema:
          type: integer
          format: int64
        required: false
        description: |-
          When set, only return courses where the user is enrolled with the specified
          course-level role.  This can be a role created with the
          {api:RoleOverridesController#add_role Add Role API} or a built_in role type of
          'StudentEnrollment', 'TeacherEnrollment', 'TaEnrollment', 'ObserverEnrollment',
          or 'DesignerEnrollment'.
      - name: enrollment_state
        in: query
        schema:
          type: string
          enum:
          - active
          - invited_or_pending
          - completed
        required: false
        description: |-
          When set, only return courses where the user has an enrollment with the given state.
          This will respect section/course/term date overrides.
      - name: exclude_blueprint_courses
        in: query
        schema:
          type: boolean
        required: false
        description: When set, only return courses that are not configured as blueprint courses.
      - name: include
        in: query
        schema:
          type: array
          items:
            type: string
            enum:
            - needs_grading_count
            - syllabus_body
            - syllabus_versions
            - public_description
            - total_scores
            - current_grading_period_scores
            - grading_periods
            - term
            - account
            - course_progress
            - sections
            - storage_quota_used_mb
            - total_students
            - passback_status
            - favorites
            - teachers
            - observed_users
            - course_image
            - banner_image
            - concluded
            - post_manually
        required: false
        description: |-
          - "needs_grading_count": Optional information to include with each Course.
            When needs_grading_count is given, and the current user has grading
            rights, the total number of submissions needing grading for all
            assignments is returned.
          - "syllabus_body": Optional information to include with each Course.
            When syllabus_body is given the user-generated html for the course
            syllabus is returned.
          - "public_description": Optional information to include with each Course.
            When public_description is given the user-generated text for the course
            public description is returned.
          - "total_scores": Optional information to include with each Course.
            When total_scores is given, any student enrollments will also
            include the fields 'computed_current_score', 'computed_final_score',
            'computed_current_grade', and 'computed_final_grade', as well as (if
            the user has permission) 'unposted_current_score',
            'unposted_final_score', 'unposted_current_grade', and
            'unposted_final_grade' (see Enrollment documentation for more
            information on these fields). This argument is ignored if the course is
            configured to hide final grades.
          - "current_grading_period_scores": Optional information to include with
            each Course. When current_grading_period_scores is given and total_scores
            is given, any student enrollments will also include the fields
            'has_grading_periods',
            'totals_for_all_grading_periods_option', 'current_grading_period_title',
            'current_grading_period_id', current_period_computed_current_score',
            'current_period_computed_final_score',
            'current_period_computed_current_grade', and
            'current_period_computed_final_grade', as well as (if the user has permission)
            'current_period_unposted_current_score',
            'current_period_unposted_final_score',
            'current_period_unposted_current_grade', and
            'current_period_unposted_final_grade' (see Enrollment documentation for
            more information on these fields). In addition, when this argument is
            passed, the course will have a 'has_grading_periods' attribute
            on it. This argument is ignored if the total_scores argument is not
            included. If the course is configured to hide final grades, the
            following fields are not returned:
            'totals_for_all_grading_periods_option',
            'current_period_computed_current_score',
            'current_period_computed_final_score',
            'current_period_computed_current_grade',
            'current_period_computed_final_grade',
            'current_period_unposted_current_score',
            'current_period_unposted_final_score',
            'current_period_unposted_current_grade', and
            'current_period_unposted_final_grade'
          - "grading_periods": Optional information to include with each Course. When
            grading_periods is given, a list of the grading periods associated with
            each course is returned.
          - "term": Optional information to include with each Course. When
            term is given, the information for the enrollment term for each course
            is returned.
          - "account": Optional information to include with each Course. When
            account is given, the account json for each course is returned.
          - "course_progress": Optional information to include with each Course.
            When course_progress is given, each course will include a
            'course_progress' object with the fields: 'requirement_count', an integer
            specifying the total number of requirements in the course,
            'requirement_completed_count', an integer specifying the total number of
            requirements in this course that have been completed, and
            'next_requirement_url', a string url to the next requirement item, and
            'completed_at', the date the course was completed (null if incomplete).
            'next_requirement_url' will be null if all requirements have been
            completed or the current module does not require sequential progress.
            "course_progress" will return an error message if the course is not
            module based or the user is not enrolled as a student in the course.
          - "sections": Section enrollment information to include with each Course.
            Returns an array of hashes containing the section ID (id), section name
            (name), start and end dates (start_at, end_at), as well as the enrollment
            type (enrollment_role, e.g. 'StudentEnrollment').
          - "storage_quota_used_mb": The amount of storage space used by the files in this course
          - "total_students": Optional information to include with each Course.
            Returns an integer for the total amount of active and invited students.
          - "passback_status": Include the grade passback_status
          - "favorites": Optional information to include with each Course.
            Indicates if the user has marked the course as a favorite course.
          - "teachers": Teacher information to include with each Course.
            Returns an array of hashes containing the {api:Users:UserDisplay UserDisplay} information
            for each teacher in the course.
          - "observed_users": Optional information to include with each Course.
            Will include data for observed users if the current user has an
            observer enrollment.
          - "tabs": Optional information to include with each Course.
            Will include the list of tabs configured for each course.  See the
            {api:TabsController#index List available tabs API} for more information.
          - "course_image": Optional information to include with each Course. Returns course
            image url if a course image has been set.
          - "banner_image": Optional information to include with each Course. Returns course
            banner image url if the course is a Canvas for Elementary subject and a banner
            image has been set.
          - "concluded": Optional information to include with each Course. Indicates whether
            the course has been concluded, taking course and term dates into account.
          - "post_manually": Optional information to include with each Course. Returns true if
            the course post policy is set to Manually post grades. Returns false if the the course
            post policy is set to Automatically post grades.
          - "syllabus_versions": Optional information to include with each Course.
            Returns recent saved versions of the syllabus body. Requires the
            syllabus_versioning feature flag and permission to manage course
            content. Version numbers can be passed to the Restore course
            syllabus version API.
      - name: state
        in: query
        schema:
          type: array
          items:
            type: string
            enum:
            - unpublished
            - available
            - completed
            - deleted
        required: false
        description: |-
          If set, only return courses that are in the given state(s).
          By default, "available" is returned for students and observers, and
          anything except "deleted", for all other enrollment types
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Course'
      externalDocs:
        url: https://canvas.instructure.com/doc/api/courses.html
  /v1/users/{user_id}/courses:
    get:
      tags:
      - Courses
      operationId: list_courses_for_user
      summary: List courses for a user
      description: Returns a paginated list of active courses for this user. To view the course list for a user other than yourself, you must be either an observer of that user or an administrator.
      parameters:
      - name: user_id
        in: path
        schema:
          type: string
        required: true
        description: ID
      - name: include
        in: query
        schema:
          type: array
          items:
            type: string
            enum:
            - needs_grading_count
            - syllabus_body
            - syllabus_versions
            - public_description
            - total_scores
            - current_grading_period_scores
            - grading_periods
            - term
            - account
            - course_progress
            - sections
            - storage_quota_used_mb
            - total_students
            - passback_status
            - favorites
            - teachers
            - observed_users
            - course_image
            - banner_image
            - concluded
            - post_manually
        required: false
        description: |-
          - "needs_grading_count": Optional information to include with each Course.
            When needs_grading_count is given, and the current user has grading
            rights, the total number of submissions needing grading for all
            assignments is returned.
          - "syllabus_body": Optional information to include with each Course.
            When syllabus_body is given the user-generated html for the course
            syllabus is returned.
          - "public_description": Optional information to include with each Course.
            When public_description is given the user-generated text for the course
            public description is returned.
          - "total_scores": Optional information to include with each Course.
            When total_scores is given, any student enrollments will also
            include the fields 'computed_current_score', 'computed_final_score',
            'computed_current_grade', and 'computed_final_grade' (see Enrollment
            documentation for more information on these fields). This argument
            is ignored if the course is configured to hide final grades.
          - "current_grading_period_scores": Optional information to include with
            each Course. When current_grading_period_scores is given and total_scores
            is given, any student enrollments will also include the fields
            'has_grading_periods',
            'totals_for_all_grading_periods_option', 'current_grading_period_title',
            'current_grading_period_id', current_period_computed_current_score',
            'current_period_computed_final_score',
            'current_period_computed_current_grade', and
            'current_period_computed_final_grade', as well as (if the user has permission)
            'current_period_unposted_current_score',
            'current_period_unposted_final_score',
            'current_period_unposted_current_grade', and
            'current_period_unposted_final_grade' (see Enrollment documentation for
            more information on these fields). In addition, when this argument is
            passed, the course will have a 'has_grading_periods' attribute
            on it. This argument is ignored if the course is configured to hide final
            grades or if the total_scores argument is not included.
          - "grading_periods": Optional information to include with each Course. When
            grading_periods is given, a list of the grading periods associated with
            each course is returned.
          - "term": Optional information to include with each Course. When
            term is given, the information for the enrollment term for each course
            is returned.
          - "account": Optional information to include with each Course. When
            account is given, the account json for each course is returned.
          - "course_progress": Optional information to include with each Course.
            When course_progress is given, each course will include a
            'course_progress' object with the fields: 'requirement_count', an integer
            specifying the total number of requirements in the course,
            'requirement_completed_count', an integer specifying the total number of
            requirements in this course that have been completed, and
            'next_requirement_url', a string url to the next requirement item, and
            'completed_at', the date the course was completed (null if incomplete).
            'next_requirement_url' will be null if all requirements have been
            completed or the current module does not require sequential progress.
            "course_progress" will return an error message if the course is not
            module based or the user is not enrolled as a student in the course.
          - "sections": Section enrollment information to include with each Course.
            Returns an array of hashes containing the section ID (id), section name
            (name), start and end dates (start_at, end_at), as well as the enrollment
            type (enrollment_role, e.g. 'StudentEnrollment').
          - "storage_quota_used_mb": The amount of storage space used by the files in this course
          - "total_students": Optional information to include with each Course.
            Returns an integer for the total amount of active and invited students.
          - "passback_status": Include the grade passback_status
          - "favorites": Optional information to include with each Course.
            Indicates if the user has marked the course as a favorite course.
          - "teachers": Teacher information to include with each Course.
            Returns an array of hashes containing the {api:Users:UserDisplay UserDisplay} information
            for each teacher in the course.
          - "observed_users": Optional information to include with each Course.
            Will include data for observed users if the current user has an
            observer enrollment.
          - "tabs": Optional information to include with each Course.
            Will include the list of tabs configured for each course.  See the
            {api:TabsController#index List available tabs API} for more information.
          - "course_image": Optional information to include with each Course. Returns course
            image url if a course image has been set.
          - "banner_image": Optional information to include with each Course. Returns course
            banner image url if the course is a Canvas for Elementary subject and a banner
            image has been set.
          - "concluded": Optional information to include with each Course. Indicates whether
            the course has been concluded, taking course and term dates into account.
          - "post_manually": Optional information to include with each Course. Returns true if
            the course post policy is set to "Manually". Returns false if the the course post
            policy is set to "Automatically".
          - "syllabus_versions": Optional information to include with each Course.
            Returns recent saved versions of the syllabus body. Requires the
            syllabus_versioning feature flag and permission to manage course
            content. Version numbers can be passed to the Restore course
            syllabus version API.
      - name: state
        in: query
        schema:
          type: array
          items:
            type: string
            enum:
            - unpublished
            - available
            - completed
            - deleted
        required: false
        description: |-
          If set, only return courses that are in the given state(s).
          By default, "available" is returned for students and observers, and
          anything except "deleted", for all other enrollment types
      - name: enrollment_state
        in: query
        schema:
          type: string
          enum:
          - active
          - invited_or_pending
          - completed
        required: false
        description: |-
          When set, only return courses where the user has an enrollment with the given state.
          This will respect section/course/term date overrides.
      - name: homeroom


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