🚀 Heads up: Our API Docs Have Moved!
We have relocated to Instructure Developer Documentation Portal. 🎉 Please update your bookmarks. This page will automatically redirect after July 1, 2026.

LTI 1.3 Development and Migration Checklist

This document:

For an introduction to migrating an LTI 1.1 tool, first read the LTI 1.1 to 1.3 Migration Guide.

Table of Contents

  1. Getting a Basic Launch Working
  2. LTI 1.3 Registration (LTI Developer Key) Configuration
  3. Launch Data
  4. Deep Linking
  5. Target Link URI, Domain, and Migration Process
  6. LTI Advantage Services
  7. Appendix: Finding Matching LTI 1.1 and 1.3 Tools

1. Getting a Basic Launch Working

See LTI 1.3 Launch Flow for background.

1.1 Implement the OIDC Initiation (Login) Endpoint

See Step 1: Login Initiation.

1.2 Implement the Launch / Authentication Response Endpoint

See Step 3: Authentication Response.


2. LTI 1.3 Registration (LTI Developer Key) Configuration

2.1 Create JWKs for Your Key

See LTI 1.3 Asymmetric Key Flow for background.

2.2 Placements

2.3 Registrations vs. Deployments

2.4 Dynamic Registration (DR)


3. Launch Data


4. Deep Linking



6. LTI Advantage Services

6.1 Overview

6.2 Assignment and Grades Services (AGS)

See Assignment Tools and the 1EdTech Assignment and Grading Services Specification for details.

6.3 Names and Roles Provisioning Service (NRPS)

6.4 Platform Notification Service (PNS) and Asset Processor


Appendix: Finding Matching LTI 1.1 and 1.3 Tools

Canvas tries to match an LTI 1.3 tool with links created by an LTI 1.1 tool in two situations, listed below. These processes -- combined with your old tool's deep link launch URLs, tool-level launch URL (tool url field), and tool domain -- influence how you should choose your new 1.3 tool's domain, default target_link_url, and (indirectly) new deep link target_link_uris.

Both situations affect non-placement launches, such as assignments, module items, collaborations, and resource links returned via content-item (such as from an editor_button launch). They do not affect direct placement-based launches (in which Canvas lists the available tools) such as navigation (course_navigation, etc.) or Content Item / Deep Linking requests (assignment_selection, editor_button, etc.).

Situation 1: Just-in-time matching

This is the matching you have to worry about most, since it is the final chance to find a matching 1.3 tool for an old 1.1 link, and it covers items the initial on-install batch migration may have missed. It is based on the LTI link launch URL.

Because of these three tiers, if an LTI 1.1 link matches at an earlier tier than an LTI 1.3, the link may not launch until the 1.1 tool is deleted (unless already migrated, see Situation 2). However, you need to make sure your new tool's URL or domain is general enough to cover all your possible LTI 1.1 links and your new target_link_url links.

The batch migration is initiated when an LTI 1.3 tool is installed which matches an existing LTI 1.1 tool. It makes line items available to your tool (via AGS) before any launches happen for them.

Its matching works slightly differently to just-in-time matching because it is looking first for a 1.1 tool that matches on the 1.3 tool's url or (if none) domain. As a result, it may miss links the just-in-time matching covers, or in some cases, it may migrate links that the just-in-time matching would normally not find until the 1.1 tool is deleted.

Recommendation

In most cases, it is suggested to: