Canvas Planner API

The Planner API from Canvas — 6 operation(s) for planner.

Operations 12

GET /v1/planner/items List planner items #
GET /v1/users/{user_id}/planner/items List planner items #
GET /v1/planner_notes List planner notes #
POST /v1/planner_notes Create a planner note #
GET /v1/planner_notes/{id} Show a planner note #
PUT /v1/planner_notes/{id} Update a planner note #
DELETE /v1/planner_notes/{id} Delete a planner note #
GET /v1/planner/overrides List planner overrides #
POST /v1/planner/overrides Create a planner override #
GET /v1/planner/overrides/{id} Show a planner override #
PUT /v1/planner/overrides/{id} Update a planner override #
DELETE /v1/planner/overrides/{id} Delete a planner override #

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-planner-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-planner-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Canvas LMS REST Planner 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:
- name: Planner
  x-resource: planner
  externalDocs:
    url: https://canvas.instructure.com/doc/api/planner.html
paths:
  /v1/planner/items:
    get:
      tags:
      - Planner
      operationId: list_planner_items_planner
      summary: List planner items
      description: 'Retrieve the paginated list of objects to be shown on the planner for the

        current user with the associated planner override to override an item''s

        visibility if set.


        Planner items for a student may also be retrieved by a linked observer. Use

        the path that accepts a user_id and supply the student''s id.'
      parameters:
      - name: start_date
        in: query
        schema:
          type: string
          format: date
        required: false
        description: 'Only return items starting from the given date.

          The value should be formatted as: yyyy-mm-dd or ISO 8601 YYYY-MM-DDTHH:MM:SSZ.'
      - name: end_date
        in: query
        schema:
          type: string
          format: date
        required: false
        description: 'Only return items up to the given date.

          The value should be formatted as: yyyy-mm-dd or ISO 8601 YYYY-MM-DDTHH:MM:SSZ.'
      - name: context_codes
        in: query
        schema:
          type: array
          items:
            type: string
        required: false
        description: 'List of context codes of courses and/or groups whose items you want to see.

          If not specified, defaults to all contexts associated to the current user.

          Note that concluded courses will be ignored unless specified in the includes[]

          parameter. The format of this field is the context type, followed by an underscore,

          followed by the context id. For example: course_42, group_123'
      - name: observed_user_id
        in: query
        schema:
          type: string
        required: false
        description: 'Return planner items for the given observed user. Must be accompanied by context_codes[].

          The user making the request must be observing the observed user in all the courses specified by

          context_codes[].'
      - name: filter
        in: query
        schema:
          type: string
          enum:
          - new_activity
        required: false
        description: Only return items that have new or unread activity
      - name: filter
        in: query
        schema:
          type: string
          enum:
          - incomplete_items
        required: false
        description: Only return items that are not completed (excludes items with planner_override.marked_complete = true or submitted assignments)
      - name: filter
        in: query
        schema:
          type: string
          enum:
          - complete_items
        required: false
        description: Only return items that are completed (includes items with planner_override.marked_complete = true or submitted assignments)
      responses:
        '200':
          description: Success, no content returned
      externalDocs:
        url: https://canvas.instructure.com/doc/api/planner.html
  /v1/users/{user_id}/planner/items:
    get:
      tags:
      - Planner
      operationId: list_planner_items_users
      summary: List planner items
      description: 'Retrieve the paginated list of objects to be shown on the planner for the

        current user with the associated planner override to override an item''s

        visibility if set.


        Planner items for a student may also be retrieved by a linked observer. Use

        the path that accepts a user_id and supply the student''s id.'
      parameters:
      - name: user_id
        in: path
        schema:
          type: string
        required: true
        description: ID
      - name: start_date
        in: query
        schema:
          type: string
          format: date
        required: false
        description: 'Only return items starting from the given date.

          The value should be formatted as: yyyy-mm-dd or ISO 8601 YYYY-MM-DDTHH:MM:SSZ.'
      - name: end_date
        in: query
        schema:
          type: string
          format: date
        required: false
        description: 'Only return items up to the given date.

          The value should be formatted as: yyyy-mm-dd or ISO 8601 YYYY-MM-DDTHH:MM:SSZ.'
      - name: context_codes
        in: query
        schema:
          type: array
          items:
            type: string
        required: false
        description: 'List of context codes of courses and/or groups whose items you want to see.

          If not specified, defaults to all contexts associated to the current user.

          Note that concluded courses will be ignored unless specified in the includes[]

          parameter. The format of this field is the context type, followed by an underscore,

          followed by the context id. For example: course_42, group_123'
      - name: observed_user_id
        in: query
        schema:
          type: string
        required: false
        description: 'Return planner items for the given observed user. Must be accompanied by context_codes[].

          The user making the request must be observing the observed user in all the courses specified by

          context_codes[].'
      - name: filter
        in: query
        schema:
          type: string
          enum:
          - new_activity
        required: false
        description: Only return items that have new or unread activity
      - name: filter
        in: query
        schema:
          type: string
          enum:
          - incomplete_items
        required: false
        description: Only return items that are not completed (excludes items with planner_override.marked_complete = true or submitted assignments)
      - name: filter
        in: query
        schema:
          type: string
          enum:
          - complete_items
        required: false
        description: Only return items that are completed (includes items with planner_override.marked_complete = true or submitted assignments)
      responses:
        '200':
          description: Success, no content returned
      externalDocs:
        url: https://canvas.instructure.com/doc/api/planner.html
  /v1/planner_notes:
    get:
      tags:
      - Planner
      operationId: list_planner_notes
      summary: List planner notes
      description: 'Retrieve the paginated list of planner notes


        Retrieve planner note for a user'
      parameters:
      - name: start_date
        in: query
        schema:
          type: string
          format: date-time
        required: false
        description: 'Only return notes with todo dates since the start_date (inclusive).

          No default. The value should be formatted as: yyyy-mm-dd or

          ISO 8601 YYYY-MM-DDTHH:MM:SSZ.'
      - name: end_date
        in: query
        schema:
          type: string
          format: date-time
        required: false
        description: 'Only return notes with todo dates before the end_date (inclusive).

          No default. The value should be formatted as: yyyy-mm-dd or

          ISO 8601 YYYY-MM-DDTHH:MM:SSZ.

          If end_date and start_date are both specified and equivalent,

          then only notes with todo dates on that day are returned.'
      - name: context_codes
        in: query
        schema:
          type: array
          items:
            type: string
        required: false
        description: 'List of context codes of courses whose notes you want to see.

          If not specified, defaults to all contexts that the user belongs to.

          The format of this field is the context type, followed by an

          underscore, followed by the context id. For example: course_42

          Including a code matching the user''s own context code (e.g. user_1)

          will include notes that are not associated with any particular course.'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PlannerNote'
      externalDocs:
        url: https://canvas.instructure.com/doc/api/planner.html
    post:
      tags:
      - Planner
      operationId: create_planner_note
      summary: Create a planner note
      description: Create a planner note for the current user
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: The title of the planner note.
                details:
                  type: string
                  description: Text of the planner note.
                todo_date:
                  type: string
                  format: date
                  description: 'The date where this planner note should appear in the planner.

                    The value should be formatted as: yyyy-mm-dd.'
                course_id:
                  type: integer
                  format: int64
                  description: 'The ID of the course to associate with the planner note. The caller must be able to view the course in order to

                    associate it with a planner note.'
                linked_object_type:
                  type: string
                  description: 'The type of a learning object to link to this planner note. Must be used in conjunction wtih linked_object_id

                    and course_id. Valid linked_object_type values are:

                    ''announcement'', ''assignment'', ''discussion_topic'', ''wiki_page'', ''quiz'''
                linked_object_id:
                  type: integer
                  format: int64
                  description: 'The id of a learning object to link to this planner note. Must be used in conjunction with linked_object_type

                    and course_id. The object must be in the same course as specified by course_id. If the title argument is not

                    provided, the planner note will use the learning object''s title as its title. Only one planner note may be

                    linked to a specific learning object.'
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: The title of the planner note.
                details:
                  type: string
                  description: Text of the planner note.
                todo_date:
                  type: string
                  format: date
                  description: 'The date where this planner note should appear in the planner.

                    The value should be formatted as: yyyy-mm-dd.'
                course_id:
                  type: integer
                  format: int64
                  description: 'The ID of the course to associate with the planner note. The caller must be able to view the course in order to

                    associate it with a planner note.'
                linked_object_type:
                  type: string
                  description: 'The type of a learning object to link to this planner note. Must be used in conjunction wtih linked_object_id

                    and course_id. Valid linked_object_type values are:

                    ''announcement'', ''assignment'', ''discussion_topic'', ''wiki_page'', ''quiz'''
                linked_object_id:
                  type: integer
                  format: int64
                  description: 'The id of a learning object to link to this planner note. Must be used in conjunction with linked_object_type

                    and course_id. The object must be in the same course as specified by course_id. If the title argument is not

                    provided, the planner note will use the learning object''s title as its title. Only one planner note may be

                    linked to a specific learning object.'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlannerNote'
      externalDocs:
        url: https://canvas.instructure.com/doc/api/planner.html
  /v1/planner_notes/{id}:
    get:
      tags:
      - Planner
      operationId: show_planner_note
      summary: Show a planner note
      description: Retrieve a planner note for the current user
      parameters:
      - name: id
        in: path
        schema:
          type: string
        required: true
        description: ID
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlannerNote'
      externalDocs:
        url: https://canvas.instructure.com/doc/api/planner.html
    put:
      tags:
      - Planner
      operationId: update_planner_note
      summary: Update a planner note
      description: Update a planner note for the current user
      parameters:
      - name: id
        in: path
        schema:
          type: string
        required: true
        description: ID
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: The title of the planner note.
                details:
                  type: string
                  description: Text of the planner note.
                todo_date:
                  type: string
                  format: date
                  description: 'The date where this planner note should appear in the planner.

                    The value should be formatted as: yyyy-mm-dd.'
                course_id:
                  type: integer
                  format: int64
                  description: 'The ID of the course to associate with the planner note. The caller must be able to view the course in order to

                    associate it with a planner note. Use a null or empty value to remove a planner note from a course. Note that if

                    the planner note is linked to a learning object, its course_id cannot be changed.'
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: The title of the planner note.
                details:
                  type: string
                  description: Text of the planner note.
                todo_date:
                  type: string
                  format: date
                  description: 'The date where this planner note should appear in the planner.

                    The value should be formatted as: yyyy-mm-dd.'
                course_id:
                  type: integer
                  format: int64
                  description: 'The ID of the course to associate with the planner note. The caller must be able to view the course in order to

                    associate it with a planner note. Use a null or empty value to remove a planner note from a course. Note that if

                    the planner note is linked to a learning object, its course_id cannot be changed.'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlannerNote'
      externalDocs:
        url: https://canvas.instructure.com/doc/api/planner.html
    delete:
      tags:
      - Planner
      operationId: delete_planner_note
      summary: Delete a planner note
      description: Delete a planner note for the current user
      parameters:
      - name: id
        in: path
        schema:
          type: string
        required: true
        description: ID
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlannerNote'
      externalDocs:
        url: https://canvas.instructure.com/doc/api/planner.html
  /v1/planner/overrides:
    get:
      tags:
      - Planner
      operationId: list_planner_overrides
      summary: List planner overrides
      description: Retrieve a planner override for the current user
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PlannerOverride'
      externalDocs:
        url: https://canvas.instructure.com/doc/api/planner.html
    post:
      tags:
      - Planner
      operationId: create_planner_override
      summary: Create a planner override
      description: Create a planner override for the current user
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                plannable_type:
                  type: string
                  enum:
                  - announcement
                  - assignment
                  - discussion_topic
                  - quiz
                  - wiki_page
                  - planner_note
                  - calendar_event
                  - assessment_request
                  - sub_assignment
                  - peer_review_sub_assignment
                  description: Type of the item that you are overriding in the planner
                plannable_id:
                  type: integer
                  format: int64
                  description: ID of the item that you are overriding in the planner
                marked_complete:
                  type: boolean
                  description: If this is true, the item will show in the planner as completed
                dismissed:
                  type: boolean
                  description: If this is true, the item will not show in the opportunities list
              required:
              - plannable_type
              - plannable_id
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                plannable_type:
                  type: string
                  enum:
                  - announcement
                  - assignment
                  - discussion_topic
                  - quiz
                  - wiki_page
                  - planner_note
                  - calendar_event
                  - assessment_request
                  - sub_assignment
                  - peer_review_sub_assignment
                  description: Type of the item that you are overriding in the planner
                plannable_id:
                  type: integer
                  format: int64
                  description: ID of the item that you are overriding in the planner
                marked_complete:
                  type: boolean
                  description: If this is true, the item will show in the planner as completed
                dismissed:
                  type: boolean
                  description: If this is true, the item will not show in the opportunities list
              required:
              - plannable_type
              - plannable_id
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlannerOverride'
      externalDocs:
        url: https://canvas.instructure.com/doc/api/planner.html
  /v1/planner/overrides/{id}:
    get:
      tags:
      - Planner
      operationId: show_planner_override
      summary: Show a planner override
      description: Retrieve a planner override for the current user
      parameters:
      - name: id
        in: path
        schema:
          type: string
        required: true
        description: ID
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlannerOverride'
      externalDocs:
        url: https://canvas.instructure.com/doc/api/planner.html
    put:
      tags:
      - Planner
      operationId: update_planner_override
      summary: Update a planner override
      description: Update a planner override's visibilty for the current user
      parameters:
      - name: id
        in: path
        schema:
          type: string
        required: true
        description: ID
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                marked_complete:
                  type: string
                  description: determines whether the planner item is marked as completed
                dismissed:
                  type: string
                  description: determines whether the planner item shows in the opportunities list
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                marked_complete:
                  type: string
                  description: determines whether the planner item is marked as completed
                dismissed:
                  type: string
                  description: determines whether the planner item shows in the opportunities list
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlannerOverride'
      externalDocs:
        url: https://canvas.instructure.com/doc/api/planner.html
    delete:
      tags:
      - Planner
      operationId: delete_planner_override
      summary: Delete a planner override
      description: Delete a planner override for the current user
      parameters:
      - name: id
        in: path
        schema:
          type: string
        required: true
        description: ID
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlannerOverride'
      externalDocs:
        url: https://canvas.instructure.com/doc/api/planner.html
