Respond fast
Return a2xx status as quickly as you can. Any non-2xx response, or no response within 3 seconds, counts as a failure and triggers a retry.
Do not do real work inside the request. Validate the signature, put the payload on your own queue, return 200, and process it afterwards.
Two rules for your handler
Be idempotent
Be idempotent
A retry can deliver the same event twice, and
course.progress_updated fires often. Deduplicate on user.id plus course.id plus occurred_at, or make your write naturally idempotent.Do not trust arrival order
Do not trust arrival order
Deliveries are queued and retried independently, so a later event can arrive before an earlier one. Order your processing by
occurred_at, never by arrival time.Retries
If a delivery fails, Edplay retries automatically:
After the third failure Edplay stops. The event is not redelivered later.
A delivery counts as failed when your endpoint:
- returns any non-
2xxstatus, - takes longer than 3 seconds to respond,
- closes the connection, or
- presents an invalid or untrusted TLS certificate.
Read the delivery log
Go to Workspace Settings > Integrations > Webhooks > Delivery log. It shows the 20 most recent attempts, newest first.
Click Show details on a row to see the exact URL Edplay called, the error message, and the response body your endpoint returned. That response body is usually enough to tell a signature rejection from an application error.
A test send is queued rather than sent inline, so its row appears a moment after you click Send test event. Use Refresh if it is not there yet.