🚀 Heads up: Our API Docs Have Moved!
We have relocated to Instructure Developer Documentation Portal. 🎉 Please update your bookmarks. This page will automatically redirect after July 1, 2026.

External Tools API

API for accessing and configuring external tools on accounts and courses. "External tools" are IMS LTI links: http://www.imsglobal.org/developers/LTI/index.cfm.

For a definitive list of all supported placements for external tools and more information on configuring them, see the Placements Documentation.

A ContextExternalTool object looks like:

// An external tool configured for a specific context
{
  // The unique identifier for the external tool
  "id": 37,
  // The name of the external tool
  "name": "Basic 1.1 tool",
  // A description of the external tool
  "description": "Basic LTI 1.1 Tool",
  // The launch URL for the external tool
  "url": "http://example.com/launch",
  // The domain to match links against. Note that this doesn't contain the
  // protocol.
  "domain": "example.com",
  // The consumer key used by the tool (The associated shared secret is not
  // returned)
  "consumer_key": "key",
  // Timestamp of the tool's creation
  "created_at": "2037-07-21T13:29:31Z",
  // Timestamp of the tool's last update
  "updated_at": "2037-07-28T19:38:31Z",
  // How much user information to send to the external tool
  "privacy_level": "anonymous",
  // Custom fields that will be sent to the tool consumer
  "custom_fields": {"key":"value"},
  // The current state of the external tool
  "workflow_state": "public",
  // Boolean determining whether this tool should be in a preferred location in
  // the RCE. Only present if the tool can be an RCE favorite.
  "is_rce_favorite": false,
  // Boolean determining whether this tool should have a dedicated button in Top
  // Navigation. Only present if the tool can be a top nav favorite.
  "is_top_nav_favorite": false,
  // The pixel width of the iFrame that the tool will be rendered in
  "selection_width": 500,
  // The pixel height of the iFrame that the tool will be rendered in
  "selection_height": 500,
  // The URL for the tool icon
  "icon_url": "https://example.com/icon.png",
  // Whether the tool is not selectable from assignment and modules
  "not_selectable": false,
  // The LTI version of the tool
  "version": "1.1",
  // The unique identifier for the tool in LearnPlatform
  "unified_tool_id": null,
  // The developer key id associated with this tool. Only present for LTI 1.3
  // tools.
  "developer_key_id": 123,
  // The LTI registration id associated with this tool. Only present for LTI 1.3
  // tools.
  "lti_registration_id": 456,
  // The unique identifier for the deployment of the tool
  "deployment_id": "37:b82229c6e10bcb87beb1f1b287faee560ddc3109",
  // Whether the tool can access the membership service. Only present if the
  // feature is enabled.
  "allow_membership_service_access": false,
  // Whether to send the SIS email address in launches
  "prefer_sis_email": false,
  // The estimated duration for completing this tool. Only present for horizon
  // courses when the tool has an estimated duration.
  "estimated_duration": null,
  // Configuration for account navigation placement. Null if not configured for
  // this placement.
  "account_navigation": {"type":"ContextExternalToolPlacement"},
  // Configuration for analytics hub placement. Null if not configured for this
  // placement.
  "analytics_hub": {"type":"ContextExternalToolPlacement"},
  // Configuration for assignment edit placement. Null if not configured for this
  // placement.
  "assignment_edit": {"type":"ContextExternalToolPlacement"},
  // Configuration for assignment group menu placement. Null if not configured for
  // this placement.
  "assignment_group_menu": {"type":"ContextExternalToolPlacement"},
  // Configuration for assignment index menu placement. Null if not configured for
  // this placement.
  "assignment_index_menu": {"type":"ContextExternalToolPlacement"},
  // Configuration for assignment menu placement. Null if not configured for this
  // placement.
  "assignment_menu": {"type":"ContextExternalToolPlacement"},
  // Configuration for assignment selection placement. Null if not configured for
  // this placement.
  "assignment_selection": {"type":"ContextExternalToolPlacement"},
  // Configuration for assignment view placement. Null if not configured for this
  // placement.
  "assignment_view": {"type":"ContextExternalToolPlacement"},
  // Configuration for collaboration placement. Null if not configured for this
  // placement.
  "collaboration": {"type":"ContextExternalToolPlacement"},
  // Configuration for conference selection placement. Null if not configured for
  // this placement.
  "conference_selection": {"type":"ContextExternalToolPlacement"},
  // Configuration for course assignments menu placement. Null if not configured
  // for this placement.
  "course_assignments_menu": {"type":"ContextExternalToolPlacement"},
  // Configuration for course home sub navigation placement. Null if not
  // configured for this placement.
  "course_home_sub_navigation": {"type":"ContextExternalToolPlacement"},
  // Configuration for course navigation placement. Null if not configured for
  // this placement.
  "course_navigation": {"type":"ContextExternalToolPlacement"},
  // Configuration for course settings sub navigation placement. Null if not
  // configured for this placement.
  "course_settings_sub_navigation": {"type":"ContextExternalToolPlacement"},
  // Configuration for discussion topic index menu placement. Null if not
  // configured for this placement.
  "discussion_topic_index_menu": {"type":"ContextExternalToolPlacement"},
  // Configuration for discussion topic menu placement. Null if not configured for
  // this placement.
  "discussion_topic_menu": {"type":"ContextExternalToolPlacement"},
  // Configuration for editor button placement. Null if not configured for this
  // placement.
  "editor_button": {"type":"ContextExternalToolPlacement"},
  // Configuration for file index menu placement. Null if not configured for this
  // placement.
  "file_index_menu": {"type":"ContextExternalToolPlacement"},
  // Configuration for file menu placement. Null if not configured for this
  // placement.
  "file_menu": {"type":"ContextExternalToolPlacement"},
  // Configuration for global navigation placement. Null if not configured for
  // this placement.
  "global_navigation": {"type":"ContextExternalToolPlacement"},
  // Configuration for homework submission placement. Null if not configured for
  // this placement.
  "homework_submission": {"type":"ContextExternalToolPlacement"},
  // Configuration for link selection placement. Null if not configured for this
  // placement.
  "link_selection": {"type":"ContextExternalToolPlacement"},
  // Configuration for migration selection placement. Null if not configured for
  // this placement.
  "migration_selection": {"type":"ContextExternalToolPlacement"},
  // Configuration for module group menu placement. Null if not configured for
  // this placement.
  "module_group_menu": {"type":"ContextExternalToolPlacement"},
  // Configuration for module index menu placement. Null if not configured for
  // this placement.
  "module_index_menu": {"type":"ContextExternalToolPlacement"},
  // Configuration for module index menu modal placement. Null if not configured
  // for this placement.
  "module_index_menu_modal": {"type":"ContextExternalToolPlacement"},
  // Configuration for module menu modal placement. Null if not configured for
  // this placement.
  "module_menu_modal": {"type":"ContextExternalToolPlacement"},
  // Configuration for module menu placement. Null if not configured for this
  // placement.
  "module_menu": {"type":"ContextExternalToolPlacement"},
  // Configuration for page index menu placement. Null if not configured for this
  // placement.
  "page_index_menu": {"type":"ContextExternalToolPlacement"},
  // Configuration for page menu placement. Null if not configured for this
  // placement.
  "page_menu": {"type":"ContextExternalToolPlacement"},
  // Configuration for post grades (sync grades) placement. Null if not configured
  // for this placement.
  "post_grades": {"type":"ContextExternalToolPlacement"},
  // Configuration for quiz index menu placement. Null if not configured for this
  // placement.
  "quiz_index_menu": {"type":"ContextExternalToolPlacement"},
  // Configuration for quiz menu placement. Null if not configured for this
  // placement.
  "quiz_menu": {"type":"ContextExternalToolPlacement"},
  // Configuration for resource selection placement. Null if not configured for
  // this placement. This placement is deprecated.
  "resource_selection": {"type":"ContextExternalToolPlacement"},
  // Configuration for similarity detection placement. Null if not configured for
  // this placement.
  "similarity_detection": {"type":"ContextExternalToolPlacement"},
  // Configuration for student context card placement. Null if not configured for
  // this placement.
  "student_context_card": {"type":"ContextExternalToolPlacement"},
  // Configuration for submission type selection placement. Null if not configured
  // for this placement.
  "submission_type_selection": {"type":"ContextExternalToolPlacement"},
  // Configuration for tool configuration placement. Null if not configured for
  // this placement.
  "tool_configuration": {"type":"ContextExternalToolPlacement"},
  // Configuration for top navigation placement. Null if not configured for this
  // placement.
  "top_navigation": {"type":"ContextExternalToolPlacement"},
  // Configuration for user navigation placement. Null if not configured for this
  // placement.
  "user_navigation": {"type":"ContextExternalToolPlacement"},
  // Configuration for wiki index menu placement. Null if not configured for this
  // placement.
  "wiki_index_menu": {"type":"ContextExternalToolPlacement"},
  // Configuration for wiki page menu placement. Null if not configured for this
  // placement.
  "wiki_page_menu": {"type":"ContextExternalToolPlacement"},
  // Configuration for activity asset processor placement. Null if not configured
  // for this placement.
  "ActivityAssetProcessor": {"type":"ContextExternalToolPlacement"},
  // Configuration for activity asset processor contribution placement. Null if
  // not configured for this placement.
  "ActivityAssetProcessorContribution": {"type":"ContextExternalToolPlacement"}
}

