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
List external tools ExternalToolsController#index
GET /api/v1/courses/:course_id/external_tools
GET /api/v1/accounts/:account_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.
Example Response:
[ { "id":1, "name":"BLTI Example", "description":"This is for cool things" "url":"http://www.example.com/ims/lti", "domain":null, "privacy_level":anonymous "consumer_key":null, "created_at":"2037-07-21T13:29:31Z", "updated_at":"2037-07-28T19:38:31Z", "custom_fields":{"key":"value"}, "account_navigation":{"url":"...", "text":"..."}, "user_navigation":{"url":"...", "text":"..."}, "course_navigation":{"url":"...", "text":"...", "visibility":"members", "default":true}, "editor_button":{"url":"...", "text":"...", "selection_width":50, "selection_height":50, "icon_url":"..."}, "resource_selection":{"url":"...", "text":"...", "selection_width":50, "selection_height":50} }, { "id":2, "name":"Another BLTI Example", "description":"This one isn't very cool." "url":null, "domain":"example.com", "privacy_level":anonymous "consumer_key":null, "created_at":"2037-07-21T13:29:31Z", "updated_at":"2037-07-28T19:38:31Z" } ]
Get a single external tool ExternalToolsController#show
GET /api/v1/courses/:course_id/external_tools/:external_tool_id
GET /api/v1/accounts/:account_id/external_tools/:external_tool_id
Returns the specified external tool.
API response field:
-
id
The unique identifier for the tool
-
name
The name of the tool
-
description
A description of the tool
-
url
The url to match links against
-
domain
The domain to match links against
-
privacy_level
What information to send to the external tool, "anonymous", "name_only", "public"
-
consumer_key
The consumer key used by the tool (The associated shared secret is not returned)
-
created_at
Timestamp of creation
-
updated_at
Timestamp of last update
-
custom_fields
Custom fields that will be sent to the tool consumer
-
account_navigation
The configuration for account navigation links (see create API for values)
-
user_navigation
The configuration for user navigation links (see create API for values)
-
course_navigation
The configuration for course navigation links (see create API for values)
-
editor_button
The configuration for a WYSIWYG editor button (see create API for values)
-
resource_selection
The configuration for a resource selector in modules (see create API for values)
Example Response:
{ "id":1, "name":"BLTI Example", "description":"This is for cool things" "url":"http://www.example.com/ims/lti", "domain":null, "privacy_level":anonymous "consumer_key":null, "created_at":"2037-07-21T13:29:31Z", "updated_at":"2037-07-28T19:38:31Z", "custom_fields":{"key":"value"}, "account_navigation":{"url":"...", "text":"..."}, "user_navigation":{"url":"...", "text":"..."}, "course_navigation":{"url":"...", "text":"...", "visibility":"members", "default":true}, "editor_button":{"url":"...", "selection_width":50, "selection_height":50, "icon_url":"..."}, "resource_selection":{"url":"...", "selection_width":50, "selection_height":50} }
Create an external tool ExternalToolsController#create
POST /api/v1/courses/:course_id/external_tools
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.
Request Parameters:
-
name
- string
-
The name of the tool
-
privacy_level
- string
-
What information to send to the external tool, "anonymous", "name_only", "public"
-
consumer_key
- string
-
The consumer key for the external tool
-
shared_secret
- string
-
The shared secret with the external tool
-
description
- string
- optional
-
A description of the tool
-
url
- string
- optional
-
The url to match links against. Either "url" or "domain" should be set, not both.
-
domain
- string
- optional
-
The domain to match links against. Either "url" or "domain" should be set, not both.
-
icon_url
- string
- optional
-
The url of the icon to show for this tool
-
text
- string
- optional
-
The default text to show for this tool
-
custom_fields
- string
- optional
-
Custom fields that will be sent to the tool consumer, specified as custom_fields
-
account_navigation[url]
- string
- optional
-
The url of the external tool for account navigation
-
account_navigation[enabled]
- boolean
- optional
-
Set this to enable this feature
-
account_navigation[text]
- string
- optional
-
The text that will show on the left-tab in the account navigation
-
user_navigation[url]
- string
- optional
-
The url of the external tool for user navigation
-
user_navigation[enabled]
- boolean
- optional
-
Set this to enable this feature
-
user_navigation[text]
- string
- optional
-
The text that will show on the left-tab in the user navigation
-
course_navigation[url]
- string
- optional
-
The url of the external tool for course navigation
-
course_navigation[enabled]
- boolean
- optional
-
Set this to enable this feature
-
course_navigation[text]
- string
- optional
-
The text that will show on the left-tab in the course navigation
-
course_navigation[visibility]
- string
- optional
-
Who will see the navigation tab. "admins" for course admins, "members" for students, null for everyone
-
course_navigation[default]
- boolean
- optional
-
Whether the navigation option will show in the course by default or whether the teacher will have to explicitly enable it
-
editor_button[url]
- string
- optional
-
The url of the external tool
-
editor_button[enabled]
- boolean
- optional
-
Set this to enable this feature
-
editor_button[icon_url]
- string
- optional
-
The url of the icon to show in the WYSIWYG editor
-
editor_button[selection_width]
- string
- optional
-
The width of the dialog the tool is launched in
-
editor_button[selection_height]
- string
- optional
-
The height of the dialog the tool is launched in
-
resource_selection[url]
- string
- optional
-
The url of the external tool
-
resource_selection[enabled]
- boolean
- optional
-
Set this to enable this feature
-
resource_selection[icon_url]
- string
- optional
-
The url of the icon to show in the module external tool list
-
resource_selection[selection_width]
- string
- optional
-
The width of the dialog the tool is launched in
-
resource_selection[selection_height]
- string
- optional
-
The height of the dialog the tool is launched in
-
config_type
- string
- optional
-
Configuration can be passed in as CC 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
-
config_xml
- string
- optional
-
XML tool configuration, as specified in the CC xml specification. This is required if "config_type" is set to "by_xml"
-
config_url
- string
- optional
-
URL where the server can retrieve an XML tool configuration, as specified in the CC xml specification. This is required if "config_type" is set to "by_url"
Example Request:
This would create a tool on this course with two custom fields and a course navigation tab curl 'http://<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[default]=false' -F 'course_navigation[enabled]=true'
This would create a tool on the account with navigation for the user profile page curl 'http://<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 'http://<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'
Edit an external tool ExternalToolsController#update
PUT /api/v1/courses/:course_id/external_tools/:external_tool_id
PUT /api/v1/accounts/:account_id/external_tools/:external_tool_id
Update the specified external tool. Uses same parameters as create
Example Request:
This would update the specified keys on this external tool curl 'http://<canvas>/api/v1/courses/<course_id>/external_tools/<external_tool_id>' \ -H "Authorization: Bearer <token>" \ -F 'name=Public Example' \ -F 'privacy_level=public'