Learning Tools Advantage

Learning Tools Interoperability is a specification developed by IMS Global Learning Consortium to establish a standard way to integrate remotely hosted learning applications with platforms like learning management systems (LMS) and similar educational environments. The LTI specification enhances the functionality provided by a Tool Consumer and provides instructors with various applications that they can embed into their course. Click here to read more about LTI.

LTI Advantage is the next step towards interoperability. It is a package of extensions that enables deeper integration of tools with an LMS. These extensions are built on the core LTI standard (v1.1 or higher). These are the three current LTI Advantage extensions:

Names and Role Provisioning Services: This extension enables an LMS to send a list of course participants and faculty-defined groups to learning tools. It also allows the LMS to learn who has not yet accessed a tool. These features used to be called "Membership Service".

Deep Linking: Provides a more intuitive way to add content from a tool provider by providing support for various types of content items such as a playlists, hyperlinks, iframes or files. It is the new name for "Content Item Message".

Assignment and Grade Services: Enables tools to pass the results of assignment back to the LMS. Along with the scores, it also supports comments to be returned to the LMS if provided. It enables instructors to maintain grades and comments in a single place (such as the LMS grade book). It is the new name for "Gradebook Service".

So, we see that LTI Advantage is mainly a collection of features that already existed within LTI.

Following is a detailed explanation of these extensions, with examples taken from the IMS website.

Names and Role Provisioning Services

Names and Role Provisioning Services provides access to data about users' roles within a course, such as list of enrollments in a course. It automates course enrollment in tool providers and enables instructors to receive reporting on student activity within a learning tool, such as the list of users and their roles or a list of those participants who have not accessed the course yet. LTI does not pass user information in its default configuration. Names and Role Provisioning Services automates the provision of student lists to an external tool. Sending the list of students enables the external tool to pre-provision accounts for all users, rather than creating one when the student launches it for the first time.

In order for a tool to be able to use this service, the tool consumers have to pass an endpoint as a custom parameter with the name of custom_context_memberships_url. To implement Names and Role Provisioning Services, a Tool Provider only needs to send a signed GET request to this endpoint and in return the Tool Provider will receive a membership list.

A Tool Provider can send one or more of the following query parameters in a GET request:

role - The specific role for a membership. Following are the roles available in Canvas.

Lti roles

limit - Limit the maximum number of items per page.

rlid - Memberships having access to this resource link.

The following code fetches first five users with role urn:lti:role:ims/lis/Learner who have access to a resource link with ID rl999.


Deep Linking

Deep Linking provides a more intuitive way to add various types of content items from a Tool Provider (TP) into the tool consumer. This extension supports different types of content items such as a hyperlink, an embedded image or other media type, embedded HTML, iframe and a file. A typical use case as mentioned by IMS would be "to allow a user within a Tool Consumer (TC) to click a button on the toolbar of a text box editor, which opens a Tool Provider within an iframe (or pop-up window), use the interface provided to select one or more items, and have the selected item(s) returned to the Tool Consumer and inserted into the text box. This may be an instructor adding content to a content page, or could be a student selecting an attachment to submit as part of an assignment".

The first step when sending a deep linking message is to submit a POST request from the Tool Consumer to the Tool Provider. This is similar to an LTI launch request except that lti_message_type has a value of ContentItemSelectionRequest. The next step is for the Tool Provider to verify if this is a valid LTI request. If so, it then provides an interface for selecting content items. Once the user selects content items, the Tool Provider should return the details of selected items in a JSON array back to the Tool Consumer at the URL defined in the content_item_return_url parameter. Remember that Tool Provider should always return the user back to the Tool Consumer even if they do not select any items.

When a Tool Consumer sends a POST request to a Tool Provider, it may send the following parameters:

lti_message_type= ContentItemSelectionRequest (Required)

The ContentItemSelectionRequest in lti_message_type indicates that this request represents a deep linking selection message.

lti_version= LTI-1p0 (Required)