A ContextExternalToolPlacement object looks like:

// Configuration for a specific placement of an external tool. If null, no
// configuration is present.
{
  // Whether this placement is enabled
  "enabled": true,
  // The launch URL for this specific placement. Overrides the tool's default URL.
  // For LTI 1.1 tools only.
  "url": "http://example.com/launch?placement=course_navigation",
  // The launch URL for this specific placement. Overrides the tool's default
  // target_link_uri. For LTI 1.3 tools only.
  "target_link_uri": "http://example.com/launch?placement=course_navigation",
  // The text/label to display for this placement. Overridable by 'labels' in
  // placement configuration.
  "text": "Course Navigation Tool",
  // The localized label for this placement. This is the resolved text after
  // applying internationalization.
  "label": "Course Navigation Tool",
  // Internationalization labels for this placement. Keys are locale codes, values
  // are localized text.
  "labels": {"en":"Course Navigation","es":"Navegaci\u00f3n del Curso"},
  // The LTI message type for this placement. Not all placements support all
  // message types.
  "message_type": "LtiResourceLinkRequest",
  // The width of the iframe or popup for this placement
  "selection_width": 500,
  // The height of the iframe or popup for this placement
  "selection_height": 500,
  // The width of the launch window. Not standard everywhere yet.
  "launch_width": 800,
  // The height of the launch window. Not standard everywhere yet.
  "launch_height": 600,
  // The URL of the icon for this placement
  "icon_url": "https://example.com/icon.png",
  // The Canvas icon class to use for this placement instead of an icon URL
  "canvas_icon_class": "icon-lti",
  // Whether to allow fullscreen mode for this placement (top_navigation placement
  // only)
  "allow_fullscreen": true,
  // Custom fields to be sent with this placement's launch. Merged with tool-level
  // custom fields.
  "custom_fields": {"placement_id":"course_nav","special_param":"value"},
  // Controls who can see this placement
  "visibility": "members",
  // Comma-separated list of Canvas permissions required to launch from this
  // placement. The user must have all permissions in order to launch the tool.
  "required_permissions": "manage_course_content_edit,manage_course_content_read",
  // Default display state for navigation placements. Only applies to
  // account_navigation and course_navigation placements.
  "default": "disabled",
  // The layout type to use when launching the tool. For global_navigation and
  // analytics_hub, defaults to 'full_width'.
  "display_type": "full_width_in_context",
  // When set to '_blank', opens placement in a new tab. Only '_blank' is
  // supported.
  "windowTarget": "_blank",
  // Comma-separated list of media types that the tool can accept. Only valid for
  // file_menu placement.
  "accept_media_types": "image/*,video/*",
  // If true, the tool will be launched in the tray. Only used by the
  // editor_button placement.
  "use_tray": true,
  // An SVG path to use instead of an icon_url. Only valid for global_navigation
  // placement.
  "icon_svg_path_64": "M100,37L70.1,10.5v176H37...",
  // Whether this placement should only be available at the root account level.
  // Only applies to account_navigation placement.
  "root_account_only": false,
  // A description of this placement. Only valid for submission_type_selection
  // placement. Maximum length of 255 characters.
  "description": "Submit your work using our external tool",
  // Whether resource selection is required for this placement. Only valid for
  // submission_type_selection placement.
  "require_resource_selection": true,
  // If true, the tool will send the SIS email in the
  // lis_person_contact_email_primary launch property. LTI 1.1 only.
  "prefer_sis_email": false,
  // If true, query parameters from the launch URL will not be copied to the POST
  // body. LTI 1.1 only.
  "oauth_compliant": true,
  // End User License Agreement configuration for ActivityAssetProcessor
  // placement. Only valid for ActivityAssetProcessor placement.
  "eula": {"enabled":true,"target_link_uri":"https:\/\/example.com\/eula","custom_fields":{"agreement_version":"2.1"}}
}

