openapi: 3.0.3 info: title: Canvas LMS LTI API description: Canvas LTI 1.3 API endpoints including Dynamic Registration, IMS Names and Roles, Line Items, Data Services, and Security endpoints. version: 1.0.0 contact: name: Instructure Support url: https://developerdocs.instructure.com/ email: support@instructure.com license: name: AGPL-3.0 url: https://github.com/instructure/canvas-lms/blob/master/LICENSE servers: - url: https://{canvas_domain} description: Canvas institution domain variables: canvas_domain: default: canvas.instructure.com description: The institution-specific Canvas domain tags: - name: ExternalTool - name: Lti::AccountExternalTool - name: Lti::AccountLookup - name: Lti::DataService - name: Lti::IMS::Authentication - name: Lti::IMS::DynamicRegistration - name: Lti::IMS::LineItem - name: Lti::IMS::NamesAndRole - name: Lti::IMS::Result - name: Lti::MembershipService - name: Lti::ToolConfigurationsApi - name: Security paths: /api/lti/accounts/{account_id}/data_services: get: summary: index tags: - Lti::DataService parameters: - name: account_id in: path required: true schema: type: string example: 8e3650f3-579f-4388-90f0-71b68ee76a79 - name: subscription in: query required: false schema: type: object properties: ContextId: type: string ContextType: type: string EventTypes: type: array items: type: string Format: type: string OwnerId: type: string TransportMetadata: type: object properties: Url: type: string required: - Url TransportType: type: string required: - ContextId - ContextType - EventTypes - Format - OwnerId - TransportMetadata - TransportType example: ContextId: xCoyrm3KhO7W6h8yizdZrujDf9OATC7AnLKe62DN ContextType: root_account EventTypes: - discussion_topic_created Format: live-event OwnerId: '196495' TransportMetadata: Url: sqs.example TransportType: sqs responses: '200': description: returns 200 success content: application/vnd.canvas.dataservices+json: schema: type: string example: '{"ContextId":"xCoyrm3KhO7W6h8yizdZrujDf9OATC7AnLKe62DN","ContextType":"root_account","EventTypes":["discussion_topic_created"],"Format":"live-event","TransportMetadata":{"Url":"sqs.example"},"TransportType":"sqs"}' '401': description: does not return ims mime_type content: application/json: schema: type: object properties: errors: type: object properties: type: type: string message: type: string required: - type - message required: - errors example: errors: type: unauthorized message: Invalid access token format '500': description: adds OwnerId and OwnerType if passed in for a person content: application/json: schema: type: object properties: errors: type: array items: type: object properties: message: type: string error_code: type: string required: - message - error_code error_report_id: type: integer required: - errors - error_report_id example: errors: - message: An error occurred. error_code: internal_server_error error_report_id: 127940 '404': description: raises a 404 content: application/json: schema: type: object properties: errors: type: array items: type: object properties: message: type: string required: - message required: - errors example: errors: - message: The specified resource does not exist. '422': description: raises an unprocessable_entity content: text/html: schema: type: string example: '' /api/lti/accounts/{account_id}/data_services/{id}: get: summary: show tags: - Lti::DataService parameters: - name: account_id in: path required: true schema: type: string example: 71527019-2da4-49e3-b4e3-de2e55f04a85 - name: id in: path required: true schema: type: string example: testid - name: subscription in: query required: false schema: type: object properties: ContextId: type: string ContextType: type: string EventTypes: type: array items: type: string Format: type: string TransportMetadata: type: object properties: Url: type: string required: - Url TransportType: type: string UpdatedBy: type: string required: - ContextId - ContextType - EventTypes - Format - TransportMetadata - TransportType - UpdatedBy example: ContextId: xCoyrm3KhO7W6h8yizdZrujDf9OATC7AnLKe62DN ContextType: root_account EventTypes: - discussion_topic_created Format: live-event TransportMetadata: Url: sqs.example TransportType: sqs UpdatedBy: '196493' responses: '200': description: returns 200 success content: application/vnd.canvas.dataservices+json: schema: type: string example: '{"ContextId":"xCoyrm3KhO7W6h8yizdZrujDf9OATC7AnLKe62DN","ContextType":"root_account","EventTypes":["discussion_topic_created"],"Format":"live-event","TransportMetadata":{"Url":"sqs.example"},"TransportType":"sqs"}' '401': description: does not return ims mime_type content: application/json: schema: type: object properties: errors: type: object properties: type: type: string message: type: string required: - type - message required: - errors example: errors: type: unauthorized message: Invalid access token format '500': description: does not return ims mime_type content: application/json: schema: type: object properties: errors: type: array items: type: object properties: message: type: string error_code: type: string required: - message - error_code error_report_id: type: integer required: - errors - error_report_id example: errors: - message: An error occurred. error_code: internal_server_error error_report_id: 127908 '404': description: raises a 404 content: application/json: schema: type: object properties: errors: type: array items: type: object properties: message: type: string required: - message required: - errors example: errors: - message: The specified resource does not exist. '422': description: raises an unprocessable_entity content: text/html: schema: type: string example: '' /api/lti/accounts/{account_id}: get: summary: show tags: - Lti::AccountLookup parameters: - name: account_id in: path required: true schema: type: integer example: 1987650000000008145 responses: '200': description: returns id, uuid, and other fields on account content: application/vnd.canvas.accountlookup+json: schema: type: object properties: id: type: integer name: type: string workflow_state: type: string parent_account_id: nullable: true root_account_id: nullable: true uuid: type: string default_time_zone: type: string required: - id - name - workflow_state - parent_account_id - root_account_id - uuid - default_time_zone example: id: 8145 name: Default Account workflow_state: active parent_account_id: null root_account_id: null uuid: vYmDAUennzTRV43z1Oo4v0MYaY2pMJ3Dr1GaH3Mn default_time_zone: Etc/UTC '401': description: does not return ims mime_type content: application/json: schema: type: object properties: errors: type: object properties: type: type: string message: type: string required: - type - message required: - errors example: errors: type: unauthorized message: Unknown or inactive Developer Key '500': description: does not return ims mime_type content: application/json: schema: type: object properties: errors: type: array items: type: object properties: message: type: string error_code: type: string required: - message - error_code error_report_id: type: integer required: - errors - error_report_id example: errors: - message: An error occurred. error_code: internal_server_error error_report_id: 127858 '404': description: returns a 404 content: application/json: schema: type: object properties: errors: type: array items: type: object properties: message: type: string required: - message required: - errors example: errors: - message: The specified resource does not exist. /api/lti/accounts/{account_id}/external_tools: get: summary: index tags: - Lti::AccountExternalTool parameters: - name: account_id in: path required: true schema: type: string example: af01ae7a-c877-4297-a581-d63c1a6701de - name: client_id in: query required: false schema: type: string example: bad client id - name: verify_uniqueness in: query required: false schema: type: string example: 'true' responses: '200': description: returns id, domain, and other fields on account content: application/vnd.canvas.contextexternaltools+json: schema: type: array properties: id: type: integer domain: type: string url: type: string consumer_key: type: string name: type: string description: type: string created_at: type: string updated_at: type: string privacy_level: type: string custom_fields: type: object properties: no_expansion: type: string has_expansion: type: string required: - no_expansion - has_expansion workflow_state: type: string account_navigation: type: object properties: enabled: type: boolean text: type: string icon_url: type: string placement: type: string message_type: type: string target_link_uri: type: string canvas_icon_class: type: string label: type: string selection_width: type: integer selection_height: type: integer required: - enabled - text - icon_url - placement - message_type - target_link_uri - canvas_icon_class - label - selection_width - selection_height assignment_edit: nullable: true assignment_group_menu: nullable: true assignment_index_menu: nullable: true assignment_menu: nullable: true assignment_selection: nullable: true assignment_view: nullable: true collaboration: nullable: true course_assignments_menu: nullable: true course_home_sub_navigation: nullable: true course_navigation: type: object properties: enabled: type: boolean text: type: string icon_url: type: string placement: type: string message_type: type: string target_link_uri: type: string canvas_icon_class: type: string label: type: string selection_width: type: integer selection_height: type: integer required: - enabled - text - icon_url - placement - message_type - target_link_uri - canvas_icon_class - label - selection_width - selection_height course_settings_sub_navigation: nullable: true discussion_topic_index_menu: nullable: true discussion_topic_menu: nullable: true file_index_menu: nullable: true file_menu: nullable: true global_navigation: nullable: true homework_submission: nullable: true link_selection: nullable: true migration_selection: nullable: true module_group_menu: nullable: true module_index_menu: nullable: true module_index_menu_modal: nullable: true module_menu_modal: nullable: true module_menu: nullable: true post_grades: nullable: true quiz_index_menu: nullable: true quiz_menu: nullable: true resource_selection: nullable: true similarity_detection: nullable: true student_context_card: nullable: true submission_type_selection: nullable: true tool_configuration: nullable: true user_navigation: nullable: true wiki_index_menu: nullable: true wiki_page_menu: nullable: true editor_button: nullable: true selection_width: type: integer selection_height: type: integer icon_url: type: string not_selectable: type: boolean version: type: string developer_key_id: type: integer deployment_id: type: string required: - id - domain - url - consumer_key - name - description - created_at - updated_at - privacy_level - custom_fields - workflow_state - account_navigation - assignment_edit - assignment_group_menu - assignment_index_menu - assignment_menu - assignment_selection - assignment_view - collaboration - course_assignments_menu - course_home_sub_navigation - course_navigation - course_settings_sub_navigation - discussion_topic_index_menu - discussion_topic_menu - file_index_menu - file_menu - global_navigation - homework_submission - link_selection - migration_selection - module_group_menu - module_index_menu - module_index_menu_modal - module_menu_modal - module_menu - post_grades - quiz_index_menu - quiz_menu - resource_selection - similarity_detection - student_context_card - submission_type_selection - tool_configuration - user_navigation - wiki_index_menu - wiki_page_menu - editor_button - selection_width - selection_height - icon_url - not_selectable - version - developer_key_id - deployment_id items: type: object properties: id: type: integer domain: nullable: true url: type: string consumer_key: type: string name: type: string description: nullable: true created_at: type: string updated_at: type: string privacy_level: type: string custom_fields: nullable: true workflow_state: type: string account_navigation: nullable: true assignment_edit: nullable: true assignment_group_menu: nullable: true assignment_index_menu: nullable: true assignment_menu: nullable: true assignment_selection: nullable: true assignment_view: nullable: true collaboration: nullable: true course_assignments_menu: nullable: true course_home_sub_navigation: nullable: true course_navigation: nullable: true course_settings_sub_navigation: nullable: true discussion_topic_index_menu: nullable: true discussion_topic_menu: nullable: true file_index_menu: nullable: true file_menu: nullable: true global_navigation: nullable: true homework_submission: nullable: true link_selection: nullable: true migration_selection: nullable: true module_group_menu: nullable: true module_index_menu: nullable: true module_index_menu_modal: nullable: true module_menu_modal: nullable: true module_menu: nullable: true post_grades: nullable: true quiz_index_menu: nullable: true quiz_menu: nullable: true resource_selection: nullable: true similarity_detection: nullable: true student_context_card: nullable: true submission_type_selection: nullable: true tool_configuration: nullable: true user_navigation: nullable: true wiki_index_menu: nullable: true wiki_page_menu: nullable: true editor_button: nullable: true not_selectable: type: boolean version: type: string developer_key_id: type: integer deployment_id: type: string required: - id - domain - url - consumer_key - name - description - created_at - updated_at - privacy_level - custom_fields - workflow_state - account_navigation - assignment_edit - assignment_group_menu - assignment_index_menu - assignment_menu - assignment_selection - assignment_view - collaboration - course_assignments_menu - course_home_sub_navigation - course_navigation - course_settings_sub_navigation - discussion_topic_index_menu - discussion_topic_menu - file_index_menu - file_menu - global_navigation - homework_submission - link_selection - migration_selection - module_group_menu - module_index_menu - module_index_menu_modal - module_menu_modal - module_menu - post_grades - quiz_index_menu - quiz_menu - resource_selection - similarity_detection - student_context_card - submission_type_selection - tool_configuration - user_navigation - wiki_index_menu - wiki_page_menu - editor_button - not_selectable - version - developer_key_id - deployment_id example: - id: 407149 domain: null url: http://www.tool.com/launch consumer_key: key name: test tool description: null created_at: '2023-12-15T05:37:54Z' updated_at: '2023-12-15T05:37:54Z' privacy_level: public custom_fields: null workflow_state: public account_navigation: null assignment_edit: null assignment_group_menu: null assignment_index_menu: null assignment_menu: null assignment_selection: null assignment_view: null collaboration: null course_assignments_menu: null course_home_sub_navigation: null course_navigation: null course_settings_sub_navigation: null discussion_topic_index_menu: null discussion_topic_menu: null file_index_menu: null file_menu: null global_navigation: null homework_submission: null link_selection: null migration_selection: null module_group_menu: null module_index_menu: null module_index_menu_modal: null module_menu_modal: null module_menu: null post_grades: null quiz_index_menu: null quiz_menu: null resource_selection: null similarity_detection: null student_context_card: null submission_type_selection: null tool_configuration: null user_navigation: null wiki_index_menu: null wiki_page_menu: null editor_button: null not_selectable: false version: '1.3' developer_key_id: 142141 deployment_id: 407149:af01ae7a-c877-4297-a581-d63c1a6701de '401': description: does not return ims mime_type content: application/json: schema: type: object properties: errors: type: object properties: type: type: string message: type: string required: - type - message required: - errors example: errors: type: unauthorized message: Missing access token text/html: schema: type: string example: '' '500': description: does not return ims mime_type content: application/json: schema: type: object properties: errors: type: array items: type: object properties: message: type: string error_code: type: string required: - message - error_code error_report_id: type: integer required: - errors - error_report_id example: errors: - message: An error occurred. error_code: internal_server_error error_report_id: 127850 '400': description: return 400 content: application/vnd.canvas.contextexternaltools+json: schema: type: object properties: errors: type: object properties: tool_currently_installed: type: array items: type: object properties: attribute: type: string type: type: string message: type: string required: - attribute - type - message required: - tool_currently_installed required: - errors example: errors: tool_currently_installed: - attribute: tool_currently_installed type: The tool is already installed in this context. message: The tool is already installed in this context. '404': description: return 404 content: application/json: schema: type: object properties: errors: type: array items: type: object properties: message: type: string required: - message required: - errors example: errors: - message: The specified resource does not exist. /api/lti/accounts/{account_id}/external_tools/{external_tool_id}: get: summary: show tags: - Lti::AccountExternalTool parameters: - name: account_id in: path required: true schema: type: string example: 37f51bde-5842-4dae-a8e4-4c99ce9e967e - name: external_tool_id in: path required: true schema: type: integer example: 407209 responses: '200': description: returns 200 success content: application/vnd.canvas.contextexternaltools+json: schema: type: object properties: id: type: integer domain: nullable: true url: type: string consumer_key: type: string name: type: string description: nullable: true created_at: type: string updated_at: type: string privacy_level: type: string custom_fields: nullable: true workflow_state: type: string account_navigation: nullable: true assignment_edit: nullable: true assignment_group_menu: nullable: true assignment_index_menu: nullable: true assignment_menu: nullable: true assignment_selection: nullable: true assignment_view: nullable: true collaboration: nullable: true course_assignments_menu: nullable: true course_home_sub_navigation: nullable: true course_navigation: nullable: true course_settings_sub_navigation: nullable: true discussion_topic_index_menu: nullable: true discussion_topic_menu: nullable: true file_index_menu: nullable: true file_menu: nullable: true global_navigation: nullable: true homework_submission: nullable: true link_selection: nullable: true migration_selection: nullable: true module_group_menu: nullable: true module_index_menu: nullable: true module_index_menu_modal: nullable: true module_menu_modal: nullable: true module_menu: nullable: true post_grades: nullable: true quiz_index_menu: nullable: true quiz_menu: nullable: true resource_selection: nullable: true similarity_detection: nullable: true student_context_card: nullable: true submission_type_selection: nullable: true tool_configuration: nullable: true user_navigation: nullable: true wiki_index_menu: nullable: true wiki_page_menu: nullable: true editor_button: nullable: true not_selectable: type: boolean version: type: string developer_key_id: type: integer deployment_id: type: string required: - domain - name - url - consumer_key - description - id - created_at - updated_at - privacy_level - custom_fields - workflow_state - account_navigation - assignment_edit - assignment_group_menu - assignment_index_menu - assignment_menu - assignment_selection - assignment_view - collaboration - course_assignments_menu - course_home_sub_navigation - course_navigation - course_settings_sub_navigation - discussion_topic_index_menu - discussion_topic_menu - file_index_menu - file_menu - global_navigation - homework_submission - link_selection - migration_selection - module_group_menu - module_index_menu - module_index_menu_modal - module_menu_modal - module_menu - post_grades - quiz_index_menu - quiz_menu - resource_selection - similarity_detection - student_context_card - submission_type_selection - tool_configuration - user_navigation - wiki_index_menu - wiki_page_menu - editor_button - not_selectable - version - developer_key_id - deployment_id example: id: 407190 domain: null url: http://www.tool.com/launch consumer_key: key name: test tool description: null created_at: '2023-12-15T05:37:58Z' updated_at: '2023-12-15T05:37:58Z' privacy_level: deleted custom_fields: null workflow_state: deleted account_navigation: null assignment_edit: null assignment_group_menu: null assignment_index_menu: null assignment_menu: null assignment_selection: null assignment_view: null collaboration: null course_assignments_menu: null course_home_sub_navigation: null course_navigation: null course_settings_sub_navigation: null discussion_topic_index_menu: null discussion_topic_menu: null file_index_menu: null file_menu: null global_navigation: null homework_submission: null link_selection: null migration_selection: null module_group_menu: null module_index_menu: null module_index_menu_modal: null module_menu_modal: null module_menu: null post_grades: null quiz_index_menu: null quiz_menu: null resource_selection: null similarity_detection: null student_context_card: null submission_type_selection: null tool_configuration: null user_navigation: null wiki_index_menu: null wiki_page_menu: null editor_button: null not_selectable: false version: '1.3' developer_key_id: 142141 deployment_id: 407190:e77b4d6f-dd33-45b4-945a-4124d3ba646d '500': description: does not return ims mime_type content: application/json: schema: type: object properties: errors: type: array items: type: object properties: message: type: string error_code: type: string required: - message - error_code error_report_id: type: integer required: - errors - error_report_id example: errors: - message: An error occurred. error_code: internal_server_error error_report_id: 127886 '401': description: does not return ims mime_type content: application/json: schema: type: object properties: errors: type: object properties: type: type: string message: type: string required: - type - message required: - errors example: errors: type: unauthorized message: Unknown or inactive Developer Key /api/lti/accounts/{account_id}/developer_keys/tool_configuration: post: summary: create tags: - Lti::ToolConfigurationsApi parameters: - name: account_id in: path required: true schema: type: integer example: 8095 requestBody: content: application/x-www-form-urlencoded: schema: type: object properties: developer_key: type: object properties: email: type: string name: type: string notes: type: string public_jwk_url: type: string redirect_uris: type: string require_scopes: type: string scopes: type: array items: type: string test_cluster_only: type: string required: - email - name - notes - public_jwk_url - require_scopes - scopes - test_cluster_only developer_key_id: type: string tool_configuration: type: object properties: privacy_level: type: string settings: type: object properties: custom_fields: type: object properties: has_expansion: type: string no_expansion: type: string required: - has_expansion - no_expansion description: type: string extensions: type: array items: type: object properties: platform: type: string privacy_level: type: string tool_id: type: string domain: type: string settings: type: object properties: icon_url: type: string selection_height: type: string selection_width: type: string text: type: string placements: type: array items: type: object properties: placement: type: string message_type: type: string canvas_icon_class: type: string icon_url: type: string text: type: string target_link_uri: type: string enabled: type: string required: - placement - message_type - canvas_icon_class - icon_url - text - target_link_uri - enabled required: - icon_url - selection_height - selection_width - text - placements required: - platform - privacy_level - tool_id - domain - settings oidc_initiation_url: type: string public_jwk: type: object properties: alg: type: string e: type: string kid: type: string kty: type: string n: type: string use: type: string required: - alg - e - kid - kty - n - use target_link_uri: type: string title: type: string public_jwk_url: type: string required: - custom_fields - description - extensions - oidc_initiation_url - public_jwk - target_link_uri - title custom_fields: type: string disabled_placements: type: array items: type: string settings_url: type: string required: - privacy_level required: - developer_key - tool_configuration example: developer_key: email: test@test.com name: Test Dev Key notes: Some cool notes public_jwk_url: https://www.test.com redirect_uris: "http://www.test.com\r\nhttp://www.anothertest.com" require_scopes: 'true' scopes: - https://purl.imsglobal.org/spec/lti-ags/scope/lineitem test_cluster_only: 'true' developer_key_id: '142196' tool_configuration: privacy_level: public settings: custom_fields: has_expansion: $Canvas.user.id no_expansion: foo description: 1.3 Tool extensions: - platform: canvas.instructure.com privacy_level: public tool_id: LTI 1.3 Test Tool domain: http://lti13testtool.docker settings: icon_url: https://static.thenounproject.com/png/131630-200.png selection_height: '500' selection_width: '500' text: LTI 1.3 Test Tool Extension text placements: - placement: course_navigation message_type: LtiResourceLinkRequest canvas_icon_class: icon-pdf icon_url: https://static.thenounproject.com/png/131630-211.png text: LTI 1.3 Test Tool Course Navigation target_link_uri: http://lti13testtool.docker/launch?placement=course_navigation enabled: 'true' - placement: account_navigation message_type: LtiResourceLinkRequest canvas_icon_class: icon-lti icon_url: https://static.thenounproject.com/png/131630-211.png target_link_uri: http://lti13testtool.docker/launch?placement=account_navigation text: LTI 1.3 Test Tool Course Navigation enabled: 'true' oidc_initiation_url: http://lti13testtool.docker/blti_launch public_jwk: alg: RS256 e: AQAB kid: '2018-09-18T21:55:18Z' kty: RSA n: 2YGluUtCi62Ww_TWB38OE6wTaN... use: sig target_link_uri: http://lti13testtool.docker/blti_launch title: LTI 1.3 Tool public_jwk_url: https://test.com custom_fields: "foo=bar\r\nkey=value" disabled_placements: - course_navigation - account_navigation settings_url: https://www.mytool.com/config/json responses: '200': description: is expected to be nil content: application/json: schema: type: object properties: tool_configuration: type: object properties: id: type: integer developer_key_id: type: integer settings: type: object properties: custom_fields: type: object properties: has_expansion: type: string no_expansion: type: string foo: type: string key: type: string required: - has_expansion - no_expansion description: type: string extensions: type: array items: type: object properties: platform: type: string privacy_level: type: string tool_id: type: string domain: type: string settings: type: object properties: icon_url: type: string selection_height: type: string selection_width: type: string text: type: string placements: type: array items: type: object properties: placement: type: string message_type: type: string canvas_icon_class: type: string icon_url: type: string text: type: string target_link_uri: type: string enabled: type: string required: - placement - message_type - canvas_icon_class - icon_url - text - target_link_uri - enabled required: - icon_url - selection_height - selection_width - text - placements required: - platform - privacy_level - tool_id - domain - settings oidc_initiation_url: type: string public_jwk: type: object properties: alg: type: string e: type: string kid: type: string kty: type: string n: type: string use: type: string required: - alg - e - kid - kty - n - use target_link_uri: type: string title: type: string scopes: type: array items: {} public_jwk_url: type: string required: - custom_fields - description - extensions - oidc_initiation_url - public_jwk - target_link_uri - title created_at: type: string updated_at: type: string disabled_placements: nullable: true type: array items: type: string privacy_level: type: string required: - id - developer_key_id - settings - created_at - updated_at - disabled_placements - privacy_level developer_key: type: object properties: email: type: string user_name: nullable: true created_at: type: string user_id: nullable: true name: type: string icon_url: nullable: true workflow_state: type: string notes: type: string scopes: type: array items: type: string require_scopes: type: boolean client_credentials_audience: nullable: true api_key: type: string redirect_uri: nullable: true redirect_uris: type: string access_token_count: type: integer last_used_at: nullable: true vendor_code: nullable: true public_jwk: type: object properties: alg: type: string e: type: string kid: type: string kty: type: string n: type: string use: type: string required: - alg - e - kid - kty - n - use public_jwk_url: nullable: true type: string allow_includes: type: boolean developer_key_account_binding: type: object properties: id: type: integer account_id: type: integer developer_key_id: type: integer workflow_state: type: string account_owns_binding: type: boolean required: - id - account_id - developer_key_id - workflow_state - account_owns_binding account_name: type: string visible: type: boolean is_lti_key: type: boolean is_lti_registration: type: boolean id: type: integer required: - email - user_name - created_at - user_id - name - icon_url - workflow_state - notes - scopes - require_scopes - client_credentials_audience - api_key - redirect_uri - redirect_uris - access_token_count - last_used_at - vendor_code - public_jwk - public_jwk_url - allow_includes - developer_key_account_binding - account_name - visible - is_lti_key - is_lti_registration - id required: - tool_configuration - developer_key example: tool_configuration: id: 938667 developer_key_id: 142208 settings: custom_fields: has_expansion: $Canvas.user.id no_expansion: foo foo: bar key: value description: 1.3 Tool extensions: - platform: canvas.instructure.com privacy_level: public tool_id: LTI 1.3 Test Tool domain: http://lti13testtool.docker settings: icon_url: https://static.thenounproject.com/png/131630-200.png selection_height: '500' selection_width: '500' text: LTI 1.3 Test Tool Extension text placements: - placement: course_navigation message_type: LtiResourceLinkRequest canvas_icon_class: icon-pdf icon_url: https://static.thenounproject.com/png/131630-211.png text: LTI 1.3 Test Tool Course Navigation target_link_uri: http://lti13testtool.docker/launch?placement=course_navigation enabled: 'true' - placement: account_navigation message_type: LtiResourceLinkRequest canvas_icon_class: icon-lti icon_url: https://static.thenounproject.com/png/131630-211.png target_link_uri: http://lti13testtool.docker/launch?placement=account_navigation text: LTI 1.3 Test Tool Course Navigation enabled: 'true' oidc_initiation_url: http://lti13testtool.docker/blti_launch public_jwk: alg: RS256 e: AQAB kid: '2018-09-18T21:55:18Z' kty: RSA n: 2YGluUtCi62Ww_TWB38OE6wTaN... use: sig target_link_uri: http://lti13testtool.docker/blti_launch title: LTI 1.3 Tool scopes: [] public_jwk_url: https://test.com created_at: '2023-12-15T05:37:19Z' updated_at: '2023-12-15T05:37:19Z' disabled_placements: null privacy_level: public developer_key: email: test@test.com user_name: null created_at: '2023-12-15T05:37:19Z' user_id: null name: Test Dev Key icon_url: null workflow_state: active notes: Some cool notes scopes: - https://purl.imsglobal.org/spec/lti-ags/scope/lineitem require_scopes: true client_credentials_audience: null api_key: HfrL9VimHfBkRdyeAF64iIjxqXFQrF9gpac3MsmUXHRMzRW5lFuF0y8zY1bfwsVB redirect_uri: null redirect_uris: 'http://www.test.com http://www.anothertest.com' access_token_count: 0 last_used_at: null vendor_code: null public_jwk: alg: RS256 e: AQAB kid: '2018-09-18T21:55:18Z' kty: RSA n: 2YGluUtCi62Ww_TWB38OE6wTaN... use: sig public_jwk_url: null allow_includes: false developer_key_account_binding: id: 1037219 account_id: 8095 developer_key_id: 142208 workflow_state: 'off' account_owns_binding: true account_name: value for name visible: true is_lti_key: true is_lti_registration: false id: 142208 '401': description: is expected to be unauthorized content: text/html: schema: type: string example: '' '400': description: returns a 400 content: application/json: schema: type: object properties: errors: type: array items: type: object properties: message: type: string required: - message required: - errors example: errors: - message: redirect_uris is missing '422': description: is expected to be present content: application/json: schema: type: object properties: errors: type: array items: type: object properties: field: type: string message: type: string error_code: nullable: true required: - field - message - error_code required: - errors example: errors: - field: lti_key message: developer key must have public jwk or public jwk url error_code: null /api/lti/accounts/{account_id}/developer_keys/{developer_key_id}/tool_configuration: get: summary: show tags: - Lti::ToolConfigurationsApi parameters: - name: account_id in: path required: true schema: type: integer example: 8095 - name: developer_key in: query required: false schema: type: object properties: email: type: string name: type: string notes: type: string public_jwk_url: type: string redirect_uris: type: string require_scopes: type: string scopes: type: array items: type: string test_cluster_only: type: string required: - email - name - notes - public_jwk_url - redirect_uris - require_scopes - scopes - test_cluster_only example: email: test@test.com name: Test Dev Key notes: Some cool notes public_jwk_url: https://www.test.com redirect_uris: "http://www.test.com\r\nhttp://www.anothertest.com" require_scopes: 'true' scopes: - https://purl.imsglobal.org/spec/lti-ags/scope/lineitem test_cluster_only: 'true' - name: developer_key_id in: path required: true schema: type: integer example: 142176 responses: '401': description: responds with "unauthorized" content: text/html: schema: type: string example: '' '404': description: is expected to be not found content: text/html: schema: type: string example: '' '200': description: renders the tool configuration content: application/json: schema: type: object properties: tool_configuration: type: object properties: id: type: integer developer_key_id: type: integer settings: type: object properties: title: type: string scopes: type: array items: {} extensions: type: array items: type: object properties: domain: type: string tool_id: type: string platform: type: string settings: type: object properties: text: type: string icon_url: type: string placements: type: array items: type: object properties: text: type: string enabled: type: boolean icon_url: type: string placement: type: string message_type: type: string target_link_uri: type: string canvas_icon_class: type: string required: - text - enabled - icon_url - placement - message_type - target_link_uri - canvas_icon_class selection_width: type: integer selection_height: type: integer required: - text - icon_url - placements - selection_width - selection_height privacy_level: type: string required: - domain - tool_id - platform - settings - privacy_level public_jwk: type: object properties: e: type: string n: type: string alg: type: string kid: type: string kty: type: string use: type: string required: - e - n - alg - kid - kty - use description: type: string custom_fields: type: object properties: no_expansion: type: string has_expansion: type: string required: - no_expansion - has_expansion target_link_uri: type: string oidc_initiation_url: type: string required: - title - scopes - extensions - public_jwk - description - custom_fields - target_link_uri - oidc_initiation_url created_at: type: string updated_at: type: string disabled_placements: type: array items: {} privacy_level: type: string required: - id - developer_key_id - settings - created_at - updated_at - disabled_placements - privacy_level developer_key: type: object properties: email: nullable: true user_name: nullable: true created_at: type: string user_id: nullable: true name: nullable: true icon_url: nullable: true workflow_state: type: string notes: nullable: true scopes: type: array items: {} require_scopes: type: boolean client_credentials_audience: nullable: true api_key: type: string redirect_uri: nullable: true redirect_uris: type: string access_token_count: type: integer last_used_at: nullable: true vendor_code: nullable: true public_jwk: nullable: true public_jwk_url: nullable: true allow_includes: type: boolean developer_key_account_binding: type: object properties: id: type: integer account_id: type: integer developer_key_id: type: integer workflow_state: type: string account_owns_binding: type: boolean required: - id - account_id - developer_key_id - workflow_state - account_owns_binding account_name: type: string visible: type: boolean is_lti_key: type: boolean is_lti_registration: type: boolean id: type: integer required: - email - user_name - created_at - user_id - name - icon_url - workflow_state - notes - scopes - require_scopes - client_credentials_audience - api_key - redirect_uri - redirect_uris - access_token_count - last_used_at - vendor_code - public_jwk - public_jwk_url - allow_includes - developer_key_account_binding - account_name - visible - is_lti_key - is_lti_registration - id required: - tool_configuration - developer_key example: tool_configuration: id: 938648 developer_key_id: 142176 settings: title: LTI 1.3 Tool scopes: [] extensions: - domain: http://lti13testtool.docker tool_id: LTI 1.3 Test Tool platform: canvas.instructure.com settings: text: LTI 1.3 Test Tool Extension text icon_url: https://static.thenounproject.com/png/131630-200.png placements: - text: LTI 1.3 Test Tool Course Navigation enabled: true icon_url: https://static.thenounproject.com/png/131630-211.png placement: course_navigation message_type: LtiResourceLinkRequest target_link_uri: http://lti13testtool.docker/launch?placement=course_navigation canvas_icon_class: icon-pdf - text: LTI 1.3 Test Tool Course Navigation enabled: true icon_url: https://static.thenounproject.com/png/131630-211.png placement: account_navigation message_type: LtiResourceLinkRequest target_link_uri: http://lti13testtool.docker/launch?placement=account_navigation canvas_icon_class: icon-lti selection_width: 500 selection_height: 500 privacy_level: public public_jwk: e: AQAB n: 2YGluUtCi62Ww_TWB38OE6wTaN... alg: RS256 kid: '2018-09-18T21:55:18Z' kty: RSA use: sig description: 1.3 Tool custom_fields: no_expansion: foo has_expansion: $Canvas.user.id target_link_uri: http://lti13testtool.docker/blti_launch oidc_initiation_url: http://lti13testtool.docker/blti_launch created_at: '2023-12-15T05:37:07Z' updated_at: '2023-12-15T05:37:07Z' disabled_placements: [] privacy_level: public developer_key: email: null user_name: null created_at: '2023-12-15T05:37:07Z' user_id: null name: null icon_url: null workflow_state: active notes: null scopes: [] require_scopes: false client_credentials_audience: null api_key: SI3SR1KilXPHrjO2lmsBIRcIYuBAzrRjgvpf2Sagt2IHpn40ISOeJYjBPJwg4R3J redirect_uri: null redirect_uris: '' access_token_count: 0 last_used_at: null vendor_code: null public_jwk: null public_jwk_url: null allow_includes: false developer_key_account_binding: id: 1037187 account_id: 8093 developer_key_id: 142176 workflow_state: 'on' account_owns_binding: true account_name: Default Account visible: true is_lti_key: false is_lti_registration: false id: 142176 /api/lti/authorize_redirect: post: summary: authorize_redirect tags: - Lti::IMS::Authentication responses: '400': description: has a descriptive error message content: application/json: schema: type: object properties: status: type: string message: type: string required: - status - message example: status: bad_request message: Invalid lti_message_hint '302': description: adds authredir=1 content: text/html: schema: type: string example: You are being redirected. requestBody: content: application/x-www-form-urlencoded: schema: type: object properties: client_id: type: string login_hint: type: string lti_message_hint: type: string nonce: type: string prompt: type: string redirect_uri: type: string response_mode: type: string response_type: type: string scope: type: string state: type: string required: - client_id - login_hint - lti_message_hint - nonce - prompt - redirect_uri - response_mode - response_type - scope - state example: client_id: '142150' login_hint: 795eecefbd528f358ed095770c84f55f898835fa lti_message_hint: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ2ZXJpZmllciI6IjYwNGM4YjgyZWYxNzU2ODNmNmFjNTk3MDg0MjE4MzIxNmNjYThjZGIzYTk2ODE5NGQ2YjY4MWYwNWNkNmZjNmJhYzU3NTdiMDEwZmQ0NmNkMWZkMDhiMDQ5MjM2NzdhMTI4ZjQzZWE4ODhhMzE1ZDEzZjViNjBjNjU0MGE0NzA4IiwiY2FudmFzX2RvbWFpbiI6InJlZGlyZWN0Lmluc3RydWN0dXJlLmNvbSIsImNvbnRleHRfaWQiOjgwNTAsImNvbnRleHRfdHlwZSI6IkFjY291bnQiLCJpbmNsdWRlX3N0b3JhZ2VfdGFyZ2V0Ijp0cnVlLCJleHAiOjE3MzQyNDEwMDJ9.gGrGKpiStWPviezA8u-RoOEgUEQImpDNEhp395hXe1I nonce: 9755a712-da0f-49b5-bb8a-e2c9734d5809 prompt: none redirect_uri: https://redirect.tool.com?foo=bar response_mode: form_post response_type: id_token scope: openid state: 260c4430-5641-4a2f-b1be-75e0ca6c1ff9 /api/lti/courses/{course_id}/line_items: get: summary: index tags: - Lti::IMS::LineItem parameters: - name: course_id in: path required: true schema: type: integer example: 880330 - name: endDateTime in: query required: false schema: type: string example: '2023-12-15T05:40:07Z' - name: https://canvas.instructure.com/lti/submission_type in: query required: false schema: type: object properties: external_tool_url: type: string type: type: string required: - external_tool_url - type example: external_tool_url: http://www.tool.com/launch type: external_tool - name: label in: query required: false schema: type: string example: Originality Score - name: resourceId in: query required: false schema: type: string example: orig-123 - name: resourceLinkId in: query required: false schema: type: string example: d46ef8af-a2ce-486d-8891-d3115bff947e - name: scoreMaximum in: query required: false schema: type: integer example: 50 - name: tag in: query required: false schema: type: string example: some_tag - name: resource_id in: query required: false schema: type: string example: orig-123 responses: '401': description: returns 401 unauthorized and complains about missing tool content: application/json: schema: type: object properties: errors: type: object properties: type: type: string message: type: string required: - type - message required: - errors example: errors: type: unauthorized message: Access Token not linked to a Tool associated with this Context '201': description: properly formats the response content: application/vnd.ims.lis.v2.lineitem+json: schema: type: object properties: id: type: string scoreMaximum: type: number format: float label: type: string resourceId: type: string tag: type: string endDateTime: type: string https://canvas.instructure.com/lti/submission_type: type: object properties: type: type: string external_tool_url: type: string required: - type - external_tool_url resourceLinkId: type: string required: - id - scoreMaximum - label - resourceId - tag - endDateTime - resourceLinkId - https://canvas.instructure.com/lti/submission_type example: id: http://test.host/api/lti/courses/880189/line_items/1017691 scoreMaximum: 50.0 label: Originality Score resourceId: orig-123 tag: some_tag endDateTime: '2023-12-15T05:40:07Z' https://canvas.instructure.com/lti/submission_type: type: external_tool external_tool_url: http://www.google.com resourceLinkId: 57427bfe-cb04-412a-9d7c-171bc8111073 '200': description: allows querying by multiple valid fields at the same time content: application/vnd.ims.lis.v2.lineitemcontainer+json: schema: type: array items: type: object properties: id: type: string scoreMaximum: type: number format: float label: type: string resourceId: type: string tag: type: string endDateTime: type: string resourceLinkId: type: string required: - id - scoreMaximum - label - resourceId - tag - endDateTime - resourceLinkId example: - id: http://test.host/api/lti/courses/880203/line_items/1017695 scoreMaximum: 10.0 label: Test Line Item resourceId: orig-123 tag: some_tag - id: http://test.host/api/lti/courses/880193/line_items/1017688 scoreMaximum: 1.5 label: value for title endDateTime: '2023-12-15T05:40:04Z' resourceLinkId: 1a70e093-9f90-4b1d-ba9b-ac4911a624b0 - id: http://test.host/api/lti/courses/880193/line_items/1017689 scoreMaximum: 10.0 label: Test Line Item tag: some_tag - id: http://test.host/api/lti/courses/880193/line_items/1017690 scoreMaximum: 10.0 label: Test Line Item resourceId: orig-123 - id: http://test.host/api/lti/courses/880193/line_items/1017691 scoreMaximum: 10.0 label: Test Line Item resourceLinkId: 1a70e093-9f90-4b1d-ba9b-ac4911a624b0 - id: http://test.host/api/lti/courses/880184/line_items/1017688 scoreMaximum: 1.5 label: value for title endDateTime: '2023-12-15T05:40:04Z' resourceLinkId: 59677abf-4041-496e-8a4c-58f628995348 - id: http://test.host/api/lti/courses/880184/line_items/1017689 scoreMaximum: 10.0 label: Test Line Item tag: some_tag - id: http://test.host/api/lti/courses/880184/line_items/1017690 scoreMaximum: 10.0 label: Test Line Item resourceId: orig-123 - id: http://test.host/api/lti/courses/880184/line_items/1017691 scoreMaximum: 10.0 label: Test Line Item resourceLinkId: 59677abf-4041-496e-8a4c-58f628995348 - id: http://test.host/api/lti/courses/880226/line_items/1017689 scoreMaximum: 10.0 label: Test Line Item tag: some_tag - id: http://test.host/api/lti/courses/880204/line_items/1017689 scoreMaximum: 1.5 label: value for title endDateTime: '2023-12-15T05:40:03Z' resourceLinkId: b040ebc7-b383-4b85-a65b-fe53e84a002e - id: http://test.host/api/lti/courses/880204/line_items/1017690 scoreMaximum: 10.0 label: Test Line Item tag: some_tag - id: http://test.host/api/lti/courses/880204/line_items/1017691 scoreMaximum: 10.0 label: Test Line Item resourceId: orig-123 - id: http://test.host/api/lti/courses/880204/line_items/1017692 scoreMaximum: 10.0 label: Test Line Item resourceLinkId: b040ebc7-b383-4b85-a65b-fe53e84a002e - id: http://test.host/api/lti/courses/880235/line_items/1017689 scoreMaximum: 1.5 label: value for title endDateTime: '2023-12-15T05:40:05Z' resourceLinkId: 7ebd45a3-2c52-4d0b-9a99-6e2002add3c3 - id: http://test.host/api/lti/courses/880235/line_items/1017690 scoreMaximum: 10.0 label: Test Line Item tag: some_tag - id: http://test.host/api/lti/courses/880235/line_items/1017691 scoreMaximum: 10.0 label: Test Line Item resourceId: orig-123 - id: http://test.host/api/lti/courses/880235/line_items/1017692 scoreMaximum: 10.0 label: Test Line Item resourceLinkId: 7ebd45a3-2c52-4d0b-9a99-6e2002add3c3 - id: http://test.host/api/lti/courses/880187/line_items/1017689 scoreMaximum: 1.5 label: value for title endDateTime: '2023-12-15T05:40:00Z' resourceLinkId: 660e0172-c157-4fc4-88f2-2208e1f58fae - id: http://test.host/api/lti/courses/880187/line_items/1017690 scoreMaximum: 10.0 label: Test Line Item tag: some_tag - id: http://test.host/api/lti/courses/880187/line_items/1017691 scoreMaximum: 10.0 label: Test Line Item resourceId: orig-123 - id: http://test.host/api/lti/courses/880187/line_items/1017692 scoreMaximum: 10.0 label: Test Line Item resourceLinkId: 660e0172-c157-4fc4-88f2-2208e1f58fae '500': description: returns 500 not found content: application/json: schema: type: object properties: errors: type: array items: type: object properties: message: type: string error_code: type: string required: - message - error_code error_report_id: type: integer required: - errors - error_report_id example: errors: - message: An error occurred. error_code: internal_server_error error_report_id: 127856 '404': description: does not return ims mime_type content: application/json: schema: type: object properties: {} required: - errors example: {} /api/lti/courses/{course_id}/names_and_roles: get: summary: course_index tags: - Lti::IMS::NamesAndRole parameters: - name: course_id in: path required: true schema: type: integer example: 880160 - name: rlid in: query required: false schema: type: string example: 4301c27b219f264f9dca9566f96a4095 - name: page in: query required: false schema: type: integer example: 2 - name: pass in: query required: false schema: type: string example: thru - name: role in: query required: false schema: type: string example: http://purl.imsglobal.org/vocab/lis/v2/membership#Mentor - name: per_page in: query required: false schema: type: integer example: 2 responses: '200': description: behaves just like a 'normal' NRPS course membership lookup content: application/vnd.ims.lti-nrps.v2.membershipcontainer+json: schema: type: object properties: id: type: string context: type: object properties: id: type: string label: type: string title: type: string required: - id - label - title members: type: array items: type: object properties: status: type: string name: type: string picture: type: string given_name: type: string family_name: type: string user_id: type: string lti11_legacy_user_id: type: string roles: type: array items: type: string message: type: array items: type: object properties: https://purl.imsglobal.org/spec/lti/claim/message_type: type: string locale: type: string https://purl.imsglobal.org/spec/lti/claim/custom: type: object properties: person_name_full: type: string person_name_display: type: string person_name_family: type: string person_name_given: type: string user_image: type: string user_id: type: integer canvas_user_id: type: integer vnd_instructure_user_uuid: type: string canvas_user_globalid: type: integer canvas_user_sissourceid: type: string person_sourced_id: type: string message_locale: type: string vnd_canvas_person_email_sis: type: string person_email_primary: type: string person_address_timezone: type: string user_username: type: string canvas_user_sisintegrationid: type: string canvas_user_loginid: type: string canvas_xapi_url: type: string caliper_url: type: string unsupported_param_1: type: string unsupported_param_2: type: string https://purl.imsglobal.org/spec/lti/claim/lti11_legacy_user_id: type: string https://purl.imsglobal.org/spec/lti/claim/lti1p1: type: object properties: user_id: type: string required: - user_id required: - https://purl.imsglobal.org/spec/lti/claim/message_type - locale - https://purl.imsglobal.org/spec/lti/claim/custom - https://purl.imsglobal.org/spec/lti/claim/lti11_legacy_user_id - https://purl.imsglobal.org/spec/lti/claim/lti1p1 email: type: string lis_person_sourcedid: type: string required: - status - name - picture - given_name - family_name - user_id - lti11_legacy_user_id - roles - message required: - id - context - members example: id: http://test.host/api/lti/courses/880213/names_and_roles?rlid=f282bbe38e6d83524012bb96e0af2f9af9590547 context: id: f282bbe38e6d83524012bb96e0af2f9af9590547 label: Unnamed title: Unnamed Course members: - status: Active name: Marta Perkins picture: http://school.edu/image/url.png given_name: Marta family_name: Perkins email: marta.perkins@school.edu lis_person_sourcedid: user-1-sis-user-id-1 user_id: 27446e34-fd89-42f6-ae6c-bcb32bfa8b9e lti11_legacy_user_id: ea1a3f1f43b49387e308f437b811af5857232c1c roles: - http://purl.imsglobal.org/vocab/lis/v2/membership#Instructor message: - https://purl.imsglobal.org/spec/lti/claim/message_type: LtiResourceLinkRequest locale: de https://purl.imsglobal.org/spec/lti/claim/custom: person_name_full: Marta Perkins person_name_display: Marta Perkins person_name_family: Perkins person_name_given: Marta user_image: http://school.edu/image/url.png user_id: 196739 canvas_user_id: 196739 vnd_instructure_user_uuid: PeD59XLw7mJSXyDSYDdUZrZP2mFljDAQxYqdZnUX canvas_user_globalid: 196739 canvas_user_sissourceid: user-1-sis-user-id-1 person_sourced_id: user-1-sis-user-id-1 message_locale: de vnd_canvas_person_email_sis: sis@example.com person_email_primary: marta.perkins@school.edu person_address_timezone: Europe/Berlin user_username: sis@example.com canvas_user_sisintegrationid: user-1-sis-integration-id-1 canvas_user_loginid: sis@example.com canvas_xapi_url: http://test.host/api/lti/v1/xapi/407087-196739-880184-1702618795-03e11960d048169a-3e3b02fa846a9c5cfdf8ec15c8e4ff52d490b34c caliper_url: http://test.host/api/lti/v1/caliper/407087-196739-880184-1702618795-2d66bc36035c9368-0e14a40cb616910c2d888c1efe4085b3475b1a92 unsupported_param_1: $unsupported.param.1 unsupported_param_2: $unsupported.param.2 https://purl.imsglobal.org/spec/lti/claim/lti11_legacy_user_id: ea1a3f1f43b49387e308f437b811af5857232c1c https://purl.imsglobal.org/spec/lti/claim/lti1p1: user_id: ea1a3f1f43b49387e308f437b811af5857232c1c - status: Active name: User picture: http://localhost/images/messages/avatar-50.png given_name: User family_name: '' user_id: a06077c2-97ad-43e3-b46e-3efa38677e55 lti11_legacy_user_id: 0db0a6bb6567a1305d293e9b456793167fceccbc roles: - http://purl.imsglobal.org/vocab/lis/v2/membership#Learner message: - https://purl.imsglobal.org/spec/lti/claim/message_type: LtiResourceLinkRequest locale: en https://purl.imsglobal.org/spec/lti/claim/custom: {} https://purl.imsglobal.org/spec/lti/claim/lti11_legacy_user_id: 0db0a6bb6567a1305d293e9b456793167fceccbc https://purl.imsglobal.org/spec/lti/claim/lti1p1: user_id: 0db0a6bb6567a1305d293e9b456793167fceccbc '401': description: does not return ims mime_type content: application/json: schema: type: object properties: errors: type: object properties: type: type: string message: type: string required: - type - message required: - errors example: errors: type: unauthorized message: Access Token not linked to a Tool associated with this Context '500': description: returns 500 not found content: application/json: schema: type: object properties: {} required: - errors - error_report_id example: {} '404': description: does not return ims mime_type content: application/json: schema: type: object properties: {} required: - errors example: {} /api/lti/courses/{course_id}/line_items/{line_item_id}/results: get: summary: index tags: - Lti::IMS::Result parameters: - name: course_id in: path required: true schema: type: integer example: 880181 - name: line_item_id in: path required: true schema: type: integer example: 1017686 - name: user_id in: query required: false schema: type: string example: d527abb3-294a-4afa-a204-9737e00aab3e responses: '200': description: returns 200 and finds the tool associated with the access token's developer key, ignoring other the other developer key and its tool content: application/vnd.ims.lis.v2.resultcontainer+json: schema: type: array items: type: object properties: id: type: string scoreOf: type: string userId: type: string resultScore: type: number format: float resultMaximum: type: number format: float required: - id - scoreOf - userId - resultScore - resultMaximum example: - id: http://test.host/api/lti/courses/880195/line_items/1017686/results/1012373 scoreOf: http://test.host/api/lti/courses/880195/line_items/1017686 userId: c5ce1e03-a139-4ef4-b772-f5a940e31baf resultScore: 0.5 resultMaximum: 1.0 - id: http://test.host/api/lti/courses/880195/line_items/1017686/results/1012374 scoreOf: http://test.host/api/lti/courses/880195/line_items/1017686 userId: 0f1250ca-b41c-42a3-a37c-4eff05e1dacb resultScore: 0.5 resultMaximum: 1.0 - id: http://test.host/api/lti/courses/880195/line_items/1017686/results/1012375 scoreOf: http://test.host/api/lti/courses/880195/line_items/1017686 userId: 43238a77-2ecb-4fd4-a87a-e0d18f84af48 resultScore: 0.5 resultMaximum: 1.0 - id: http://test.host/api/lti/courses/880195/line_items/1017686/results/1012376 scoreOf: http://test.host/api/lti/courses/880195/line_items/1017686 userId: 0233ca3d-809c-4511-a243-94cee32fcef1 resultScore: 0.5 resultMaximum: 1.0 - id: http://test.host/api/lti/courses/880205/line_items/1017686/results/1012373 scoreOf: http://test.host/api/lti/courses/880205/line_items/1017686 userId: fa27312e-3ae7-4934-9ec4-f7df8f6bffc2 resultScore: 0.5 resultMaximum: 1.0 - id: http://test.host/api/lti/courses/880205/line_items/1017686/results/1012374 scoreOf: http://test.host/api/lti/courses/880205/line_items/1017686 userId: b294717b-5aa3-413b-a4e2-179a1bc7ee96 resultScore: 0.5 resultMaximum: 1.0 - id: http://test.host/api/lti/courses/880205/line_items/1017686/results/1012375 scoreOf: http://test.host/api/lti/courses/880205/line_items/1017686 userId: 9821aa6b-231c-4c93-8ff0-bb2379fcc7e7 resultScore: 0.5 resultMaximum: 1.0 - id: http://test.host/api/lti/courses/880205/line_items/1017686/results/1012376 scoreOf: http://test.host/api/lti/courses/880205/line_items/1017686 userId: babbc1a9-b2f6-464d-9c6a-ab664179c1bb resultScore: 0.5 resultMaximum: 1.0 - id: http://test.host/api/lti/courses/880146/line_items/1017686/results/1012373 scoreOf: http://test.host/api/lti/courses/880146/line_items/1017686 userId: d527abb3-294a-4afa-a204-9737e00aab3e resultScore: 0.5 resultMaximum: 1.0 '401': description: does not return ims mime_type content: application/json: schema: type: object properties: errors: type: object properties: type: type: string message: type: string required: - type - message required: - errors example: errors: type: unauthorized message: Unknown or inactive Developer Key '404': description: does not return ims mime_type content: application/json: schema: type: object properties: errors: type: array items: type: object properties: message: type: string required: - message properties: type: type: string message: type: string required: - type - message required: - errors example: errors: - message: The specified resource does not exist. /api/lti/courses/{course_id}/line_items/{id}: get: summary: show tags: - Lti::IMS::LineItem parameters: - name: course_id in: path required: true schema: type: integer example: 880199 - name: id in: path required: true schema: type: integer example: 1017689 responses: '401': description: does not return ims mime_type content: application/json: schema: type: object properties: errors: type: object properties: type: type: string message: type: string required: - type - message required: - errors example: errors: type: unauthorized message: Access Token not linked to a Tool associated with this Context '200': description: updates the assignment points_possible content: application/vnd.ims.lis.v2.lineitem+json: schema: type: object properties: id: type: string scoreMaximum: type: number format: float label: type: string endDateTime: type: string resourceLinkId: type: string tag: type: string required: - id - scoreMaximum - label - endDateTime - resourceLinkId example: id: http://test.host/api/lti/courses/880239/line_items/1017694 scoreMaximum: 88.2 label: value for title endDateTime: '2023-12-15T05:40:07Z' resourceLinkId: 0d5efeae-6f80-4d75-bb26-d2998fb105e9 tag: some_tag '404': description: responds with 404 if the course does not exist content: application/json: schema: type: object properties: errors: type: array items: type: object properties: message: type: string required: - message required: - errors example: errors: - message: The specified resource does not exist. '412': description: returns a precondition_failed content: application/json: schema: type: object properties: {} required: - errors example: {} /api/lti/courses/{course_id}/line_items/{line_item_id}/results/{id}: get: summary: show tags: - Lti::IMS::Result parameters: - name: course_id in: path required: true schema: type: integer example: 880250 - name: id in: path required: true schema: type: integer example: 1012374 - name: line_item_id in: path required: true schema: type: integer example: 1017690 responses: '401': description: returns 401 unauthorized and complains about an incorrect signature content: application/json: schema: type: object properties: errors: type: object properties: type: type: string message: type: string required: - type - message required: - errors example: errors: type: unauthorized message: Access token invalid - signature likely incorrect '200': description: returns 200 success content: application/vnd.ims.lis.v2.resultcontainer+json: schema: type: object properties: id: type: string scoreOf: type: string userId: type: string resultScore: type: number format: float resultMaximum: type: number format: float required: - id - scoreOf - userId - resultScore - resultMaximum example: id: http://test.host/api/lti/courses/880227/line_items/1017687/results/1012374 scoreOf: http://test.host/api/lti/courses/880227/line_items/1017687 userId: b03618a7-7b58-461d-a894-7e69c6951270 resultScore: 0.5 resultMaximum: 1.0 /api/lti/courses/{course_id}/jwt_token: get: summary: jwt_token tags: - ExternalTool parameters: - name: course_id in: path required: true schema: type: integer example: 880104 - name: tool_id in: query required: false schema: type: integer example: 407124 - name: tool_launch_url in: query required: false schema: type: string example: http://www.example.com/basic_lti responses: '404': description: sets status code to 404 if the requested tool id does not exist content: application/json: schema: type: object properties: errors: type: array items: type: object properties: message: type: string required: - message required: - errors example: errors: - message: The specified resource does not exist. '200': description: returns the correct JWT token when given using the tool_id param content: application/json: schema: type: object properties: jwt_token: type: string required: - jwt_token example: jwt_token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjb250ZXh0X2lkIjoiZjUwZGE2OTA1YWI3MzBkMzUyMzZlYTgxMDBiY2I2NzQzNGNmMzM3MCIsImNvbnRleHRfbGFiZWwiOiJVbm5hbWVkIiwiY29udGV4dF90aXRsZSI6IkNvdXJzZSBOYW1lIiwiY3VzdG9tX2NhbnZhc19hcGlfZG9tYWluIjoibG9jYWxob3N0IiwiY3VzdG9tX2NhbnZhc19jb3Vyc2VfaWQiOiI4ODAxMDQiLCJjdXN0b21fY2FudmFzX2Vucm9sbG1lbnRfc3RhdGUiOiJhY3RpdmUiLCJjdXN0b21fY2FudmFzX3VzZXJfaWQiOiIxOTY0OTAiLCJjdXN0b21fY2FudmFzX3VzZXJfbG9naW5faWQiOiIkQ2FudmFzLnVzZXIubG9naW5JZCIsImN1c3RvbV9jYW52YXNfd29ya2Zsb3dfc3RhdGUiOiJhdmFpbGFibGUiLCJleHRfcm9sZXMiOiJ1cm46bHRpOmluc3Ryb2xlOmltcy9saXMvSW5zdHJ1Y3Rvcix1cm46bHRpOnJvbGU6aW1zL2xpcy9JbnN0cnVjdG9yLHVybjpsdGk6c3lzcm9sZTppbXMvbGlzL1VzZXIiLCJsYXVuY2hfcHJlc2VudGF0aW9uX2RvY3VtZW50X3RhcmdldCI6ImlmcmFtZSIsImxhdW5jaF9wcmVzZW50YXRpb25fbG9jYWxlIjoiZW4iLCJsYXVuY2hfcHJlc2VudGF0aW9uX3JldHVybl91cmwiOiJodHRwOi8vdGVzdC5ob3N0L2NvdXJzZXMvODgwMTA0IiwibGlzX3BlcnNvbl9jb250YWN0X2VtYWlsX3ByaW1hcnkiOm51bGwsImxpc19wZXJzb25fbmFtZV9mYW1pbHkiOm51bGwsImxpc19wZXJzb25fbmFtZV9mdWxsIjoiVXNlciIsImxpc19wZXJzb25fbmFtZV9naXZlbiI6IlVzZXIiLCJsdGlfbWVzc2FnZV90eXBlIjoiYmFzaWMtbHRpLWxhdW5jaC1yZXF1ZXN0IiwibHRpX3ZlcnNpb24iOiJMVEktMXAwIiwicmVzb3VyY2VfbGlua19pZCI6ImY1MGRhNjkwNWFiNzMwZDM1MjM2ZWE4MTAwYmNiNjc0MzRjZjMzNzAiLCJyZXNvdXJjZV9saW5rX3RpdGxlIjoiYm9iIiwicm9sZXMiOiJJbnN0cnVjdG9yIiwidG9vbF9jb25zdW1lcl9pbmZvX3Byb2R1Y3RfZmFtaWx5X2NvZGUiOiJjYW52YXMiLCJ0b29sX2NvbnN1bWVyX2luZm9fdmVyc2lvbiI6ImNsb3VkIiwidG9vbF9jb25zdW1lcl9pbnN0YW5jZV9jb250YWN0X2VtYWlsIjoibm90aWZpY2F0aW9uc0B1bmtub3duZG9tYWluLmV4YW1wbGUuY29tIiwidG9vbF9jb25zdW1lcl9pbnN0YW5jZV9ndWlkIjoicHVmOFVrdjlWOU5yOXVMR2trdUk5VEFNNFB1Z2dzMTNZdE5la0FFQjpjYW52YXMtbG1zIiwidG9vbF9jb25zdW1lcl9pbnN0YW5jZV9uYW1lIjoiRGVmYXVsdCBBY2NvdW50IiwidXNlcl9pZCI6ImFiOTEyNzZjZTEyOWI0YjAyMTEyZmQwNzQ4YjA1M2MxZTRiZDZlYmQiLCJ1c2VyX2ltYWdlIjoiaHR0cDovL2xvY2FsaG9zdC9pbWFnZXMvbWVzc2FnZXMvYXZhdGFyLTUwLnBuZyIsImNvbnN1bWVyX2tleSI6ImJvYiIsImlhdCI6MTcwMjYxODU2N30.DuT4WnFME5owv8totVjlU307cYsW6zohT81lZt38GS0 /api/lti/developer_keys/{developer_key_id}/tool_configuration: put: summary: update tags: - Lti::ToolConfigurationsApi parameters: - name: developer_key_id in: path required: true schema: type: integer example: 142164 requestBody: content: application/x-www-form-urlencoded: schema: type: object properties: account_id: type: string developer_key: type: object properties: email: type: string name: type: string notes: type: string public_jwk_url: type: string redirect_uris: type: string require_scopes: type: string scopes: type: array items: type: string test_cluster_only: type: string required: - email - name - notes - public_jwk_url - redirect_uris - require_scopes - scopes - test_cluster_only tool_configuration: type: object properties: privacy_level: type: string settings: type: object properties: custom_fields: type: object properties: has_expansion: type: string no_expansion: type: string required: - has_expansion - no_expansion description: type: string extensions: type: array items: type: object properties: platform: type: string privacy_level: type: string tool_id: type: string domain: type: string settings: type: object properties: icon_url: type: string selection_height: type: string selection_width: type: string text: type: string placements: type: array items: type: object properties: placement: type: string message_type: type: string canvas_icon_class: type: string icon_url: type: string text: type: string target_link_uri: type: string enabled: type: string required: - placement - message_type - canvas_icon_class - icon_url - text - target_link_uri - enabled required: - icon_url - selection_height - selection_width - text - placements required: - platform - privacy_level - tool_id - domain - settings oidc_initiation_url: type: string public_jwk: type: object properties: alg: type: string e: type: string kid: type: string kty: type: string n: type: string use: type: string required: - alg - e - kid - kty - n - use target_link_uri: type: string title: type: string public_jwk_url: type: string required: - custom_fields - description - extensions - oidc_initiation_url - public_jwk - target_link_uri - title required: - privacy_level - settings required: - account_id - developer_key - tool_configuration example: account_id: '8095' developer_key: email: test@test.com name: Test Dev Key notes: Some cool notes public_jwk_url: https://www.test.com redirect_uris: "http://www.test.com\r\nhttp://www.anothertest.com" require_scopes: 'true' scopes: - https://purl.imsglobal.org/spec/lti-ags/scope/lineitem test_cluster_only: 'true' tool_configuration: privacy_level: public settings: custom_fields: has_expansion: $Canvas.user.id no_expansion: foo description: 1.3 Tool extensions: - platform: canvas.instructure.com privacy_level: public tool_id: LTI 1.3 Test Tool domain: http://lti13testtool.docker settings: icon_url: https://static.thenounproject.com/png/131630-200.png selection_height: '500' selection_width: '500' text: LTI 1.3 Test Tool Extension text placements: - placement: course_navigation message_type: LtiResourceLinkRequest canvas_icon_class: icon-pdf icon_url: https://static.thenounproject.com/png/131630-211.png text: LTI 1.3 Test Tool Course Navigation target_link_uri: http://lti13testtool.docker/launch?placement=course_navigation enabled: 'true' - placement: account_navigation message_type: LtiResourceLinkRequest canvas_icon_class: icon-lti icon_url: https://static.thenounproject.com/png/131630-211.png target_link_uri: http://lti13testtool.docker/launch?placement=account_navigation text: LTI 1.3 Test Tool Course Navigation enabled: 'true' oidc_initiation_url: http://lti13testtool.docker/blti_launch public_jwk: alg: RS256 e: AQAB kid: '2018-09-18T21:55:18Z' kty: RSA n: 2YGluUtCi62Ww_TWB38OE6wTaN... use: sig target_link_uri: https://www.new-url.com/test title: LTI 1.3 Tool public_jwk_url: https://test.com responses: '200': description: is expected to be ok content: application/json: schema: type: object properties: tool_configuration: type: object properties: developer_key_id: type: integer disabled_placements: nullable: true privacy_level: type: string settings: type: object properties: custom_fields: type: object properties: has_expansion: type: string no_expansion: type: string required: - has_expansion - no_expansion description: type: string extensions: type: array items: type: object properties: platform: type: string privacy_level: type: string tool_id: type: string domain: type: string settings: type: object properties: icon_url: type: string selection_height: type: string selection_width: type: string text: type: string placements: type: array items: type: object properties: placement: type: string message_type: type: string canvas_icon_class: type: string icon_url: type: string text: type: string target_link_uri: type: string enabled: type: string required: - placement - message_type - canvas_icon_class - icon_url - text - target_link_uri - enabled required: - icon_url - selection_height - selection_width - text - placements required: - platform - privacy_level - tool_id - domain - settings oidc_initiation_url: type: string public_jwk: type: object properties: alg: type: string e: type: string kid: type: string kty: type: string n: type: string use: type: string required: - alg - e - kid - kty - n - use target_link_uri: type: string title: type: string public_jwk_url: type: string required: - custom_fields - description - extensions - oidc_initiation_url - public_jwk - target_link_uri - title id: type: integer created_at: type: string updated_at: type: string required: - developer_key_id - disabled_placements - privacy_level - settings - id - created_at - updated_at developer_key: type: object properties: name: type: string email: type: string notes: type: string scopes: type: array items: type: string workflow_state: type: string icon_url: nullable: true require_scopes: type: boolean user_name: nullable: true created_at: type: string user_id: nullable: true client_credentials_audience: nullable: true api_key: type: string redirect_uri: nullable: true redirect_uris: type: string access_token_count: type: integer last_used_at: nullable: true vendor_code: nullable: true public_jwk: type: object properties: alg: type: string e: type: string kid: type: string kty: type: string n: type: string use: type: string required: - alg - e - kid - kty - n - use public_jwk_url: nullable: true type: string allow_includes: type: boolean developer_key_account_binding: type: object properties: id: type: integer account_id: type: integer developer_key_id: type: integer workflow_state: type: string account_owns_binding: type: boolean required: - id - account_id - developer_key_id - workflow_state - account_owns_binding account_name: type: string visible: type: boolean is_lti_key: type: boolean is_lti_registration: type: boolean id: type: integer required: - name - email - notes - scopes - workflow_state - icon_url - require_scopes - user_name - created_at - user_id - client_credentials_audience - api_key - redirect_uri - redirect_uris - access_token_count - last_used_at - vendor_code - public_jwk - public_jwk_url - allow_includes - developer_key_account_binding - account_name - visible - is_lti_key - is_lti_registration - id required: - tool_configuration - developer_key example: tool_configuration: developer_key_id: 142164 disabled_placements: null privacy_level: public settings: custom_fields: has_expansion: $Canvas.user.id no_expansion: foo description: 1.3 Tool extensions: - platform: canvas.instructure.com privacy_level: public tool_id: LTI 1.3 Test Tool domain: http://lti13testtool.docker settings: icon_url: https://static.thenounproject.com/png/131630-200.png selection_height: '500' selection_width: '500' text: LTI 1.3 Test Tool Extension text placements: - placement: course_navigation message_type: LtiResourceLinkRequest canvas_icon_class: icon-pdf icon_url: https://static.thenounproject.com/png/131630-211.png text: LTI 1.3 Test Tool Course Navigation target_link_uri: http://lti13testtool.docker/launch?placement=course_navigation enabled: 'true' - placement: account_navigation message_type: LtiResourceLinkRequest canvas_icon_class: icon-lti icon_url: https://static.thenounproject.com/png/131630-211.png target_link_uri: http://lti13testtool.docker/launch?placement=account_navigation text: LTI 1.3 Test Tool Course Navigation enabled: 'true' oidc_initiation_url: http://lti13testtool.docker/blti_launch public_jwk: alg: RS256 e: AQAB kid: '2018-09-18T21:55:18Z' kty: RSA n: 2YGluUtCi62Ww_TWB38OE6wTaN... use: sig target_link_uri: https://www.new-url.com/test title: LTI 1.3 Tool public_jwk_url: https://test.com id: 938640 created_at: '2023-12-15T05:37:03Z' updated_at: '2023-12-15T05:37:03Z' developer_key: name: Test Dev Key email: test@test.com notes: Some cool notes scopes: - https://purl.imsglobal.org/spec/lti-ags/scope/lineitem workflow_state: active icon_url: null require_scopes: true user_name: null created_at: '2023-12-15T05:37:03Z' user_id: null client_credentials_audience: null api_key: IF3ObkUvFd8zLHu0Qee9bXVIAW2KP9G7RLVjSVXepCKJxAnTWg5gLwNEo6bipLqE redirect_uri: null redirect_uris: 'http://www.test.com http://www.anothertest.com' access_token_count: 0 last_used_at: null vendor_code: null public_jwk: alg: RS256 e: AQAB kid: '2018-09-18T21:55:18Z' kty: RSA n: 2YGluUtCi62Ww_TWB38OE6wTaN... use: sig public_jwk_url: null allow_includes: false developer_key_account_binding: id: 1037175 account_id: 8093 developer_key_id: 142164 workflow_state: 'off' account_owns_binding: true account_name: Default Account visible: true is_lti_key: true is_lti_registration: false id: 142164 '422': description: is expected to be present content: application/json: schema: type: object properties: errors: type: array items: type: object properties: field: type: string message: type: string error_code: nullable: true required: - field - message - error_code required: - errors example: errors: - field: configuration message: 'The following fields are required: kty, e, n, kid, alg, use' error_code: null '401': description: is expected to be unauthorized content: text/html: schema: type: string example: '' '404': description: is expected to be not found content: application/json: schema: type: object properties: errors: type: array items: type: object properties: message: type: string required: - message required: - errors example: errors: - message: The specified resource does not exist. delete: summary: destroy tags: - Lti::ToolConfigurationsApi parameters: - name: developer_key_id in: path required: true schema: type: integer example: 142171 responses: '404': description: is expected to be not found content: application/json: schema: type: object properties: errors: type: array items: type: object properties: message: type: string required: - message required: - errors example: errors: - message: The specified resource does not exist. text/html: schema: type: string example: '' '204': description: is expected to be no content content: ? '' : schema: type: string example: '' '401': description: is expected to be unauthorized content: text/html: schema: type: string example: '' requestBody: content: application/x-www-form-urlencoded: schema: type: object properties: account_id: type: string developer_key: type: object properties: email: type: string name: type: string notes: type: string public_jwk_url: type: string redirect_uris: type: string require_scopes: type: string scopes: type: array items: type: string test_cluster_only: type: string required: - email - name - notes - public_jwk_url - redirect_uris - require_scopes - scopes - test_cluster_only required: - account_id - developer_key example: account_id: '8095' developer_key: email: test@test.com name: Test Dev Key notes: Some cool notes public_jwk_url: https://www.test.com redirect_uris: "http://www.test.com\r\nhttp://www.anothertest.com" require_scopes: 'true' scopes: - https://purl.imsglobal.org/spec/lti-ags/scope/lineitem test_cluster_only: 'true' /api/lti/groups/{group_id}/names_and_roles: get: summary: group_index tags: - Lti::IMS::NamesAndRole parameters: - name: group_id in: path required: true schema: type: integer example: 716163 - name: page in: query required: false schema: type: integer example: 2 - name: pass in: query required: false schema: type: string example: thru - name: per_page in: query required: false schema: type: integer example: 2 - name: rlid in: query required: false schema: type: string example: 194bad1fb03db0e9e2e556629a4ca4f7 - name: role in: query required: false schema: type: string example: http://purl.imsglobal.org/vocab/lis/v2/membership#Manager responses: '200': description: returns all group members content: application/vnd.ims.lti-nrps.v2.membershipcontainer+json: schema: type: object properties: id: type: string context: type: object properties: id: type: string title: type: string required: - id - title members: type: array items: type: object properties: status: type: string name: type: string picture: type: string given_name: type: string family_name: type: string user_id: type: string lti11_legacy_user_id: type: string roles: type: array items: type: string message: type: array items: type: object properties: https://purl.imsglobal.org/spec/lti/claim/message_type: type: string locale: type: string https://purl.imsglobal.org/spec/lti/claim/custom: type: object properties: baz: type: string foo: type: string person_name_full: type: string person_name_display: type: string person_name_family: type: string person_name_given: type: string user_image: type: string user_id: type: integer canvas_user_id: type: integer vnd_instructure_user_uuid: type: string canvas_user_globalid: type: integer canvas_user_sissourceid: type: string person_sourced_id: type: string message_locale: type: string vnd_canvas_person_email_sis: type: string person_email_primary: type: string person_address_timezone: type: string user_username: type: string canvas_user_sisintegrationid: type: string canvas_user_loginid: type: string canvas_xapi_url: type: string caliper_url: type: string unsupported_param_1: type: string unsupported_param_2: type: string required: - person_name_full - person_name_display - person_name_family - person_name_given - user_image - user_id - canvas_user_id - vnd_instructure_user_uuid - canvas_user_globalid - canvas_user_sissourceid - person_sourced_id - message_locale - vnd_canvas_person_email_sis - person_email_primary - person_address_timezone - user_username - canvas_user_sisintegrationid - canvas_user_loginid - canvas_xapi_url - caliper_url - unsupported_param_1 - unsupported_param_2 https://purl.imsglobal.org/spec/lti/claim/lti11_legacy_user_id: type: string https://purl.imsglobal.org/spec/lti/claim/lti1p1: type: object properties: user_id: type: string required: - user_id required: - https://purl.imsglobal.org/spec/lti/claim/message_type - locale - https://purl.imsglobal.org/spec/lti/claim/custom - https://purl.imsglobal.org/spec/lti/claim/lti11_legacy_user_id - https://purl.imsglobal.org/spec/lti/claim/lti1p1 email: type: string lis_person_sourcedid: type: string required: - status - name - picture - given_name - family_name - user_id - lti11_legacy_user_id - roles - message - email - lis_person_sourcedid required: - id - context - members example: id: http://test.host/api/lti/groups/716159/names_and_roles?pass=thru&role=http%3A%2F%2Fpurl.imsglobal.org%2Fvocab%2Flis%2Fv2%2Fmembership%23Member context: id: 43849229e5c886f6aafc5bb36fe4c3b33cb3df17 title: 2xUeyCRQz6yjVTWiI2SyNtbOikAZGRX9SzfIvgrR members: - status: Active name: value for name picture: http://localhost/images/messages/avatar-50.png given_name: value for family_name: name user_id: dfd1f6b6-887d-421a-85bb-f553a6922dbc lti11_legacy_user_id: 245a4bb33da4baab24fa34772e633c9bd4b7177f roles: - http://purl.imsglobal.org/vocab/lis/v2/membership#Member - http://purl.imsglobal.org/vocab/lis/v2/membership#Manager - status: Active name: Marta Perkins picture: http://localhost/images/messages/avatar-50.png given_name: Marta family_name: Perkins user_id: 48f6ef9f-8dfb-42ca-9fd4-6bd23b6c0a07 lti11_legacy_user_id: 6d12dd551c852cb1b5039130b4faa255c8cce75d roles: - http://purl.imsglobal.org/vocab/lis/v2/membership#Member message: - https://purl.imsglobal.org/spec/lti/claim/message_type: LtiResourceLinkRequest locale: en https://purl.imsglobal.org/spec/lti/claim/custom: {} https://purl.imsglobal.org/spec/lti/claim/lti11_legacy_user_id: 6d12dd551c852cb1b5039130b4faa255c8cce75d https://purl.imsglobal.org/spec/lti/claim/lti1p1: user_id: 6d12dd551c852cb1b5039130b4faa255c8cce75d - status: Active name: User picture: http://localhost/images/messages/avatar-50.png given_name: User family_name: '' user_id: 46402316-6175-41d3-9022-d2dffd5f9042 lti11_legacy_user_id: d5bca1b80d33ba6599feb3138ec119454f9dd597 roles: - http://purl.imsglobal.org/vocab/lis/v2/membership#Member - http://purl.imsglobal.org/vocab/lis/v2/membership#Manager message: - https://purl.imsglobal.org/spec/lti/claim/message_type: LtiResourceLinkRequest locale: en https://purl.imsglobal.org/spec/lti/claim/custom: {} https://purl.imsglobal.org/spec/lti/claim/lti11_legacy_user_id: d5bca1b80d33ba6599feb3138ec119454f9dd597 https://purl.imsglobal.org/spec/lti/claim/lti1p1: user_id: d5bca1b80d33ba6599feb3138ec119454f9dd597 '401': description: returns 401 unauthorized and complains about missing assertions content: application/json: schema: type: object properties: errors: type: object properties: type: type: string message: type: string required: - type - message required: - errors example: errors: type: unauthorized message: 'Invalid access token field/s: the following assertions are missing: sub,aud,exp,iat,jti,iss' '400': description: returns a 400 bad_request and descriptive error message content: application/json: schema: type: object properties: errors: type: object properties: type: type: string message: type: string required: - type - message required: - errors example: errors: type: bad_request message: Invalid 'rlid' parameter '500': description: returns 500 not found content: application/json: schema: type: object properties: errors: type: array items: type: object properties: message: type: string error_code: type: string required: - message - error_code error_report_id: type: integer required: - errors - error_report_id example: errors: - message: An error occurred. error_code: internal_server_error error_report_id: 127858 '404': description: returns 404 not found content: application/json: schema: type: object properties: errors: type: array items: type: object properties: message: type: string required: - message required: - errors example: {} /api/lti/groups/{group_id}/membership_service: get: summary: group_index tags: - Lti::MembershipService parameters: - name: group_id in: path required: true schema: type: integer example: 716160 - name: page in: query required: false schema: type: integer example: 2 - name: per_page in: query required: false schema: type: integer example: 1 - name: role in: query required: false schema: type: string example: Instructor responses: '200': description: outputs the expected data in the expected format at the top level content: application/json: schema: type: object properties: '@id': nullable: true '@type': type: string '@context': type: string differences: nullable: true nextPage: type: string nullable: true pageOf: type: object properties: membershipPredicate: type: string membershipSubject: type: object properties: '@id': nullable: true name: type: string '@type': type: string contextId: type: string membership: type: array items: type: object properties: '@id': nullable: true status: type: string role: type: array items: type: string member: type: object properties: '@id': nullable: true name: type: string img: nullable: true email: type: string nullable: true familyName: type: string givenName: type: string resultSourcedId: nullable: true sourcedId: nullable: true userId: type: string required: - '@id' - name - img - email - familyName - givenName - resultSourcedId - sourcedId - userId required: - '@id' - status - role - member required: - '@id' - name - '@type' - contextId - membership '@id': nullable: true '@context': type: string '@type': type: string required: - membershipPredicate - membershipSubject - '@id' - '@context' - '@type' required: - '@id' - '@type' - '@context' - differences - nextPage - pageOf example: '@id': null '@type': Page '@context': http://purl.imsglobal.org/ctx/lis/v2/MembershipContainer differences: null nextPage: null pageOf: membershipPredicate: http://www.w3.org/ns/org#membership membershipSubject: '@id': null name: Group 1 '@type': Context contextId: 43849229e5c886f6aafc5bb36fe4c3b33cb3df17 membership: - '@id': null status: Active role: - urn:lti:role:ims/lis/Member member: '@id': null name: value for name img: null email: nobody@example.com familyName: name givenName: value for resultSourcedId: null sourcedId: null userId: f911f4d388aeff99d2c123bc20a157eff4ef0430 '@id': null '@context': http://purl.imsglobal.org/ctx/lis/v2/MembershipContainer '@type': LISMembershipContainer '401': description: requires a user content: text/html: schema: type: string example: '' application/json: schema: type: object properties: errors: type: array items: type: object properties: message: type: string required: - message required: - errors example: errors: - message: Invalid access token. /api/lti/register: get: summary: redirect_to_tool_registration tags: - Lti::IMS::DynamicRegistration parameters: - name: registration_url in: query required: false schema: type: string example: https://example.com responses: '302': description: supports multiple subdomains in the oidc url content: text/html: schema: type: string example: You are being redirected. '404': description: returns a 404 content: text/html: schema: type: string example: '' /api/lti/registration_token: get: summary: registration_token tags: - Lti::IMS::DynamicRegistration responses: '200': description: returns a 200 content: application/json: schema: type: object properties: uuid: type: string oidc_configuration_url: type: string token: type: string required: - uuid - oidc_configuration_url - token example: uuid: 0d3f7978-8635-44dd-aec1-8a63f7520c8f oidc_configuration_url: https://canvas.instructure.com/api/lti/security/openid-configuration token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1dWlkIjoiMGQzZjc5NzgtODYzNS00NGRkLWFlYzEtOGE2M2Y3NTIwYzhmIiwiaW5pdGlhdGVkX2F0IjoiMjAyMy0xMi0zMVQwNDo1MTo1NyswMDowMCIsInVzZXJfaWQiOjE4NDksInJvb3RfYWNjb3VudF9nbG9iYWxfaWQiOjIwMDAwMDAwMDAwMzA3MywiZXhwIjoxNzA0MDAxOTE3fQ.Q_JjbjAYQZTkacPq64y2qa3PqCCrQhTEKp25RAyNy34 /api/lti/registrations: post: summary: create tags: - Lti::IMS::DynamicRegistration responses: '401': description: returns a 401 content: application/json: schema: type: object properties: errors: type: array items: type: object properties: message: type: string error_code: type: string required: - message - error_code required: - errors example: errors: - message: An error occurred. error_code: unauthorized '200': description: fills in values on the developer key content: application/json: schema: type: object properties: client_id: type: string application_type: type: string grant_types: type: array items: type: string initiate_login_uri: type: string redirect_uris: type: array items: type: string response_types: type: array items: type: string client_name: type: string jwks_uri: type: string token_endpoint_auth_method: type: string scope: type: string https://purl.imsglobal.org/spec/lti-tool-configuration: type: object properties: domain: type: string messages: type: array items: type: object properties: type: type: string target_link_uri: type: string label: type: string icon_uri: type: string custom_parameters: type: object properties: foo: type: string required: - foo roles: type: array items: type: string placements: type: array items: type: string required: - type - target_link_uri - label - icon_uri - custom_parameters - roles - placements claims: type: array items: type: string target_link_uri: type: string required: - domain - messages - claims - target_link_uri required: - client_id - application_type - grant_types - initiate_login_uri - redirect_uris - response_types - client_name - jwks_uri - token_endpoint_auth_method - scope - https://purl.imsglobal.org/spec/lti-tool-configuration example: client_id: '941' application_type: web grant_types: - client_credentials - implicit initiate_login_uri: https://example.com/login redirect_uris: - https://example.com/launch response_types: - id_token client_name: the client name jwks_uri: https://example.com/api/jwks token_endpoint_auth_method: private_key_jwt scope: https://purl.imsglobal.org/spec/lti-nrps/scope/contextmembership.readonly https://purl.imsglobal.org/spec/lti-ags/scope/score https://purl.imsglobal.org/spec/lti/scope/noticehandlers https://purl.imsglobal.org/spec/lti-tool-configuration: domain: example.com messages: - type: LtiResourceLinkRequest target_link_uri: https://example.com/launch label: deep link label icon_uri: https://example.com/icon.jpg custom_parameters: foo: bar roles: - http://purl.imsglobal.org/vocab/lis/v2/membership#ContentDeveloper - http://purl.imsglobal.org/vocab/lis/v2/membership#Instructor placements: - course_navigation claims: - iss - sub target_link_uri: https://example.com/launch '422': description: returns a 422 with validation errors content: application/json: schema: type: object properties: errors: type: array items: type: object properties: field: type: string message: type: string error_code: nullable: true required: - field - message - error_code required: - errors example: errors: - field: grant_types message: Must include client_credentials, implicit error_code: null requestBody: content: application/x-www-form-urlencoded: schema: type: object properties: application_type: type: string client_name: type: string grant_types: type: array items: type: string https://purl.imsglobal.org/spec/lti-tool-configuration: type: object properties: claims: type: array items: type: string domain: type: string messages: type: array items: type: object properties: type: type: string label: type: string placements: type: array items: type: string target_link_uri: type: string custom_parameters: type: object properties: foo: type: string required: - foo roles: type: array items: type: string icon_uri: type: string required: - type - label - placements - target_link_uri - custom_parameters - roles - icon_uri target_link_uri: type: string required: - claims - domain - messages - target_link_uri initiate_login_uri: type: string jwks_uri: type: string redirect_uris: type: array items: type: string registration_token: type: string response_types: type: array items: type: string scope: type: string token_endpoint_auth_method: type: string required: - application_type - client_name - grant_types - https://purl.imsglobal.org/spec/lti-tool-configuration - initiate_login_uri - jwks_uri - redirect_uris - registration_token - response_types - scope - token_endpoint_auth_method example: application_type: web client_name: the client name grant_types: - client_credentials - implicit https://purl.imsglobal.org/spec/lti-tool-configuration: claims: - iss - sub domain: example.com messages: - type: LtiResourceLinkRequest label: deep link label placements: - course_navigation target_link_uri: https://example.com/launch custom_parameters: foo: bar roles: - http://purl.imsglobal.org/vocab/lis/v2/membership#ContentDeveloper - http://purl.imsglobal.org/vocab/lis/v2/membership#Instructor icon_uri: https://example.com/icon.jpg target_link_uri: https://example.com/launch initiate_login_uri: https://example.com/login jwks_uri: https://example.com/api/jwks redirect_uris: - https://example.com/launch registration_token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxNzY4LCJpbml0aWF0ZWRfYXQiOiIyMDIzLTEyLTE1VDAyOjM5OjM3WiIsInJvb3RfYWNjb3VudF9nbG9iYWxfaWQiOjAsInV1aWQiOiIzN2ExN2E2NC03ODlhLTQ5NGYtYjFjNy1lNjllN2I3ZjRlNzIiLCJleHAiOjE3MDI2MTE2Mzd9.Q9mhBLdBY8gXf_cQxB2RYOoPk6_a47gqNLpUXjVnFcc response_types: - id_token scope: https://purl.imsglobal.org/spec/lti-nrps/scope/contextmembership.readonly https://purl.imsglobal.org/spec/lti-ags/scope/score https://purl.imsglobal.org/spec/lti/scope/noticehandlers token_endpoint_auth_method: private_key_jwt /api/lti/security/jwks: get: summary: jwks tags: - Security responses: '200': description: returns whether each key is from the current month content: application/json: schema: type: array properties: keys: type: array items: type: object properties: kty: type: string e: type: string n: type: string kid: type: string alg: type: string use: type: string required: - kty - e - n - kid - alg - use required: - keys items: type: string example: - today is day 15 and key 0 is not from this month - today is day 15 and key 1 is from this month - today is day 15 and key 2 is not from this month parameters: - name: rotation_check in: query required: false schema: type: integer example: 1 /api/lti/security/openid-configuration: get: summary: openid_configuration tags: - Security parameters: - name: registration_token in: query required: false schema: type: string example: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJyb290X2FjY291bnRfZ2xvYmFsX2lkIjo4MTI0LCJleHAiOjE3MDI2MTkwMTd9.r67qwILzqa5w14gpAbwZOopmt7ZZuPoJrcVE1vgphp8 responses: '200': description: contains the correct information content: application/json: schema: type: object properties: issuer: type: string authorization_endpoint: type: string registration_endpoint: type: string jwks_uri: type: string token_endpoint: type: string token_endpoint_auth_methods_supported: type: array items: type: string token_endpoint_auth_signing_alg_values_supported: type: array items: type: string scopes_supported: type: array items: type: string response_types_supported: type: array items: type: string id_token_signing_alg_values_supported: type: array items: type: string claims_supported: type: array items: type: string subject_types_supported: type: array items: type: string authorization_server: type: string https://purl.imsglobal.org/spec/lti-platform-configuration: type: object properties: product_family_code: type: string version: type: string messages_supported: type: array items: type: object properties: type: type: string placements: type: array items: type: string required: - type - placements variables: type: array items: type: string https://canvas.instructure.com/lti/account_name: type: string https://canvas.instructure.com/lti/account_lti_guid: type: string required: - product_family_code - version - messages_supported - variables - https://canvas.instructure.com/lti/account_name - https://canvas.instructure.com/lti/account_lti_guid required: - issuer - authorization_endpoint - registration_endpoint - jwks_uri - token_endpoint - token_endpoint_auth_methods_supported - token_endpoint_auth_signing_alg_values_supported - scopes_supported - response_types_supported - id_token_signing_alg_values_supported - claims_supported - subject_types_supported - authorization_server - https://purl.imsglobal.org/spec/lti-platform-configuration example: issuer: https://canvas.instructure.com authorization_endpoint: http://canvas.instructure.com/api/lti/authorize_redirect registration_endpoint: http://localhost/api/lti/registrations jwks_uri: http://canvas.instructure.com/login/oauth2/jwks token_endpoint: http://canvas.instructure.com/login/oauth2/token token_endpoint_auth_methods_supported: - private_key_jwt token_endpoint_auth_signing_alg_values_supported: - RS256 scopes_supported: - https://purl.imsglobal.org/spec/lti-ags/scope/lineitem - https://purl.imsglobal.org/spec/lti-ags/scope/lineitem.readonly - https://purl.imsglobal.org/spec/lti-ags/scope/result.readonly - https://purl.imsglobal.org/spec/lti-ags/scope/score - https://purl.imsglobal.org/spec/lti/scope/noticehandlers - https://purl.imsglobal.org/spec/lti-nrps/scope/contextmembership.readonly - https://canvas.instructure.com/lti/public_jwk/scope/update - https://canvas.instructure.com/lti/account_lookup/scope/show - https://canvas.instructure.com/lti-ags/progress/scope/show response_types_supported: - id_token id_token_signing_alg_values_supported: - RS256 claims_supported: - sub - picture - email - name - given_name - family_name - locale subject_types_supported: - public authorization_server: canvas.instructure.com https://purl.imsglobal.org/spec/lti-platform-configuration: product_family_code: canvas version: vCloud messages_supported: - type: LtiResourceLinkRequest placements: - account_navigation - assignment_edit - assignment_group_menu - assignment_index_menu - assignment_menu - assignment_selection - assignment_view - collaboration - conference_selection - course_assignments_menu - course_home_sub_navigation - course_navigation - course_settings_sub_navigation - discussion_topic_index_menu - discussion_topic_menu - file_index_menu - file_menu - global_navigation - homework_submission - link_selection - migration_selection - module_group_menu - module_index_menu - module_index_menu_modal - module_menu_modal - module_menu - post_grades - quiz_index_menu - quiz_menu - similarity_detection - student_context_card - submission_type_selection - tool_configuration - user_navigation - wiki_index_menu - wiki_page_menu - type: LtiDeepLinkingRequest placements: - assignment_selection - collaboration - conference_selection - course_assignments_menu - editor_button - homework_submission - link_selection - migration_selection - module_index_menu_modal - module_menu_modal - submission_type_selection variables: - ResourceLink.id - ResourceLink.description - ResourceLink.title - ResourceLink.available.startDateTime - ResourceLink.available.endDateTime - ResourceLink.submission.endDateTime - com.instructure.User.observees - com.instructure.User.sectionNames - com.instructure.RCS.app_host - com.instructure.RCS.service_jwt - com.instructure.instui_nav - com.instructure.Observee.sisIds - Context.title - com.instructure.Editor.contents - com.instructure.Editor.selection - com.instructure.PostMessageToken - com.instructure.Assignment.lti.id - com.instructure.Assignment.description - com.instructure.Assignment.allowedFileExtensions - com.instructure.OriginalityReport.id - com.instructure.Submission.id - com.instructure.File.id - CourseOffering.sourcedId - Context.id - com.instructure.Context.globalId - Context.sourcedId - Context.id.history - Message.documentTarget - Message.locale - ToolConsumerInstance.guid - Canvas.api.domain - Canvas.api.collaborationMembers.url - Canvas.api.baseUrl - ToolProxyBinding.memberships.url - Canvas.account.id - Canvas.account.name - Canvas.account.sisSourceId - Canvas.rootAccount.id - Canvas.rootAccount.sisSourceId - Canvas.externalTool.global_id - Canvas.externalTool.url - com.instructure.brandConfigJSON.url - com.instructure.brandConfigJSON - com.instructure.brandConfigJS.url - Canvas.css.common - Canvas.shard.id - Canvas.root_account.global_id - Canvas.root_account.id - vnd.Canvas.root_account.uuid - Canvas.root_account.sisSourceId - Canvas.course.id - vnd.instructure.Course.uuid - Canvas.course.name - Canvas.course.sisSourceId - com.instructure.Course.integrationId - Canvas.course.startAt - Canvas.course.endAt - Canvas.course.workflowState - Canvas.course.hideDistributionGraphs - Canvas.course.gradePassbackSetting - Canvas.term.startAt - Canvas.term.endAt - Canvas.term.name - CourseSection.sourcedId - Canvas.enrollment.enrollmentState - com.instructure.Assignment.anonymous_grading - com.instructure.Assignment.restrict_quantitative_data - com.instructure.Course.gradingScheme - com.Instructure.membership.roles - Canvas.membership.roles - Canvas.membership.concludedRoles - Canvas.membership.permissions<> - Canvas.course.previousContextIds - Canvas.course.previousContextIds.recursive - Canvas.course.previousCourseIds - Person.name.full - Person.name.display - Person.name.family - Person.name.given - com.instructure.Person.name_sortable - Person.email.primary - com.instructure.Person.pronouns - vnd.Canvas.Person.email.sis - Person.address.timezone - User.image - User.id - Canvas.user.id - vnd.instructure.User.uuid - vnd.instructure.User.current_uuid - Canvas.user.prefersHighContrast - com.instructure.Course.groupIds - Canvas.group.contextIds - Membership.role - Canvas.xuser.allRoles - com.instructure.User.allRoles - Canvas.user.globalId - Canvas.user.isRootAccountAdmin - Canvas.user.adminableAccounts - User.username - Canvas.user.loginId - Canvas.user.sisSourceId - Canvas.user.sisIntegrationId - Person.sourcedId - Canvas.logoutService.url - Canvas.masqueradingUser.id - Canvas.masqueradingUser.userId - Canvas.xapi.url - Caliper.url - Canvas.course.sectionIds - Canvas.course.sectionRestricted - Canvas.course.sectionSisSourceIds - com.instructure.contextLabel - Canvas.module.id - Canvas.moduleItem.id - Canvas.assignment.id - Canvas.assignment.description - com.instructure.Group.id - com.instructure.Group.name - Canvas.assignment.title - Canvas.assignment.pointsPossible - Canvas.assignment.unlockAt - Canvas.assignment.lockAt - Canvas.assignment.dueAt - Canvas.assignment.unlockAt.iso8601 - Canvas.assignment.lockAt.iso8601 - Canvas.assignment.dueAt.iso8601 - Canvas.assignment.earliestEnrollmentDueAt.iso8601 - Canvas.assignment.allDueAts.iso8601 - Canvas.assignment.published - Canvas.assignment.lockdownEnabled - Canvas.assignment.allowedAttempts - Canvas.assignment.submission.studentAttempts - LtiLink.custom.url - ToolProxyBinding.custom.url - ToolProxy.custom.url - ToolConsumerProfile.url - vnd.Canvas.OriginalityReport.url - vnd.Canvas.submission.url - vnd.Canvas.submission.history.url - Canvas.file.media.id - Canvas.file.media.type - Canvas.file.media.duration - Canvas.file.media.size - Canvas.file.media.title - Canvas.file.usageRights.name - Canvas.file.usageRights.url - Canvas.file.usageRights.copyrightText - com.instructure.Course.accept_canvas_resource_types - com.instructure.Course.canvas_resource_type - com.instructure.Course.allow_canvas_resource_selection - com.instructure.Course.available_canvas_resources - com.instructure.Account.usage_metrics_enabled - Canvas.environment.test https://canvas.instructure.com/lti/account_name: Default Account https://canvas.instructure.com/lti/account_lti_guid: JXBxpVe9M3CG080A1FZNYCpsejKZaZjCS1nMKNx4:canvas-lms '401': description: rejects timed-out tokens content: application/json: schema: type: object properties: errors: type: array items: type: object properties: message: type: string error_code: type: string required: - message - error_code required: - errors example: errors: - message: An error occurred. error_code: unauthorized components: securitySchemes: oauth2: type: oauth2 description: OAuth 2.0 authentication flows: authorizationCode: authorizationUrl: https://{canvas_domain}/login/oauth2/auth tokenUrl: https://{canvas_domain}/login/oauth2/token scopes: {} bearerAuth: type: http scheme: bearer description: Bearer token (access token)