Clever LMS Connect - LMS Provider Differences
Review LMS-specific differences in assignment and submission behavior across Canvas, Google Classroom, and Schoology.
Clever Complete Agreement RequiredThis feature is included with a Clever Complete subscription. Sign up here or email your Application Success Manager to learn more.
v3.1 OnlyLMS Connect API endpoints are only available on v3.1 of the Clever API. If you are interested in getting started with LMS Connect, reach out to your Application Success Manager (for existing partners) or to [email protected].
This product is only available to existing Secure Sync partners.To learn more about Secure Sync, please review this documentation.
Table of Contents
Overview
Canvas
Google Classroom
Schoology
Overview
Use this page to account for LMS-specific assignment and submission behavior in Clever LMS Connect.
LMS Connect provides a consistent integration framework across LMSs, but Canvas, Google Classroom, and Schoology do not support every assignment or submission field in the same way. Review these differences before building request validation, handling writeback errors, or troubleshooting district-specific behavior.
Canvas
Assignments
| Behavior | Description | Notes |
|---|---|---|
| “Submitting” in UI shows “nothing” or is blank | When the assignment was created, the submission_types field was likely left blank. Confirm with a GET /v3.1/sections/{id}/assignments/{id} request. | Make a PATCH /v3.1/sections/{id}/assignments/{id} request and update submission_types to resolve. |
| Unsupported fields | start_date, term_id | In Canvas, start_date is set to the same value as display_date. Use display_date instead. |
Returned assignment state | Clever derives assignment state from the Canvas assignment publishing and date state. | draft: assignment is not published in Canvas. scheduled: assignment is published and has a display_date in the future. locked: assignment is published and has an end_date in the past. open: assignment is published and is not scheduled or locked. |
assignee_mode and assignee_ids | Canvas can have multiple assignment override types, including section overrides and individual student overrides. | If individual overrides exist, Clever returns assignee_mode as individuals and returns the individual IDs from student overrides. If an assignment only has section overrides and an update changes assignee_mode to individuals, the matching section override is deleted. If both section and individual overrides exist, the section override is not deleted. |
| Date fields with individual overrides | Individual overrides created directly in Canvas can have different date fields. | If individual overrides have different dates, assignment date fields returned by Clever may differ from values previously set through the API. |
grading_type support | Canvas supports points, percent, pass_fail, and letter_grade. | Submission grading behavior depends on the assignment grading_type. See the Canvas submissions section for details. |
Submissions
| Behavior | Description | Notes |
|---|---|---|
| Missing “Max Attempts” value in Canvas | When the assignment was created, max_attempts was set to -1. Confirm with a GET /v3.1/sections/{id}/assignments/{id} request. | If max_attempts is not included when creating the assignment, it defaults to -1. Update max_attempts to a positive integer value. |
| Unsupported fields | Direct updates to state, override_due_date, last_modified; grader_id except when used with grade_comment | Canvas does not support arbitrary submission state transitions through the API. Canvas only supports grader_id when making grade comments on a submission. If grader_id is included without grade_comment, Canvas ignores it. |
Updating submission state | Canvas does not support directly updating submission state through the API. | Submission state is automatically updated to submitted when an attachment is included in the update request. Canvas does not support returned or reclaimed through this flow. |
| SpeedGrader submission updates | Include the state field in Canvas submission request bodies when you need the submission to work correctly in SpeedGrader. | Canvas still determines the final submission state. Including state does not enable arbitrary state transitions, but it is required for the SpeedGrader submission workflow. |
| Updating submissions on draft assignments | Updating submissions on unpublished Canvas assignments is not supported. | If an assignment has state: draft, the Clever API returns UNSUPPORTED_OPERATION with the message Canvas does not allow updating submissions on unpublished (draft) assignments. The teacher must publish the assignment in Canvas before submissions can be updated. |
| Flags | Canvas supports one submission flag. | If multiple flags are provided, Clever updates the first supported flag in this priority order: excused, missing, late. |
grade and grade_points | Canvas supports grade, but grade and grade_points should not be updated at the same time. Updating one can change the other. | Behavior depends on the assignment grading_type. See the grading rules below. |
Grading with points | Use grade_points. | grade_points is required when the assignment grading_type is points. |
Grading with percent | grade must be formatted as a percentage, such as 10% or 1.0%. | Updating grade_points changes grade to the equivalent percentage. For example, if the assignment is worth 80 points and grade_points is updated to 40, grade becomes 50%. |
Grading with pass_fail | grade_points can only be 0 or 100. | grade can only be pass, fail, complete, or incomplete. |
Grading with letter_grade | The Canvas course must have a grading scheme enabled. | grade must be a value in the Canvas grading scheme. If grade_points is updated, Canvas sets grade to the equivalent value in the grading scheme. |
Empty string values ignored for grade_comment | If a grade_comment value has previously been provided and a later PATCH sends an empty string, Canvas ignores the empty string. | Testing with other LMSs yielded different results: Schoology updated grade_comment to an empty string, and Google Classroom ignores grade_comment. |
Returned grade_comment | If there are multiple comments on a submission, Clever returns the latest comment by the submission grader when available. | If a comment by the grader is not found, Clever returns the latest comment. |
| Updating grade comments | Include grade, grade_comment, and grader_id when adding grade comments to a student submission. | Always include grader_id when adding grade comments. If grade_comment is blank, Canvas ignores the field. |
| Submission attachments | Canvas allows only one attachment per submission. | Only link and text submission attachments are supported. link attachments must include url using http:// or https://. text attachments must include text. Attachment description is ignored. |
Google Classroom
Requires districts to have the GCRI integration with Clever.
Assignments
| Behavior | Description | Notes |
|---|---|---|
| Unsupported fields | start_date, end_date, grading_scale, submission_types, term_id, max_attempts, category_id | These fields are not supported for Google Classroom assignments. |
Assignment state | Assignment state is set to open by default to match existing Clever behavior. Google Classroom does not support locked assignment state. | Clever returns open if the Google Classroom assignment is published. Clever returns scheduled if the assignment has a future display_date and is drafted. Otherwise, Clever returns draft. |
Updating assignment state | Assignments can only be updated to open after creation. | Google Classroom may return an error if the assignment does not already have a display_date. If state is updated to open, an existing display_date may be removed. |
Assignment display_date | If display_date is set, assignment state must be scheduled. If assignment state is scheduled, display_date must be set. | display_date must be earlier than due_date. In Google Classroom, display_date can only be added during assignment creation. It cannot be added or modified on assignment update requests. |
due_date not required | due_date is not required in Google Classroom. | A teacher may remove the due date in Google Classroom. |
Assignment grading_type | grading_type is set to points by default. | Google Classroom only supports points grading through this integration. |
| Assignment attachments | Assignment attachments can be added during assignment creation, but cannot be added on update requests. | Only link attachments are allowed through the API for creates. Returned attachments may be link or file type. |
| Attachment fields | For Google Classroom assignment attachments, url is required. | Unsupported attachment fields: file_external_id, size. Read-only or ignored fields: title, thumbnail_url. Google Classroom supports a maximum of 20 attachments per assignment. |
Submissions
| Behavior | Description | Notes |
|---|---|---|
| Unsupported fields | extra_attempts, grade, grade_comment, grader_id, override_due_date | These fields are not supported for Google Classroom submissions. |
| Submission flags | Only the late flag is supported. | Other flags values are ignored. |
created and last_modified may be delayed | Google Classroom may not return created or last_modified until the student accesses the assignment. | Google Classroom notes that student submissions that have never been accessed may not have a creation or update time. |
Missing user_id | Submissions for a Google user ID that is not matched to a Clever user omit user_id in the response. | Use this behavior when troubleshooting unmatched users. |
Assignment must be open | Assignments must be in open state before submissions can be listed. | If the assignment is scheduled or draft, requests to get submissions can return an error. |
Updating submission state | Google Classroom supports updating submission state, but state transitions are limited. | state cannot be set to reclaimed or returned unless the submission is currently submitted. state can be set to returned without a grade. Once a submission has been reclaimed, returned, or submitted, it cannot be updated back to created. |
| Updating unsubmitted submissions | Trying to update a submission that has not yet been submitted can return an error. | The teacher must accept the provisioned class in Google Classroom before that section's assignment submissions can be updated by students. |
grade_points value of 0 | Clever omits grade_points when the value is 0. | Google Classroom does not differentiate between zero and nil values. |
| Submission attachments | Attachments can be added on submission updates. | Attachments cannot be removed, modified, or deleted after they are added. |
Schoology
Assignments
| Behavior | Description | Notes |
|---|---|---|
term_id required | In Schoology, term_id is required for assignments. | term_id refers to the Clever-generated term ID and can be included when creating or updating assignments. |
| Unsupported fields | start_date, display_date, end_date, max_attempts | max_attempts is omitted because Schoology allows multiple revisions for an assignment. |
due_date timezone | Schoology does not have a timezone associated with due date. | Clever defaults Schoology due dates to Pacific Time. |
grading_scale | grading_scale is read-only. | Depending on the Schoology configuration, this field may not be available for writes. |
grading_type | Only points grading type is supported for writes. | Other grading types should not be sent for Schoology assignment writes. |
Assignment state | Clever returns open if the assignment is published in Schoology. Otherwise, Clever returns draft. | For updates, only open and draft are supported. Setting state to scheduled or locked results in the assignment being set to draft. |
submission_types | Schoology may return submission_types as ['link', 'file'] regardless of assignment input. | This is LMS-specific behavior and may not reflect the values sent when creating or updating the assignment. |
| Assignment attachments | Schoology assignment attachments are sent inline in the assignment attachments array on create and update requests. | Schoology does not have a separate assignment attachments endpoint. |
link assignment attachments | link attachments are supported for assignment creates and updates. | If no title is provided, Schoology defaults the title to the URL. |
file assignment attachments | file attachments are supported for assignment creates and updates. | Schoology does not support URL-based file upload directly, so Clever downloads the file from the provided public http:// or https:// URL, uploads it to Schoology, and references the returned Schoology file ID. |
| Schoology file type validation | Schoology enforces its own file-type allowlist, such as CSV, DOC/DOCX, PDF, PNG, JPG, MP4, MOV, TXT, and XLSX. | Clever does not pre-validate file extensions. Unsupported file types are rejected by Schoology during upload and surfaced as upload errors. |
text assignment attachments | Schoology does not have a native text assignment attachment type. | Clever folds text attachment content into the assignment description and re-surfaces it as a text attachment on read. |
| Reading assignment attachments | Schoology only returns assignment attachments when with_attachments=1 is included. | Clever requests attachments when reading assignments so create and update responses reflect the attachments that were written. |
| Updating and deleting assignment attachments | Treat the attachments array on update as the full desired attachment set. | Updating with attachments replaces the assignment's attachments. Updating without attachments, or with an empty attachment list, deletes existing attachments. To preserve attachments, resend the full attachment set on each update. |
| Assignment file limits | Schoology allows files up to 512 MB. | Clever applies a 512 MB per-file cap and a protective cap of 20 file attachments per assignment. File URLs are fetched server-side, so downloads must use public http:// or https:// URLs. Internal and metadata IPs are blocked. |
Submissions
Requires LTI SSO set up by the district and a successful LTI session by the end user.For more information, see Clever LMS Connect - Submitting Schoology Submissions.
| Behavior | Description | Notes |
|---|---|---|
Updating submission state | Setting state to created is supported only if the submission has not yet been submitted. This sets the submission to draft in Schoology. | If the submission is already submitted, the submission defaults to submitted. If a submission is draft in Schoology, Clever shows it as created until it is submitted. reclaimed is not supported by Schoology. |
| Draft submissions with attachments | If a submission already has attachments and is in a draft (created) state, it cannot be changed to submitted through the API. | The user must either manually submit or delete the submission in Schoology. |
| Unsupported fields | grader_id, grade, extra_attempts, override_due_date | state has limited support. flags supports only the late value. |
| Submission flags | The late flag is supported. | Other flag values are not supported. |
grade defaults to grade_points | grade defaults to the grade_points value rather than using the string value provided in the PATCH update submission request. | For example, if the request body includes "grade": "B" and "grade_points": "85", a later GET returns grade as 85, the grade_points value from the update request. |
Only text attachment type supported for writes | In Schoology, only text attachment type is supported for submission writes. | link is supported for reads. For Schoology submission writes, type: "text" attachments must include text. Do not send url for text attachments. Example: {"state":"submitted","attachments":[{"type":"text","text":"https://clever.com/attachment","title":"Test - 1"}]}. Schoology may convert text submission attachments to a file internally. |
| Assignment submissions not able to be patched due to grading category | The submission update may return 200 OK, but the submission does not show up in Schoology. | Schoology has a grading_category concept, shown as Category, that must be manually assigned by the teacher in the UI. This is found in Schoology > Course > Assignment > gear icon > Edit > Category. |
Updated 11 days ago

