instructure/canvas-lms · error

Unsupported submission type for VeriCite integration: #

Error message

Unsupported submission type for VeriCite integration: #{submission.submission_type}

What it means

VeriCite plagiarism provider's submitPaper handles attachment-based and online_text_entry submissions; any other submission_type falls through to the else and raises, since VeriCite has no payload mapping for it (mirrors the Turnitin limitation in lib/turnitin.rb).

Solutions

  1. Restrict VeriCite-enabled assignments to file upload and text entry submission types
  2. Filter unsupported submissions before enqueuing them to VeriCite
  3. Handle the error in the plagiarism submission job and mark those submissions as skipped
  4. Extend the branch to serialize additional types if VeriCite's API accepts them

Example fix

// before
submission.submit_at(vericite) # raises for online_quiz
// after
SUPPORTED = %w[online_upload online_text_entry].freeze
if SUPPORTED.include?(submission.submission_type)
  submission.submit_at(vericite)
else
  Rails.logger.warn("vericite skip: #{submission.submission_type}")
end
Defensive patterns

Strategy: validation

Validate before calling

VERICITE_TYPES = %w[online_upload online_text_entry].freeze
raise 'unsupported for vericite' unless VERICITE_TYPES.include?(submission.submission_type)

Type guard

def vericite_submittable?(submission) = %w[online_upload online_text_entry].include?(submission.submission_type)

Try / catch

begin
  submission.submit_at(vericite_tool)
rescue RuntimeError => e
  raise unless e.message.start_with?('Unsupported submission type for VeriCite')
  Rails.logger.warn("skipped: #{e.message}")
end

Prevention

When it happens

Trigger: Calling submitPaper (via submit_at/plagiarism framework) with a submission of type online_quiz, online_url_entry, media_recording, or similar that is neither attachment-bearing nor 'online_text_entry'.

Common situations: VeriCite enabled on assignments accepting quiz or media submission types; plagiarism job queues processing heterogeneous assignments; orgs migrating from Turnitin with the same restricted type expectations.

Related errors


AI-assisted analysis of instructure/canvas-lms@1c9f0bb801 (2026-09-15). Data as JSON: /api/errors/29822aca8ac4db37. Report an issue: GitHub.

Appendix: source

Thrown at lib/vericite.rb:153

          paper_ext = a.extension
          paper_type = a.content_type
          if paper_ext.nil?
            paper_ext = ""
          end
          paper_size = 100 # File.size(
          responses[a.asset_string] = sendRequest(:submit_paper, { pid: paper_id, ptl: paper_title, pext: paper_ext, ptype: paper_type, psize: paper_size, pdata: a.open }.merge!(opts))
        end
      elsif submission.submission_type == "online_text_entry" && (asset_string.nil? || submission.asset_string == asset_string)
        paper_id = Digest::SHA1.hexdigest submission.plaintext_body
        paper_ext = "html"
        paper_title = "InlineSubmission"
        plain_text = "<html>#{submission.plaintext_body}</html>"
        paper_type = "text/html"
        paper_size = plain_text.bytesize

        responses[submission.asset_string] = sendRequest(:submit_paper, { pid: paper_id, ptl: paper_title, pext: paper_ext, ptype: paper_type, psize: paper_size, pdata: plain_text }.merge!(opts))
      else
        raise "Unsupported submission type for VeriCite integration: #{submission.submission_type}"
      end

      responses.transform_values! do |res|
        is_response_success?(res) ? { object_id: res[:returned_object_id] } : response_error_hash(res)
      end

      responses
    end

    def generateReport(submission, asset_string)
      user = submission.user
      assignment = submission.assignment
      course = assignment.context
      object_id = submission.vericite_data_hash.dig(asset_string, :object_id)
      res = nil
      res = sendRequest(:get_scores, oid: object_id, utp: "2", user:, course:, assignment:) if object_id
      data = {}
      if res

View on GitHub (pinned to 1c9f0bb801)