Ga naar hoofdinhoud

Learning Tool Ineroperability (LTI)

This platform supports exposing topics to LTI consumers.

Currently we support version 1.1 and 1.2 and implemented it with this provider recipe and the implementation guide


First a LTI tool configuration needs to be created to generate a consumer key and shared secret.

These credentials are used for a client credential authorization flow

Basic Launch Request

A launch request can be send to our lti launch endpoint:

topic_id is the ID of a standard approved topic to link to

Aside from the oauth parameters we require the following for a basic launch request:

  • resource_link_id: Opaque unique identifier that the TC guarantees will be unique within the TC for every placement of the link.
  • user_id: Id of the user for this tool consumer
  • lti_message_type: basic-lti-launch is the only type we support
  • lti_version: LTI-1p0 required, but we don't actually do any checks

Optionally we also accept these parameters:

  • lis_person_name_full: Full name of the user
  • lis_person_name_family: Last name of the user
  • lis_person_name_given: First name of the user
  • lis_person_contact_email_primary: Email of the user, when this is missing a dummy email address is set
  • launch_presentation_return_url: We return the user to this url when something goes wrong.
  • lis_result_sourcedid: External outcome id
  • lis_outcome_service_url: External outcome service url

What happens next?

When a launch request is successful a user is created or updated based on the user id and lis variables. These users are created within the company the LTI configuration is registered to.

Next this user is redirected directly to the selected topic in the client where the content can be consumed. The topic close button is hidden or redirects to the launch_presentation_return_url if present.

The user can theoretically navigate through the rest of the application and see all other standard approved topics.


We store outcomes in a Lti::Participation Each ExternalUser can have multiple Lti::Participation records. Each Participation can have multiple Lti::Participation records. There can be only one link between an ExternalUser and a Participation through a Lti::Participation.

On a LTI launch an authentication token is created with resource_link_id, lis_result_sourcedid and lis_outcome_service_url in the data. When this token is used then:

  1. We create a started participation for the user and resource_link_id (topic)
    • If a pending participation already exists it is started.
  2. We create a Lti::Participation between the external user and the participation.

When the final of a topic is already completed we send the outcome to the lis_outcome_service_url for the Lti::Participation immediately (and asynchrously).

Whenever a learner completes a final we send the outcome to the lis_outcome_service_url of each Lti::Participation, if any, asynchronously

Testing LTI

With Saltire:

  1. Create a LTI Tool configuration
  2. Visit Saltire
  3. Go to Test Tool Consumer
  4. Click Services Offered
  5. Disable everyting
  6. Enable Basic Outcomes
  7. Click "Tool Provider" and fill in the LTI Tool configuration
  8. Save it
  9. Connect
  10. Finish the final chapter
  11. Click "view" d
  12. Click gradebook

Alternatively there are testing tools suchs as this one from Foliotek