Canvas · OpenAPI Overlay 1.0.0

API Evangelist conversational phrasing for Canvas LMS REST External Tools API

20 actions 20 updates phrasing extends openapi/canvas-external-tools-api-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for Canvas's API. It is a proposal applied on top of the contract, not a document Canvas publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-apievangelist-phrasing

Targets 20 · first 16 shown; the file carries all of them

$.info
$.paths['/v1/courses/{course_id}/external_tools'].get
$.paths['/v1/courses/{course_id}/external_tools'].post
$.paths['/v1/accounts/{account_id}/external_tools'].get
$.paths['/v1/accounts/{account_id}/external_tools'].post
$.paths['/v1/groups/{group_id}/external_tools'].get
$.paths['/v1/courses/{course_id}/external_tools/sessionless_launch'].get
$.paths['/v1/accounts/{account_id}/external_tools/sessionless_launch'].get
$.paths['/v1/courses/{course_id}/external_tools/{external_tool_id}'].get
$.paths['/v1/courses/{course_id}/external_tools/{external_tool_id}'].put
$.paths['/v1/courses/{course_id}/external_tools/{external_tool_id}'].delete
$.paths['/v1/accounts/{account_id}/external_tools/{external_tool_id}'].get
$.paths['/v1/accounts/{account_id}/external_tools/{external_tool_id}'].put
$.paths['/v1/accounts/{account_id}/external_tools/{external_tool_id}'].delete
$.paths['/v1/accounts/{account_id}/external_tools/rce_favorites/{id}'].post
$.paths['/v1/accounts/{account_id}/external_tools/rce_favorites/{id}'].delete

OpenAPI Overlay

Raw ↑
# Generated by API Evangelist (build-phrasing.py). Our phrasing, not observed demand.
overlay: 1.0.0
info:
  title: API Evangelist conversational phrasing for Canvas LMS REST External Tools API
  version: 1.0.0
extends: openapi/canvas-external-tools-api-openapi.yml
actions:
- target: $.info
  update:
    x-apievangelist-phrasing:
      method: generated
      generated: '2026-10-01'
      generator: build-phrasing.py
      label: Generated by API Evangelist
      operations: 19