An EstimatedDuration object looks like:

// An estimated duration for completing a learning activity
{
  // The unique identifier for the estimated duration
  "id": 123,
  // The estimated duration in ISO 8601 format
  "duration": "PT30M",
  // Timestamp of when the estimated duration was created
  "created_at": "2024-01-01T00:00:00Z",
  // Timestamp of when the estimated duration was last updated
  "updated_at": "2024-01-01T00:00:00Z"
}

List external tools ExternalToolsController#index

GET /api/v1/courses/:course_id/external_tools

Scope: url:GET|/api/v1/courses/:course_id/external_tools

GET /api/v1/accounts/:account_id/external_tools

Scope: url:GET|/api/v1/accounts/:account_id/external_tools

GET /api/v1/groups/:group_id/external_tools

Scope: url:GET|/api/v1/groups/:group_id/external_tools

Returns the paginated list of external tools for the current context. See the get request docs for a single tool for a list of properties on an external tool.

Request Parameters:

Parameter Type Description
search_term string

The partial name of the tools to match and return.

selectable boolean

If true, then only tools that are meant to be selectable are returned.

include_parents boolean

If true, then include tools installed in all accounts above the current context

placement string

The placement type to filter by.

Return all tools at the current context as well as all tools from the parent, and filter the tools list to only those with a placement of ‘editor_button’

