Canvas Courses API

The Courses API from Canvas — 25 operation(s) for courses.

OpenAPI Specification

canvas-courses-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Canvas LMS REST API ( subset) Courses API
  description: 'Canvas LMS REST API uses OAuth 2.0 bearer tokens. Endpoints live under

    /api/v1/ on the institution''s Canvas host (e.g.

    https://canvas.instructure.com/api/v1/...). Responses are JSON with

    ISO 8601 timestamps, and list endpoints support Link-header pagination.


    This specification is a best-effort, hand-authored subset covering the

    Courses resource, modeled from the publicly documented Courses API

    page (https://canvas.instructure.com/doc/api/courses.html). Canvas has

    many additional resources — assignments, quizzes, submissions, users,

    enrollments, files, etc. — that are not enumerated here. Refer to the

    Canvas API documentation for the full surface area.

    '
  version: v1
  contact:
    name: Instructure Canvas
    url: https://canvas.instructure.com/doc/api/
servers:
- url: https://canvas.instructure.com/api/v1
  description: Hosted Canvas instance (replace host for your institution).
security:
- bearerAuth: []
tags:
- name: Courses
paths:
  /courses:
    get:
      tags:
      - Courses
      summary: List your courses
      operationId: listCourses
      parameters:
      - in: query
        name: enrollment_type
        schema:
          type: string
          enum:
          - teacher
          - student
          - ta
          - observer
          - designer
      - in: query
        name: enrollment_state
        schema:
          type: string
          enum:
          - active
          - invited_or_pending
          - completed
      - in: query
        name: state
        schema:
          type: array
          items:
            type: string
            enum:
            - unpublished
            - available
            - completed
            - deleted
      - in: query
        name: include
        schema:
          type: array
          items:
            type: string
      responses:
        '200':
          $ref: '#/components/responses/CourseList'
  /users/{user_id}/courses:
    parameters:
    - $ref: '#/components/parameters/UserId'
    get:
      tags:
      - Courses
      summary: List courses for a user
      responses:
        '200':
          $ref: '#/components/responses/CourseList'
  /courses/{course_id}/users/{user_id}/progress:
    parameters:
    - $ref: '#/components/parameters/CourseId'
    - $ref: '#/components/parameters/UserId'
    get:
      tags:
      - Courses
      summary: Get user progress in a course
      responses:
        '200':
          $ref: '#/components/responses/CourseProgress'
  /accounts/{account_id}/courses:
    parameters:
    - in: path
      name: account_id
      required: true
      schema:
        type: string
    get:
      tags:
      - Courses
      summary: List courses in an account
      responses:
        '200':
          $ref: '#/components/responses/CourseList'
    post:
      tags:
      - Courses
      summary: Create a new course
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CourseCreate'
      responses:
        '200':
          $ref: '#/components/responses/Course'
  /accounts/{account_id}/courses/{id}:
    parameters:
    - in: path
      name: account_id
      required: true
      schema:
        type: string
    - in: path
      name: id
      required: true
      schema:
        type: string
    put:
      tags:
      - Courses
      summary: Update courses (bulk)
      responses:
        '200':
          $ref: '#/components/responses/Generic'
  /courses/{id}:
    parameters:
    - in: path
      name: id
      required: true
      schema:
        type: string
    get:
      tags:
      - Courses
      summary: Get a single course
      parameters:
      - in: query
        name: include
        schema:
          type: array
          items:
            type: string
      responses:
        '200':
          $ref: '#/components/responses/Course'
    put:
      tags:
      - Courses
      summary: Update a course
      responses:
        '200':
          $ref: '#/components/responses/Course'
    delete:
      tags:
      - Courses
      summary: Delete or conclude a course
      parameters:
      - in: query
        name: event
        required: true
        schema:
          type: string
          enum:
          - delete
          - conclude
      responses:
        '200':
          $ref: '#/components/responses/Generic'
  /courses/{course_id}/files:
    parameters:
    - $ref: '#/components/parameters/CourseId'
    get:
      tags:
      - Courses
      summary: List course files
      responses:
        '200':
          $ref: '#/components/responses/Generic'
    post:
      tags:
      - Courses
      summary: Upload a file to a course
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                name:
                  type: string
                size:
                  type: integer
                content_type:
                  type: string
      responses:
        '200':
          $ref: '#/components/responses/Generic'
  /courses/{course_id}/students:
    parameters:
    - $ref: '#/components/parameters/CourseId'
    get:
      tags:
      - Courses
      summary: List students in a course (deprecated - use users)
      responses:
        '200':
          $ref: '#/components/responses/UserList'
  /courses/{course_id}/users:
    parameters:
    - $ref: '#/components/parameters/CourseId'
    get:
      tags:
      - Courses
      summary: List users in a course
      parameters:
      - in: query
        name: enrollment_type
        schema:
          type: array
          items:
            type: string
      - in: query
        name: include
        schema:
          type: array
          items:
            type: string
      responses:
        '200':
          $ref: '#/components/responses/UserList'
  /courses/{course_id}/search_users:
    parameters:
    - $ref: '#/components/parameters/CourseId'
    get:
      tags:
      - Courses
      summary: Search users in a course
      parameters:
      - in: query
        name: search_term
        schema:
          type: string
      responses:
        '200':
          $ref: '#/components/responses/UserList'
  /courses/{course_id}/recent_students:
    parameters:
    - $ref: '#/components/parameters/CourseId'
    get:
      tags:
      - Courses
      summary: List recently logged-in students
      responses:
        '200':
          $ref: '#/components/responses/UserList'
  /courses/{course_id}/users/{id}:
    parameters:
    - $ref: '#/components/parameters/CourseId'
    - in: path
      name: id
      required: true
      schema:
        type: string
    get:
      tags:
      - Courses
      summary: Get a single user in a course
      responses:
        '200':
          $ref: '#/components/responses/User'
  /courses/{course_id}/content_share_users:
    parameters:
    - $ref: '#/components/parameters/CourseId'
    get:
      tags:
      - Courses
      summary: List content share users for a course
      responses:
        '200':
          $ref: '#/components/responses/UserList'
  /courses/{course_id}/preview_html:
    parameters:
    - $ref: '#/components/parameters/CourseId'
    post:
      tags:
      - Courses
      summary: Preview HTML in a course context
      responses:
        '200':
          $ref: '#/components/responses/Generic'
  /courses/{course_id}/activity_stream:
    parameters:
    - $ref: '#/components/parameters/CourseId'
    get:
      tags:
      - Courses
      summary: Course activity stream
      responses:
        '200':
          $ref: '#/components/responses/Generic'
  /courses/{course_id}/activity_stream/summary:
    parameters:
    - $ref: '#/components/parameters/CourseId'
    get:
      tags:
      - Courses
      summary: Course activity stream summary
      responses:
        '200':
          $ref: '#/components/responses/Generic'
  /courses/{course_id}/todo:
    parameters:
    - $ref: '#/components/parameters/CourseId'
    get:
      tags:
      - Courses
      summary: Course TODO items
      responses:
        '200':
          $ref: '#/components/responses/Generic'
  /courses/{course_id}/settings:
    parameters:
    - $ref: '#/components/parameters/CourseId'
    get:
      tags:
      - Courses
      summary: Get course settings
      responses:
        '200':
          $ref: '#/components/responses/Generic'
    put:
      tags:
      - Courses
      summary: Update course settings
      responses:
        '200':
          $ref: '#/components/responses/Generic'
  /courses/{course_id}/permissions:
    parameters:
    - $ref: '#/components/parameters/CourseId'
    get:
      tags:
      - Courses
      summary: Get course permissions
      responses:
        '200':
          $ref: '#/components/responses/Generic'
  /courses/{course_id}/reset_content:
    parameters:
    - $ref: '#/components/parameters/CourseId'
    post:
      tags:
      - Courses
      summary: Reset a course
      responses:
        '200':
          $ref: '#/components/responses/Course'
  /courses/{course_id}/effective_due_dates:
    parameters:
    - $ref: '#/components/parameters/CourseId'
    get:
      tags:
      - Courses
      summary: Get effective due dates
      responses:
        '200':
          $ref: '#/components/responses/Generic'
  /courses/{course_id}/course_copy:
    parameters:
    - $ref: '#/components/parameters/CourseId'
    post:
      tags:
      - Courses
      summary: Copy course content
      responses:
        '200':
          $ref: '#/components/responses/Generic'
  /courses/{course_id}/course_copy/{id}:
    parameters:
    - $ref: '#/components/parameters/CourseId'
    - in: path
      name: id
      required: true
      schema:
        type: string
    get:
      tags:
      - Courses
      summary: Get course copy status
      responses:
        '200':
          $ref: '#/components/responses/Generic'
  /courses/{course_id}/student_view_student:
    parameters:
    - $ref: '#/components/parameters/CourseId'
    get:
      tags:
      - Courses
      summary: Get student view student
      responses:
        '200':
          $ref: '#/components/responses/User'
  /courses/{course_id}/bulk_user_progress:
    parameters:
    - $ref: '#/components/parameters/CourseId'
    get:
      tags:
      - Courses
      summary: Get bulk user progress
      responses:
        '200':
          $ref: '#/components/responses/Generic'
components:
  schemas:
    Progress:
      type: object
      properties:
        requirement_count:
          type: integer
        requirement_completed_count:
          type: integer
        next_requirement_url:
          type: string
          nullable: true
        completed_at:
          type: string
          format: date-time
          nullable: true
      additionalProperties: true
    User:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        sortable_name:
          type: string
        short_name:
          type: string
        sis_user_id:
          type: string
          nullable: true
        email:
          type: string
          format: email
          nullable: true
        login_id:
          type: string
      additionalProperties: true
    CourseCreate:
      type: object
      properties:
        course:
          type: object
          properties:
            name:
              type: string
            course_code:
              type: string
            start_at:
              type: string
              format: date-time
            end_at:
              type: string
              format: date-time
            is_public:
              type: boolean
          additionalProperties: true
        offer:
          type: boolean
        enroll_me:
          type: boolean
    Course:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        account_id:
          type: integer
          format: int64
        uuid:
          type: string
        start_at:
          type: string
          format: date-time
          nullable: true
        end_at:
          type: string
          format: date-time
          nullable: true
        course_code:
          type: string
        workflow_state:
          type: string
          enum:
          - unpublished
          - available
          - completed
          - deleted
        enrollment_term_id:
          type: integer
          nullable: true
        sis_course_id:
          type: string
          nullable: true
        integration_id:
          type: string
          nullable: true
        public_syllabus:
          type: boolean
        storage_quota_mb:
          type: integer
        is_public:
          type: boolean
      additionalProperties: true
    Generic:
      type: object
      additionalProperties: true
  responses:
    Course:
      description: Single course.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Course'
    User:
      description: Single user.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/User'
    UserList:
      description: List of users.
      content:
        application/json:
          schema:
            type: array
            items:
              $ref: '#/components/schemas/User'
    CourseList:
      description: List of courses.
      content:
        application/json:
          schema:
            type: array
            items:
              $ref: '#/components/schemas/Course'
    Generic:
      description: Generic JSON object response.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Generic'
    CourseProgress:
      description: User progress in a course.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Progress'
  parameters:
    UserId:
      in: path
      name: user_id
      required: true
      schema:
        type: string
    CourseId:
      in: path
      name: course_id
      required: true
      schema:
        type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'OAuth 2.0 access token. See

        https://canvas.instructure.com/doc/api/file.oauth.html.

        '