Canvas Lti Context Controls API

The Lti Context Controls API from Canvas — 4 operation(s) for lti context controls.

Operations 6

GET /v1/accounts/{account_id}/lti_registrations/{registration_id}/controls List All Context Controls #
GET /v1/accounts/{account_id}/lti_registrations/{registration_id}/controls/{id} Show LTI Context Control #
PUT /v1/accounts/{account_id}/lti_registrations/{registration_id}/controls/{id} Modify a Context Control #
DELETE /v1/accounts/{account_id}/lti_registrations/{registration_id}/controls/{id} Delete a Context Control #
POST /v1/accounts/{current_account_id}/lti_registrations/{registration_id}/controls Create LTI Context Control #
POST /v1/accounts/{account_id}/lti_registrations/{registration_id}/controls/bulk Bulk Create LTI Context Controls #

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-lti-context-controls-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-lti-context-controls-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Canvas LMS REST Lti Context Controls 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: Lti Context Controls
  x-resource: lti_context_controls
  externalDocs:
    url: https://canvas.instructure.com/doc/api/lti_context_controls.html
paths:
  /v1/accounts/{account_id}/lti_registrations/{registration_id}/controls:
    get:
      tags:
      - Lti Context Controls
      operationId: list_all_context_controls
      summary: List All Context Controls
      description: 'List all LTI ContextControls for the given LTI Registration.

        These controls are partitioned by LTI Deployment, and have added

        calculated fields for display in the Canvas UI.


        This endpoint is used to populate the Availability page for an LTI Registration

        and may not be useful for general API Usage. For listing all ContextControls

        for a given Deployment, see the LTI Deployments - List Controls for Deployment endpoint.'
      parameters:
      - name: account_id
        in: path
        schema:
          type: string
        required: true
        description: ID
      - name: registration_id
        in: path
        schema:
          type: string
        required: true
        description: ID
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
                  x-canvas-declared-type: Lti::Deployment
      externalDocs:
        url: https://canvas.instructure.com/doc/api/lti_context_controls.html
  /v1/accounts/{account_id}/lti_registrations/{registration_id}/controls/{id}:
    get:
      tags:
      - Lti Context Controls
      operationId: show_lti_context_control
      summary: Show LTI Context Control
      description: Display details of the specified LTI ContextControl for the specified LTI registration in this context.
      parameters:
      - name: account_id
        in: path
        schema:
          type: string
        required: true
        description: ID
      - name: registration_id
        in: path
        schema:
          type: string
        required: true
        description: ID
      - name: id
        in: path
        schema:
          type: string
        required: true
        description: ID
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Lti__ContextControl'
      externalDocs:
        url: https://canvas.instructure.com/doc/api/lti_context_controls.html
    put:
      tags:
      - Lti Context Controls
      operationId: modify_context_control
      summary: Modify a Context Control
      description: 'Changes the availability of a context control. This endpoint can only be used

        to change the availability of a context control; no other attributes about the

        control (such as which course or account it belongs to) can be changed here.

        To change those values, the control should be deleted and a new one created

        instead.


        Returns the context control with its new availability value applied.'
      parameters:
      - name: account_id
        in: path
        schema:
          type: string
        required: true
        description: ID
      - name: registration_id
        in: path
        schema:
          type: string
        required: true
        description: ID
      - name: id
        in: path
        schema:
          type: string
        required: true
        description: ID
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                available:
                  type: boolean
                  description: the new value for this control's availability
                comment:
                  type: string
                  description: A comment to add the to the change-log entry explaining why the changes were made.
              required:
              - available
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                available:
                  type: boolean
                  description: the new value for this control's availability
                comment:
                  type: string
                  description: A comment to add the to the change-log entry explaining why the changes were made.
              required:
              - available
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Lti__ContextControl'
      externalDocs:
        url: https://canvas.instructure.com/doc/api/lti_context_controls.html
    delete:
      tags:
      - Lti Context Controls
      operationId: delete_context_control
      summary: Delete a Context Control
      description: 'Deletes a context control. Returns the control that is now deleted.


        Note: Deleting the "primary" control for a deployment (the control associated with the context

        where the deployment is installed) is not allowed and will return an error. This prevents

        situations where a deployment cannot be managed from the Apps page.'
      parameters:
      - name: account_id
        in: path
        schema:
          type: string
        required: true
        description: ID
      - name: registration_id
        in: path
        schema:
          type: string
        required: true
        description: ID
      - name: id
        in: path
        schema:
          type: string
        required: true
        description: ID
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Lti__ContextControl'
      externalDocs:
        url: https://canvas.instructure.com/doc/api/lti_context_controls.html
  /v1/accounts/{current_account_id}/lti_registrations/{registration_id}/controls:
    post:
      tags:
      - Lti Context Controls
      operationId: create_lti_context_control
      summary: Create LTI Context Control
      description: Create a new LTI ContextControl for the specified LTI registration in this context.
      parameters:
      - name: current_account_id
        in: path
        schema:
          type: string
        required: true
        description: ID
      - name: registration_id
        in: path
        schema:
          type: string
        required: true
        description: ID
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                account_id:
                  type: integer
                  format: int64
                  description: The Canvas ID of the Account that owns this. One of account_id or course_id must be present. Can also be a string.
                course_id:
                  type: integer
                  format: int64
                  description: The Canvas ID of the Course that owns this. One of account_id or course_id must be present. Can also be a string.
                deployment_id:
                  type: integer
                  format: int64
                  description: 'The Canvas ID of the ContextExternalTool that owns this, representing an LTI deployment.

                    If absent, this ContextControl will be associated with the Deployment of this Registration at the Root Account level.

                    If that is not present, this request will fail.'
                available:
                  type: boolean
                  description: 'The state of this tool in this context. `true` shows the tool in this context and all contexts

                    below it. `false` disables the tool for this context and all contexts below it. Defaults to true.'
                comment:
                  type: string
                  description: A comment to add the to the change-log entry explaining why the changes were made.
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                account_id:
                  type: integer
                  format: int64
                  description: The Canvas ID of the Account that owns this. One of account_id or course_id must be present. Can also be a string.
                course_id:
                  type: integer
                  format: int64
                  description: The Canvas ID of the Course that owns this. One of account_id or course_id must be present. Can also be a string.
                deployment_id:
                  type: integer
                  format: int64
                  description: 'The Canvas ID of the ContextExternalTool that owns this, representing an LTI deployment.

                    If absent, this ContextControl will be associated with the Deployment of this Registration at the Root Account level.

                    If that is not present, this request will fail.'
                available:
                  type: boolean
                  description: 'The state of this tool in this context. `true` shows the tool in this context and all contexts

                    below it. `false` disables the tool for this context and all contexts below it. Defaults to true.'
                comment:
                  type: string
                  description: A comment to add the to the change-log entry explaining why the changes were made.
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Lti__ContextControl'
      externalDocs:
        url: https://canvas.instructure.com/doc/api/lti_context_controls.html
  /v1/accounts/{account_id}/lti_registrations/{registration_id}/controls/bulk:
    post:
      tags:
      - Lti Context Controls
      operationId: bulk_create_lti_context_controls
      summary: Bulk Create LTI Context Controls
      description: 'Create up to 100 new LTI ContextControls for the specified LTI registration in this context.

        Control parameters are sent as a JSON array of objects, each with the same parameters as the Create LTI Context Control endpoint.

        Note that if a control already exists for the specified context and deployment, it will be updated instead of created.'
      parameters:
      - name: registration_id
        in: path
        schema:
          type: string
        required: true
        description: ID
      - name: account_id
        in: path
        schema:
          type: array
          items:
            type: integer
        required: true
        description: The Canvas ID of the Account that owns this. One of account_id or course_id must be present. Can also be a string.
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                comment:
                  type: string
                  description: A comment to add the to the change-log entry explaining why the changes were made.
                course_id:
                  type: array
                  items:
                    type: integer
                  description: The Canvas ID of the Course that owns this. One of account_id or course_id must be present. Can also be a string.
                deployment_id:
                  type: array
                  items:
                    type: integer
                  description: 'The Canvas ID of the ContextExternalTool that owns this, representing an LTI deployment.

                    If absent, this ContextControl will be associated with the Deployment of this Registration at the Root Account level.

                    If that is not present, this request will fail.'
                available:
                  type: array
                  items:
                    type: boolean
                  description: 'The state of this tool in this context. `true` shows the tool in this context and all contexts

                    below it. `false` disables the tool for this context and all contexts below it. Defaults to true.'
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                comment:
                  type: string
                  description: A comment to add the to the change-log entry explaining why the changes were made.
                course_id:
                  type: array
                  items:
                    type: integer
                  description: The Canvas ID of the Course that owns this. One of account_id or course_id must be present. Can also be a string.
                deployment_id:
                  type: array
                  items:
                    type: integer
                  description: 'The Canvas ID of the ContextExternalTool that owns this, representing an LTI deployment.

                    If absent, this ContextControl will be associated with the Deployment of this Registration at the Root Account level.

                    If that is not present, this request will fail.'
                available:
                  type: array
                  items:
                    type: boolean
                  description: 'The state of this tool in this context. `true` shows the tool in this context and all contexts

                    below it. `false` disables the tool for this context and all contexts below it. Defaults to true.'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Lti__ContextControl'
      externalDocs:
        url: https://canvas.instructure.com/doc/api/lti_context_controls.html
