As Instructure's Partner Integrations Specialist, I’m often asked how an LTI tool can return a grade to Canvas for an assessment that’s completed on the tool provider side. The answer varies based on a set of requirements the tool provider has. However, I’ve outlined the most common workflows I encounter to hopefully help others find the right place to start—keep in mind that a combination of these workflows can also be utilized, you don’t have to choose just one.
(optional) Using the LTI Outcomes service, the tool can also return a piece of plain text, a basic URL, or even an LTI Launch URL. This will be attached to a student submission object in Canvas, and it’ll be visible on the student submission page and in Speedgrader
LTI + API Approach
There are two flavors of this workflow. One uses the LTI Outcomes service for grading, while the other uses the Canvas submissions API.
This approach requires an LTI integration to be configured with at least a course_navigation placement. It also must use OAuth2to obtain teacher and student tokens.
Allows a single launch point from Canvas (usually from course navigation) where a student can complete many assessments and have the tool provision assignments within Canvas on the fly and grade them as needed
Less manual work for the teacher
Organization of assessments can be offered either on the tool side, or by leveraging the Modules page in Canvas
Content-Item not required
Tools can create external tool assignments and use the API to simulate a student launching the tool in order to obtain data required for the LTI Outcomes service
Requires OAuth2 to obtain either a Canvas API token for teachers (to grade) and students (to optionally submit)
Requires heavy usage of Canvas specific API’s, so is not interoperable
If grading is achieved via submission API, submissions are not marked complete after a grade is applied. The tool must also submit to the assignment using the submission API to mark complete. Furthermore, only plain text or URL’s can be provided
Instructor launches the tool from course navigation or elsewhere and assigns the available work to students, or the tool can do this automatically
Tool kicks off OAuth2 if it needs to obtain or refresh a teacher token
Tool uses the Submissions API as the teacher to grade the student
(optional) Tool uses the Submissions API as the student to submit so the teacher can verify students completed the assessment
NOTE: The process can be further automated/simplified by obtaining an admin token with the “become other users” permission. This token can then be used to make API requests on behalf of teachers and students by appending the as_user_id=<student/teacher user id>. However, this can be problematic for high numbers of assignments or students as you’ll likely experience throttling issues.
I always like to hear about creative ways for integrations to grade and submit assignments. How has your integration combined API and LTI to grade and submit to Canvas?