Skip to content

Integrate examina.io with Canvas

Connect examina.io to a Canvas root account, then let teachers add published assessments to assignments without copying exam links. Learners open the assessment inside Canvas without a second sign-in, and examina.io returns each result to the corresponding Canvas gradebook column.

Validate before a live assessment

Connect and validate the complete workflow in a non-production Canvas course with fictional users before enabling it for a live assessment.

The screenshots use a fictional Northbridge College course, Introduction to Biology (BIO 101), and an assessment named Cell Structure and Function. Your institution, Canvas hostname, identifiers, and course names will be different.

What the integration provides

  • One Canvas sign-in: learners do not sign in to examina.io again when they open an assignment from Canvas.
  • Published-assessment selection: LTI Deep Linking lets a teacher choose the exact exam while creating an External Tool assignment.
  • Course-aware placement: the selected publication is bound to the Canvas course and assignment that created it.
  • Grade return: LTI Assignment and Grade Services (AGS) sends the score to the correct learner and gradebook column.
  • Optional course roster: Names and Roles Provisioning Services (NRPS) can provide the minimum course membership data required by an approved workflow.

Canvas calls this pattern an assignment_selection placement. Its official documentation confirms that the placement uses Deep Linking, loads the chosen tool assessment for assigned students, and can synchronize grades through LTI grading services.

Before you start

You need:

  • a Root or Administrator account in examina.io;
  • a Canvas root-account administrator who can manage Developer Keys and Apps;
  • an instructor and a fictional learner in a non-production Canvas course;
  • at least one exam imported and published in examina.io Manager;
  • public HTTPS addresses with trusted certificates for both systems; and
  • an institution-approved plan for the learner data that Canvas may disclose.

Keep both systems' clocks accurate. LTI login messages and signed responses expire quickly, so a large clock difference can reject otherwise correct configuration.

How Canvas and examina.io exchange settings

Canvas creates a Client ID and Deployment ID that examina.io needs. Examina.io creates a registration-specific public-key URL that Canvas needs. During the preview, configuration therefore has two passes:

  1. create a provisional Canvas LTI 1.3 Developer Key and install its App;
  2. copy Canvas's identifiers and platform endpoints into examina.io;
  3. copy the final examina.io endpoints back into the Canvas key; and
  4. turn the App on, make it available, and validate the full workflow.

Keep the provisional App unavailable

If Canvas requires a public-key URL during the first pass, use a temporary HTTPS JSON Web Key Set endpoint controlled by your institution. It may return an empty set ({"keys":[]}). Keep the key off and the App unavailable until you replace it with the registration-specific examina.io Public key set (JWKS) URL in Step 3. Never use a local, Docker, or private hostname in a production Canvas key.

1. Create the provisional Canvas key and App

Sign in with a Canvas root-account administrator account. Select Admin in the global navigation, then choose your institution's root account. If Canvas first shows the account list, select the root account name.

Select the institution's Canvas root account

The account navigation must include Developer keys and Apps. If either item is missing, your Canvas role does not have the required root-account permission; ask the institution's Canvas administrator to perform this setup.

Open Developer keys from the Canvas root-account navigation

Open Developer keys, then select + Developer Key.

Open the Canvas Developer keys page

Choose LTI Key. Canvas may also show LTI Registration; use that option only when examina.io has supplied a one-time Dynamic Registration URL.

Choose LTI Key from the Canvas Developer Key menu

Choose Manual Entry, then complete the key settings:

  1. Enter examina.io Assessments as the key name and title.
  2. Add the email address of the administrator responsible for this integration.
  3. Add https://www.examina.io/lti/launch and https://www.examina.io/lti/deep-link as separate redirect URIs.
  4. Enter https://www.examina.io/lti/launch as the Target Link URI.
  5. Enter https://www.examina.io/lti/login as the OpenID Connect Initiation URL.
  6. Set JWK Method to Public JWK URL and enter the provisional key-set URL described above.