components:
  schemas:
    Lti__ContextControl:
      type: object
      properties:
        id:
          type: integer
          example: 2
          description: the Canvas ID of the Lti::ContextControl object
        course_id:
          type: integer
          example: 2
          description: the Canvas ID of the Course that owns this. one of this or account_id will always be present
        account_id:
          type: integer
          example: 2
          description: the Canvas ID of the Account that owns this. one of this or course_id will always be present
        deployment_id:
          type: integer
          example: 2
          description: the Canvas ID of the ContextExternalTool that owns this, representing an LTI deployment
        available:
          type: boolean
          example: true
          description: The state of this tool in this context. `true` means the tool is available in this context and in all contexts below it.
        path:
          type: string
          example: a1.a2.c3.
          description: A representation of the account hierarchy for the context that owns this object. Used for checking availability during LTI operations.
        display_path:
          type: array
          items:
            type: string
          example:
          - Sub Account
          - Other Account
          description: For UI display. Names of the accounts in the context's hierarchy. Excludes the root, and the current account if context is an account.
        context_name:
          type: string
          example: My Course
          description: For UI display. The name of the context this object is associated with
        depth:
          type: integer
          example: 2
          description: For UI display. The depth of ContextControls for this particular deployment account chain, which can be different from the number of accounts in the chain.
        course_count:
          type: integer
          example: 402
          description: For UI display. The number of courses in this account and all nested subaccounts. 0 when context is a Course.
        child_control_count:
          type: integer
          example: 42
          description: For UI display. The number of controls for accounts below this one, including all nested subaccounts. 0 when context is a Course.
        subaccount_count:
          type: integer
          example: 42
          description: For UI display. The number of subaccounts for this account. Includes all nested subaccounts. 0 when context is a Course.
        workflow_state:
          type: string
          example: active
          description: The state of the object
          enum:
          - active
          - deleted
        created_at:
          type: string
          example: '2024-01-01T00:00:00Z'
          description: Timestamp of the object's creation
        updated_at:
          type: string
          example: '2024-01-01T00:00:00Z'
          description: Timestamp of the object's last update
        created_by:
          type: string
          x-canvas-declared-type: User
          example:
            type: User
          description: The user that created this object. Not always present.
        updated_by:
          type: string
          x-canvas-declared-type: User
          example:
            type: User
          description: The user that last updated this object. Not always present.
      description: Represent availability of an LTI registration in a specific context
  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