Connect Prepara to your LMS once, and every course you choose can use it.
An instructor or your IT team writes to admin@preparacourse.com, and a person answers.
Your LMS administrator adds Prepara using the steps for your LMS below. For Canvas that is two keys, made in the same visit.
You send back the identifiers your LMS shows. We complete the link on our side and confirm by email.
Two keys, made in one visit. One configuration URL fills every field of the first.
It opens Prepara from your courses, sends the roster and receives grades.
https:// preparacourse. com/ api/ lti/ canvas-config. jsonhttps:// preparacourse. com/ api/ lti/ loginhttps:// preparacourse. com/ api/ lti/ launchhttps:// preparacourse. com/ api/ lti/ jwkscanvas_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. iso8601It 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.
https:// preparacourse. com/ api/ canvas/ oauth/ callback
https:// preparacourse. com/ workspace/ oauth/ canvas/ callbackurl:GET|/ api/ v1/ users/ :idurl: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/ enrollmentsurl: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_idurl: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_policyurl: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/ assignmentsurl: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/ :idurl: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/ :notificationA registration and a deployment, two short forms.
Prepara Coursewarehttps:// preparacourse. comhttps:// preparacourse. com/ api/ lti/ launchhttps:// preparacourse. com/ api/ lti/ loginhttps:// preparacourse. com/ api/ lti/ launchhttps:// preparacourse. com/ api/ lti/ jwksOne Client ID; Blackboard fills the rest.
https:// preparacourse. com/ api/ lti/ loginhttps:// preparacourse. com/ api/ lti/ launchhttps:// preparacourse. com/ api/ lti/ jwksOne form. Moodle 4.0 or newer is recommended.
Prepara Coursewarehttps:// preparacourse. com/ api/ lti/ launchLTI 1. 3Keyset URLhttps:// preparacourse. com/ api/ lti/ jwkshttps:// preparacourse. com/ api/ lti/ loginhttps:// preparacourse. com/ api/ lti/ launchAssignment 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.
Names and Role Provisioning Services: names and roles, and group memberships for the tools that use groups, to match students to their Prepara section.
Each launch carries the person's name and email. Students and instructors open Prepara from the course, already signed in, with no separate password.
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.
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.
Connecting your LMS never changes who has paid access; each student's own Prepara account decides what they can read.
Student records are handled under FERPA, with Prepara acting as a school official. We sign a data processing agreement on request.
Built to WCAG 2.2 Level AA, with an Accessibility Conformance Report (VPAT 2.4) self-assessed on 24 July 2026.
Security reviews, data agreements and setup questions all go to the same address.
Ask about a book, a tool or your own course. We reply to every request.