Skip to content

Canvas LTI setup for Humans But Guided

Step-by-step guide for a Canvas administrator to register Humans But Guided as an LTI 1.3 tool. Screenshots were captured on the HBG Canvas demo instance.

Use this guide when configuring a partner Canvas instance manually in the UI. For the automated API path, see Partner provisioning.


HBG endpoints

FieldValue
OIDC Initiation URLhttps://api.humansbutguided.com/api/lti/oidc-login
Redirect URI / Target Link URIhttps://api.humansbutguided.com/api/lti/launch
JWK Set URLhttps://api.humansbutguided.com/api/lti/jwks
Frontend (post-launch)https://humansbutguided.com

Part 1 — Open Developer Keys

1. Log in and open Admin

Log in to Canvas with an account that has Site Admin access. From the Dashboard, click Admin in the left global navigation.

Canvas Dashboard with Admin highlighted

2. Choose Site Admin

In the Admin flyout, select Site Admin (not just a sub-account).

Admin menu with Site Admin highlighted

3. Go to Developer Keys

In the Site Admin sidebar, click Developer Keys.

Site Admin sidebar with Developer Keys highlighted

4. Start a new key

On the Developer Keys page, click + Developer Key.

Developer Keys list with + Developer Key button

5. Choose LTI Key

From the dropdown, select + LTI Key (not API Key).

+ Developer Key dropdown with + LTI Key selected


Part 2 — Fill the LTI key form

The Key Settings screen has two panels: general key fields on the left and Configure on the right.

LTI Key Settings and Configure form

Left panel — Key Settings

FieldValue
Key NameGrading Students
Owner Emaillti@humansbutguided.com
Redirect URIshttps://api.humansbutguided.com/api/lti/launch
Notesoptional

Right panel — Configure

Leave Method as Manual Entry.

FieldValue
TitleGrading Students
DescriptionAI-assisted homework grading
Target Link URIhttps://api.humansbutguided.com/api/lti/launch
OpenID Connect Initiation Urlhttps://api.humansbutguided.com/api/lti/oidc-login
Public JWKSee below

Public JWK — if the form offers Public JWK URL, use:

https://api.humansbutguided.com/api/lti/jwks

If the form only accepts a pasted JWK object, fetch the key and paste it as a single line (Canvas requires "alg": "RS256"):

bash
curl -s https://api.humansbutguided.com/api/lti/jwks | jq -c '.keys[0]'

LTI Advantage Services

Expand LTI Advantage Services and enable all four gradebook-related scopes:

  • Can create and view assignment data in the gradebook associated with the tool
  • Can view assignment data in the gradebook associated with the tool
  • Can view submission data for assignments associated with the tool
  • Can create and update submission results for assignments associated with the tool

These scopes are required for Assignment and Grade Services (grade passback).

Placements

Remove the default placements (Account Navigation and Link Selection).

Add Assignment Selection and Homework Submission (both are required — without Homework Submission, the assignment page shows No Content instead of embedding HBG in the iframe).

For each placement, set:

FieldValue
Target Link URIhttps://api.humansbutguided.com/api/lti/launch
Message typeLtiResourceLinkRequest
TextGrading Students

Save and enable

  1. Click Save and Customize (or Save).
  2. Back on the Developer Keys list, toggle the key from OFF to ON.
  3. Note the numeric client_id shown on the key row — HBG needs this value.

OIDC initiation URL on the Developer Key: Canvas builds the assignment launch form from DeveloperKey.oidc_initiation_url, not only from the tool configuration JSON. If this field is empty, Canvas POSTs login fields directly to /api/lti/launch and HBG returns Missing state param. After saving the key, confirm the OpenID Connect Initiation URL appears on the Developer Key record (UI or Rails: DeveloperKey.find(...).oidc_initiation_url).


Part 3 — Install the app by Client ID

Creating a Developer Key alone does not install the tool in courses. Canvas must register a ContextExternalTool from the key. Skipping this step causes "Couldn't find valid settings for this link" when opening an assignment, even if the launch URL looks correct.

UI steps

  1. AdminSettingsApps tab → View App Configurations.
  2. Click + App.
  3. Choose Configuration Type: By Client ID.
  4. Paste the client_id from Part 2 → Submit.
  5. Confirm the app appears as Grading Students.

Repeat at the course level if needed: open a course → SettingsAppsView App Configurations+ AppBy Client ID → same client_id.

API alternative

Install on the account and course:

bash
CANVAS_URL="https://canvas.partner.edu"
CANVAS_TOKEN="<canvas_admin_api_token>"
CLIENT_ID="<client_id_from_part_2>"
ACCOUNT_ID=1
COURSE_ID=<your_course_id>

curl -sS -X POST "$CANVAS_URL/api/v1/accounts/$ACCOUNT_ID/external_tools" \
  -H "Authorization: Bearer $CANVAS_TOKEN" \
  -H "Content-Type: application/json" \
  -d "{\"client_id\":\"$CLIENT_ID\"}"

curl -sS -X POST "$CANVAS_URL/api/v1/courses/$COURSE_ID/external_tools" \
  -H "Authorization: Bearer $CANVAS_TOKEN" \
  -H "Content-Type: application/json" \
  -d "{\"client_id\":\"$CLIENT_ID\"}"

Part 4 — Register the platform on HBG

After Canvas creates the key, send HBG the following:

FieldExample
Canvas base URLhttps://canvas.partner.edu
client_idthe numeric ID from Part 2
deployment_idfrom the installed tool (see below)

HBG stores these in the lti_platforms table. The deployment_id must match exactly what Canvas sends in the launch token — placeholder values like 1:grading will cause validation failures.

Finding deployment_id:

  • UI: Course or account Settings → Apps → View App Configurations → Grading Students
  • Rails console:
ruby
ContextExternalTool.find_by(name: "Grading Students").deployment_id
# => e.g. "2:197df2e04ddcfcc6ddf0dd3a90cc00d28b9198c0"

HBG seeds the row with backend/scripts/seed_lti_platform.py using --canvas-url, --client-id, and --deployment-id.


Part 5 — Attach the tool to an assignment

The Developer Key and app install alone are not enough — each assignment must select the installed tool. Pasting only the launch URL manually (without choosing the tool via Find) leaves content_id empty and triggers "Couldn't find valid settings for this link".

UI steps

  1. Open the course.
  2. Go to Assignments → open or create an assignment → Edit.
  3. Set Submission Type to External Tool.
  4. Click Find, choose Grading Students from the list, and confirm the URL is https://api.humansbutguided.com/api/lti/launch.
  5. Leave Load This Tool In A New Tab unchecked unless you prefer a separate tab.
  6. Click Save (the assignment should remain Published).

Assignment Edit with External Tool submission type

After saving, the submission type should show an external tool linked to Grading Students.

Important: Use Find → Grading Students. Do not type the launch URL manually unless you also have the tool installed via Part 3.


Verification

bash
# HBG tool JWKS (for Canvas developer key registration)
curl -s https://api.humansbutguided.com/api/lti/jwks | jq '.keys[0] | {kty, alg, use, kid}'

# Canvas platform JWKS (for HBG to verify id_token — self-hosted Canvas only)
curl -s "https://<canvas-host>/api/lti/security/jwks" | jq '[.keys[] | .kid]'

Then open an External Tool assignment as a student. A successful launch embeds HBG inside the assignment iframe — see Outcome after integration on the LTI overview for screenshots of the expected workspace.

Backend logs on HBG should include:

LTI launch complete | launch_id=<uuid>
GET /api/lti/launches/<uuid>/embed-context 200

If the iframe is blank or shows an error, see LTI troubleshooting.