The Moodle plugin local_ssea observes 15 standard Moodle events and translates them into SSEA’s format before sending to the ingest endpoint. This page lists the full catalog.
SSEA event_type Moodle event When it fires user_login\core\event\user_loggedinUser signs in to Moodle. user_logout\core\event\user_loggedoutUser signs out (explicit logout).
SSEA event_type Moodle event When it fires user_enrolled\core\event\user_enrolment_createdUser enrolled in a course. course_viewed\core\event\course_viewedUser opens a course’s main page.
SSEA event_type Moodle event When it fires resource_viewed\mod_resource\event\course_module_viewedUser views a resource (file, folder). resource_viewed\mod_url\event\course_module_viewedUser views a URL-type resource. page_viewed\mod_page\event\course_module_viewedUser views a Page-type resource.
SSEA event_type Moodle event When it fires Enriched metadata quiz_attempted\mod_quiz\event\attempt_startedUser starts a quiz attempt. attempt_number, time_limit_seconds, quiz_namequiz_submitted\mod_quiz\event\attempt_submittedUser submits a quiz attempt. attempt_number, score_percent, raw_score, time_taken_seconds, state
SSEA event_type Moodle event When it fires Enriched metadata assignment_submitted\mod_assign\event\assessable_submittedUser submits an assignment. submission_status, is_late, due_date, submission_draft
SSEA event_type Moodle event When it fires Enriched metadata forum_post_created\mod_forum\event\post_createdUser creates a post (new or reply). is_reply, parent_id, word_count, subject, forum_type, discussion_id
SSEA event_type Moodle event When it fires Enriched metadata grade_updated\core\event\user_gradedTeacher or system assigns/updates a user’s grade. finalgrade, item_type, grademax, grademin, gradepass, percent, passedgrade_item_updated\core\event\grade_item_updatedA grade item definition is modified (e.g. weight, name). item_name, item_type, item_module, grademax, gradepass, hidden, locked
SSEA event_type Moodle event When it fires Enriched metadata module_completed\core\event\course_module_completion_updatedModule completion status is updated. completion_state, completion_type, course_module_idcourse_completed\core\event\course_completion_updatedCourse completion status is updated for a user. status, is_complete, time_completed, time_enrolled
All events share a common core:
"event_type" : " quiz_submitted " ,
"user_id" : " <moodle_user_id> " ,
"course_id" : " <moodle_course_id> " ,
"module_id" : " <moodle_course_module_id> " ,
"timestamp" : " 2026-04-13T14:30:00Z " ,
"object_id" : " <event_object_id> " ,
"time_taken_seconds" : 1200 ,
Common fields:
Field Type Required Description event_typestring Yes One of the 15 types listed above. user_idstring Yes Moodle user ID. course_idstring By event Moodle course ID (optional for user_login / user_logout). module_idstring By event Course module ID (activity events only). timestampstring (ISO 8601 UTC) Yes When the event happened at the source. contextobject Optional Moodle context (object_id, context_level). metadataobject Optional Event-specific fields (see “Enriched metadata” columns above).
SSEA event Used for… user_login, user_logoutSession metrics, inactivity detection (a key At-Risk factor). user_enrolledEnrollment growth per course and per period. course_viewed, resource_viewed, page_viewedEngagement metric, activity heatmap, estimated time in course. quiz_attempted, quiz_submittedAcademic performance, at-risk correlation, academic scoring. assignment_submittedSubmission rate, late-submission flag. forum_post_createdEngagement depth (words per post, active conversations). grade_updated, grade_item_updatedGrade distribution, low-grade alerts. module_completed, course_completedCompletion rate per course/program, cohort analytics.
Each event generated by the plugin includes a unique event_id . The processing worker deduplicates repeat events based on a hash of key fields, so if your Moodle retries a send due to a network timeout the event is not counted twice.
The event catalog is stable across minor plugin versions. If a new type is added in the future, it is added without breaking existing ones. Tenants do not need to make any changes when new types are added — they simply stop being ignored once the plugin is updated.