Prerequisites
The connector should already be set up, with a Connector Profile and a Linked Account. See Getting Started on the 360Learning connector page.How StackOne sets up 360Learning webhooks
Nothing needs configuring in 360Learning. When you connect an account with events enabled, StackOne creates the webhook subscriptions automatically and deletes them again when the connection is removed.
Grant the webhook scope
Creating a subscription requires the webhooks:write scope. Without it the connection is established but no subscriptions are created, so no events are ever delivered.
- Authorize the connection with webhooks:write granted alongside the read scopes the connector already uses.
Check how many subscription slots are free
360Learning allows fifty webhook subscriptions per account, counted across every integration. Because it accepts one event type per subscription, StackOne creates one for each event you enable — enabling all thirty-eight leaves twelve slots for everything else.
- Enable only the events you need if the account is already close to the limit.
- Two StackOne connections to the same 360Learning account cannot both enable every event, because that would need seventy-six slots.
- At the limit 360Learning answers a new subscription with a server error rather than a message about the limit, so an account that silently stops gaining subscriptions is usually full.
Review the subscriptions if you need to confirm them
Each subscription StackOne creates is named StackOne and carries a single event type. Leave them alone — StackOne manages their whole lifecycle and removes them when the connection is deleted.
- 360Learning signs each delivery with webhook-signature, webhook-id and webhook-timestamp headers. StackOne authenticates deliveries by the unguessable callback URL instead, so no signing secret is configured.
Available webhook events
360Learning emits thirty-eight event types across users, learning content and classroom sessions. Only events selected in StackOne are subscribed — 360Learning sends nothing for events that are not.
Enable user events
Events covering user accounts on the platform.
- User Created (
user.created) — Fired when a user is created as active. - User Invited (
user.invited) — Fired when a user is invited to the platform. - User Activated (
user.activated) — Fired when a user is activated for the first time. - User Reactivated (
user.reactivated) — Fired when a previously deactivated user is reactivated. - User Updated (
user.updated) — Fired when a user’s profile details change. - User Deleted (
user.deleted) — Fired when a user is soft deleted.
Enable user custom field events
Events covering the custom fields defined on users and the values held against them.
- User Custom Field Created (
user.customfield.created) — Fired when a user custom field is created. - User Custom Field Updated (
user.customfield.updated) — Fired when a user custom field is renamed. - User Custom Field Deleted (
user.customfield.deleted) — Fired when a user custom field is deleted. - User Custom Field Values Updated (
user.customfield.values.updated) — Fired when custom field values change. One event can cover several users.
Enable learning progress events
Events raised by learners working through content, rather than by administrative changes.
- Course Attempt Closed (
course.attempt.closed) — Fired when a learner finishes an attempt at a course. - User Assessment Corrected (
user.assessment.corrected) — Fired when an assessment is corrected. The payload reports whether the learner passed. - User Certificate Awarded (
user.certificate.awarded) — Fired when a certificate is awarded to a learner. - Path Session User Status Updated (
path.session.user.status.updated) — Fired on each change to a learner’s status in a path session, and once when they are first enrolled.
Enable group events
Events covering groups and the content in their libraries.
- Group Created (
group.created) — Fired when a group is created. - Group Updated (
group.updated) — Fired when a group’s details change. - Group Deleted (
group.deleted) — Fired when a group is deleted. - Groups Library Courses Added (
groups.library.courses.added) — Fired when courses are added to a group’s library. One event can cover several groups and several courses. - Groups Library Paths Added (
groups.library.paths.added) — Fired when learning paths are added to a group’s library. One event can cover several groups and several paths.
Enable path events
Events covering learning paths.
- Path Created (
path.created) — Fired when a path is created. - Path Updated (
path.updated) — Fired when a path is updated. - Path Archived (
path.archived) — Fired when a path is archived. - Path Deleted (
path.deleted) — Fired when a path is deleted.
Enable path session events
Events covering the sessions attached to a path and the learners enrolled in them.
- Path Session Added (
path.session.added) — Fired when a session is added to a path. - Path Session Removed (
path.session.removed) — Fired when a session is removed from a path. - Path Session Users Enrolled (
path.session.users.enrolled) — Fired when learners are enrolled in a path session. - Path Session Users Unenrolled (
path.session.users.unenrolled) — Fired when learners are unenrolled from a path session.
Enable classroom slot events
Events covering scheduled classroom slots, their attendees and their waitlists.
- User Classroom Slot Registered (
user.classroom.slot.registered) — Fired when a learner registers or is registered for a slot. - User Classroom Slot Unregistered (
user.classroom.slot.unregistered) — Fired when a learner unregisters or is removed from a slot. - User Classroom Slot RSVP Going Yes (
user.classroom.slot.rsvp.going.yes) — Fired when a learner answers yes to a slot invitation. - User Classroom Slot RSVP Going No (
user.classroom.slot.rsvp.going.no) — Fired when a learner answers no to a slot invitation. - Path Session Classroom Slot Users Unregistered Full (
path.session.classroom.slot.users.unregistered.full) — Fired when learners leave a slot that was full. - Path Session Classroom Slot Waitlist Opened (
path.session.classroom.slot.waitlist.opened) — Fired when a waitlist is added to a slot. - Path Session Classroom Slot Waitlist Closed (
path.session.classroom.slot.waitlist.closed) — Fired when a slot’s waitlist is closed. - Path Session Classroom Slot Waitlist User Joined (
path.session.classroom.slot.waitlist.user.joined) — Fired when a learner joins a slot’s waitlist.
Enable bulk operation events
Events covering bulk operations started through the 360Learning API. An import run from the dashboard raises them only if it uses that same API.
- Bulk Operation Created (
bulk.operation.created) — Fired when a bulk operation is created through the API. - Bulk Operation Ended (
bulk.operation.ended) — Fired when a bulk operation finishes.
Enable the xAPI event
An xAPI statement rather than the envelope the other events use, so it carries the learner, the verb and the course activity instead of a type and a data object.
- xAPI Started (
xapi.started) — Fired when a learner starts a course. The record reported is the course activity.
Retrieve the record to see what changed
A notification identifies what changed rather than carrying the whole record. Each event reports the identifier its payload holds — the user, group, path, session or classroom slot the change concerns — so read that record back when you need its current contents.
- Treat each notification as a signal to re-read the record rather than as a change log.