Skip to content

Webhooks

Event Catalogue

Every webhook event type, when it fires, and what data it carries.

Every envelope is { id, type, created_at, institution_id, data }. GET /v1/events/types returns this catalogue with a sample payload per type; the portal shows the same under Developers → Deliveries.

People#

TypeWhendata
student.createdStudent provisioned (API, portal or batch)user_id, email, user_type, student_id, source
student.email_mappedPersonal email linkeduser_id, generated_email, student_id, full_name
student.updatedStatus or profile changed via APIuser_id, changes[], status?
faculty.createdFaculty provisioneduser_id, email, user_type, faculty_id
faculty.profile_completedTeacher finished first-login profileuser_id, email, employee_id, department, position
guardian.invitedGuardian link createdstudent_id, guardian_type, guardian_name
guardian.verifiedGuardian signed in for the first timestudent_id, guardian_type

Licenses#

TypeWhendata
license.generatedLicense issuedlicense_id, license_type, user_id, email, expires_at, is_lifetime, max_activations
license.expiredPassed expirylicense_id, user_id, expires_at
license.device_registeredNew device seatuser_id, app_id, device_name, platform, app_version, kicked

Exams#

TypeWhendata
exam.publishedExam visible to studentsexam_id, title, exam_type, app, faculty_id, due_date
exam.assignedExam assigned to a groupexam_id, group_id, assigned_by
exam.attempt_startedStudent opened the examattempt_id, exam_id, student_id, started_at, expires_at
exam.submittedSubmission (each version)submission_id, exam_id, student_id, is_late, submitted_at, version, app
exam.gradedGraded or resubmission requestedsubmission_id, exam_id, student_id, score, max_score, percentage, resubmission_required, graded_by

Credits#

TypeWhendata
merits.creditedWallet credit from any sourceemail, user_id, amount_cents, reason, balance_after_cents
coupon.batch_requestedBatch filed for approvalbatch_id, count, value_cents, requested_by
coupon.batch_approvedGrout approved itbatch_id, approved_by
coupon.redeemedCode redeemed by your usercoupon_id, user_email, value_cents

Alpha Learning#

TypeWhendata
alpha.points_awardedPoints ledger entrystudent_id, reason, points, ref_type, ref_id, note
alpha.badge_grantedBadge earnedstudent_id, badge, title

System#

TypeWhen
pingTest event from the portal or POST /webhooks/endpoints/{id}/test

Wildcards#

Subscriptions accept *, <category>.* (e.g. exam.*) or exact types. Events are deduplicated server-side on (type, ref), so re-running an import does not re-fire student.created for the same email.