# 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 Lti Registrations API version: 1.0.0 extends: openapi/canvas-lti-registrations-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: 36 - target: $.paths['/v1/accounts/{account_id}/lti_registrations'].get update: x-apievangelist-phrasing: intent: List LTI registrations in an account effect: read questions: - Which LTI registrations are available in my Canvas account, including ones inherited from Site Admin? - Can I sort the list of LTI registrations in an account by name or date? instructions: - text: List the LTI registrations in account {account_id} using the lti_registrations endpoint. slots: account_id: path.account_id - text: Show LTI registrations for account {account_id} sorted by {sort}. slots: account_id: path.account_id sort: query.sort method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/lti_registrations'].post update: x-apievangelist-phrasing: intent: Create an LTI registration effect: write questions: - How do I manually register a new LTI 1.3 tool with its configuration and developer key? - Can I create an LTI registration with an admin nickname and vendor name? instructions: - text: Create an LTI registration named {name} in account {account_id} via the lti_registrations endpoint. slots: name: requestBody.name account_id: path.account_id - text: Register LTI tool {name} from vendor {vendor} in account {account_id} with configuration {configuration}. slots: name: requestBody.name vendor: requestBody.vendor account_id: path.account_id configuration: requestBody.configuration method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/apps'].get update: x-apievangelist-phrasing: intent: List LTI apps in an account via the apps alias effect: read questions: - What LTI apps are installed in an account when I call the apps endpoint instead of lti_registrations? - Does the apps listing return registrations enabled at the parent root account too? instructions: - text: List the apps in account {account_id} using the apps alias endpoint. slots: account_id: path.account_id - text: Page through apps in account {account_id}, page {page}, {per_page} per page. slots: account_id: path.account_id page: query.page per_page: query.per_page method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/apps'].post update: x-apievangelist-phrasing: intent: Create an LTI app via the apps alias effect: write questions: - Can I add a new LTI app to an account through the apps endpoint? - What do I send to the apps endpoint to create a tool with a developer key and account binding? instructions: - text: Create a new app named {name} in account {account_id} using the apps alias endpoint. slots: name: requestBody.name account_id: path.account_id - text: Add app {name} to account {account_id} through the apps endpoint with overlay {overlay}. slots: name: requestBody.name account_id: path.account_id overlay: requestBody.overlay method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/lti_registrations/{id}'].get update: x-apievangelist-phrasing: intent: Show an LTI registration effect: read questions: - How do I see the configuration and account binding of one LTI registration? - Can I fetch a single LTI registration by its id with extra details included? instructions: - text: Show LTI registration {id} in account {account_id} from the lti_registrations endpoint. slots: id: path.id account_id: path.account_id - text: Get LTI registration {id} in account {account_id} including {include}. slots: id: path.id account_id: path.account_id include: query.include method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/lti_registrations/{id}'].put update: x-apievangelist-phrasing: intent: Update an LTI registration effect: write questions: - Can I rename an LTI registration or change its admin nickname? - Why would updating an LTI registration's tool configuration return a 422 error? instructions: - text: Rename LTI registration {id} in account {account_id} to {name} via the lti_registrations endpoint. slots: id: path.id account_id: path.account_id name: requestBody.name - text: Set the workflow state of LTI registration {id} in account {account_id} to {workflow_state} with comment {comment}. slots: id: path.id account_id: path.account_id workflow_state: requestBody.workflow_state comment: requestBody.comment method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/lti_registrations/{id}'].delete update: x-apievangelist-phrasing: intent: Delete an LTI registration effect: destructive questions: - How do I remove an LTI registration I created from my account? - What happens when I delete an LTI registration through the lti_registrations endpoint? instructions: - text: Delete LTI registration {id} from account {account_id} using the lti_registrations endpoint. slots: id: path.id account_id: path.account_id - text: Remove the LTI registration {id} owned by account {account_id}. slots: id: path.id account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/apps/{id}'].get update: x-apievangelist-phrasing: intent: Show an LTI app via the apps alias effect: read questions: - Can I look up a single app's configuration through the apps endpoint? - Which account binding does a specific app have when fetched from the apps path? instructions: - text: Show app {id} in account {account_id} using the apps alias endpoint. slots: id: path.id account_id: path.account_id - text: Fetch app {id} from account {account_id} via apps, including {include}. slots: id: path.id account_id: path.account_id include: query.include method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/apps/{id}'].put update: x-apievangelist-phrasing: intent: Update an LTI app via the apps alias effect: write questions: - Can I change an app's name or description through the apps endpoint? - Is locking deployments on an app possible when editing it via the apps path? instructions: - text: Update app {id} in account {account_id} via the apps endpoint to have description {description}. slots: id: path.id account_id: path.account_id description: requestBody.description - text: Set lock_deploying to {lock_deploying} on app {id} in account {account_id} through the apps alias. slots: lock_deploying: requestBody.lock_deploying id: path.id account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/apps/{id}'].delete update: x-apievangelist-phrasing: intent: Delete an LTI app via the apps alias effect: destructive questions: - How do I delete an app from an account using the apps endpoint? - Does deleting an app through the apps path remove the whole registration? instructions: - text: Delete app {id} from account {account_id} via the apps alias endpoint. slots: id: path.id account_id: path.account_id - text: Remove app {id} in account {account_id} using the apps path. slots: id: path.id account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/lti_registration_by_client_id/{client_id}'].get update: x-apievangelist-phrasing: intent: Look up an LTI registration by client ID effect: read questions: - How do I find an LTI registration when I only know the developer key's client_id? - Can I fetch an LTI registration's configuration from its client ID on the lti_registration_by_client_id path? instructions: - text: Look up the LTI registration with client ID {client_id} in account {account_id} via lti_registration_by_client_id. slots: client_id: path.client_id account_id: path.account_id - text: Find which LTI registration in account {account_id} uses client_id {client_id}. slots: client_id: path.client_id account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/app_by_client_id/{client_id}'].get update: x-apievangelist-phrasing: intent: Look up an LTI app by client ID via apps alias effect: read questions: - Can I look up an app by its client_id using the app_by_client_id endpoint? - Which app matches a given developer key client ID when using the apps alias? instructions: - text: Get the app with client ID {client_id} in account {account_id} from the app_by_client_id endpoint. slots: client_id: path.client_id account_id: path.account_id - text: Use app_by_client_id to show the app for client {client_id} in account {account_id}. slots: client_id: path.client_id account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/lti_registrations/by_utid/{utid}'].get update: x-apievangelist-phrasing: intent: Find an LTI registration by unified tool ID effect: read questions: - How do I look up an LTI registration by its unified tool ID? - Does a unified tool ID lookup search both manual configurations and IMS registrations? instructions: - text: Find the LTI registration with unified tool ID {utid} in account {account_id} via lti_registrations/by_utid. slots: utid: path.utid account_id: path.account_id - text: Look up active LTI registration by UTID {utid} accessible from account {account_id}. slots: utid: path.utid account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/apps/by_utid/{utid}'].get update: x-apievangelist-phrasing: intent: Find an LTI app by unified tool ID via apps alias effect: read questions: - Can I find an app by unified tool ID using the apps/by_utid path? - Will the apps by_utid lookup only return apps active in my account? instructions: - text: Get the app with unified tool ID {utid} in account {account_id} from apps/by_utid. slots: utid: path.utid account_id: path.account_id - text: Use the apps alias to find the app whose UTID is {utid} for account {account_id}. slots: utid: path.utid account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/lti_registrations/install_status/{client_id}'].get update: x-apievangelist-phrasing: intent: Check if a Site Admin LTI tool is installed locally effect: read questions: - How can I tell whether a Site Admin LTI registration already has a local copy in my account? - Is there a way to check the install status of an LTI registration by client ID? instructions: - text: Check the install status of LTI client {client_id} in account {account_id} via lti_registrations/install_status. slots: client_id: path.client_id account_id: path.account_id - text: Tell me whether the Site Admin LTI registration {client_id} is installed in account {account_id}. slots: client_id: path.client_id account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/apps/install_status/{client_id}'].get update: x-apievangelist-phrasing: intent: Check app install status via apps alias effect: read questions: - Can I check whether a Site Admin app is installed in my account using the apps install_status path? - Does the apps install_status endpoint return the local copy of an app? instructions: - text: Check app install status for client {client_id} in account {account_id} via apps/install_status. slots: client_id: path.client_id account_id: path.account_id - text: Using the apps alias, see if client {client_id} has a local install in account {account_id}. slots: client_id: path.client_id account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/lti_registrations/{id}/reset'].put update: x-apievangelist-phrasing: intent: Reset an LTI registration to default settings effect: destructive questions: - How do I undo all account-level customizations on an LTI registration? - Does resetting an LTI registration clear its overlay for this account? instructions: - text: Reset LTI registration {id} in account {account_id} to defaults via the lti_registrations endpoint. slots: id: path.id account_id: path.account_id - text: Clear every overlay customization on LTI registration {id} 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}/apps/{id}/reset'].put update: x-apievangelist-phrasing: intent: Reset an LTI app to defaults via apps alias effect: destructive questions: - Can I reset an app to its default settings through the apps reset path? - Will resetting an app via the apps alias remove my account's overlay changes? instructions: - text: Reset app {id} in account {account_id} to defaults using the apps alias endpoint. slots: id: path.id account_id: path.account_id - text: Via apps/reset, wipe customizations from app {id} in account {account_id}. slots: id: path.id account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/lti_registrations/{id}/bind'].post update: x-apievangelist-phrasing: intent: Enable or disable an LTI registration for a root account effect: write questions: - How do I turn on an inherited Site Admin LTI registration for my root account? - Can I switch an LTI registration off for a root account without deleting it? instructions: - text: Bind LTI registration {id} to root account {account_id} with state {workflow_state} via lti_registrations. slots: id: path.id account_id: path.account_id workflow_state: requestBody.workflow_state - text: Turn LTI registration {id} {workflow_state} for root account {account_id}. slots: id: path.id workflow_state: requestBody.workflow_state account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/lti_registrations/{id}/bind'].delete update: x-apievangelist-phrasing: intent: Remove an inherited LTI registration from an account effect: destructive questions: - How do I remove a Site Admin LTI registration that my account inherited? - Which feature flag must be on to delete the binding for an inherited LTI registration? instructions: - text: Remove the inherited LTI registration {id} binding from account {account_id} via lti_registrations. slots: id: path.id account_id: path.account_id - text: Delete the account binding for inherited LTI registration {id} in account {account_id}. slots: id: path.id account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/apps/{id}/bind'].post update: x-apievangelist-phrasing: intent: Enable or disable an LTI app for a root account (apps) effect: write questions: - Can I enable an app for my root account through the apps bind endpoint? - Is binding an app via the apps path only allowed for root accounts? instructions: - text: Via apps/bind, set app {id} to {workflow_state} for root account {account_id}. slots: id: path.id workflow_state: requestBody.workflow_state account_id: path.account_id - text: Using the apps alias, bind app {id} to root account {account_id} as {workflow_state}. slots: id: path.id account_id: path.account_id workflow_state: requestBody.workflow_state method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/apps/{id}/bind'].delete update: x-apievangelist-phrasing: intent: Remove an inherited LTI app via apps alias effect: destructive questions: - Can I remove an inherited Site Admin app from my account with the apps bind path? - Does deleting the apps binding only work for inherited apps? instructions: - text: Remove inherited app {id} from account {account_id} via the apps/bind endpoint. slots: id: path.id account_id: path.account_id - text: Using the apps alias, drop the inherited binding for app {id} in account {account_id}. slots: id: path.id account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/lti_registrations/{id}/install_from_template'].post update: x-apievangelist-phrasing: intent: Install an LTI registration from a Site Admin template effect: write questions: - How do I install a local copy of a Site Admin template LTI registration that I can customize? - Will customizing a registration installed from a template change the original template? instructions: - text: Install template LTI registration {id} into account {account_id} via lti_registrations. slots: id: path.id account_id: path.account_id - text: Make a local copy of Site Admin LTI template {id} in root account {account_id}. slots: id: path.id account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/apps/{id}/install_from_template'].post update: x-apievangelist-phrasing: intent: Install an LTI app from a template via apps alias effect: write questions: - Can I install an app from a Site Admin template using the apps install_from_template path? - Is installing an app from a template through apps restricted to root accounts? instructions: - text: Install app template {id} into account {account_id} via the apps alias endpoint. slots: id: path.id account_id: path.account_id - text: Using apps/install_from_template, copy template app {id} into account {account_id}. slots: id: path.id account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/lti_registrations/{registration_id}/deployments/{deployment_id}/context_search'].get update: x-apievangelist-phrasing: intent: Search accounts and courses for an LTI deployment effect: read questions: - How do I find courses or sub-accounts by name or SIS id when scoping an LTI deployment? - Can I limit an LTI deployment context search to children of one account? instructions: - text: Search for {search_term} among accounts and courses for deployment {deployment_id} of LTI registration {registration_id} in account {account_id}. slots: search_term: query.search_term deployment_id: path.deployment_id registration_id: path.registration_id account_id: path.account_id - text: Find courses matching {search_term} under account {only_children_of} for LTI deployment {deployment_id}, registration {registration_id}, account {account_id}. slots: search_term: query.search_term only_children_of: query.only_children_of deployment_id: path.deployment_id registration_id: path.registration_id account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/apps/{registration_id}/deployments/{deployment_id}/context_search'].get update: x-apievangelist-phrasing: intent: Search accounts and courses for an app deployment effect: read questions: - Can I search accounts and courses for an app deployment using the apps context_search path? - Does the apps context search match on course code as well as name? instructions: - text: Via the apps alias, search {search_term} for deployment {deployment_id} of app {registration_id} in account {account_id}. slots: search_term: query.search_term deployment_id: path.deployment_id registration_id: path.registration_id account_id: path.account_id - text: Using apps context_search, list contexts for app {registration_id} deployment {deployment_id} in account {account_id}. slots: registration_id: path.registration_id deployment_id: path.deployment_id account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/lti_registrations/{id}/overlay_history'].get update: x-apievangelist-phrasing: intent: Get the overlay history of an LTI registration effect: read questions: - How do I see past overlay customizations made to an LTI registration? - Can I limit how many overlay history items I get back for an LTI registration? instructions: - text: Show the overlay history for LTI registration {id} in account {account_id} via lti_registrations. slots: id: path.id account_id: path.account_id - text: Get the last {limit} overlay changes to LTI registration {id} in account {account_id}. slots: limit: query.limit id: path.id account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/apps/{id}/overlay_history'].get update: x-apievangelist-phrasing: intent: Get an LTI app's overlay history via apps alias effect: read questions: - Can I read an app's overlay history from the apps overlay_history path? - How many overlay history entries does the apps endpoint return for one app? instructions: - text: Via the apps alias, show overlay history for app {id} in account {account_id}. slots: id: path.id account_id: path.account_id - text: Using apps/overlay_history, return {limit} entries for app {id} in account {account_id}. slots: limit: query.limit id: path.id account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/lti_registrations/{id}/history'].get update: x-apievangelist-phrasing: intent: Get the full change history of an LTI registration effect: read questions: - How do I audit every change made to an LTI registration, including developer key changes? - Is there a full change log for an LTI registration's fields and internal configuration? instructions: - text: Show the complete change history of LTI registration {id} in account {account_id} via lti_registrations. slots: id: path.id account_id: path.account_id - text: List all history entries for LTI registration {id} in account {account_id}. slots: id: path.id account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/apps/{id}/history'].get update: x-apievangelist-phrasing: intent: Get an LTI app's full change history via apps alias effect: read questions: - Can I get an app's complete change history through the apps history path? - Does the apps history endpoint include developer key changes for the app? instructions: - text: Via the apps alias, list every change made to app {id} in account {account_id}. slots: id: path.id account_id: path.account_id - text: Using apps/history, show the audit trail of app {id} 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}/lti_registrations/{id}/update_requests/{update_request_id}'].get update: x-apievangelist-phrasing: intent: Get an LTI registration update request effect: read questions: - How do I view the details of a specific pending update request for an LTI registration? - Can I fetch one LTI registration update request by its id? instructions: - text: Show update request {update_request_id} for LTI registration {id} in account {account_id} via lti_registrations. slots: update_request_id: path.update_request_id id: path.id account_id: path.account_id - text: Get LTI update request {update_request_id} on registration {id}, account {account_id}, including {include}. slots: update_request_id: path.update_request_id id: path.id account_id: path.account_id include: query.include method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/apps/{id}/update_requests/{update_request_id}'].get update: x-apievangelist-phrasing: intent: Get an LTI app update request via apps alias effect: read questions: - Can I read a specific app update request through the apps update_requests path? - What does one app update request contain when fetched via the apps alias? instructions: - text: Via the apps alias, show update request {update_request_id} for app {id} in account {account_id}. slots: update_request_id: path.update_request_id id: path.id account_id: path.account_id - text: Using apps/update_requests, fetch request {update_request_id} for app {id} in account {account_id}. slots: update_request_id: path.update_request_id id: path.id account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/lti_registrations/{id}/latest_update_request'].get update: x-apievangelist-phrasing: intent: Get the latest update request for an LTI registration effect: read questions: - How do I see the most recent update request for an LTI registration regardless of status? - What does Canvas return when an LTI registration has no update requests at all? instructions: - text: Show the latest update request for LTI registration {id} in account {account_id} via lti_registrations. slots: id: path.id account_id: path.account_id - text: Get the newest pending or past update request on LTI registration {id} in account {account_id}. slots: id: path.id account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/apps/{id}/latest_update_request'].get update: x-apievangelist-phrasing: intent: Get an LTI app's latest update request via apps effect: read questions: - Can I get the most recent update request for an app from the apps latest_update_request path? - Does the apps latest update request call 404 when nothing has been requested? instructions: - text: For app {id} in account {account_id}, return only its most recent update request through the apps alias. slots: id: path.id account_id: path.account_id - text: Using apps/latest_update_request, get the newest request for app {id} in account {account_id}. slots: id: path.id account_id: path.account_id method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/lti_registrations/{id}/update_requests/{update_request_id}/apply'].put update: x-apievangelist-phrasing: intent: Accept or reject an LTI registration update request effect: write questions: - How do I accept a tool's update request so it replaces the LTI registration's configuration? - Can I reject an LTI registration update request without applying any changes? instructions: - text: Apply update request {update_request_id} to LTI registration {id} in account {account_id} with accepted {accepted} via lti_registrations. slots: update_request_id: path.update_request_id id: path.id account_id: path.account_id accepted: requestBody.accepted - text: Reject LTI update request {update_request_id} on registration {id} in account {account_id}, accepted {accepted}, noting {comment}. slots: update_request_id: path.update_request_id id: path.id account_id: path.account_id accepted: requestBody.accepted comment: requestBody.comment method: generated generated: '2026-10-01' - target: $.paths['/v1/accounts/{account_id}/apps/{id}/update_requests/{update_request_id}/apply'].put update: x-apievangelist-phrasing: intent: Accept or reject an LTI app update request (apps) effect: write questions: - Can I accept an app update request through the apps update_requests apply path? - When applying an app update request via apps, can I pass my own overlay? instructions: - text: Via the apps alias, apply request {update_request_id} to app {id} in account {account_id} with accepted {accepted}. slots: update_request_id: path.update_request_id id: path.id account_id: path.account_id accepted: requestBody.accepted - text: Using apps apply, accept {accepted} request {update_request_id} for app {id} in account {account_id} with overlay {overlay}. slots: accepted: requestBody.accepted update_request_id: path.update_request_id id: path.id account_id: path.account_id overlay: requestBody.overlay method: generated generated: '2026-10-01'