Sign in
Home › For instructors › School IT

For your school's IT

Connect Prepara to your LMS once, and every course you choose can use it.

How we work with your IT

Write to us

An instructor or your IT team writes to admin@preparacourse.com, and a person answers.

Set Prepara up once

Your LMS administrator adds Prepara using the steps for your LMS below. For Canvas that is two keys, made in the same visit.

We finish and confirm

You send back the identifiers your LMS shows. We complete the link on our side and confirm by email.

Setup for your LMS

Two keys, made in one visit. One configuration URL fills every field of the first.

Part 1 of 2. The LTI key

It opens Prepara from your courses, sends the roster and receives grades.

What your administrator does

  1. In Canvas, open Admin, choose your account, then Developer Keys.Prepara connects through an LTI 1.3 developer key, and only an admin can make one.
  2. Press "+ Developer Key", then "+ LTI Key".This makes the key Canvas uses to open Prepara from your courses.
  3. Type "Prepara" in Key Name and your own email address in Owner Email. Notes can stay empty, or name the professor who asked for Prepara.These three fields are for your team: the key's name in your list of developer keys, and the person to ask about it. Prepara reads none of them.
  4. Paste this into Redirect URIs: https://preparacourse.com/api/lti/launchCanvas sends students only to an address listed here.
  5. Under Configure, set Method to "Enter URL" and paste this into JSON URL: https://preparacourse.com/api/lti/canvas-config.jsonCanvas reads every address, service, field and placement below from this URL, so nobody types them by hand.
  6. Check that these four LTI Advantage Services are on (Canvas turns them on from the URL):Each one is a thing Prepara does in your gradebook or roster, named on its line below. Each line gives the label Canvas shows, then the scope it stands for.
    • "Can create and view assignment data in the gradebook associated with the tool" (https://purl.imsglobal.org/spec/lti-ags/scope/lineitem): Prepara makes its own gradebook columns.
    • "Can create and update submission results for assignments associated with the tool" (https://purl.imsglobal.org/spec/lti-ags/scope/score): Prepara posts each student's score, with the time the work was done.
    • "Can view submission data for assignments associated with the tool" (https://purl.imsglobal.org/spec/lti-ags/scope/result.readonly): Prepara reads back each score in its own columns, to confirm it arrived and to see a grade typed by hand in Canvas.
    • "Can retrieve user data associated with the context the tool is installed in" (https://purl.imsglobal.org/spec/lti-nrps/scope/contextmembership.readonly): Prepara reads the course roster, so nobody types one.
  7. Check that Privacy Level reads "Public".Canvas then sends the student's name and email with each launch, and Prepara uses them to find the right account.
  8. Check that the Custom Fields box holds these seven lines (Canvas adds them from the URL):Canvas fills each line in on every launch; each line's reason is beside it below.
    • canvas_course_id=$Canvas.course.id: tells Prepara which Canvas course the student opened it from.
    • canvas_course_sis_id=$Canvas.course.sisSourceId: matches the course to the registrar's record.
    • canvas_section_ids=$Canvas.course.sectionIds: puts each student in their own section.
    • canvas_section_sis_ids=$Canvas.course.sectionSisSourceIds: matches each section to the registrar's record.
    • canvas_section_names=$com.instructure.User.sectionNames: shows professors the section names they know.
    • canvas_course_group_ids=$com.instructure.Course.groupIds: lets Prepara's course tools read the course's groups on their own.
    • assignment_due_at=$Canvas.assignment.dueAt.iso8601: gives Prepara the student's own due date, extensions included, when they open Prepara from an assignment.
  9. Check these four placements (Canvas sets them from the URL):A placement is a place in Canvas where Prepara appears. Each line names the place and what a professor or student does there.
    • Course Navigation, on in every course by default: the Prepara button in the course menu, which opens Prepara for students and professors.
    • Assignment Selection: a professor makes a Canvas assignment that opens one Prepara chapter, and that chapter's grade comes back to the assignment.
    • Link Selection: a professor adds a Prepara chapter to a module with the module's "+" button.
    • Modules (the menu at the top of the Modules page): a professor adds several Prepara chapters at once, into a new module.
  10. Press Save, then switch the key's State to ON.Canvas opens Prepara only from a key that is on.
  11. Copy the number in the Details column. It is the Client ID.The next step installs the app by this number.
  12. Open Admin, your account, Settings, Apps, View App Configurations, then "+ App". Choose Configuration Type "By Client ID", paste the Client ID, press Submit, then Install.Installed at the account level, every course, this term and later terms, can use Prepara with no new request.
  13. If Prepara was installed before today: open the existing Prepara developer key (the pencil), compare it with the current configuration URL, copy any missing custom fields, services and placements, then press Save. Keep the existing Client ID and deployment.Saving a manually entered key does not import new settings. Comparing and copying the missing entries updates the existing installation.

The values

Configuration URLhttps://preparacourse.com/api/lti/canvas-config.json
OIDC initiation URLhttps://preparacourse.com/api/lti/login
Target link and redirect URIhttps://preparacourse.com/api/lti/launch
JWKS URLhttps://preparacourse.com/api/lti/jwks
Custom fields (all seven lines)canvas_course_id=$Canvas.course.id
canvas_course_sis_id=$Canvas.course.sisSourceId

canvas_section_ids=$Canvas.course.sectionIds

canvas_section_sis_ids=$Canvas.course.sectionSisSourceIds

canvas_section_names=$com.instructure.User.sectionNames

canvas_course_group_ids=$com.instructure.Course.groupIds

assignment_due_at=$Canvas.assignment.dueAt.iso8601

Part 2 of 2. The API key

It lets Prepara read and update a course for the professor who approves it.

Today Prepara's books, rosters and grades run on the LTI key alone. Prepara's Canvas sign-in for this key is not finished, so we ask for the key now, in the same visit, and your team does not have to come back when Prepara starts using it. The key gives Prepara nothing on its own: Canvas asks each professor to sign in and approve before Prepara can use it in their course, and Prepara can then do only what that professor's own Canvas role allows, inside the scopes you check. The scopes below cover every call Prepara's code makes today. Prepara's Course Workspace can also read any other part of Canvas the professor can open, and prepare a change in that professor's own course, calendar, planner or profile, which no list of scopes can name ahead of time; with scopes enforced, Canvas refuses anything outside this list, and the Course Workspace tells the professor which part your key does not reach.

What your administrator does

  1. Back in Admin, Developer Keys, press "+ Developer Key", then "+ API Key".This is a second, separate key. The LTI key cannot use Canvas's API, and this one can, for a course whose professor signs in to Canvas and approves it.
  2. Type "Prepara API" in Key Name and your own email address in Owner Email (Notes can stay empty), then paste these two lines into Redirect URIs:After a professor approves, Canvas sends them back only to an address listed here. The first line is for Prepara's course tools, the second for Prepara's Course Workspace.
    • https://preparacourse.com/api/canvas/oauth/callback
    • https://preparacourse.com/workspace/oauth/canvas/callback
  3. Leave Redirect URI (Legacy), Vendor Code (LTI 2) and Icon URL empty. If the form shows Test Cluster Only, leave it off; if it shows Client Credentials Audience, leave it on Canvas.Canvas shows these fields on every API key, and Prepara uses none of them: its only return addresses are the two above, it is an LTI 1.3 tool, and the key is used with Canvas itself.
  4. Turn on Enforce Scopes, then check each of these 207 scopes:With scopes enforced, Canvas lets Prepara make only these calls, so your team decides exactly what Prepara may do. Each group says what Prepara does with it.
    • Who signed in (1): Prepara reads which Canvas person approved the connection.
    • The course, its sections and its people (5): Prepara reads the professor's courses, a course's sections and its enrolled people, so each student opens Prepara in their own section and nobody types a roster.
    • Student groups (9): Prepara reads a course's group sets and their members. When the professor asks, it writes a new group set with its groups and members (for example Peer Evaluations teams), and it deletes only a set Prepara wrote, after reading the course's discussions to check that none of them uses it.
    • Assignments, due dates and grades (12): Prepara reads the course's assignment groups and assignments, writes one new assignment group for its own gradebook columns, and writes each of its own columns into that group. It reads each student's own due date and extensions, which work came in late and the course's late policy, and reads back the scores it sent.
    • Course activity (3): Prepara reads a course's page views, participation and assignment results and shows them to the professor beside Prepara's own reading analytics.
    • Course Workspace: what it reads (67): Prepara's Course Workspace reads the professor's course in full: its record and settings, people, sections, assignments, quizzes, discussions, pages, modules, files, rubrics, outcomes, calendar, Inbox and course copies, and the professor's own profile.
    • Course Workspace: what it writes, each change approved by the professor (110): Prepara's Course Workspace writes a change only after the professor approves it on a preview of that change. It creates, changes or deletes: the course record (its name, dates, syllabus and status, and concluding or deleting a course); a new course in the professor's account; course settings and the course menu; sections and who is in them; enrollments; student groups; assignment groups; assignments, their dates, due-date overrides, extensions and peer reviews; grading periods and grading schemes; quizzes, their questions and their New Quizzes items; discussions, announcements and their replies; pages; modules and module items; files, folders and their usage rights; rubrics and where they are used; outcomes; calendar events; Inbox messages; course copies, imports and exports; blueprint course syncs; course pacing; AI experiences; content shared with another teacher; and the professor's own notification preferences.
  5. Turn on Allow Include Parameters.Some of the reads above ask Canvas to add related details, such as each student's section, and Canvas leaves those details out for a key with enforced scopes unless this is on.
  6. Press Save, then switch the key's State to ON.Canvas lets a professor approve Prepara only for a key that is on.
  7. Send the professor four values: your Canvas web address, the LTI key's Client ID, the Deployment ID (Settings, Apps, the gear beside Prepara, Deployment Id), and the API key's Client ID. Share the API key's secret (press Show Key) with admin@preparacourse.com only through your school's secure file-sharing or password-sharing tool, never in a plain email.Prepara links your school with these values. The secret proves to Canvas that a request comes from Prepara, so it travels only by a secure route.

The values

Redirect URIs (both lines)https://preparacourse.com/api/canvas/oauth/callback
https://preparacourse.com/workspace/oauth/canvas/callback
All 207 scopes, one per lineEvery scope in the groups below, ready to paste
Who signed in (1)url:GET|/api/v1/users/:id
The course, its sections and its people (5)url:GET|/api/v1/courses
url:GET|/api/v1/courses/:id

url:GET|/api/v1/courses/:course_id/sections

url:GET|/api/v1/courses/:course_id/users

url:GET|/api/v1/courses/:course_id/enrollments
Student groups (9)url:GET|/api/v1/courses/:course_id/group_categories
url:GET|/api/v1/group_categories/:group_category_id

url:GET|/api/v1/group_categories/:group_category_id/groups

url:GET|/api/v1/groups/:group_id/users

url:GET|/api/v1/courses/:course_id/discussion_topics

url:POST|/api/v1/courses/:course_id/group_categories

url:POST|/api/v1/group_categories/:group_category_id/groups

url:POST|/api/v1/groups/:group_id/memberships

url:DELETE|/api/v1/group_categories/:group_category_id
Assignments, due dates and grades (12)url:GET|/api/v1/courses/:course_id/assignment_groups
url:GET|/api/v1/courses/:course_id/assignment_groups/:assignment_group_id

url:POST|/api/v1/courses/:course_id/assignment_groups

url:GET|/api/v1/courses/:course_id/assignments

url:GET|/api/v1/courses/:course_id/assignments/:id

url:PUT|/api/v1/courses/:course_id/assignments/:id

url:GET|/api/v1/courses/:course_id/assignments/:assignment_id/overrides

url:GET|/api/v1/courses/:course_id/assignments/overrides

url:GET|/api/v1/courses/:course_id/assignments/:assignment_id/submissions

url:GET|/api/v1/courses/:course_id/assignments/:assignment_id/submissions/:user_id

url:GET|/api/v1/courses/:course_id/students/submissions

url:GET|/api/v1/courses/:id/late_policy
Course activity (3)url:GET|/api/v1/courses/:course_id/analytics/student_summaries
url:GET|/api/v1/courses/:course_id/analytics/activity

url:GET|/api/v1/courses/:course_id/analytics/assignments
Course Workspace: what it reads (67)url:GET|/api/quiz/v1/courses/:course_id/quizzes/:assignment_id
url:GET|/api/quiz/v1/courses/:course_id/quizzes/:assignment_id/items

url:GET|/api/v1/accounts

url:GET|/api/v1/accounts/:account_id/terms

url:GET|/api/v1/calendar_events

url:GET|/api/v1/conversations

url:GET|/api/v1/conversations/:id

url:GET|/api/v1/conversations/unread_count

url:GET|/api/v1/courses/:course_id/assignments/:assignment_id/overrides/:id

url:GET|/api/v1/courses/:course_id/content_exports/:id

url:GET|/api/v1/courses/:course_id/content_migrations

url:GET|/api/v1/courses/:course_id/content_migrations/:id

url:GET|/api/v1/courses/:course_id/content_migrations/migrators

url:GET|/api/v1/courses/:course_id/custom_gradebook_columns

url:GET|/api/v1/courses/:course_id/discussion_topics/:topic_id

url:GET|/api/v1/courses/:course_id/discussion_topics/:topic_id/entries

url:GET|/api/v1/courses/:course_id/discussion_topics/:topic_id/entries/:entry_id/replies

url:GET|/api/v1/courses/:course_id/discussion_topics/:topic_id/entry_list

url:GET|/api/v1/courses/:course_id/discussion_topics/:topic_id/view

url:GET|/api/v1/courses/:course_id/external_tools

url:GET|/api/v1/courses/:course_id/features

url:GET|/api/v1/courses/:course_id/files

url:GET|/api/v1/courses/:course_id/files/:id

url:GET|/api/v1/courses/:course_id/folders

url:GET|/api/v1/courses/:course_id/folders/:id

url:GET|/api/v1/courses/:course_id/grading_periods/:id

url:GET|/api/v1/courses/:course_id/media_objects

url:GET|/api/v1/courses/:course_id/modules

url:GET|/api/v1/courses/:course_id/modules/:context_module_id/assignment_overrides

url:GET|/api/v1/courses/:course_id/modules/:id

url:GET|/api/v1/courses/:course_id/modules/:module_id/items

url:GET|/api/v1/courses/:course_id/modules/:module_id/items/:id

url:GET|/api/v1/courses/:course_id/outcome_group_links

url:GET|/api/v1/courses/:course_id/outcome_groups/:id

url:GET|/api/v1/courses/:course_id/outcome_groups/:id/outcomes

url:GET|/api/v1/courses/:course_id/pages

url:GET|/api/v1/courses/:course_id/pages/:url_or_id

url:GET|/api/v1/courses/:course_id/pages/:url_or_id/date_details

url:GET|/api/v1/courses/:course_id/pages/:url_or_id/revisions/:revision_id

url:GET|/api/v1/courses/:course_id/quizzes

url:GET|/api/v1/courses/:course_id/quizzes/:id

url:GET|/api/v1/courses/:course_id/quizzes/:quiz_id/date_details

url:GET|/api/v1/courses/:course_id/quizzes/:quiz_id/groups

url:GET|/api/v1/courses/:course_id/quizzes/:quiz_id/groups/:id

url:GET|/api/v1/courses/:course_id/quizzes/:quiz_id/questions

url:GET|/api/v1/courses/:course_id/quizzes/:quiz_id/questions/:id

url:GET|/api/v1/courses/:course_id/quizzes/:quiz_id/submissions

url:GET|/api/v1/courses/:course_id/root_outcome_group

url:GET|/api/v1/courses/:course_id/rubrics

url:GET|/api/v1/courses/:course_id/rubrics/:id

url:GET|/api/v1/courses/:course_id/settings

url:GET|/api/v1/courses/:course_id/tabs

url:GET|/api/v1/courses/:course_id/users/:id

url:GET|/api/v1/files/:id

url:GET|/api/v1/folders/:id

url:GET|/api/v1/folders/:id/files

url:GET|/api/v1/folders/:id/folders

url:GET|/api/v1/groups/:group_id

url:GET|/api/v1/groups/:group_id/users/:user_id

url:GET|/api/v1/sections/:id

url:GET|/api/v1/sections/:section_id/students/submissions

url:GET|/api/v1/users/:user_id/communication_channels

url:GET|/api/v1/users/:user_id/communication_channels/:communication_channel_id/notification_preferences

url:GET|/api/v1/users/:user_id/content_shares/:id

url:GET|/api/v1/users/:user_id/content_shares/sent

url:GET|/api/v1/users/:user_id/profile

url:GET|/api/v1/users/:user_id/tokens/:id
Course Workspace: what it writes, each change approved by the professor (110)url:DELETE|/api/quiz/v1/courses/:course_id/quizzes/:assignment_id
url:DELETE|/api/v1/conversations/:id

url:DELETE|/api/v1/courses/:course_id/assignment_groups/:assignment_group_id

url:DELETE|/api/v1/courses/:course_id/assignments/:assignment_id/overrides/:id

url:DELETE|/api/v1/courses/:course_id/assignments/:assignment_id/submissions/:user_id/comments/:id

url:DELETE|/api/v1/courses/:course_id/assignments/:id

url:DELETE|/api/v1/courses/:course_id/discussion_topics/:topic_id

url:DELETE|/api/v1/courses/:course_id/discussion_topics/:topic_id/entries/:entry_id/read

url:DELETE|/api/v1/courses/:course_id/discussion_topics/:topic_id/entries/:id

url:DELETE|/api/v1/courses/:course_id/discussion_topics/:topic_id/read

url:DELETE|/api/v1/courses/:course_id/discussion_topics/:topic_id/subscribed

url:DELETE|/api/v1/courses/:course_id/enrollments/:id

url:DELETE|/api/v1/courses/:course_id/modules/:id

url:DELETE|/api/v1/courses/:course_id/modules/:module_id/items/:id

url:DELETE|/api/v1/courses/:course_id/outcome_groups/:id/outcomes/:outcome_id

url:DELETE|/api/v1/courses/:course_id/pages/:url_or_id

url:DELETE|/api/v1/courses/:course_id/quizzes/:id

url:DELETE|/api/v1/courses/:course_id/quizzes/:quiz_id/groups/:id

url:DELETE|/api/v1/courses/:course_id/quizzes/:quiz_id/questions/:id

url:DELETE|/api/v1/courses/:course_id/rubric_associations/:id

url:DELETE|/api/v1/courses/:course_id/rubrics/:id

url:DELETE|/api/v1/courses/:id

url:DELETE|/api/v1/files/:id

url:DELETE|/api/v1/groups/:group_id

url:DELETE|/api/v1/groups/:group_id/users/:user_id

url:DELETE|/api/v1/sections/:id

url:DELETE|/api/v1/sections/:id/crosslist

url:PATCH|/api/quiz/v1/courses/:course_id/quizzes/:assignment_id

url:PATCH|/api/v1/courses/:course_id/grading_periods/batch_update

url:POST|/api/quiz/v1/courses/:course_id/quizzes

url:POST|/api/quiz/v1/courses/:course_id/quizzes/:assignment_id/accommodations

url:POST|/api/quiz/v1/courses/:course_id/quizzes/:assignment_id/items

url:POST|/api/v1/accounts/:account_id/courses

url:POST|/api/v1/calendar_events

url:POST|/api/v1/conversations

url:POST|/api/v1/conversations/:id/add_message

url:POST|/api/v1/conversations/:id/add_recipients

url:POST|/api/v1/conversations/:id/remove_messages

url:POST|/api/v1/conversations/mark_all_as_read

url:POST|/api/v1/courses/:course_id/ai_experiences

url:POST|/api/v1/courses/:course_id/assignments

url:POST|/api/v1/courses/:course_id/assignments/:assignment_id/allocate

url:POST|/api/v1/courses/:course_id/assignments/:assignment_id/duplicate

url:POST|/api/v1/courses/:course_id/assignments/:assignment_id/extensions

url:POST|/api/v1/courses/:course_id/assignments/:assignment_id/overrides

url:POST|/api/v1/courses/:course_id/assignments/:assignment_id/submissions/:submission_id/peer_reviews

url:POST|/api/v1/courses/:course_id/content_exports

url:POST|/api/v1/courses/:course_id/content_migrations

url:POST|/api/v1/courses/:course_id/course_pacing

url:POST|/api/v1/courses/:course_id/discussion_topics

url:POST|/api/v1/courses/:course_id/discussion_topics/:topic_id/entries

url:POST|/api/v1/courses/:course_id/discussion_topics/:topic_id/entries/:entry_id/rating

url:POST|/api/v1/courses/:course_id/discussion_topics/:topic_id/entries/:entry_id/replies

url:POST|/api/v1/courses/:course_id/discussion_topics/reorder

url:POST|/api/v1/courses/:course_id/enrollments

url:POST|/api/v1/courses/:course_id/files

url:POST|/api/v1/courses/:course_id/grading_standards

url:POST|/api/v1/courses/:course_id/modules

url:POST|/api/v1/courses/:course_id/modules/:module_id/items

url:POST|/api/v1/courses/:course_id/outcome_groups/:id/outcomes

url:POST|/api/v1/courses/:course_id/pages

url:POST|/api/v1/courses/:course_id/pages/:url_or_id/duplicate

url:POST|/api/v1/courses/:course_id/pages/:url_or_id/revisions/:revision_id

url:POST|/api/v1/courses/:course_id/quizzes

url:POST|/api/v1/courses/:course_id/quizzes/:id/reorder

url:POST|/api/v1/courses/:course_id/quizzes/:quiz_id/extensions

url:POST|/api/v1/courses/:course_id/quizzes/:quiz_id/groups

url:POST|/api/v1/courses/:course_id/quizzes/:quiz_id/groups/:id/reorder

url:POST|/api/v1/courses/:course_id/quizzes/:quiz_id/questions

url:POST|/api/v1/courses/:course_id/restore/:version_id

url:POST|/api/v1/courses/:course_id/rubric_associations

url:POST|/api/v1/courses/:course_id/rubrics

url:POST|/api/v1/courses/:course_id/sections

url:POST|/api/v1/sections/:id/crosslist/:new_course_id

url:POST|/api/v1/users/:user_id/content_shares

url:POST|/api/v1/users/:user_id/content_shares/:id/add_users

url:PUT|/api/v1/conversations

url:PUT|/api/v1/conversations/:id

url:PUT|/api/v1/courses/:course_id/assignment_groups/:assignment_group_id

url:PUT|/api/v1/courses/:course_id/assignments/:assignment_id/overrides/:id

url:PUT|/api/v1/courses/:course_id/assignments/:assignment_id/submissions/:user_id

url:PUT|/api/v1/courses/:course_id/assignments/bulk_update

url:PUT|/api/v1/courses/:course_id/blueprint_templates/:template_id/restrict_item

url:PUT|/api/v1/courses/:course_id/blueprint_templates/:template_id/update_associations

url:PUT|/api/v1/courses/:course_id/discussion_topics/:topic_id

url:PUT|/api/v1/courses/:course_id/discussion_topics/:topic_id/entries/:entry_id/read

url:PUT|/api/v1/courses/:course_id/discussion_topics/:topic_id/entries/:id

url:PUT|/api/v1/courses/:course_id/discussion_topics/:topic_id/read

url:PUT|/api/v1/courses/:course_id/discussion_topics/:topic_id/subscribed

url:PUT|/api/v1/courses/:course_id/enrollments/:id/reactivate

url:PUT|/api/v1/courses/:course_id/modules/:context_module_id/assignment_overrides

url:PUT|/api/v1/courses/:course_id/modules/:id

url:PUT|/api/v1/courses/:course_id/modules/:id/relock

url:PUT|/api/v1/courses/:course_id/modules/:module_id/items/:id

url:PUT|/api/v1/courses/:course_id/pages/:url_or_id

url:PUT|/api/v1/courses/:course_id/pages/:url_or_id/date_details

url:PUT|/api/v1/courses/:course_id/quizzes/:id

url:PUT|/api/v1/courses/:course_id/quizzes/:quiz_id/date_details

url:PUT|/api/v1/courses/:course_id/quizzes/:quiz_id/groups/:id

url:PUT|/api/v1/courses/:course_id/quizzes/:quiz_id/questions/:id

url:PUT|/api/v1/courses/:course_id/rubric_associations/:id

url:PUT|/api/v1/courses/:course_id/rubrics/:id

url:PUT|/api/v1/courses/:course_id/settings

url:PUT|/api/v1/courses/:course_id/tabs/:tab_id

url:PUT|/api/v1/courses/:course_id/usage_rights

url:PUT|/api/v1/courses/:id

url:PUT|/api/v1/files/:id

url:PUT|/api/v1/folders/:id

url:PUT|/api/v1/sections/:id

url:PUT|/api/v1/users/self/communication_channels/:communication_channel_id/notification_preferences/:notification

What Prepara does in your Canvas gradebook

  • Prepara makes its own gradebook columns, such as one for each chapter a course grades. Canvas lets the LTI key write only to columns that belong to Prepara.
  • Canvas holds every due date. Prepara never sets or changes a due date: professors set them in Canvas, and an extension given in Canvas stays as it is.
  • A chapter's score goes to Canvas with the time the student did the work, so Canvas can tell on-time work from late work and apply the course's own late policy to it.
  • Canvas does not put a 0 in a tool's column for missing work, so Prepara does. One hour after a chapter's due date in Canvas, each student on the course roster who has done no work gets a 0 with this comment: "0 because no work was submitted by the due date. As soon as you submit the work, your real score replaces this 0."
  • When the student submits the work, the real score replaces the 0, and Canvas applies the course's late policy to it. If the due date moves later, Prepara removes its 0. A chapter with no due date in Canvas never gets a 0.
  • A grade typed by hand in Canvas always wins. Prepara never sends a score over it, higher or lower.
  • All of this runs on the LTI key. Your team sets nothing else for grades; each professor chooses the course's late policy in Canvas, as for any assignment.

A registration and a deployment, two short forms.

What your administrator does

  1. In Admin Tools, open Manage Extensibility, the LTI Advantage tab, Register Tool, Standard. Enter the values below and tick Assignment and Grade Services and Names and Role Provisioning Services.
  2. Keep the Registration Details Brightspace shows.
  3. Create a deployment with the same services. Under Security Settings tick Org Unit Information, User Information and Link Information, and add the org units that should have Prepara.
  4. Send back the Registration Details and the Deployment ID.

The values

NamePrepara Courseware
Domainhttps://preparacourse.com
Redirect URLshttps://preparacourse.com/api/lti/launch
OpenID Connect Login URLhttps://preparacourse.com/api/lti/login
Target Link URIhttps://preparacourse.com/api/lti/launch
Keyset URLhttps://preparacourse.com/api/lti/jwks

One Client ID; Blackboard fills the rest.

What your administrator does

  1. Email admin@preparacourse.com for Prepara's Blackboard Client ID.
  2. In the Administrator Panel, under Integrations, open LTI Tool Providers, press Register LTI 1.3/Advantage Tool, paste the Client ID and submit.
  3. Set Tool Status to Approved, tick the three User Fields to Send (role, name, email address), and set grade service and membership service access to Yes.
  4. Send back your Blackboard web address and the Deployment ID.

The values

OIDC initiation URL (filled for you)https://preparacourse.com/api/lti/login
Target link and redirect URI (filled for you)https://preparacourse.com/api/lti/launch
JWKS URL (filled for you)https://preparacourse.com/api/lti/jwks

One form. Moodle 4.0 or newer is recommended.

What your administrator does

  1. In Site administration, open Plugins, Activity modules, External tool, Manage tools, and press configure a tool manually. Enter the values below and choose Show in activity chooser.
  2. Under Services, use Assignment and Grade Services for grade sync and column management, and Names and Role Provisioning to retrieve members' information.
  3. Under Privacy, set Share launcher's name, Share launcher's email and Accept grades from the tool to Always.
  4. Save, open Tool configuration details, and send everything it shows.

The values

Tool namePrepara Courseware
Tool URLhttps://preparacourse.com/api/lti/launch
LTI versionLTI 1.3
Public key typeKeyset URL
Public keysethttps://preparacourse.com/api/lti/jwks
Initiate login URLhttps://preparacourse.com/api/lti/login
Redirection URI(s)https://preparacourse.com/api/lti/launch

What Prepara reads and writes

Grades

Assignment and Grade Services (line items, scores, results). Prepara makes its own gradebook columns and posts each score with the time the work was done. Canvas keeps the due dates and the late policy, and a grade typed by hand in Canvas always wins.

Roster

Names and Role Provisioning Services: names and roles, and group memberships for the tools that use groups, to match students to their Prepara section.

Sign-in

Each launch carries the person's name and email. Students and instructors open Prepara from the course, already signed in, with no separate password.

Due dates

When a student opens Prepara from a Canvas assignment, Canvas sends Prepara that student's own due date, extensions included. Prepara never sets or changes a due date.

Course data, with the professor's approval

Through the second Canvas key, and only after a professor signs in to Canvas and approves: groups, assignments, late work, course activity and course content, within the scopes your team checks. Prepara's Canvas sign-in for this key is not finished.

Access

Connecting your LMS never changes who has paid access; each student's own Prepara account decides what they can read.

Documents for your review

Privacy Policy

Student records are handled under FERPA, with Prepara acting as a school official. We sign a data processing agreement on request.

Accessibility

Built to WCAG 2.2 Level AA, with an Accessibility Conformance Report (VPAT 2.4) self-assessed on 24 July 2026.

Questions from IT

Security reviews, data agreements and setup questions all go to the same address.

Talk with Prepara

Ask about a book, a tool or your own course. We reply to every request.

Contact us