Docs home

Edmingle Webhooks Guide: Automation, Events and Monitoring

A webhook tells your own systems what just happened in Edmingle, the moment it happens. When a learner enrols, completes a course, or submits a test, Edmingle sends a JSON message to a URL you own, so your CRM, ERP, or automation tool can act on it without anyone exporting a report.

This article covers setting one up, the events you can listen for, the shape of the payload, and how to monitor deliveries.

Before you start

Requirement Detail
Plan Webhooks start from the Prime plan. Your plan also sets how many webhooks you can create
Access Integrations management permission. Admins have it by default
An endpoint A URL on your side that accepts a POST and answers quickly

Webhooks are set up per organization, not per branch or per course. A webhook fires for the whole account, so if you only care about one course or one branch, filter on the fields in the payload at your end.

Where to find webhooks

Go to Settings → Apps, open the Automation and Webhooks tab, and click Manage on the Webhooks card.

The first time you open it you will see an introduction screen with a Create New Webhook button. After that you get the list of your webhooks.

What your endpoint has to do

Build and test your endpoint before you create the webhook in Edmingle, because you cannot save a webhook until its URL has been validated.

Your endpoint must:

  • Be reachable over HTTPS. The form rejects anything that does not start with https://.

  • Accept a POST with Content-Type: application/json.

  • Respond with 200, 201, or 204.

  • Respond with a JSON body, even an empty object like {}. A 200 with an empty or non-JSON body fails validation.

  • Respond quickly. Acknowledge first, process afterwards. Do not do slow work before replying.

The validation ping

When you click Validate Webhook, Edmingle posts a test message to your URL that looks like this:

{
  "event": {
    "event_name": "url.validate",
    "livemode": false,
    "event_ts": "2026-10-13T11:42:07+05:30"
  }
}

livemode is false on the validation ping and true on every real event. If your endpoint writes to a production system, use that flag to ignore test traffic.

Create a webhook

  1. On the Webhooks list, click New Webhook.

  2. Fill in Webhook Basic Details:

Field Required Notes
Webhook name Yes Up to 50 characters
Description No Up to 150 characters. Worth filling in: it is the only hint you get on the list about what a webhook does
Webhook URL Yes Must start with https://
  1. Click Validate Webhook. You will see Webhook validated or Webhook validation failed. Use View Payload next to the result to see the status code and exactly what your endpoint returned.

  2. In the Events section, pick the events you want. They are grouped into categories down the left side. Use View Payload on any event to see a sample of what it sends.

  3. Click Create Webhook. You will see "Webhook created successfully!"

You cannot save without validating first, and any edit to the URL clears the validation. If you change a single character you have to click Validate Webhook again before the form will submit.

At least one event is required. Saving with none selected gives "Please choose atleast one event".

The events you can subscribe to

The list you see is grouped by category. These are the events available:

User

Event Fires when
User created Any new user is created: self signup, added by an admin, or a bulk upload
User updated A learner or staff profile is edited, by an admin or by the learner

Transactions

Event Fires when
Purchase Initiated An enrolment is created but payment has not cleared yet
Purchase Completed Payment clears, or a free or offline enrolment is recorded. Also fires on a successful instalment payment
Purchase Failed A payment or instalment is marked as not cleared

Course

Event Fires when
User Course Completed A learner's progress in a batch reaches 100%, counting materials viewed plus assessments passed

Assessments

Event Fires when
Exercise Submitted A learner submits an exercise or assignment
Exercise Evaluated An exercise or assignment is evaluated and finalized
Test Submitted A learner submits a quiz or test
Test Evaluated A quiz or test is marked final

Announcements

Event Fires when
Announcement Created An announcement is published

Sessions

Event Fires when
Session Created A session is scheduled
Session Updated A session is rescheduled or edited
Session Cancelled A session is cancelled. The payload carries the cancellation reason
Session Reminder A reminder goes out. The payload says whether it was a manual reminder, the 1 hour reminder, or the 24 hour one
Session Start A live class actually starts

The exact list in your account is whatever the Events section shows. If an event you expect is missing, raise a ticket rather than assuming it fires silently.

Some things do not have an event today, including certificate issued, attendance marked, lead or enquiry created, refund processed, and course published.

What a payload looks like

Every event uses the same envelope:

{
  "event": {
    "event": "transaction.user_purchase_completed",
    "livemode": true,
    "event_ts": "2026-10-13T11:42:07+05:30"
  },
  "payload": {
    "user_id": 904113,
    "role": "student",
    "name": "Priya Nair",
    "email": "priya@example.com",
    "contact_number": "9876543210",
    "course_name": "Full Stack Development",
    "bundle_id": 5521,
    "master_batch_id": 88102,
    "master_batch_name": "FSD Nov 2026",
    "original_price": 45000,
    "discount": 5000,
    "final_price": 40000,
    "currency": "₹",
    "enrollment_id": 773210,
    "enrollment_date": 1760000000
  }
}
  • event.event identifies the event, in the form category.event, for example user.user_created or course.user_course_completed.

  • event.livemode is true for real events.

  • event.event_ts is an ISO 8601 timestamp with the server's offset.

  • payload is the event-specific body.

[!Important] The envelope does not carry your organization ID or a unique event ID. Identify records using the IDs inside payload, and build your handler to tolerate the same event arriving more than once.

currency is the symbol, such as ₹, not an ISO code like INR. Dates such as enrollment_date are Unix timestamps.

Payload fields vary by event, and the User updated and Announcement Created payloads are large, returning the full profile or announcement object. Always use View Payload on the event itself to see the current structure rather than coding against the sample above.

Security

Edmingle does not sign webhook payloads. There is no signature header, no shared secret, and no custom headers. The only header sent is Content-Type: application/json. Anyone who knows your endpoint URL can post anything to it.

Because of that, treat the URL itself as a credential:

  • Use a long, unguessable path, for example https://api.yourcompany.com/hooks/edmingle/8f3c1a0e9b6d4f27.

  • Do not share the URL, put it in a ticket, or commit it to a repository.

  • Treat the payload as a notification, not a source of truth. Use the IDs to call back into Edmingle or your own system and confirm before you act on anything financial.

  • If your infrastructure allows it, restrict the endpoint by source IP.

Managing your webhooks

The list shows:

Column What it shows
Webhook name
Description
Events linked The events it is subscribed to
Event count How many times it has been triggered, all time. Sortable
Webhook status Active or Inactive

Open the actions menu on a row for:

  • View Logs

  • Edit Webhook

  • Mark as Inactive on an active webhook. This takes effect immediately, with no confirmation step.

  • Make Active on an inactive one. This opens the edit screen, where you re-validate the URL and save.

There is no delete. Marking a webhook inactive is how you stop it. Inactive webhooks still count toward your plan's webhook limit.

Monitoring deliveries

Click View Logs on a webhook to see what has been sent.

Column What it shows
Timestamp When the delivery was attempted
Status The HTTP status code your endpoint returned
Event Which event it was
Endpoint The URL it went to
Payload Opens a drawer with both the request Edmingle sent and the response you returned

Logs cover the last 30 days and show the latest 100 deliveries. Anything older is not available in the product, so keep your own logs if you need a longer trail.

The payload drawer is the main debugging tool: it shows your response body next to the request, so a 500 from your service is visible here along with whatever error it printed.

When deliveries fail

A delivery counts as failed when your endpoint returns anything other than 200, 201, or 204.

[!Important] After 5 consecutive failures the webhook is disabled automatically. Edmingle emails your support and admin addresses with the subject "Webhook Subscription disabled". You also get an earlier warning email, "Webhook Subscription failing", before it reaches the limit.

To bring it back:

  1. Fix the endpoint.

  2. Open the webhook from the list.

  3. Click Validate Webhook and confirm it passes.

  4. Save.

A disabled webhook will not reactivate until the URL validates successfully, and events that fired while it was down are not replayed.

Watch for those warning emails. They go to the support and admin email addresses on your organization profile, so make sure those are addresses somebody actually reads.

Troubleshooting

Symptom Likely cause
"Please enter a URL starting with https://" The URL is http:// or missing the scheme
"Webhook validation failed" Your endpoint returned something other than 200, 201, or 204. Use View Payload to see the code
"Webhook validation failed due to Non-JSON response" The status code was fine but the body was not JSON. Return {}
"Please validate the webhook" when saving You edited the URL after validating. Validate again
Webhook went Inactive on its own Five consecutive failed deliveries. Check your logs, fix, re-validate
Events firing that you do not want Subscriptions are organization-wide. Filter on the payload at your end
Cannot create another webhook You have hit your plan's webhook limit. Inactive ones still count. Raise a ticket to increase it

Updated 11 days ago

Share :