Enter the public examina.io URLs in a Canvas LTI key

The JWKS value is registration-specific

If you use https://www.examina.io/lti/jwks/your-registration-id during the provisional pass, your-registration-id is only a placeholder. Step 3 replaces the entire value with the exact Public key set (JWKS) URL shown by examina.io.

In LTI Advantage Services, enable only the five scopes needed for the services in this guide:

  • create and view assignment data;
  • view assignment data;
  • view submission data;
  • create and update submission results; and
  • retrieve user data associated with the context.

The first four support grade return through AGS. The final scope supports the optional NRPS course roster; leave it disabled when you do not need roster access.

Select the Canvas AGS and optional NRPS scopes

Under Placements, add Assignment Selection. Add Course Navigation only if your institution also wants a course-level examina.io entry point.

Add Assignment Selection and optional Course Navigation placements

Save the key, copy its Client ID, and keep the key Off. Open Admin → your root account → Apps → Manage, install the App using the Client ID, and copy its Deployment ID.

Canvas also supports Dynamic Registration, but its registration APIs are currently marked beta. Use a one-time Dynamic Registration URL only when it is explicitly supplied by examina.io for your preview; otherwise use the manual two-pass flow above.

2. Add the Canvas registration in examina.io

As an examina.io Root or Administrator:

  1. Open Home → Settings.
  2. Find Bring Examina into your LMS and select Add registration.
  3. Choose Canvas and enter a descriptive name, such as Northbridge College Canvas.
  4. Enter the Canvas values shown below.
examina.io field Canvas value
Issuer URL https://<your-canvas-host>
Client ID The LTI Developer Key's Client ID
Deployment ID The installed App's Deployment ID
Authorization endpoint https://<your-canvas-host>/api/lti/authorize_redirect
Token endpoint https://<your-canvas-host>/login/oauth2/token
LMS public keys (JWKS) URL https://<your-canvas-host>/api/lti/security/jwks

For hosted Canvas, replace <your-canvas-host> with the exact hostname your users sign in to. Do not add a trailing path to the Issuer URL, and do not use Canvas's generic OAuth JWKS endpoint in the LMS public-keys field.

  1. Enable Assessment selection (Deep Linking) and Grade return (AGS).
  2. Enable Course roster (NRPS) only if the matching Canvas scope was approved and granted.
  3. Select Save registration.

Add a Canvas LTI 1.3 registration in examina.io

The saved card displays the exact OIDC login initiation, LTI launch, Deep Linking, and registration-specific Public key set (JWKS) URLs. Keep that card open for the next step.

3. Finish and activate the Canvas App

Edit the Canvas LTI Developer Key and replace every provisional tool value with the exact value shown by examina.io:

Canvas LTI key field Value from examina.io
OpenID Connect Initiation URL OIDC login initiation
Target Link URI LTI launch
Redirect URI LTI launch and Deep Linking URLs, one per line
Assignment Selection target link Deep Linking
Public JWK URL Public key set (JWKS)
Tool Icon URL https://www.examina.io/img/logo128.png

The production browser-facing routes begin with https://www.examina.io. For example, the launch URL is https://www.examina.io/lti/launch. Always copy the complete values from the registration card because the JWKS URL includes the registration identifier.

Save the key and turn it On. In Apps → Manage, open examina.io assessments, confirm that the App is on, and make it available to the root account or to the approved sub-accounts and courses.

The Tool Icon URL gives instructors and administrators a recognizable examina.io logo in Canvas. If an existing installation still shows Canvas's generic external-tool icon, update the Developer Key with this value and refresh or reinstall the App so Canvas reloads its registration metadata.

Confirm examina.io Assessments is on and up to date in Canvas Apps

If the App shows Not Available, open its availability setting, choose the root account or an approved sub-account, select Available, and save. Limit availability to the institutions, sub-accounts, or courses approved for the integration.

