Webhooks
Webhooks allow your external applications to receive real-time notifications when events occur on your Euron Systems platform. Instead of polling the API, webhooks push data to your server.
Setting Up Webhooks
- Go to Settings → API → Webhooks.
- Click Add Webhook Endpoint.
- Enter:
- URL — Your server's endpoint that will receive webhook events
- Events — Select which events to subscribe to
- Secret — A shared secret for verifying webhook signatures
- Click Save.
Available Events
Student Events
| Event | Trigger |
|---|---|
student.registered | New student registers |
student.updated | Student profile updated |
student.deleted | Student account deleted |
Enrollment Events
| Event | Trigger |
|---|---|
enrollment.created | Student enrolls in a course |
enrollment.completed | Student completes a course |
enrollment.expired | Course access expires |
Payment Events
| Event | Trigger |
|---|---|
payment.completed | Successful payment |
payment.failed | Failed payment attempt |
payment.refunded | Refund processed |
subscription.created | New subscription started |
subscription.renewed | Subscription renewed |
subscription.cancelled | Subscription cancelled |
Course Events
| Event | Trigger |
|---|---|
course.published | Course published |
course.updated | Course details updated |
lesson.completed | Student completes a lesson |
quiz.submitted | Student submits a quiz |
certificate.issued | Certificate generated |
Webhook Payload
Each webhook event sends a JSON payload:
{
"id": "evt_abc123",
"event": "enrollment.created",
"created_at": "2025-03-20T10:30:00Z",
"data": {
"student_id": "student_xyz789",
"student_name": "Priya Sharma",
"student_email": "priya@example.com",
"course_id": "course_abc123",
"course_title": "Complete Python Bootcamp",
"enrolled_at": "2025-03-20T10:30:00Z"
}
}
Verifying Signatures
Every webhook request includes an X-Webhook-Signature header. Verify it to ensure the request is authentic:
const crypto = require('crypto');
function verifyWebhook(payload, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}
Retry Policy
If your endpoint returns a non-2xx status code, the webhook is retried:
- Retry 1 — After 1 minute
- Retry 2 — After 5 minutes
- Retry 3 — After 30 minutes
- Retry 4 — After 2 hours
- Retry 5 — After 24 hours
After 5 failed attempts, the webhook is marked as failed. You can manually retry from the webhook dashboard.
Related Documentation
- Authentication — API authentication
- Courses API — Course endpoints
- Students API — Student endpoints