Example Request:

curl 'https://<canvas>/api/v1/courses/<course_id>/external_tools?include_parents=true&placement=editor_button' \
     -H "Authorization: Bearer <token>"
Returns a list of ContextExternalTool objects

Get a sessionless launch url for an external tool. ExternalToolsController#generate_sessionless_launch

GET /api/v1/courses/:course_id/external_tools/sessionless_launch

Scope: url:GET|/api/v1/courses/:course_id/external_tools/sessionless_launch

GET /api/v1/accounts/:account_id/external_tools/sessionless_launch

Scope: url:GET|/api/v1/accounts/:account_id/external_tools/sessionless_launch

Returns a sessionless launch url for an external tool. Prefers the resource_link_lookup_uuid, but defaults to the other passed

parameters id, url, and launch_type

NOTE: Either the resource_link_lookup_uuid, id, or url must be provided unless launch_type is assessment or module_item.

Request Parameters:

Parameter Type Description
id string

The external id of the tool to launch.

url string

The LTI launch url for the external tool.

assignment_id string

The assignment id for an assignment launch. Required if launch_type is set to “assessment”.

module_item_id string

The assignment id for a module item launch. Required if launch_type is set to “module_item”.

launch_type string

The type of launch to perform on the external tool. Placement names (eg. “course_navigation”) can also be specified to use the custom launch url for that placement; if done, the tool id must be provided.

Allowed values: assessment, module_item

resource_link_lookup_uuid string

The identifier to lookup a resource link.