Make the Canvas App available to the approved account

Return to examina.io and activate the registration. A suspended or revoked registration cannot accept new launches.

4. Add a published assessment to a Canvas assignment

As an instructor in the destination course:

  1. Open Assignments → + Assignment.
  2. Enter the learner-facing assignment name and maximum points.
  3. Set Submission type to External tool.
  4. Select Find, then choose Add an examina.io assessment.
  5. Select the intended published exam and choose Add selected exam.

Choose a published examina.io assessment from Canvas

Canvas returns to the assignment form with the launch URL selected. Confirm the assignment name, points, assignment access, dates, and attempt policy.

A Canvas External Tool assignment using the production examina.io launch URL

Choose Save & publish, then open the assignment once as the instructor. Confirm that the expected assessment appears and that Canvas does not prompt for a separate examina.io sign-in.

5. Verify the learner experience

Use a fictional learner enrolled in the course:

  1. Sign in to Canvas as the learner.
  2. Open BIO 101 → Assignments → Cell Structure and Function.
  3. Confirm that the expected exam opens inside the Canvas assignment.
  4. Begin, complete, and submit the assessment.

A published examina.io assessment embedded in a Canvas assignment

The LTI launch verifies the Canvas platform, deployment, course, assignment, learner, and selected publication. A copied launch URL is not a replacement for opening the assignment from Canvas.

6. Verify the returned grade

After submission, open the Canvas grade view as the learner or the Gradebook as an instructor. Confirm that the result appears for the correct assignment and learner.

The completed examina.io assessment returned to the Canvas gradebook

Grade delivery is queued separately from exam submission, so a temporary Canvas outage does not turn a completed assessment into a failed submission. The score may take a short time to appear. Refresh the grade view before investigating a missing result.

Production validation checklist

Before enabling the App for a live course, verify all of the following with a non-production course and fictional users:

  • The Canvas key and App are on and available only where intended.
  • The examina.io registration is active in the correct organization and environment.
  • Canvas uses the registration-specific examina.io JWKS URL.
  • Examina.io uses Canvas's /api/lti/security/jwks endpoint.
  • Deep Linking lists only assessments the instructor may select.
  • The assignment launches the intended published assessment inside Canvas.
  • A learner launches without a second sign-in.
  • A completed score reaches the correct learner and gradebook column.
  • Reopening or refreshing the assignment does not duplicate a line item.
  • NRPS is disabled when course-roster access is unnecessary.
  • Every production-facing URL uses public HTTPS and a trusted certificate.

Troubleshooting

Symptom What to check
examina.io assessments is missing from Find Confirm the key is on, the App is available to this course, and the key includes the Assignment Selection placement with LtiDeepLinkingRequest.
The picker opens but Canvas rejects the selected exam Confirm Canvas can fetch the exact registration-specific examina.io JWKS URL from its server network. Browser reachability alone is not enough. Also verify Client ID, Deployment ID, issuer, and clock accuracy.
The assignment opens a blank frame or refuses the launch Check the OIDC initiation URL, launch URL, redirect URIs, trusted HTTPS certificate, iframe policy, and browser third-party-cookie settings. Remove every local, Docker, and private hostname from production configuration.
The wrong assessment opens Edit the assignment and select the publication again. Do not copy an assignment between environments without reselecting its content.
The grade does not appear Confirm AGS scopes and Grade return are enabled, the assignment has points, and the App is still available. Allow a short time for queued delivery.
Course roster is unavailable Confirm the NRPS scope and Course roster are enabled. Launch and grade return can continue without roster access.
Canvas reports a signing-key error Canvas must use the registration-specific examina.io JWKS URL, and examina.io must use https://<your-canvas-host>/api/lti/security/jwks. Confirm that neither endpoint redirects to a sign-in page.

For Canvas's current platform behavior and terminology, see Instructure's official LTI registration, Assignment Selection placement, Deep Linking, and grading documentation.