The version of the LTI specification.

accept_media_types= application/vnd.ims.lti.v1.ltilink,image/*, text/html (Required)

A comma-separated list of MIME types which the Tool Consumer can accept.

accept_presentation_document_targets= embed,frame,iframe,window,popup,overlay (Required)

A comma-separated list of possible ways in which the selected content item can be requested to open within the Tool Consumer. None means that the content item is not intended for display and will only be used for storing or processing.

content_item_return_url= [URL] (Required)

A URL where the Tool Provider redirects the user back to the Tool Consumer.

accept_unsigned= false | true (Optional)

Indicates whether the the Tool Consumer accepts an unsigned return message or not.

accept_multiple= false | true (Optional)

Indicates if the user can select multiple content items or not.

accept_copy_advice= false | true (Optional)

Indicates if the Tool Consumer will make a local copy of a content item. Tool Providers can send the expiresAt parameter to let the Tool Consumer know that the item will expire on that date.

accept_unsigned= false | true (Optional)

Indicates whether the Tool Consumer accepts an unsigned return message or not.

Along with the fields mentioned above, the Tool Consumer can also send additional fields like text, title, data, auto_create (to indicate if content items returned by the Tool Provider would be automatically persisted) and other parameters about the Tool Consumer and the user.

Once content item(s) has been selected, the Tool Provider should redirect the user to the Tool Consumer by a sending POST request. It may send the following parameters in the request:

lti_message_type= ContentItemSelection (Required)

ContentItemSelection indicates that this message contains an array of content items.

lti_version= LTI-1p0 (Required)

This indicates the version of the LTI specification.

content_items= [JSON Array] (Optional)

This should be a JSON array containing details for each of the items selected. The following example for the content_items parameter value is taken from IMS website:

            "@context" : "http://purl.imsglobal.org/ctx/lti/v1/ContentItem",
            "@graph" : [
              { "@type" : "ContentItem",
                "@id" : ":item1",
                "url" : "http://www.imsglobal.org",
                "title" : "The IMS Global website",
                "mediaType" : "text/html"
              { "@type" : "LtiLinkItem",
                "@id" : ":item2",
                "icon" : {
                  "@id" : "http://tool.provider.com/icons/small.png",
                  "width" : 50,
                  "height" : 50
                "thumbnail" : {
                  "@id" : "http://tool.provider.com/images/thumb.jpg",
                  "width" : 100,
                  "height" : 150
                "title" : "Open sIMSon application",
                "text" : "The <em>sIMSon</em> application provides
                a collaborative space for developing semantic modelling
                "mediaType" : "application/vnd.ims.lti.v1.ltilink",
                "custom" : {
                  "level" : "novice",
                  "mode" : "interactive"
                "placementAdvice" : {
                  "presentationDocumentTarget" : "window",
                  "windowTarget" : "anLTIApp"
              { "@type" : "FileItem",
                "@id" : ":item3",
                "url" : "http://tool.provider2.com/animation/sample.swf",
                "icon" : {
                  "@id" : "http://tool.provider2.com/icon/sample.png",
                  "width" : 45,
                  "height" : 45
                "text" : "Watch this animation.",
                "mediaType" : "application/x-shockwave-flash",
                "copyAdvice" : false,
                "placementAdvice" : {
                  "displayWidth" : 800,
                  "presentationDocumentTarget" : "iframe",
                  "displayHeight" : 600

data= [Same as received] (Optional)

If the Tool Consumer sent this parameter in the original request, then the Tool Provider should return it as is back to the Tool Consumer.

lti_msg= [Message to be displayed] (Optional)

Message to be displayed to user when returning.

Along with the above parameters, the Tool Provider can return additional parameters such as lti_log to give the Tool Consumer a message to log when it returns normally, lti_errorlog to give Tool Consumer a plain text error message to log when the Tool Provider encounters an error, and lti_errormsg to provide details about error to display to the user.