API response field:

  • id

    The id for the external tool to be launched.

  • name

    The name of the external tool to be launched.

  • url

    The url to load to launch the external tool for the user.

Example Request:

Finds the tool by id and returns a sessionless launch url
curl 'https://<canvas>/api/v1/courses/<course_id>/external_tools/sessionless_launch' \
     -H "Authorization: Bearer <token>" \
     -F 'id=<external_tool_id>'

Finds the tool by launch url and returns a sessionless launch url
curl 'https://<canvas>/api/v1/courses/<course_id>/external_tools/sessionless_launch' \
     -H "Authorization: Bearer <token>" \
     -F 'url=<lti launch url>'

Finds the tool associated with a specific assignment and returns a sessionless launch url
curl 'https://<canvas>/api/v1/courses/<course_id>/external_tools/sessionless_launch' \
     -H "Authorization: Bearer <token>" \
     -F 'launch_type=assessment' \
     -F 'assignment_id=<assignment_id>'

Finds the tool associated with a specific module item and returns a sessionless launch url
curl 'https://<canvas>/api/v1/courses/<course_id>/external_tools/sessionless_launch' \
     -H "Authorization: Bearer <token>" \
     -F 'launch_type=module_item' \
     -F 'module_item_id=<module_item_id>'

Finds the tool by id and returns a sessionless launch url for a specific placement
curl 'https://<canvas>/api/v1/courses/<course_id>/external_tools/sessionless_launch' \
     -H "Authorization: Bearer <token>" \
     -F 'id=<external_tool_id>' \
     -F 'launch_type=<placement_name>'

Get a single external tool ExternalToolsController#show

GET /api/v1/courses/:course_id/external_tools/:external_tool_id

Scope: url:GET|/api/v1/courses/:course_id/external_tools/:external_tool_id

GET /api/v1/accounts/:account_id/external_tools/:external_tool_id

Scope: url:GET|/api/v1/accounts/:account_id/external_tools/:external_tool_id

Returns the specified external tool.

Returns a ContextExternalTool object

Create an external tool ExternalToolsController#create

POST /api/v1/courses/:course_id/external_tools

Scope: url:POST|/api/v1/courses/:course_id/external_tools

POST /api/v1/accounts/:account_id/external_tools

Scope: url:POST|/api/v1/accounts/:account_id/external_tools

Create an external tool in the specified course/account. The created tool will be returned, see the “show” endpoint for an example. If a client ID is supplied canvas will attempt to create a context external tool using the LTI 1.3 standard.

See the <a href=“file.lti_dev_key_config.html#placements-params”>Placements Documentation</a> for more information on what placements are available, the possible fields, and their accepted values.

Request Parameters:

Parameter Type Description
client_id Required string

The client id is attached to the developer key. If supplied all other parameters are unnecessary and will be ignored

name Required string

The name of the tool

privacy_level Required string

How much user information to send to the external tool.

Allowed values: anonymous, name_only, email_only, public

consumer_key Required string

The consumer key for the external tool

shared_secret Required string

The shared secret with the external tool

description string

A description of the tool

url string

The url to match links against. Either “url” or “domain” should be set, not both.

domain string

The domain to match links against. Either “url” or “domain” should be set, not both.

icon_url string

The url of the icon to show for this tool

text string

The default text to show for this tool

custom_fields[field_name] string

Custom fields that will be sent to the tool consumer; can be used multiple times

is_rce_favorite boolean

(Deprecated in favor of Mark tool to RCE Favorites and Unmark tool from RCE Favorites) Whether this tool should appear in a preferred location in the RCE. This only applies to tools in root account contexts that have an editor button placement.

<placement_name>[<placement_configuration_key>] variable

Set the <placement_configuration_key> value for a specific placement.

config_type string

Configuration can be passed in as Common Cartridge XML instead of using query parameters. If this value is “by_url” or “by_xml” then an XML configuration will be expected in either the “config_xml” or “config_url” parameter. Note that the name parameter overrides the tool name provided in the XML.

Allowed values: by_url, by_xml

config_xml string