components:
  schemas:
    PlannerOverride:
      type: object
      properties:
        id:
          type: integer
          example: 234
          description: The ID of the planner override
        plannable_type:
          type: string
          example: Assignment
          description: The type of the associated object for the planner override
        plannable_id:
          type: integer
          example: 1578941
          description: The id of the associated object for the planner override
        user_id:
          type: integer
          example: 1578941
          description: The id of the associated user for the planner override
        assignment_id:
          type: integer
          example: 1578941
          description: The id of the plannable's associated assignment, if it has one
        workflow_state:
          type: string
          example: published
          description: The current published state of the item, synced with the associated object
        marked_complete:
          type: boolean
          example: false
          description: Controls whether or not the associated plannable item is marked complete on the planner
        dismissed:
          type: boolean
          example: false
          description: Controls whether or not the associated plannable item shows up in the opportunities list
        created_at:
          type: string
          format: date-time
          example: '2017-05-09T10:12:00Z'
          description: The datetime of when the planner override was created
        updated_at:
          type: string
          format: date-time
          example: '2017-05-09T10:12:00Z'
          description: The datetime of when the planner override was updated
        deleted_at:
          type: string
          format: date-time
          example: '2017-05-15T12:12:00Z'
          description: The datetime of when the planner override was deleted, if applicable
      description: User-controlled setting for whether an item should be displayed on the planner or not
    PlannerNote:
      type: object
      properties:
        id:
          type: integer
          example: 234
          description: The ID of the planner note
        title:
          type: string
          example: Bring books tomorrow
          description: The title for a planner note
        description:
          type: string
          example: I need to bring books tomorrow for my course on biology
          description: The description of the planner note
        user_id:
          type: integer
          example: 1578941
          description: The id of the associated user creating the planner note
        workflow_state:
          type: string
          example: active
          description: The current published state of the planner note
        course_id:
          type: integer
          example: 1578941
          description: The course that the note is in relation too, if applicable
        todo_date:
          type: string
          format: date-time
          example: '2017-05-09T10:12:00Z'
          description: The datetime of when the planner note should show up on their planner
        linked_object_type:
          type: string
          example: assignment
          description: the type of the linked learning object
        linked_object_id:
          type: integer
          example: 131072
          description: the id of the linked learning object
        linked_object_html_url:
          type: string
          example: https://canvas.example.com/courses/1578941/assignments/131072
          description: the Canvas web URL of the linked learning object
        linked_object_url:
          type: string
          example: https://canvas.example.com/api/v1/courses/1578941/assignments/131072
          description: the API URL of the linked learning object
      description: A planner note
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Canvas OAuth2 access token sent as "Authorization: Bearer <token>". See https://canvas.instructure.com/doc/api/file.oauth.html'
    oauth2:
      type: oauth2
      description: Canvas OAuth2. See https://canvas.instructure.com/doc/api/file.oauth.html and https://canvas.instructure.com/doc/api/file.oauth_endpoints.html
      flows:
        authorizationCode:
          authorizationUrl: https://canvas.instructure.com/login/oauth2/auth
          tokenUrl: https://canvas.instructure.com/login/oauth2/token
          refreshUrl: https://canvas.instructure.com/login/oauth2/token
          scopes: {}
externalDocs:
  description: Canvas LMS REST API Documentation
  url: https://canvas.instructure.com/doc/api/
x-generated-from: https://canvas.instructure.com/doc/api/api-docs.json
x-provenance:
  method: derived
  derived_by: API Evangelist enrichment pipeline (Swagger 1.2 -> OpenAPI 3.1 conversion)
  source: openapi/_original/swagger-1.2/*.json (144 verbatim first-party Swagger 1.2 documents)
  source_url: https://canvas.instructure.com/doc/api/api-docs.json
  fetched: '2026-09-05'
  http_status: 200