{"record":{"id":"24b26dde1db7a2ec","repo":"instructure/canvas-lms","slug":"couldn-t-find-course-with-api-id-params-course-id","errorCode":null,"errorMessage":"Couldn't find course with API id '#{params[:course_id]}'","messagePattern":"Couldn't find course with API id '#(.+?)'","errorType":"exception","errorClass":"ActiveRecord::RecordNotFound","httpStatus":404,"severity":"error","filePath":"app/controllers/grade_change_audit_api_controller.rb","lineNumber":165,"sourceCode":"    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  #\n  def for_course\n    course = api_find(Course, params[:course_id])\n    raise ActiveRecord::RecordNotFound, \"Couldn't find course with API id '#{params[:course_id]}'\" unless course_authorized?(course)\n\n    events = Auditors::GradeChange.for_course(course, query_options)\n    render_events(events, polymorphic_url([:api_v1, :audit_grade_change, course]), course:)\n  end\n\n  # @API Query by student\n  #\n  # List grade change events for a given student.\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_student","sourceCodeStart":147,"sourceCodeEnd":183,"githubUrl":"https://github.com/instructure/canvas-lms/blob/1c9f0bb8013ed69c4f2efe11fd483025469b7e6c/app/controllers/grade_change_audit_api_controller.rb#L147-L183","documentation":"Guard in GradeChangeAuditApiController#for_course: api_find(Course, params[:course_id]) returned no course, so the grade-change audit query for that course is refused with ActiveRecord::RecordNotFound.","triggerScenarios":"Thrown at app/controllers/grade_change_audit_api_controller.rb:165 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pass a valid course id (api_find also accepts SIS ids; ensure the id exists)","Confirm the course belongs to the current root account/shard"],"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"}