XML tool configuration, as specified in the Common Cartridge XML specification. This is required if “config_type” is set to “by_xml”

config_url string

URL where the server can retrieve an XML tool configuration, as specified in the Common Cartridge XML specification. This is required if “config_type” is set to “by_url”

not_selectable boolean

Default: false. If set to true, and if resource_selection is set to false, the tool won’t show up in the external tool selection UI in modules and assignments

oauth_compliant boolean

Default: false, if set to true LTI query params will not be copied to the post body.

unified_tool_id string

The unique identifier for the tool in LearnPlatform

Example Request:

This would create a tool on this course with two custom fields and a course navigation tab
curl -X POST 'https://<canvas>/api/v1/courses/<course_id>/external_tools' \
     -H "Authorization: Bearer <token>" \
     -F 'name=LTI Example' \
     -F 'consumer_key=asdfg' \
     -F 'shared_secret=lkjh' \
     -F 'url=https://example.com/ims/lti' \
     -F 'privacy_level=name_only' \
     -F 'custom_fields[key1]=value1' \
     -F 'custom_fields[key2]=value2' \
     -F 'course_navigation[text]=Course Materials' \
     -F 'course_navigation[enabled]=true'

This would create a tool on the account with navigation for the user profile page
curl -X POST 'https://<canvas>/api/v1/accounts/<account_id>/external_tools' \
     -H "Authorization: Bearer <token>" \
     -F 'name=LTI Example' \
     -F 'consumer_key=asdfg' \
     -F 'shared_secret=lkjh' \
     -F 'url=https://example.com/ims/lti' \
     -F 'privacy_level=name_only' \
     -F 'user_navigation[url]=https://example.com/ims/lti/user_endpoint' \
     -F 'user_navigation[text]=Something Cool'
     -F 'user_navigation[enabled]=true'

This would create a tool on the account with configuration pulled from an external URL
curl -X POST 'https://<canvas>/api/v1/accounts/<account_id>/external_tools' \
     -H "Authorization: Bearer <token>" \
     -F 'name=LTI Example' \
     -F 'consumer_key=asdfg' \
     -F 'shared_secret=lkjh' \
     -F 'config_type=by_url' \
     -F 'config_url=https://example.com/ims/lti/tool_config.xml'
Returns a ContextExternalTool object

Edit an external tool ExternalToolsController#update

PUT /api/v1/courses/:course_id/external_tools/:external_tool_id

Scope: url:PUT|/api/v1/courses/:course_id/external_tools/:external_tool_id

PUT /api/v1/accounts/:account_id/external_tools/:external_tool_id

Scope: url:PUT|/api/v1/accounts/:account_id/external_tools/:external_tool_id

Update the specified external tool. Uses same parameters as create. Returns the updated tool.

NOTE: Any updates made to LTI 1.3 tools with this API will be overridden if any changes are made to the tool’s associated LTI Registration/Developer Key configuration. In almost all cases, changes should be made to the tool’s associated LTI Registration configuration, not individual tools.

Example Request:

This would update the specified keys on this external tool
curl -X PUT 'https://<canvas>/api/v1/courses/<course_id>/external_tools/<external_tool_id>' \
     -H "Authorization: Bearer <token>" \
     -F 'name=Public Example' \
     -F 'privacy_level=public'
Returns a ContextExternalTool object

Delete an external tool ExternalToolsController#destroy

DELETE /api/v1/courses/:course_id/external_tools/:external_tool_id

Scope: url:DELETE|/api/v1/courses/:course_id/external_tools/:external_tool_id

DELETE /api/v1/accounts/:account_id/external_tools/:external_tool_id

Scope: url:DELETE|/api/v1/accounts/:account_id/external_tools/:external_tool_id

Remove the specified external tool

Example Request:

This would delete the specified external tool
curl -X DELETE 'https://<canvas>/api/v1/courses/<course_id>/external_tools/<external_tool_id>' \
     -H "Authorization: Bearer <token>"
Returns a ContextExternalTool object

Mark tool as RCE Favorite ExternalToolsController#mark_rce_favorite

POST /api/v1/accounts/:account_id/external_tools/rce_favorites/:id

