Webhooks - Live Events
What is a webhook?
When an event occurs on the platform, an http post request can be sent to your web server with that event information. For example, when a learner completes a course, an http post request would be sent, to the URL configured for your webhook, containing the course completion data. You can then process and/or pass this data onward to any third party system for automation / reporting / analytics purposes.
Integration Details
-
Flexibility: You receive payload data and can transform the payload into format consumable by enterprise software / email marketing systems. This may require technical team to write necessary scripts.
-
Data Reliability: If webhook delivery fails, we will automatically retry the request over time. We will retry ten times total with an exponential backoff starting from 20 seconds up to 3600 seconds, giving up approximately 3.5 hours after the first webhook delivery attempt.
- The connection will time out in 15 seconds. If your endpoint does not respond before the connection times out or if your endpoint returns a status code outside the range of 200--308, we will consider the delivery of the message as a failed attempt.
-
Live Events: Payload of event data is posted in real-time in JSON format to the appropriate URL.
-
Payload Format: Each event will fire a http request to your server in industry standard JSON format.
Configuration
- Create a webhook endpoint: You need a server that listens for requests over HTTP and consumes data in JSON format (data samples below). This can be achieved in multiple ways:
- Custom server code
- LMS or SIS with built in webhook capabilities
- Web based automation platforms with webhook capabilities like Zapier
-
Send us your webhook details: Send us your webhook endpoint URL and a list of courses you'd like events for and we'll configure our end to start sending notifications
-
Configure and Test: Once we finish configuring on our end, we'll send a test notification, so you can verify that your end is properly accepting the payloads
If your endpoint is configured to receive multiple different courses, you can distinguish once course from another using the notifiableId JSON property. See the event examples for more details on this.
Testing Your Webhook
Here are a few strategies that you can employ in order to test the integration
Before your endpoint is configured on our end:
- You can use the event examples from our documentation to test against your endpoint directly. You can either send the payload directly to your endpoint or use a tool like Postman to simulate the request.
After your endpoint is configured on our end:
- You can complete a course yourself with your user account (once per account).
- You can request that your account be reset for a particular course so you can complete it again on your own time
- You can request completion for an account be reset for a particular course, then re-completed in order to resend the notification
Authenticating Requests
For security reasons, you may want to limit requests to your endpoint to those coming from our platform. In order to authenticate incoming requests, you can allow access only to the ones coming from our IP addresses. All other requests should be blocked / ignored.
- 54.243.7.71
- 3.83.213.76
Event Details
Course Completed
Trigger
When a learner completes a course
Notable Event Attributes
| Attribute | Description |
|---|---|
user | The leaner's email address |
notifiableId | The ID of the course that was completed |
userDetail.externalCustomerId | The learner's ID, the value associated to their account. This value is utilized during SSO to associate the learner coming from the IDP with their account in the SP (IE product). |
userDetail.ref1 … ref3 | Optional data passed from the IDP to the SP (IE product) during SSO can be found in these attributes. |
Sample Payload
{
"timestamp": "2019-10-17T20:50:53.103Z",
"id": "32ed16df-27cb-5f72-90ff-4eaf39346f86",
"license": "523eafb4-31f2-5ae2-a093-f9a32b6faab1",
"source": "course_completed",
"type": "status_change",
"updatedAt": "2019-10-17T20:50:53.103Z",
"user": "[email protected]",
"importId": null,
"generated": false,
"backupExportId": null,
"tableImportId": null,
"deleted": false,
"importedBy": null,
"imported": false,
"createdAt": "2019-10-17T20:50:53.103Z",
"courseKind": "courseGroup",
"dueDate": null,
"companyId": "3aabdfb8-3891-5011-ad35-8e2351c5fdaf",
"event": "courseCompletion",
"notifiableId": "7670fdbe-15ed-504b-a680-d404fa4b0eb4",
"title": "New Student Orientation",
"userDetail": {
"id": "61149b2c-3f37-5032-be63-f5d984de10b6",
"firstName": "Bob",
"lastName": "Johnson",
"externalCustomerId": "[email protected]",
"sfContactId": null,
"sfAccountId": null,
"client": "00f928f4-8718-5043-9164-32398b165c60",
"ref1": "StudentID12345",
"ref2": "Department?",
"ref3": "...",
"ref4": null,
"ref5": null,
"ref6": null,
"ref7": null,
"ref8": null,
"ref9": null,
"ref10": null,
"shippingName": null,
"address1": null,
"address2": null,
"city": null,
"state": null,
"zipCode": null,
"telephone": null,
"country": null
}
}
Learning Path Event - Completed
Trigger
When a learner completes a learning path
This event example is one (the one relevant for determining completion status) of many learning path event types that are grouped together in a single configuration.
Filter on attribute source ensuring it is learning_path_completed to ensure the payload matches this example.
Notable Event Attributes
| Attribute | Description |
|---|---|
user | The leaner's email address |
notifiableId | The ID of the learning path that was completed |
source | The source of the event for this event. Make sure to filter to learning_path_completed |
userDetail.externalCustomerId | The learner's ID, the value associated to their account. This value is utilized during SSO to associate the learner coming from the IDP with their account in the SP (IE product). |
userDetail.ref1 … ref3 | Optional data passed from the IDP to the SP (IE product) during SSO can be found in these attributes. |
Sample Payload
{
"timestamp": "2025-11-13T16:26:44.600Z",
"id": "4f6d1a40-5f5b-4e88-b0d3-0f6e8d4c1a11",
"source": "learning_path_completed",
"type": "status_change",
"user": "[email protected]",
"license": "9e6c0c5e-7a9b-4f54-9e1b-1c0ce6b3a2d8",
"updatedAt": "2025-11-13T16:26:44.600Z",
"createdAt": "2025-11-13T16:26:44.600Z",
"importId": null,
"deleted": false,
"dueDate": null,
"companyId": "d0c5d13b-94af-4746-987c-6b9c1b9d3f5e",
"notifiableId": "f1c4b7e2-0b4e-4a4f-98cf-3ef6f72c6e4a",
"learningPathTitle": "School Orientation Path",
"learningPathSku": null,
"milestoneTitle": null,
"userDetail": {
"id": "e58d3ac9-6c41-4b7d-8e03-6a9e5b8cf9c2",
"shippingName": null,
"address1": null,
"address2": null,
"city": null,
"state": null,
"zipCode": null,
"country": null,
"firstName": "Bob",
"lastName": "Johnson",
"email": "[email protected]",
"externalCustomerId": "[email protected]",
"sfContactId": null,
"sfAccountId": null,
"ref1": "StudentID12345",
"ref2": null,
"ref3": null
}
}
Quiz Attempt Completed
Trigger
When a learner submits a quiz
Notable Event Attributes
| Attribute | Description |
|---|---|
user | The learner's email address |
topic | The ID of the quiz or assessment |
topicTitle | The title of the quiz |
notifiableId | The ID of the associated course (useful if your endpoint receives events for multiple courses) |
passed | Indicates whether the learner passed the quiz |
grade | Numeric score for the quiz |
userDetail.externalCustomerId | The learner's ID, used during SSO to associate the learner from the IDP with their account in the SP (IE product). |
questions[0].type | The type of question answered. Examples values include: booleanChoice, multipleChoice, openEnded, selectBoxes |
userDetail.ref1 … ref3 | Optional data passed from the IDP to the SP (IE product) during SSO can be found in these attributes. |
Sample Payload
{
"id": "7f7cb9b4-7b2f-4a1a-9f1e-3a7d9e3c2f40",
"companyId": "9a8d6c35-2f4a-4f55-8e43-18b3cdd2c6a1",
"topic": "3d4c0f2e-1b7a-4e59-9d1f-6c2a8b7e5f92",
"topicType": "quiz",
"topicTitle": "Quiz Name",
"timeElapsedInSeconds": 37,
"user": "[email protected]",
"passed": true,
"grade": 100,
"timestamp": "2025-12-12T20:01:44.187Z",
"questions": [
{
"body": "<p>It is okay to use ChaptGPT to write my essay without citing it resource.</p>",
"type": "booleanChoice",
"table": null,
"choices": [
{
"asset": null,
"value": "True",
"points": null,
"altText": null,
"correct": false,
"response": null,
"selected": false
},
{
"asset": null,
"value": "False",
"points": null,
"altText": null,
"correct": true,
"response": null,
"selected": false
}
],
"preText": null,
"postText": null,
"preText2": null,
"required": false,
"response": null,
"postText2": null,
"questionId": "c2f9a8d1-6e44-4bce-9a6d-9b0c7d1e2f3a",
"placeholder": null,
"displayOption": null,
"tableResponse": {
"rows": [],
"headers": []
},
"parentQuestion": null,
"selectedChoice": {
"asset": null,
"value": "False",
"points": null,
"altText": null,
"correct": true,
"response": null
},
"additionalContent": null,
"openEndedResponse": null,
"preselectedChoices": [],
"fileSubmissionAsset": null,
"preTextDisplayOption": null,
"postTextDisplayOption": null,
"preTextDisplayOption2": null,
"postTextDisplayOption2": null,
"addAndDeleteRowsEnabled": false,
"copyAnswerFromQuestionId": null,
"copyAnswerFromAssessmentId": null,
"mustSelectAllCorrectChoices": false
},
{
"body": "<p>Which of the following are services provided by Campus Safety?</p>",
"type": "multipleChoice",
"table": null,
"choices": [
{
"asset": null,
"value": "Medical Emergencies",
"points": null,
"altText": null,
"correct": false,
"response": null,
"selected": false
},
{
"asset": null,
"value": "Walking Escorts",
"points": null,
"altText": null,
"correct": false,
"response": null,
"selected": false
},
{
"asset": null,
"value": "Safety Presentations",
"points": null,
"altText": null,
"correct": false,
"response": null,
"selected": false
},
{
"asset": null,
"value": "Code of Conduct Violations",
"points": null,
"altText": null,
"correct": false,
"response": null,
"selected": false
},
{
"asset": null,
"value": "All of the Above",
"points": null,
"altText": null,
"correct": true,
"response": null,
"selected": false
}
],
"preText": null,
"postText": null,
"preText2": null,
"required": false,
"response": null,
"postText2": null,
"questionId": "5b8e1c3f-2a49-4d1e-8b6f-1a2d3c4e5f6a",
"placeholder": null,
"displayOption": null,
"tableResponse": {
"rows": [],
"headers": []
},
"parentQuestion": null,
"selectedChoice": {
"asset": null,
"value": "All of the Above",
"points": null,
"altText": null,
"correct": true,
"response": null
},
"additionalContent": null,
"openEndedResponse": null,
"preselectedChoices": [],
"fileSubmissionAsset": null,
"preTextDisplayOption": null,
"postTextDisplayOption": null,
"preTextDisplayOption2": null,
"postTextDisplayOption2": null,
"addAndDeleteRowsEnabled": false,
"copyAnswerFromQuestionId": null,
"copyAnswerFromAssessmentId": null,
"mustSelectAllCorrectChoices": false
},
{
"body": "<p>What items were most important to you? Did the information provided help you understand these items better? Why or why not?</p>",
"type": "openEnded",
"table": null,
"choices": [],
"preText": null,
"postText": null,
"preText2": null,
"required": false,
"response": null,
"postText2": null,
"questionId": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"placeholder": null,
"displayOption": null,
"tableResponse": {
"rows": [],
"headers": []
},
"parentQuestion": null,
"selectedChoice": null,
"additionalContent": null,
"openEndedResponse": "The sections detailing the enrollment process, financial transactions, and student support services were the most integral to me. The information provided was clear and concise. I deeply appreciated the visual aids and supplementary links embedded in the presentations. The quizzes were a nice tool to gage audience understanding of presentation concepts. Overall, I found this orientation course to be very effective. Thank you to the team who put this course together. ",
"preselectedChoices": [],
"fileSubmissionAsset": null,
"preTextDisplayOption": null,
"postTextDisplayOption": null,
"preTextDisplayOption2": null,
"postTextDisplayOption2": null,
"addAndDeleteRowsEnabled": false,
"copyAnswerFromQuestionId": null,
"copyAnswerFromAssessmentId": null,
"mustSelectAllCorrectChoices": false
},
{
"body": "<p>Which of the following services would you like information about? (Select all that apply)</p>",
"type": "selectBoxes",
"table": null,
"choices": [
{
"asset": null,
"value": "Academic Coaching/Tutoring",
"points": null,
"altText": null,
"correct": true,
"response": null,
"selected": false
},
{
"asset": null,
"value": "Disability Services",
"points": null,
"altText": null,
"correct": true,
"response": null,
"selected": false
},
{
"asset": null,
"value": "Community Resources (e.g., housing, food share, social service agency information, or referrals)",
"points": null,
"altText": null,
"correct": true,
"response": null,
"selected": false
},
{
"asset": null,
"value": "Extracurricular Activities (e.g., student organizations, student government, intramural athletics, etc.)",
"points": null,
"altText": null,
"correct": true,
"response": null,
"selected": false
},
{
"asset": null,
"value": "Financial Coaching and Budgeting",
"points": null,
"altText": null,
"correct": true,
"response": null,
"selected": false
},
{
"asset": null,
"value": "Personal Counseling (e.g., anxiety, depression, ADHD, etc.)",
"points": null,
"altText": null,
"correct": true,
"response": null,
"selected": false
},
{
"asset": null,
"value": "Veterans' Services",
"points": null,
"altText": null,
"correct": true,
"response": null,
"selected": false
},
{
"asset": null,
"value": "Computer Help Videos (using systems and common computer tasks)",
"points": null,
"altText": null,
"correct": true,
"response": null,
"selected": false
},
{
"asset": null,
"value": "Help with Home Internet Access",
"points": null,
"altText": null,
"correct": true,
"response": null,
"selected": false
},
{
"asset": null,
"value": "Career Services- Help Finding a job while in college",
"points": null,
"altText": null,
"correct": true,
"response": null,
"selected": false
}
],
"preText": null,
"postText": null,
"preText2": null,
"required": true,
"response": null,
"postText2": null,
"questionId": "e7d6c5b4-a3f2-4e1d-9c8b-7a6f5e4d3c2b",
"placeholder": null,
"displayOption": null,
"tableResponse": {
"rows": [],
"headers": []
},
"parentQuestion": null,
"selectedChoice": null,
"additionalContent": null,
"openEndedResponse": "Help with Home Internet Access",
"preselectedChoices": [],
"fileSubmissionAsset": null,
"preTextDisplayOption": null,
"postTextDisplayOption": null,
"preTextDisplayOption2": null,
"postTextDisplayOption2": null,
"addAndDeleteRowsEnabled": false,
"copyAnswerFromQuestionId": null,
"copyAnswerFromAssessmentId": null,
"mustSelectAllCorrectChoices": false
}
],
"notifiableId": "4f3e2d1c-0b9a-4a8f-9e7d-6c5b4a3f2e1d",
"courseTitle": "New Student Orientation",
"courseSku": null,
"userDetail": {
"id": "d9c8b7a6-5e4d-4c3b-8a9f-0e1d2c3b4a5f",
"firstName": "Bob",
"lastName": "Johnson",
"email": "[email protected]",
"externalCustomerId": "[email protected]",
"sfContactId": null,
"sfAccountId": null,
"ref1": "StudentID12345",
"ref2": "Department?",
"ref3": "...",
"ref4": null,
"ref5": null,
"ref6": null,
"ref7": null,
"ref8": null,
"ref9": null,
"ref10": null
}
}