instructure/canvas-lms · error · PeerReview::InvalidAssignmentSubmissionTypesError
Peer reviews cannot be used with External Tool assignments
Error message
Peer reviews cannot be used with External Tool assignments
What it means
PeerReview::Validations#validate_assignment_submission_types raises PeerReview::InvalidAssignmentSubmissionTypesError when the assignment is an external tool assignment (`external_tool?` true). External tool (LTI) submissions cannot participate in peer reviews, so the library rejects such assignments as peer review parents.
Solutions
- Use a non-external-tool assignment (online submission types) for peer reviews.
- Skip peer review creation when `assignment.external_tool?` returns true.
- If peer review is needed for LTI content, use the tool's own review mechanism instead.
Example fix
// before PeerReview::SubAssignmentCreator.new(assignment: assignment).call # external tool // after unless assignment.external_tool? PeerReview::SubAssignmentCreator.new(assignment: assignment).call end
Defensive patterns
Strategy: validation
Validate before calling
raise ArgumentError, "external tool assignments cannot use peer reviews" if assignment.external_tool?
Try / catch
begin
service.call
rescue PeerReview::InvalidAssignmentSubmissionTypesError => e
render json: { error: e.message }, status: :unprocessable_entity
end Prevention
- Filter out external_tool assignments when bulk-enabling peer reviews
- Hide the peer review option in UI for LTI assignments
- Assert assignment type in service specs
When it happens
Trigger: Enabling peer review sub assignments on an assignment with submission_types including 'external_tool'; creating peer reviews for an LTI tool assignment via the API.
Common situations: Administrators turning on peer reviews for an LTI-based assignment; scripted course imports that set peer_reviews on all assignments including external tool ones.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- Due date cannot be before available from date
- Invalid parent assignment
- Must be a group assignment to create group overrides
- Peer review sub assignment does not exist
- Peer review sub assignment exists
AI-assisted analysis of instructure/canvas-lms@1c9f0bb801 (2026-09-15).
Data as JSON: /api/errors/5f035028cf5d795b.
Report an issue: GitHub.
Appendix: source
Thrown at app/services/peer_review/validations.rb:45
def validate_peer_reviews_enabled(assignment)
unless assignment.peer_reviews?
raise PeerReview::PeerReviewsNotEnabledError, I18n.t("Peer reviews are not enabled for this assignment")
end
end
def validate_feature_enabled(assignment)
unless assignment.context.feature_enabled?(:peer_review_allocation_and_grading)
raise PeerReview::FeatureDisabledError, I18n.t("Peer Review Allocation and Grading feature flag is disabled")
end
end
def validate_grading_type(grading_type)
raise PeerReview::InvalidGradingTypeError, I18n.t("Peer review sub assignments cannot have a not_graded grading type") if grading_type == "not_graded"
end
def validate_assignment_submission_types(assignment)
if assignment.external_tool?
raise PeerReview::InvalidAssignmentSubmissionTypesError, I18n.t("Peer reviews cannot be used with External Tool assignments")
end
if assignment.submission_types == "discussion_topic"
raise PeerReview::InvalidAssignmentSubmissionTypesError, I18n.t("Peer reviews cannot be used with Discussion Topic assignments")
end
end
def validate_peer_review_sub_assignment_exists(assignment)
if assignment.peer_review_sub_assignment.blank?
raise PeerReview::SubAssignmentNotExistError, I18n.t("Peer review sub assignment does not exist")
end
end
def validate_peer_review_sub_assignment_not_exist(assignment)
if assignment.peer_review_sub_assignment.present?
raise PeerReview::SubAssignmentExistsError, I18n.t("Peer review sub assignment exists")
end
endView on GitHub (pinned to 1c9f0bb801)