Scope: url:POST|/api/v1/accounts/:account_id/external_tools/rce_favorites/:id

Mark the specified editor_button external tool as a favorite in the RCE editor for courses in the given account and its subaccounts (if the subaccounts haven’t set their own RCE Favorites). This places the tool in a preferred location in the RCE. Cannot mark more than 2 tools as RCE Favorites.

Example Request:

curl -X POST 'https://<canvas>/api/v1/accounts/<account_id>/external_tools/rce_favorites/<id>' \
     -H "Authorization: Bearer <token>"

Unmark tool as RCE Favorite ExternalToolsController#unmark_rce_favorite

DELETE /api/v1/accounts/:account_id/external_tools/rce_favorites/:id

Scope: url:DELETE|/api/v1/accounts/:account_id/external_tools/rce_favorites/:id

Unmark the specified external tool as a favorite in the RCE editor for the given account. The tool will remain available but will no longer appear in the preferred favorites location.

Example Request:

curl -X DELETE 'https://<canvas>/api/v1/accounts/<account_id>/external_tools/rce_favorites/<id>' \
     -H "Authorization: Bearer <token>"

Add tool to Top Navigation Favorites ExternalToolsController#add_top_nav_favorite

POST /api/v1/accounts/:account_id/external_tools/top_nav_favorites/:id

Scope: url:POST|/api/v1/accounts/:account_id/external_tools/top_nav_favorites/:id

Adds a dedicated button in Top Navigation for the specified tool for the given account. Cannot set more than 2 top_navigation Favorites.

Example Request:

curl -X POST 'https://<canvas>/api/v1/accounts/<account_id>/external_tools/top_nav_favorites/<id>' \
     -H "Authorization: Bearer <token>"

Remove tool from Top Navigation Favorites ExternalToolsController#remove_top_nav_favorite

DELETE /api/v1/accounts/:account_id/external_tools/top_nav_favorites/:id

Scope: url:DELETE|/api/v1/accounts/:account_id/external_tools/top_nav_favorites/:id

Removes the dedicated button in Top Navigation for the specified tool for the given account.

Example Request:

curl -X DELETE 'https://<canvas>/api/v1/accounts/<account_id>/external_tools/top_nav_favorites/<id>' \
     -H "Authorization: Bearer <token>"

Get visible course navigation tools ExternalToolsController#all_visible_nav_tools

GET /api/v1/external_tools/visible_course_nav_tools

Scope: url:GET|/api/v1/external_tools/visible_course_nav_tools

Get a list of external tools with the course_navigation placement that have not been hidden in course settings and whose visibility settings apply to the requesting user. These tools are the same that appear in the course navigation.

The response format is the same as for List external tools, but with additional context_id and context_name fields on each element in the array.

Request Parameters:

Parameter Type Description
context_codes[] Required string

List of context_codes to retrieve visible course nav tools for (for example, course_123). Only courses are presently supported.

API response field:

  • context_id

    The unique identifier of the associated context

  • context_name

    The name of the associated context

Example Request:

curl 'https://<canvas>/api/v1/external_tools/visible_course_nav_tools?context_codes[]=course_5' \
     -H "Authorization: Bearer <token>"

Example Response:

[{
  "id": 1,
  "domain": "domain.example.com",
  "url": "http://www.example.com/ims/lti",
  "context_id": 5,
  "context_name": "Example Course",
  ...
},
{ ...  }]

Get visible course navigation tools for a single course ExternalToolsController#visible_course_nav_tools

GET /api/v1/courses/:course_id/external_tools/visible_course_nav_tools

Scope: url:GET|/api/v1/courses/:course_id/external_tools/visible_course_nav_tools

Get a list of external tools with the course_navigation placement that have not been hidden in course settings and whose visibility settings apply to the requesting user. These tools are the same that appear in the course navigation.

The response format is the same as Get visible course navigation tools.

Example Request:

curl 'https://<canvas>/api/v1/courses/<course_id>/external_tools/visible_course_nav_tools' \
     -H "Authorization: Bearer <token>"