{"record":{"id":"bf5a7fe5888449d1","repo":"instructure/canvas-lms","slug":"couldn-t-find-assignment-with-api-id-params-assignment-id","errorCode":null,"errorMessage":"Couldn't find assignment with API id '#{params[:assignment_id]}'","messagePattern":"Couldn't find assignment with API id '#(.+?)'","errorType":"exception","errorClass":"ActiveRecord::RecordNotFound","httpStatus":404,"severity":"error","filePath":"app/controllers/grade_change_audit_api_controller.rb","lineNumber":144,"sourceCode":"  include Api::V1::GradeChangeEvent\n\n  # @API Query by assignment\n  #\n  # List grade change events for a given assignment.\n  #\n  # @argument start_time [DateTime]\n  #   The beginning of the time range from which you want events.\n  #\n  # @argument end_time [DateTime]\n  #   The end of the time range from which you want events.\n  #\n  # @returns [GradeChangeEvent]\n  #\n  def for_assignment\n    @assignment = api_find(Assignment.active, params[:assignment_id])\n\n    unless @assignment.context.root_account == @domain_root_account && course_authorized?(@assignment.course)\n      raise ActiveRecord::RecordNotFound, \"Couldn't find assignment with API id '#{params[:assignment_id]}'\"\n    end\n\n    events = Auditors::GradeChange.for_assignment(@assignment, query_options)\n    render_events(events, polymorphic_url([:api_v1, :audit_grade_change, @assignment]))\n  end\n\n  # @API Query by course\n  #\n  # List grade change events for a given course.\n  #\n  # @argument start_time [DateTime]\n  #   The beginning of the time range from which you want events.\n  #\n  # @argument end_time [DateTime]\n  #   The end of the time range from which you want events.\n  #\n  # @returns [GradeChangeEvent]\n  #","sourceCodeStart":126,"sourceCodeEnd":162,"githubUrl":"https://github.com/instructure/canvas-lms/blob/1c9f0bb8013ed69c4f2efe11fd483025469b7e6c/app/controllers/grade_change_audit_api_controller.rb#L126-L162","documentation":"Guard in GradeChangeAuditApiController#for_assignment: api_find couldn't resolve an active Assignment for params[:assignment_id] (or its context/root account or course authorization check failed), so an audit query is refused with RecordNotFound. Avoids leaking assignment existence across accounts.","triggerScenarios":"Thrown at app/controllers/grade_change_audit_api_controller.rb:144 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Use a valid assignment id visible to the current root account","Ensure the requesting admin is authorized on the assignment's course (course_authorized?)"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"1c9f0bb8013ed69c4f2efe11fd483025469b7e6c","analyzedAt":"2026-09-15T20:33:18.891Z","contentChangedAt":"2026-09-15T20:33:18.891Z","schemaVersion":2},"datasetVersion":"2026-09-23T02:17:17.105Z"}