The Instructure Community will enter a read-only state on November 22, 2025 as we prepare to migrate to our new Community platform in early December.
Read our blog post for more info about this change.
Found this content helpful? Log in or sign up to leave a like!
I am developing an external tool for the Canvas Learning Management System (LMS), aiming to enhance the range of exercises available within a single course. My tool contains numerous exercises, each identified by a unique Exercise ID. The objective is to launch specific exercises from Canvas, and have each instance of the exercise in Canvas associated with its respective unique Exercise ID from my system.
The challenge is determining the best way to store and manage these Exercise IDs within Canvas, so that when a launch request is made via the Learning Tools Interoperability (LTI) protocol, the correct Exercise ID is sent along with the LTI launch parameters. This way, my tool will know which exercise to display for each individual launch.
As I understand the Deployment ID can be used to recognize the current instance/deployment of the external tool. This means that I would need to save the Deployment ID to exercise ID association on my system. This is something I would prefer to do on Canvas' side. The exercise ID should be saved in Canvas and sent with the LTI launch request, if possible.
TL;DR: I'm developing an external tool for Canvas LMS that contains multiple unique exercises. I need a way to store and manage each exercise's unique ID within Canvas. This ID should be included in the LTI launch parameters when an exercise is launched in Canvas.
I'm seeking advice from the community for the most efficient way to handle this requirement, preferably an LTI API endpoint where I can save the exercise ID on a per external tool instance basis and send this exercise ID from Canvas to my tool with every LTI launch.
Hi @ImreKinnunen,
I'm not an LTI developer (yet) but will take a crack at this and hope that someone more experienced can then further educate both of us.
On the Canvas side, we would use an Assignment with an External Tool submission type. This would allow the student to launch your LTI and for their exercise grade to be passed back to Canvas upon completion. The launch parameters would include the Canvas assignment_id, providing the unique ID you're looking for from Canvas, which could then be paired with your Exercise ID somehow.
You mentioned needing to "store and manage these Exercise IDs within Canvas" so that "the correct Exercise ID is sent along with the LTI launch parameters." I would recommend looking at the Deep Linking Specification. With deep linking, when the user creates an assignment in Canvas, sets the External Tool submission type, and chooses your tool, they should then get to choose which Exercise in your system they are linking to. Then, when the students launch the assignment, they are taken directly to the specific Exercise instead of some generic home page of your system.
You may be interested in this video by Martin Lenord of Turnitin, who goes through the specifics of checking the launch to see if it's a deep linking launch or a generic resource launch and handling it accordingly:
@sendres thank you for your response!
After some research: deep linking seems to be the right solution. The technical details are still a bit unclear but I will post more information here when I make progress!
Regards, Imre
Community helpTo interact with Panda Bot, our automated chatbot, you need to sign up or log in:
Sign inTo interact with Panda Bot, our automated chatbot, you need to sign up or log in:
Sign in