### LTI Tool Configuration Example Source: https://www.imsglobal.org/spec/lti-dr/latest/index An example of a tool's dynamic registration request body, specifying application details, URIs, and LTI-specific configurations. ```APIDOC ## Non normative example: LTI Tool Configuration ### Description This example demonstrates the structure of a tool's registration request when using the LTI Open ID Connect Dynamic Registration Protocol. ### Method POST ### Endpoint /connect/register ### Parameters #### Request Body - **application_type** (string) - Required - Indicates the type of the client application (e.g., "web"). - **response_types** (array of strings) - Required - Specifies the OAuth 2.0 response types supported by the client (e.g., ["id_token"]). - **grant_types** (array of strings) - Required - Specifies the OAuth 2.0 grant types supported by the client (e.g., ["implict", "client_credentials"]). - **initiate_login_uri** (string) - Optional - The URI used by the client to initiate login. - **redirect_uris** (array of strings) - Required - A list of valid redirect URIs for the client. - **client_name** (string) - Required - The human-readable name of the client. - **client_name#ja** (string) - Optional - The human-readable name of the client in Japanese. - **jwks_uri** (string) - Required - The URI of the client's JSON Web Key Set (JWKS). - **logo_uri** (string) - Optional - A URI for the client's logo. - **client_uri** (string) - Optional - A URI for the client's home page. - **client_uri#ja** (string) - Optional - A URI for the client's home page in Japanese. - **policy_uri** (string) - Optional - A URI for the client's privacy policy. - **policy_uri#ja** (string) - Optional - A URI for the client's privacy policy in Japanese. - **tos_uri** (string) - Optional - A URI for the client's terms of service. - **tos_uri#ja** (string) - Optional - A URI for the client's terms of service in Japanese. - **token_endpoint_auth_method** (string) - Optional - The authentication method for the token endpoint. - **contacts** (array of strings) - Optional - A list of email addresses for contact persons. - **scope** (string) - Optional - The scope granted to the client. - **https://purl.imsglobal.org/spec/lti-tool-configuration** (object) - Optional - LTI specific tool configuration. - **domain** (string) - Required - The domain name of the tool. - **description** (string) - Optional - A description of the tool. - **description#ja** (string) - Optional - A description of the tool in Japanese. - **target_link_uri** (string) - Required - The URI that the platform will launch the tool to. - **custom_parameters** (object) - Optional - Custom parameters to be included in launch requests. - **claims** (array of strings) - Optional - Claims that the tool requests from the platform. - **messages** (array of objects) - Optional - Supported LTI messages. - **type** (string) - Required - The type of LTI message. - **target_link_uri** (string) - Optional - The target URI for the message. - **label** (string) - Required - The label for the message. - **label#ja** (string) - Optional - The label for the message in Japanese. - **custom_parameters** (object) - Optional - Custom parameters for the message. - **placements** (array of strings) - Optional - The placements where the message can be used. - **roles** (array of strings) - Optional - The roles that can use this message. - **supported_types** (array of strings) - Optional - The supported types for the message. - **supported_media_types** (array of strings) - Optional - The supported media types for the message. ### Request Example ```json { "application_type": "web", "response_types": ["id_token"], "grant_types": ["implict", "client_credentials"], "initiate_login_uri": "https://client.example.org/lti", "redirect_uris": ["https://client.example.org/callback", "https://client.example.org/callback2"], "client_name": "Virtual Garden", "client_name#ja": "バーチャルガーデン", "jwks_uri": "https://client.example.org/.well-known/jwks.json", "logo_uri": "https://client.example.org/logo.png", "client_uri": "https://client.example.org", "client_uri#ja": "https://client.example.org?lang=ja", "policy_uri": "https://client.example.org/privacy", "policy_uri#ja": "https://client.example.org/privacy?lang=ja", "tos_uri": "https://client.example.org/tos", "tos_uri#ja": "https://client.example.org/tos?lang=ja", "token_endpoint_auth_method": "private_key_jwt", "contacts": ["ve7jtb@example.org", "mary@example.org"], "scope": "https://purl.imsglobal.org/spec/lti-ags/scope/score", "https://purl.imsglobal.org/spec/lti-tool-configuration": { "domain": "client.example.org", "description": "Learn Botany by tending to your little (virtual) garden.", "description#ja": "小さな(仮想)庭に行くことで植物学を学びましょう。", "target_link_uri": "https://client.example.org/lti", "custom_parameters": { "context_history": "$Context.id.history" }, "claims": ["iss", "sub", "name", "given_name", "family_name"], "messages": [ { "type": "LtiDeepLinkingRequest", "target_link_uri": "https://client.example.org/lti/dl", "label": "Add a virtual garden", "label#ja": "バーチャルガーデンを追加する", "custom_parameters": { "botanical_set":"12943,49023,50013" }, "placements": ["ContentArea"], "supported_types": ["ltiResourceLink"] }, { "type": "LtiDeepLinkingRequest", "label": "Add your Garden image", "label#ja": "あなたの庭を選んでください", "placements": ["RichTextEditor"], "roles": [ "http://purl.imsglobal.org/vocab/lis/v2/membership#ContentDeveloper", "http://purl.imsglobal.org/vocab/lis/v2/membership#Instructor" ], "supported_types": ["file"], "supported_media_types": ["image/*"] } ] } } ``` ``` -------------------------------- ### LTI Successful Client Registration Response Example (JSON) Source: https://www.imsglobal.org/spec/lti-dr/latest/spec/lti-dr/v1p0 This example shows a successful LTI client registration response from the platform. It includes the `client_id`, registration endpoints, and echoes the client configuration, which may be adjusted based on platform capabilities. ```json { "client_id": "709sdfnjkds12", "registration_client_uri": "https://server.example.com/connect/register?client_id=709sdfnjkds12", "registration_access_token": "iDPzMyKHMX_4CkTpwLDCK", "application_type": "web", "response_types": ["id_token"], "grant_types": ["implict", "client_credentials"], "initiate_login_uri": "https://client.example.org/lti", "redirect_uris": ["https://client.example.org/callback", "https://client.example.org/callback2"], "client_name": "Virtual Garden", "jwks_uri": "https://client.example.org/.well-known/jwks.json", "logo_uri": "https://client.example.org/logo.png", "token_endpoint_auth_method": "private_key_jwt", "contacts": ["ve7jtb@example.org", "mary@example.org"], "scope": "https://purl.imsglobal.org/spec/lti-ags/scope/score", "https://purl.imsglobal.org/spec/lti-tool-configuration": { "domain": "client.example.org", "target_link_uri": "https://client.example.org/lti", "custom_parameters": { "context_history": "$Context.id.history" }, "claims": ["iss", "sub"], "messages": [ { "type": "LtiDeepLinkingRequest", "target_link_uri": "https://client.example.org/lti/dl", "label": "Add a virtual garden" } ] } } ``` -------------------------------- ### LTI Client Registration Request Example (HTTP/JSON) Source: https://www.imsglobal.org/spec/lti-dr/latest/spec/lti-dr/v1p0 This snippet demonstrates a non-normative example of an HTTP POST request for LTI client registration. It includes necessary headers like Content-Type and Authorization, and a JSON body containing the tool's desired configuration parameters. ```http POST /connect/register HTTP/1.1 Content-Type: application/json Accept: application/json Host: server.example.com Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.eyJ . { "application_type": "web", "response_types": ["id_token"], "grant_types": ["implict", "client_credentials"], "initiate_login_uri": "https://client.example.org/lti", "redirect_uris": ["https://client.example.org/callback", "https://client.example.org/callback2"], "client_name": "Virtual Garden", "client_name#ja": "バーチャルガーデン", "jwks_uri": "https://client.example.org/.well-known/jwks.json", "logo_uri": "https://client.example.org/logo.png", "policy_uri": "https://client.example.org/privacy", "policy_uri#ja": "https://client.example.org/privacy?lang=ja", "tos_uri": "https://client.example.org/tos", "tos_uri#ja": "https://client.example.org/tos?lang=ja", "token_endpoint_auth_method": "private_key_jwt", "contacts": ["ve7jtb@example.org", "mary@example.org"], "scope": "https://purl.imsglobal.org/spec/lti-ags/scope/score https://purl.imsglobal.org/spec/lti-nrps/scope/contextmembership.readonly", "https://purl.imsglobal.org/spec/lti-tool-configuration": { "domain": "client.example.org", "description": "Learn Botany by tending to your little (virtual) garden.", "description#ja": "小さな(仮想)庭に行くことで植物学を学びましょう。", "target_link_uri": "https://client.example.org/lti", "custom_parameters": { "context_history": "$Context.id.history" }, "claims": ["iss", "sub", "name", "given_name", "family_name"], "messages": [ { "type": "LtiDeepLinkingRequest", "target_link_uri": "https://client.example.org/lti/dl", "label": "Add a virtual garden", "label#ja": "バーチャルガーデンを追加する", } ] } } ``` -------------------------------- ### LTI Platform Acknowledgment Example Source: https://www.imsglobal.org/spec/lti-dr/latest/index An example of a platform's response when acknowledging a tool's registration, including the client ID and optional registration URI. ```APIDOC ## Platform Acknowledgment of Tool Registration ### Description This example shows the response from a platform acknowledging a tool's registration. It includes the assigned `client_id` and an optional `registration_client_uri`. ### Method POST (as part of registration) ### Endpoint (Platform specific registration endpoint) ### Parameters #### Response Body - **client_id** (string) - Required - The unique identifier assigned to the tool by the platform. - **registration_client_uri** (string) - Optional - The URI for the platform's registration endpoint, which the tool may use to manage its registration. - **application_type** (string) - Inherited from tool registration. - **response_types** (array of strings) - Inherited from tool registration. - **grant_types** (array of strings) - Inherited from tool registration. - **initiate_login_uri** (string) - Inherited from tool registration. - **redirect_uris** (array of strings) - Inherited from tool registration. - **client_name** (string) - Inherited from tool registration. - **jwks_uri** (string) - Inherited from tool registration. - **logo_uri** (string) - Inherited from tool registration. - **token_endpoint_auth_method** (string) - Inherited from tool registration. - **contacts** (array of strings) - Inherited from tool registration. - **scope** (string) - Inherited from tool registration. - **https://purl.imsglobal.org/spec/lti-tool-configuration** (object) - Inherited from tool registration. ### Response Example ```json { "client_id": "709sdfnjkds12", "registration_client_uri": "https://server.example.com/connect/register?client_id=709sdfnjkds12", "application_type": "web", "response_types": ["id_token"], "grant_types": ["implict", "client_credentials"], "initiate_login_uri": "https://client.example.org/lti", "redirect_uris": ["https://client.example.org/callback", "https://client.example.org/callback2"], "client_name": "Virtual Garden", "jwks_uri": "https://client.example.org/.well-known/jwks.json", "logo_uri": "https://client.example.org/logo.png", "token_endpoint_auth_method": "private_key_jwt", "contacts": ["ve7jtb@example.org", "mary@example.org"], "scope": "https://purl.imsglobal.org/spec/lti-ags/scope/score", "https://purl.imsglobal.org/spec/lti-tool-configuration": { "domain": "client.example.org", "target_link_uri": "https://client.example.org/lti", "custom_parameters": { "context_history": "$Context.id.history" }, "claims": ["iss", "sub", "name", "given_name", "family_name"], "messages": [ { "type": "LtiDeepLinkingRequest", "target_link_uri": "https://client.example.org/lti/dl", "label": "Add a virtual garden" } ] } } ``` ``` -------------------------------- ### Platform-Exposed LTI Tool Configuration Example (JSON) Source: https://www.imsglobal.org/spec/lti-dr/latest/index An example of LTI tool configuration as exposed by the platform, typically during registration acknowledgment. It includes standard OIDC registration details along with `client_id` and an optional `registration_client_uri`. ```json { "client_id": "709sdfnjkds12", "registration_client_uri": "https://server.example.com/connect/register?client_id=709sdfnjkds12", "application_type": "web", "response_types": ["id_token"], "grant_types": ["implict", "client_credentials"], "initiate_login_uri": "https://client.example.org/lti", "redirect_uris": ["https://client.example.org/callback", "https://client.example.org/callback2"], "client_name": "Virtual Garden", "jwks_uri": "https://client.example.org/.well-known/jwks.json", "logo_uri": "https://client.example.org/logo.png", "token_endpoint_auth_method": "private_key_jwt", "contacts": ["ve7jtb@example.org", "mary@example.org"], "scope": "https://purl.imsglobal.org/spec/lti-ags/scope/score", "https://purl.imsglobal.org/spec/lti-tool-configuration": { "domain": "client.example.org", "target_link_uri": "https://client.example.org/lti", "custom_parameters": { "context_history": "$Context.id.history" }, "claims": ["iss", "sub", "name", "given_name", "family_name"], "messages": [ { "type": "LtiDeepLinkingRequest", "target_link_uri": "https://client.example.org/lti/dl", "label": "Add a virtual garden" } ] } } ``` -------------------------------- ### Platform-Generated LTI Tool Configuration Example (JSON) Source: https://www.imsglobal.org/spec/lti-dr/latest/spec/lti-dr/v1p0 This JSON object shows an example of LTI tool configuration as exposed by a platform, typically as an acknowledgment of registration. It includes essential registration details like `client_id` and an optional `registration_client_uri`, alongside standard LTI configuration parameters. ```json { "client_id": "709sdfnjkds12", "registration_client_uri": "https://server.example.com/connect/register?client_id=709sdfnjkds12", "application_type": "web", "response_types": ["id_token"], "grant_types": ["implict", "client_credentials"], "initiate_login_uri": "https://client.example.org/lti", "redirect_uris": ["https://client.example.org/callback", "https://client.example.org/callback2"], "client_name": "Virtual Garden", "jwks_uri": "https://client.example.org/.well-known/jwks.json", "logo_uri": "https://client.example.org/logo.png", "token_endpoint_auth_method": "private_key_jwt", "contacts": ["ve7jtb@example.org", "mary@example.org"], "scope": "https://purl.imsglobal.org/spec/lti-ags/scope/score", "https://purl.imsglobal.org/spec/lti-tool-configuration": { "domain": "client.example.org", "target_link_uri": "https://client.example.org/lti", "custom_parameters": { "context_history": "$Context.id.history" }, "claims": ["iss", "sub", "name", "given_name", "family_name"], "messages": [ { "type": "LtiDeepLinkingRequest", "target_link_uri": "https://client.example.org/lti/dl", "label": "Add a virtual garden" } ] } } ``` -------------------------------- ### LTI Platform Configuration Example (JSON) Source: https://www.imsglobal.org/spec/lti-dr/latest/spec/lti-dr/v1p0 A non-normative example of the LTI platform configuration, demonstrating supported endpoints, authentication methods, scopes, and message types. This JSON object is used by LTI tools to tailor their registration process and understand platform capabilities. ```json { "issuer": "https://server.example.com", "authorization_endpoint": "https://server.example.com/connect/authorize", "token_endpoint": "https://server.example.com/connect/token", "token_endpoint_auth_methods_supported": ["private_key_jwt"], "token_endpoint_auth_signing_alg_values_supported": ["RS256"], "jwks_uri": "https://server.example.com/jwks.json", "registration_endpoint": "https://server.example.com/connect/register", "scopes_supported": ["openid", "https://purl.imsglobal.org/spec/lti-gs/scope/contextgroup.readonly", "https://purl.imsglobal.org/spec/lti-ags/scope/lineitem", "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-reg/scope/registration"], "response_types_supported": ["id_token"], "subject_types_supported": ["public", "pairwise"], "id_token_signing_alg_values_supported": ["RS256", "ES256"], "claims_supported": ["sub", "iss", "name", "given_name", "family_name", "nickname", "picture", "email", "locale"], "https://purl.imsglobal.org/spec/lti-platform-configuration": { "product_family_code": "ExampleLMS", "messages_supported": [ {"type": "LtiResourceLinkRequest"}, {"type": "LtiDeepLinkingRequest"} ], "variables": ["CourseSection.timeFrame.end", "CourseSection.timeFrame.begin", "Context.id.history", "ResourceLink.id.history"] } } ``` -------------------------------- ### Non-Normative LTI Tool Configuration Example (JSON) Source: https://www.imsglobal.org/spec/lti-dr/latest/index A non-normative example of a tool's LTI configuration. This JSON object details application settings, OAuth/OIDC parameters, and LTI-specific configurations like deep linking messages and custom parameters. It's used for client registration. ```json { "application_type": "web", "response_types": ["id_token"], "grant_types": ["implict", "client_credentials"], "initiate_login_uri": "https://client.example.org/lti", "redirect_uris": ["https://client.example.org/callback", "https://client.example.org/callback2"], "client_name": "Virtual Garden", "client_name#ja": "バーチャルガーデン", "jwks_uri": "https://client.example.org/.well-known/jwks.json", "logo_uri": "https://client.example.org/logo.png", "client_uri": "https://client.example.org", "client_uri#ja": "https://client.example.org?lang=ja", "policy_uri": "https://client.example.org/privacy", "policy_uri#ja": "https://client.example.org/privacy?lang=ja", "tos_uri": "https://client.example.org/tos", "tos_uri#ja": "https://client.example.org/tos?lang=ja", "token_endpoint_auth_method": "private_key_jwt", "contacts": ["ve7jtb@example.org", "mary@example.org"], "scope": "https://purl.imsglobal.org/spec/lti-ags/scope/score", "https://purl.imsglobal.org/spec/lti-tool-configuration": { "domain": "client.example.org", "description": "Learn Botany by tending to your little (virtual) garden.", "description#ja": "小さな(仮想)庭に行くことで植物学を学びましょう。", "target_link_uri": "https://client.example.org/lti", "custom_parameters": { "context_history": "$Context.id.history" }, "claims": ["iss", "sub", "name", "given_name", "family_name"], "messages": [ { "type": "LtiDeepLinkingRequest", "target_link_uri": "https://client.example.org/lti/dl", "label": "Add a virtual garden", "label#ja": "バーチャルガーデンを追加する", "custom_parameters": { "botanical_set":"12943,49023,50013" }, "placements": ["ContentArea"], "supported_types": ["ltiResourceLink"] }, { "type": "LtiDeepLinkingRequest", "label": "Add your Garden image", "label#ja": "あなたの庭を選んでください", "placements": ["RichTextEditor"], "roles": [ "http://purl.imsglobal.org/vocab/lis/v2/membership#ContentDeveloper", "http://purl.imsglobal.org/vocab/lis/v2/membership#Instructor" ] "supported_types": ["file"], "supported_media_types": ["image/*"] } ] } } ``` -------------------------------- ### POST /initiate-registration Source: https://www.imsglobal.org/spec/lti-dr/latest/spec/lti-dr/v1p0 Initiates the LTI tool registration process. The platform redirects the user agent to this endpoint, typically within an IFrame, to start the dynamic registration flow. ```APIDOC ## POST /initiate-registration ### Description Initiates the LTI tool registration process. The platform redirects the user agent to this endpoint, typically within an IFrame, to start the dynamic registration flow. ### Method POST ### Endpoint /initiate-registration ### Parameters #### Query Parameters - **openid_configuration** (string) - Required - The endpoint to the OpenID configuration to be used for this registration, encoded as per [RFC3986] Section 3.4. - **registration_token** (string) - Optional - The registration access token. If present, it must be used as the access token by the tool when making the registration request to the registration endpoint exposed in the OpenID configuration. This token should be short-lived and usable only once. ### Request Example (This endpoint is typically called via User Agent redirect, not a direct API request body) ### Response #### Success Response (302 Redirect) The response is a redirect to the tool's UI for further registration steps, or directly to the OpenID registration endpoint if no UI interaction is needed. #### Response Example (This is a redirect response, not a JSON body) ``` -------------------------------- ### Non-normative LTI Tool Configuration Example (JSON) Source: https://www.imsglobal.org/spec/lti-dr/latest/spec/lti-dr/v1p0 This JSON object represents a non-normative example of an LTI tool configuration. It includes details such as application type, response and grant types, URIs for login and callbacks, client identification, JWKS, logos, and scopes. It also defines custom parameters and messages for LTI interactions. ```json { "application_type": "web", "response_types": ["id_token"], "grant_types": ["implict", "client_credentials"], "initiate_login_uri": "https://client.example.org/lti", "redirect_uris": ["https://client.example.org/callback", "https://client.example.org/callback2"], "client_name": "Virtual Garden", "client_name#ja": "バーチャルガーデン", "jwks_uri": "https://client.example.org/.well-known/jwks.json", "logo_uri": "https://client.example.org/logo.png", "client_uri": "https://client.example.org", "client_uri#ja": "https://client.example.org?lang=ja", "policy_uri": "https://client.example.org/privacy", "policy_uri#ja": "https://client.example.org/privacy?lang=ja", "tos_uri": "https://client.example.org/tos", "tos_uri#ja": "https://client.example.org/tos?lang=ja", "token_endpoint_auth_method": "private_key_jwt", "contacts": ["ve7jtb@example.org", "mary@example.org"], "scope": "https://purl.imsglobal.org/spec/lti-ags/scope/score", "https://purl.imsglobal.org/spec/lti-tool-configuration": { "domain": "client.example.org", "description": "Learn Botany by tending to your little (virtual) garden.", "description#ja": "小さな(仮想)庭に行くことで植物学を学びましょう。", "target_link_uri": "https://client.example.org/lti", "custom_parameters": { "context_history": "$Context.id.history" }, "claims": ["iss", "sub", "name", "given_name", "family_name"], "messages": [ { "type": "LtiDeepLinkingRequest", "target_link_uri": "https://client.example.org/lti/dl", "label": "Add a virtual garden", "label#ja": "バーチャルガーデンを追加する", "custom_parameters": { "botanical_set":"12943,49023,50013" }, "placements": ["ContentArea"], "supported_types": ["ltiResourceLink"] }, { "type": "LtiDeepLinkingRequest", "label": "Add your Garden image", "label#ja": "あなたの庭を選んでください", "placements": ["RichTextEditor"], "roles": [ "http://purl.imsglobal.org/vocab/lis/v2/membership#ContentDeveloper", "http://purl.imsglobal.org/vocab/lis/v2/membership#Instructor" ], "supported_types": ["file"], "supported_media_types": ["image/*"] } ] } } ``` -------------------------------- ### GET /lti-platform-configuration Source: https://www.imsglobal.org/spec/lti-dr/latest/index Retrieves the LTI configuration details of the platform, including supported message types and variables. ```APIDOC ## GET /lti-platform-configuration ### Description This endpoint exposes the current LTI capabilities of the platform. The Tool can use this information to tailor its registration process. ### Method GET ### Endpoint /lti-platform-configuration ### Parameters #### Query Parameters None #### Path Parameters None ### Request Body None ### Response #### Success Response (200) - **product_family_code** (string) - Product identifier for the platform. - **version** (string) - Version of the software running the platform. - **messages_supported** (array of objects) - An array of all supported LTI message types. Each object has: - **type** (string) - The message type. - **placements** (array of strings, optional) - Array of placements indicating where the platform explicitly supports this link type. - **variables** (array of strings, optional) - An array of all variables supported for use as substitution parameters. ### Response Example ```json { "issuer": "https://server.example.com", "authorization_endpoint": "https://server.example.com/connect/authorize", "token_endpoint": "https://server.example.com/connect/token", "token_endpoint_auth_methods_supported": ["private_key_jwt"], "token_endpoint_auth_signing_alg_values_supported": ["RS256"], "jwks_uri": "https://server.example.com/jwks.json", "registration_endpoint": "https://server.example.com/connect/register", "scopes_supported": ["openid", "https://purl.imsglobal.org/spec/lti-gs/scope/contextgroup.readonly", "https://purl.imsglobal.org/spec/lti-ags/scope/lineitem", "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-reg/scope/registration"], "response_types_supported": ["id_token"], "subject_types_supported": ["public", "pairwise"], "id_token_signing_alg_values_supported": ["RS256", "ES256"], "claims_supported": ["sub", "iss", "name", "given_name", "family_name", "nickname", "picture", "email", "locale"], "https://purl.imsglobal.org/spec/lti-platform-configuration": { "product_family_code": "ExampleLMS", "messages_supported": [ {"type": "LtiResourceLinkRequest"}, {"type": "LtiDeepLinkingRequest"}], "variables": ["CourseSection.timeFrame.end", "CourseSection.timeFrame.begin", "Context.id.history", "ResourceLink.id.history"] } } ``` ### Error Handling - **404 Not Found**: If the LTI configuration is not available. - **500 Internal Server Error**: If there is a server-side issue. ``` -------------------------------- ### LTI Dynamic Registration - GET Client Configuration Source: https://www.imsglobal.org/spec/lti-dr/latest/spec/lti-dr/v1p0 Allows a Tool to retrieve its current configuration by making a GET request to the Client Configuration Endpoint using the provided registration access token. ```APIDOC ## GET Client Configuration ### Description Tools can retrieve their current registration configuration by making a GET request to the `registration_client_uri`. This request must be authenticated using the `registration_access_token`. ### Method GET ### Endpoint `{registration_client_uri}` ### Parameters #### Path Parameters None #### Query Parameters None #### Request Headers - **Authorization** (string) - Required - Bearer token with `registration.readonly` or `registration` scope. - Example: `Bearer {registration_access_token}` ### Request Example ```bash curl -X GET \ '{registration_client_uri}' \ -H 'Authorization: Bearer {registration_access_token}' ``` ### Response #### Success Response (200 OK) - **client configuration** (object) - The current configuration of the client, in the same format as the registration response. #### Response Example ```json { "client_id": "generated-client-id", "response_types": ["id_token"], "grant_types": ["implicit"], "redirect_uris": ["https://tool.example.com/redirect"], "client_name": "My Awesome Tool", "scope": "https://purl.imsglobal.org/spec/lti/scope/course.readonly https://purl.imsglobal.org/spec/lti/scope/lineitem" } ``` ``` -------------------------------- ### Client Registration Response Source: https://www.imsglobal.org/spec/lti-dr/latest/spec/lti-dr/v1p0 Upon successful registration, the platform returns a JSON response containing the newly created client_id and echoes the client configuration as recorded by the platform. ```APIDOC ## POST /connect/register (Success Response) ### Description This is the success response from the Client Registration Endpoint after a tool has been successfully registered. It includes the assigned `client_id` and the platform's recorded configuration for the tool. ### Method POST ### Endpoint /connect/register ### Parameters (No request parameters for success response) ### Response #### Success Response (200 OK) - **client_id** (string) - The unique identifier for the registered client. - **registration_client_uri** (string) - The URI to access the client's registration information. - **registration_access_token** (string) - An access token to manage the client's registration. - **application_type** (string) - The type of application. - **response_types** (array) - The OAuth 2.0 response types supported. - **grant_types** (array) - The OAuth 2.0 grant types supported. - **initiate_login_uri** (string) - The URL for initiating login. - **redirect_uris** (array) - The redirection URIs. - **client_name** (string) - The human-readable name for the client. - **jwks_uri** (string) - The URL of the JWKS document. - **logo_uri** (string) - The URL of the client's logo. - **token_endpoint_auth_method** (string) - The method for client authentication at the token endpoint. - **contacts** (array) - Email addresses of people responsible for the client. - **scope** (string) - Scopes requested by the client. - **https://purl.imsglobal.org/spec/lti-tool-configuration** (object) - LTI specific tool configuration. - **domain** (string) - The domain of the tool. - **target_link_uri** (string) - The URI that is launched when a user clicks on the link. - **custom_parameters** (object) - Custom parameters. - **claims** (array) - Requested claims. - **messages** (array) - Supported messages. - **type** (string) - The type of the message. - **target_link_uri** (string) - The URI for the message. - **label** (string) - A label for the message. ### Response Example ```json { "client_id": "709sdfnjkds12", "registration_client_uri": "https://server.example.com/connect/register?client_id=709sdfnjkds12", "registration_access_token": "iDPzMyKHMX_4CkTpwLDCK", "application_type": "web", "response_types": ["id_token"], "grant_types": ["implict", "client_credentials"], "initiate_login_uri": "https://client.example.org/lti", "redirect_uris": ["https://client.example.org/callback", "https://client.example.org/callback2"], "client_name": "Virtual Garden", "jwks_uri": "https://client.example.org/.well-known/jwks.json", "logo_uri": "https://client.example.org/logo.png", "token_endpoint_auth_method": "private_key_jwt", "contacts": ["ve7jtb@example.org", "mary@example.org"], "scope": "https://purl.imsglobal.org/spec/lti-ags/scope/score", "https://purl.imsglobal.org/spec/lti-tool-configuration": { "domain": "client.example.org", "target_link_uri": "https://client.example.org/lti", "custom_parameters": { "context_history": "$Context.id.history" }, "claims": ["iss", "sub"], "messages": [ { "type": "LtiDeepLinkingRequest", "target_link_uri": "https://client.example.org/lti/dl", "label": "Add a virtual garden" } ] } } ``` ``` -------------------------------- ### LTI Step 4: Registration Completed and Activation Source: https://www.imsglobal.org/spec/lti-dr/latest/index After registration, the tool notifies the platform via an HTML5 Web Message to close the window. The platform then allows an administrator to review, modify, and activate the tool. ```APIDOC ## LTI Step 4: Registration Completed and Activation ### Description Upon completion of the registration process (successful or not), the tool must send an HTML5 Web Message to the platform indicating that the window can be closed. The platform then provides an interface for administrators to manage the newly added tool, including review, modification, and activation. ### Method Web Messaging (JavaScript `postMessage`) ### Endpoint Not applicable (uses browser's messaging API) ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body - **subject** (string) - Required - Must be `'org.imsglobal.lti.close'`. ### Request Example ```javascript (window.opener || window.parent).postMessage({subject:'org.imsglobal.lti.close'}, '*'); ``` ### Response No direct API response. The platform processes the `postMessage` event. #### Success Response Not applicable. #### Response Example Not applicable. ``` -------------------------------- ### GET /lti-platform-configuration Source: https://www.imsglobal.org/spec/lti-dr/latest/spec/lti-dr/v1p0 Retrieves the LTI capabilities of the platform. This information can be used by tools to customize their registration and integration. ```APIDOC ## GET /lti-platform-configuration ### Description Retrieves the LTI capabilities of the platform. This information can be used by tools to customize their registration and integration. ### Method GET ### Endpoint /lti-platform-configuration ### Parameters #### Query Parameters None #### Request Body None ### Request Example None ### Response #### Success Response (200) - **product_family_code** (string) - Product identifier for the platform. - **version** (string) - Version of the software running the platform. - **messages_supported** (array) - An array of all supported LTI message types. Each object has a 'type' (string) and optional 'placements' (array of strings). - **variables** (array, optional) - An array of all variables supported for use as substitution parameters (array of strings). #### Response Example ```json { "issuer": "https://server.example.com", "authorization_endpoint": "https://server.example.com/connect/authorize", "token_endpoint": "https://server.example.com/connect/token", "token_endpoint_auth_methods_supported": ["private_key_jwt"], "token_endpoint_auth_signing_alg_values_supported": ["RS256"], "jwks_uri": "https://server.example.com/jwks.json", "registration_endpoint": "https://server.example.com/connect/register", "scopes_supported": ["openid", "https://purl.imsglobal.org/spec/lti-gs/scope/contextgroup.readonly", "https://purl.imsglobal.org/spec/lti-ags/scope/lineitem", "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-reg/scope/registration"], "response_types_supported": ["id_token"], "subject_types_supported": ["public", "pairwise"], "id_token_signing_alg_values_supported": ["RS256", "ES256"], "claims_supported": ["sub", "iss", "name", "given_name", "family_name", "nickname", "picture", "email", "locale"], "https://purl.imsglobal.org/spec/lti-platform-configuration": { "product_family_code": "ExampleLMS", "messages_supported": [ {"type": "LtiResourceLinkRequest"}, {"type": "LtiDeepLinkingRequest"}], "variables": ["CourseSection.timeFrame.end", "CourseSection.timeFrame.begin", "Context.id.history", "ResourceLink.id.history"] } } ``` ``` -------------------------------- ### Client Registration Error Response Source: https://www.imsglobal.org/spec/lti-dr/latest/spec/lti-dr/v1p0 If a tool's configuration cannot be registered, the platform rejects the request with a 400 Bad Request response, including a JSON object detailing the error. ```APIDOC ## POST /connect/register (Error Response) ### Description This is the error response from the Client Registration Endpoint when a tool's configuration is invalid or cannot be registered by the platform. ### Method POST ### Endpoint /connect/register ### Parameters (No request parameters for error response) ### Response #### Error Response (400 Bad Request) - **error** (string) - A string containing a specific error code. - **error_description** (string) - A human-readable string describing the error. ### Response Example ```json { "error": "invalid_request", "error_description": "The provided redirect_uris are not valid." } ``` ``` -------------------------------- ### POST /websites/imsglobal_spec_lti-dr/register Source: https://www.imsglobal.org/spec/lti-dr/latest/index This endpoint is used by a tool to register itself with the LTI platform. The platform may expose this endpoint to allow tools to retrieve their current configuration by making a GET request. ```APIDOC ## POST /websites/imsglobal_spec_lti-dr/register ### Description This endpoint allows a tool to register itself with the LTI platform. It can also be used to retrieve the tool's current configuration via a GET request. ### Method POST, GET ### Endpoint /websites/imsglobal_spec_lti-dr/register ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body - **client_id** (string) - Required - The client ID of the tool. - **client_secret** (string) - Required - The client secret of the tool. - **redirect_uris** (array of strings) - Required - A list of valid redirect URIs. - **grant_types** (array of strings) - Required - The grant types supported by the tool (e.g., "client_credentials", "urn:ietf:params:oauth:grant-type:jwt-bearer"). - **scope** (string) - Required - The scopes requested by the tool. ### Request Example ```json { "client_id": "your_tool_client_id", "client_secret": "your_tool_client_secret", "redirect_uris": [ "https://your.tool.com/redirect" ], "grant_types": [ "client_credentials", "urn:ietf:params:oauth:grant-type:jwt-bearer" ], "scope": "https://purl.imsglobal.org/spec/lti-reg/scope/registration" } ``` ### Response #### Success Response (200) - **client_id** (string) - The unique client ID assigned by the platform. - **client_secret** (string) - The client secret for the tool. - **registration_client_uri** (string) - The URI for the client registration endpoint. - **registration_access_token** (string) - An access token for the registration endpoint. - **scopes** (array of strings) - The scopes granted to the tool. #### Response Example ```json { "client_id": "generated_client_id", "client_secret": "generated_client_secret", "registration_client_uri": "https://platform.com/api/client/generated_client_id", "registration_access_token": "generated_access_token", "scopes": [ "https://purl.imsglobal.org/spec/lti-reg/scope/registration.readonly", "https://purl.imsglobal.org/spec/lti-reg/scope/registration" ] } ``` ```