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!
Hi,
We want to add support for Canvas course sections (How do I add a section to a course as an instructor? ) to our LTI app. When a student launches an assignment that uses our LTI app as an external tool, we want the students to be grouped according to which section they belong to, within our app. Within our app each student will be able to see the other students in their section, but not see students from other sections.
Ideally we'd like to do this in a way that isn't specific to Canvas, so that we can support the equivalents of course sections in other LMS's. But we'll have to do separate implementations for each LMS if there's no other way.
So our LTI app needs to get information about the current course section on assignment launch so that it can respond to it. And I'm wondering how an LTI app can best get access to info about the course section?
There doesn't appear to be any info about course sections in the standard LTI 1.1 launch params (correct me if I'm wrong).
It seems clear that we can get the necessary information in a Canvas-specific way by combining custom Canvas launch params variable substitutions (https://canvas.instructure.com/doc/api/file.tools_variable_substitutions.html) plus usage of the Canvas sections API (https://canvas.instructure.com/doc/api/sections.html). It looks like the variable substitutions can only get us the section ID in the launch params. We also need the section name, so we'd have to get that from the API.
But this approach has some drawbacks:
I'm wondering whether there's a better way? For example, does Canvas support anything from LTI 1.3 that provides access to section information?
Thanks
@seanh , I think your take on the opportunity with this particular variable substitution technique, and its limitations, is spot-on. When we worked with ForClass to help them receive section information from our institution's Canvas instance on an LTI 1.1 launch, they did successfully include a substitution variable in their tool configuration for that purpose:
sectionSISSourceIDs=$Canvas.course.sectionSisSourceIds
(At our institution, section SIS IDs in Canvas are human-readable, which sidesteps the limitation you noted about section names.)
For example, does Canvas support anything from LTI 1.3 that provides access to section information?
Either it should, or it will soon. While our developers haven't tried this yet, I'm confident that an LIS claim involving sections can be made in a launch message. We have a lot to learn!
I tried adding that to my custom fields, but all I get is an empty string. How can I get it to return a section id?
Turns out the variable I'm interested in is: $Canvas.course.sectionIds
Hey @seanh !
You are on to the right track by using variable substitutions + Canvas APIs. LTI Advantage did not add any new methods of requesting course section information, but it did provide some services that we can extend down the road to provide that data.
The service we have in mind to extend with course section info is the names and roles provisioning service. This would allow access to the info via the client credentials grant flow using the public/private key pair inhering to LTI 1.3 tools.
Unfortunately, this would still be a Canvas-specific extension of the specification, not one that works across every LMS. Typically the notion of "section" has been a bit too varied between each LMS to find a good standard.
A potential stop-gap would be for us (or a pull request) to add a new variable expansion that maps section ids to section names if that was the only info you needed from the API response.
I hope that helps a bit! We are excited to see the integration you are working on ![]()
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