Skip to main content

Registering a webhook

The response includes a secretstore it securely. It is shown only once.

Signature verification

Every webhook delivery includes an X-Edpire-Signature header. Always verify it before processing:

Available events

Assessments with open-ended questions

If an assessment contains open-response questions, submission.graded fires with awaiting_manual_grading: true, and its score, percentage and passed cover only the auto-graded questions. They are provisional.Do not store them as a final grade and do not show them to the learner as one. Wait for submission.grading.completed, which carries the real total once a teacher has graded, broken down into auto_score and manual_score.For fully auto-graded assessments awaiting_manual_grading is false and submission.graded is final, so no second event arrives.
The same signal is available on the REST surface: POST /assessments/{id}/submit returns awaiting_manual_grading, and the results and submission endpoints return is_fully_graded.

Retry behavior

If your endpoint returns a non-2xx status, Edpire retries with exponential backoff: After the initial delivery plus 4 retries, the delivery is abandoned and the webhook endpoint is marked as failing. Use GET /api/v1/webhooks/deliveries to inspect delivery history and diagnose failures.

Best practices

Respond before processing. Move heavy logic to a background queue to avoid timeouts.
The same event can be delivered more than once. Always check whether you’ve already processed a given submission_id before writing to your database.
Log all incoming events for debugging. The X-Edpire-Event header tells you the event type without parsing the body.
New event types may be added in future versions. Ignore events you don’t recognize rather than erroring.