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.
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
# 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'