- target: $.paths['/v1/courses/{course_id}/external_tools'].get
  update:
    x-apievangelist-phrasing:
      intent: List a course's external tools
      effect: read
      questions:
      - Which LTI tools are installed in a particular course?
      - Can I filter a course's external tools by placement or include ones inherited from the account?
      instructions:
      - text: List the external tools in course {course_id}.
        slots:
          course_id: path.course_id
      - text: Search course {course_id}'s external tools for {search_term}.
        slots:
          course_id: path.course_id
          search_term: query.search_term
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/external_tools'].post
  update:
    x-apievangelist-phrasing:
      intent: Install an external tool in a course
      effect: write
      questions:
      - How do I add an LTI tool to just one course?
      - Can I install a tool in a course from a config URL or XML?
      instructions:
      - text: Install external tool {name} in course {course_id} with consumer key {consumer_key}.
        slots:
          name: requestBody.name
          course_id: path.course_id
          consumer_key: requestBody.consumer_key
      - text: Add an LTI tool to course {course_id} from client ID {client_id}.
        slots:
          course_id: path.course_id
          client_id: requestBody.client_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/external_tools'].get
  update:
    x-apievangelist-phrasing:
      intent: List an account's external tools
      effect: read
      questions:
      - What LTI tools are configured at the account level?
      - Can I list only the selectable tools on an account?
      instructions:
      - text: List the external tools on account {account_id}.
        slots:
          account_id: path.account_id
      - text: Find account {account_id} tools with placement {placement}.
        slots:
          account_id: path.account_id
          placement: query.placement
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/external_tools'].post
  update:
    x-apievangelist-phrasing:
      intent: Install an external tool across an account
      effect: write
      questions:
      - How do I make an LTI tool available to every course under an account?
      - What privacy level and shared secret do I need to install an account-wide tool?
      instructions:
      - text: Install external tool {name} on account {account_id} with privacy level {privacy_level}.
        slots:
          name: requestBody.name
          account_id: path.account_id
          privacy_level: requestBody.privacy_level
      - text: Add an account-level LTI tool to {account_id} using config URL {config_url}.
        slots:
          account_id: path.account_id
          config_url: requestBody.config_url
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/groups/{group_id}/external_tools'].get
  update:
    x-apievangelist-phrasing:
      intent: List a group's external tools
      effect: read
      questions:
      - Which external tools can a student group use?
      - Can I list LTI tools available inside a group?
      instructions:
      - text: List the external tools for group {group_id}.
        slots:
          group_id: path.group_id
      - text: 'Show group {group_id}''s tools including parent contexts: {include_parents}.'
        slots:
          group_id: path.group_id
          include_parents: query.include_parents
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/external_tools/sessionless_launch'].get
  update:
    x-apievangelist-phrasing:
      intent: Get a sessionless launch link for a course tool
      effect: read
      questions:
      - How can I launch an LTI tool in a course without a browser session?
      - Can I get a direct launch URL for a tool tied to an assignment or module item?
      instructions:
      - text: Get a sessionless launch URL for tool {id} in course {course_id}.
        slots:
          id: query.id
          course_id: path.course_id
      - text: Generate a launch link in course {course_id} for assignment {assignment_id}.
        slots:
          course_id: path.course_id
          assignment_id: query.assignment_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/external_tools/sessionless_launch'].get
  update:
    x-apievangelist-phrasing:
      intent: Get a sessionless launch link for an account tool
      effect: read
      questions:
      - Can I get a session-free launch URL for a tool installed on an account?
      - Which launch types work for account-level sessionless launches?
      instructions:
      - text: Get a sessionless launch URL for tool {id} on account {account_id}.
        slots:
          id: query.id
          account_id: path.account_id
      - text: Create an account {account_id} launch link with launch type {launch_type}.
        slots:
          account_id: path.account_id
          launch_type: query.launch_type
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/external_tools/{external_tool_id}'].get
  update:
    x-apievangelist-phrasing:
      intent: Get one external tool in a course
      effect: read
      questions:
      - How do I see the settings of a specific tool installed in a course?
      - What placements does a given course tool have?
      instructions:
      - text: Show external tool {external_tool_id} in course {course_id}.
        slots:
          external_tool_id: path.external_tool_id
          course_id: path.course_id
      - text: Get course {course_id}'s tool {external_tool_id}.
        slots:
          course_id: path.course_id
          external_tool_id: path.external_tool_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/external_tools/{external_tool_id}'].put
  update:
    x-apievangelist-phrasing:
      intent: Update an external tool in a course
      effect: write
      questions:
      - Can I change the configuration of a tool installed in one course?
      - Will course-level edits to an LTI 1.3 tool get overridden later?
      instructions:
      - text: Update external tool {external_tool_id} in course {course_id}.
        slots:
          external_tool_id: path.external_tool_id
          course_id: path.course_id
      - text: Edit the settings of course {course_id}'s tool {external_tool_id}.
        slots:
          course_id: path.course_id
          external_tool_id: path.external_tool_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/external_tools/{external_tool_id}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Remove an external tool from a course
      effect: destructive
      questions:
      - How do I uninstall an LTI tool from a single course?
      - Can I delete a course-level external tool?
      instructions:
      - text: Delete external tool {external_tool_id} from course {course_id}.
        slots:
          external_tool_id: path.external_tool_id
          course_id: path.course_id
      - text: Uninstall tool {external_tool_id} in course {course_id}.
        slots:
          external_tool_id: path.external_tool_id
          course_id: path.course_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/external_tools/{external_tool_id}'].get
  update:
    x-apievangelist-phrasing:
      intent: Get one external tool on an account
      effect: read
      questions:
      - How do I inspect an account-level LTI tool's configuration?
      - What does a specific account tool's record look like?
      instructions:
      - text: Show external tool {external_tool_id} on account {account_id}.
        slots:
          external_tool_id: path.external_tool_id
          account_id: path.account_id
      - text: Get account {account_id}'s tool {external_tool_id}.
        slots:
          account_id: path.account_id
          external_tool_id: path.external_tool_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/external_tools/{external_tool_id}'].put
  update:
    x-apievangelist-phrasing:
      intent: Update an external tool on an account
      effect: write
      questions:
      - Can I update an LTI tool that's installed for a whole account?
      - How do I change an account-level tool's settings?
      instructions:
      - text: Update external tool {external_tool_id} on account {account_id}.
        slots:
          external_tool_id: path.external_tool_id
          account_id: path.account_id
      - text: Edit account {account_id}'s tool {external_tool_id}.
        slots:
          account_id: path.account_id
          external_tool_id: path.external_tool_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/external_tools/{external_tool_id}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Remove an external tool from an account
      effect: destructive
      questions:
      - How do I uninstall an account-wide LTI tool?
      - Can I delete a tool configured at the account level?
      instructions:
      - text: Delete external tool {external_tool_id} from account {account_id}.
        slots:
          external_tool_id: path.external_tool_id
          account_id: path.account_id
      - text: Uninstall account {account_id}'s tool {external_tool_id}.
        slots:
          account_id: path.account_id
          external_tool_id: path.external_tool_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/external_tools/rce_favorites/{id}'].post
  update:
    x-apievangelist-phrasing:
      intent: Favorite a tool in the rich content editor
      effect: write
      questions:
      - How do I pin an editor button tool as a favorite in the rich content editor?
      - Do RCE favorites set on an account apply to its subaccounts?
      instructions:
      - text: Mark tool {id} as an RCE favorite on account {account_id}.
        slots:
          id: path.id
          account_id: path.account_id
      - text: Make tool {id} a rich content editor favorite for account {account_id}.
        slots:
          id: path.id
          account_id: path.account_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/external_tools/rce_favorites/{id}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Unfavorite a tool in the rich content editor
      effect: destructive
      questions:
      - Can I remove a tool from the editor's favorites without uninstalling it?
      - How do I take a tool off the RCE favorites list?
      instructions:
      - text: Unmark tool {id} as an RCE favorite on account {account_id}.
        slots:
          id: path.id
          account_id: path.account_id
      - text: Remove tool {id} from account {account_id}'s editor favorites.
        slots:
          id: path.id
          account_id: path.account_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/external_tools/top_nav_favorites/{id}'].post
  update:
    x-apievangelist-phrasing:
      intent: Add a tool button to top navigation
      effect: write
      questions:
      - How do I give a tool its own button in the top navigation bar?
      - What's the limit on top navigation favorites per account?
      instructions:
      - text: Add tool {id} to top navigation favorites on account {account_id}.
        slots:
          id: path.id
          account_id: path.account_id
      - text: Pin tool {id} to the top nav for account {account_id}.
        slots:
          id: path.id
          account_id: path.account_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/external_tools/top_nav_favorites/{id}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Remove a tool button from top navigation
      effect: destructive
      questions:
      - Can I take a tool's dedicated button out of the top navigation?
      - How do I free up a top navigation favorite slot?
      instructions:
      - text: Remove tool {id} from top navigation favorites on account {account_id}.
        slots:
          id: path.id
          account_id: path.account_id
      - text: Unpin tool {id} from account {account_id}'s top nav.
        slots:
          id: path.id
          account_id: path.account_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/external_tools/visible_course_nav_tools'].get
  update:
    x-apievangelist-phrasing:
      intent: List visible course nav tools across courses
      effect: read
      questions:
      - Which tools show up in the course navigation menu for several courses at once?
      - Can I check visible course navigation tools for a set of context codes?
      instructions:
      - text: List visible course navigation tools for contexts {context_codes}.
        slots:
          context_codes: query.context_codes
      - text: Show the course nav tools I can see across {context_codes}.
        slots:
          context_codes: query.context_codes
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/external_tools/visible_course_nav_tools'].get
  update:
    x-apievangelist-phrasing:
      intent: List visible course nav tools in one course
      effect: read
      questions:
      - What tools appear in one course's left-hand navigation for me?
      - Which non-hidden course navigation tools apply in a single course?
      instructions:
      - text: List visible course navigation tools in course {course_id}.
        slots:
          course_id: path.course_id
      - text: Show the navigation menu tools shown in course {course_id}.
        slots:
          course_id: path.course_id
      method: generated
      generated: '2026-10-01'