Events
Know when work arrives, marks are approved, results are released and learners enrol.
Event types
| Event | When |
|---|---|
submission.received | A learner (or your app) submitted work. |
submission.marked | An AI marking proposal is ready for review. |
marking.approved | A person approved the marks. |
results.released | Results were released to learners. |
enrolment.created | A learner was enrolled. |
enrolment.completed | A learner completed a course. |
learner.created | A learner was added. |
course.published | A course was published. |
certificate.issued | A certificate was issued. |
attendance.checked_in | Someone checked in to a live session. |
job.completed | An API job finished. |
Two ways to receive them
Webhooks: choose the events for your endpoint in the console. Each delivery is signed exactly like job notices and carries ids only. See webhooks.
Polling: GET /v1/events?type=&since=&cursor= with the events:read scope returns the same events (all except job.completed, which you read with GET /v1/jobs) newest first, or oldest first with order=asc, so you can catch up after downtime. Events are kept for 30 days.
# EduMark POSTs JSON to your HTTPS endpoint with:
# X-EduMark-Signature: t=1729503000,v1=5257a869e7ecebeda32affa62cdca3fa51cad7e77a0e56ff536d0ce8e108d8bd
# X-EduMark-Event-Id: wh_3f1c9a… (deduplicate on this; delivery is at least once)
# The signature is HMAC-SHA256 of "<t>.<event id>.<raw body>" with your webhook secret.
# Answer 2xx within 5 seconds. Failed deliveries retry after 1 min, 5 min, 30 min, 2 h and 6 h.Who sees which events
Events follow the same rules as EduMark. You get an event type only if the key’s creator (for a webhook, the person who saved it) can see it in EduMark, and submission and result events only for work that person can open, such as the submissions they are allocated to mark.
For anonymously marked assignments, submission events have learner_id: null and a candidate_ref until the result is released, exactly as GET /v1/submissions shows them. You can only subscribe a webhook to events you can see yourself.