Skip to content

LTI 1.3 Tool Request Flow

In the context of LTI 1.3, SkillsTown acts as the Platform, and the customer acts as the Tool. This page outlines the request flow.

This flow should be followed if your courses will be implemented in Inspire.

Login Tool

As step one, the Platform (SkillsTown) will call the provided login URL using POST.

Through this request we send out the following parameters: iss, client_id, login_hint, target_link_uri and lti_message_hint

Example values

ParameterValue
isshttps://account.onlineacademy.nl
target_link_urihttps://example.com/launch/
login_hint12345
client_id71bafed5-5db8-483a-bc91-0531e651e57d
lti_deployment_idf800ca6c-a62f-4248-bfaf-fe327381169a
lti_message_hint{"course_id":"xxxxx","course_version_id":xxxxx,"deployment_id":"f800ca6c-a62f-4248-bfaf-fe327381169a","test":false,"messageType":"LtiResourceLinkRequest","company_name":"Example Company","content_version":null,"course_type":"1","culture":"nl-NL"}

These values will be added in the request body.

Authorization Platform

SkillsTown will expect a request to the Authorization URL https://account.onlineacademy.nl/connect/authorize with the following query parameters:

ParameterValue
client_id71bafed5-5db8-483a-bc91-0531e651e57d
isshttps://issuer.example.com/
response_typeid_token
scopeopenid profile email
redirect_urihttps://example.com/launch
stateb4523079761ad690228256c7909f0d140d89b8aedbb04c8685254
nonce1ae28c4dff14531eaf5a82db859e526ead88a83db05deb9c7ff43f81
login_hint[User id]
promptnone
response_modeform_post
lti_message_hint{"course_id":"xxxxx","course_version_id":xxxxx,"deployment_id":"f800ca6c-a62f-4248-bfaf-fe327381169a","test":false,"messageType":"LtiResourceLinkRequest","company_name":"Example Company","content_version":null,"course_type":"1","culture":"nl-NL"}

Tool URL

The Platform will then construct the JWT token and redirect to the provided Tool URL, adding the JWT token in the payload.

Example JWT Payload

The following is an example object which we'll send as JWT in the payload:

json
{
  "nbf": 1719477033,
  "exp": 1719477333,
  "iss": "https://account.onlineacademy.nl",
  "aud": "Example Company",
  "nonce": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "iat": 1719477033,
  "sid": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "sub": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "auth_time": 1719402633,
  "idp": "local",
  "https://purl.imsglobal.org/spec/lti-ags/claim/endpoint": {
    "scope": [
      "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"
    ],
    "lineitems": "https://api.onlineacademy.nl/catalog/v1/lti-results/course-version/XXXXX/scores",
    "lineitem": "https://api.onlineacademy.nl/catalog/v1/lti-results/course-version/XXXXX/scores"
  },
  "https://purl.imsglobal.org/spec/lti/claim/custom": {
    "course_id": "XXXX-Course-Identifier_XXXX"
  }
}

Next to course_id, Inspire also supports deployment_id, id and target_link_uri as course ID parameters. The course ID will then be provided in the JWT as follows:

json
deployment_id:
  "https://purl.imsglobal.org/spec/lti/claim/deployment_id":
  "XXXX-Course-Identifier_XXXX",

id:
  "https://purl.imsglobal.org/spec/lti/claim/custom": {
    "id": "XXXX-Course-Identifier_XXXX"
  }

target_link_uri:
  "https://purl.imsglobal.org/spec/lti/claim/target_link_uri":
  "https://example.com/lti/provide/course/12345"

The course should now be visible in the platform.

Progress

Whenever the user makes progress, we expect the Tool to send out a POST request to the lineitem URL provided in the ToolLaunch JWT token.

Object example unfinished course:

json
{
  "activityProgress": "InProgress",
  "scoreGiven": 0.2,
  "scoreMaximum": 1,
  "timestamp": "YYYY-MM-DDTHH:MM:SS.MS\u002B00:00",
  "userId": "12345"
}

Object example finished course:

json
{
  "activityProgress": "Completed",
  "scoreGiven": 1,
  "scoreMaximum": 1,
  "timestamp": "YYYY-MM-DDTHH:MM:SS.MS\u002B00:00",
  "userId": "12345"
}