{"openapi":"3.1.0","paths":{"/api/v2/webhooks/subscriptions":{"post":{"description":"> 🔑\n>\n> Required OAuth scope: `webhooks:write`.\n\nCreates a webhook subscription.","operationId":"v2.webhook.subscriptions.CreateSubscriptionController_createSubscription","parameters":[{"name":"360-api-version","in":"header","description":"The version of the API.","required":true,"schema":{"type":"string","enum":["v2.0"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseSubscriptionDTO"}}}},"responses":{"201":{"description":"Returns the created webhook subscription.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionDTO"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error.","content":{"application/json":{"schema":{"oneOf":[{"description":"A subscription already exists for this event type and URL.","title":"Subscription Already Exists","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["subscriptionAlreadyExists"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]},{"description":"The provided URL is unreachable.","title":"Url Unreachable","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["urlUnreachable"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]},{"description":"The provided URL scheme is not supported.","title":"Url Scheme","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["urlScheme"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]},{"description":"The maximum number of subscriptions for this event type has been reached.","title":"Subscriptions Limit Reached","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["subscriptionsLimitReached"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]}]}}}},"401":{"description":"The given access token is either missing, invalid, has expired, or has been revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["invalid_token"]}},"required":["error"]}}}},"403":{"description":"The given access token does not have the required OAuth scope to execute the request.","content":{"application/json":{"schema":{"title":"Invalid Scope","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_scope"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"The client has sent too many requests in a short amount of time. ","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["tooManyRequests"]}},"required":["error"]}}}}},"security":[{"oauth2":[]}],"summary":"Create a webhook subscription","tags":["Subscriptions"]},"get":{"description":"> 🔑\n>\n> Required OAuth scope: `webhooks:read`.\n\n> 📖\n>\n> This endpoint is paginated with a page size of 2,000 webhook subscriptions. For more information, see the [Pagination guide](doc:pagination).\n\nLists all webhook subscriptions in your platform.","operationId":"v2.webhook.subscriptions.GetSubscriptionsController_getSubscriptions","parameters":[{"name":"360-api-version","in":"header","description":"The version of the API.","required":true,"schema":{"type":"string","enum":["v2.0"]}},{"name":"eventType","required":false,"in":"query","style":"deepObject","explode":true,"description":"Filter on **eventType** property with LHS bracket notation.\n\nExpected value format is a string (`bulk.operation.created`, `bulk.operation.ended`, `course.attempt.closed`, `group.created`, `group.deleted`, `group.updated`, `groups.library.courses.added`, `groups.library.paths.added`, `path.archived`, `path.created`, `path.deleted`, `path.session.added`, `path.session.removed`, `path.session.classroom.slot.users.unregistered.full`, `path.session.classroom.slot.waitlist.closed`, `path.session.classroom.slot.waitlist.opened`, `path.session.classroom.slot.waitlist.user.joined`, `path.session.user.status.updated`, `path.session.users.enrolled`, `path.session.users.unenrolled`, `path.updated`, `user.activated`, `user.assessment.corrected`, `user.certificate.awarded`, `user.classroom.slot.registered`, `user.classroom.slot.rsvp.going.yes`, `user.classroom.slot.rsvp.going.no`, `user.classroom.slot.unregistered`, `user.created`, `user.customfield.created`, `user.customfield.deleted`, `user.customfield.updated`, `user.customfield.values.updated`, `user.deleted`, `user.invited`, `user.reactivated`, `user.updated`, `xapi.started`, `xapi`).","schema":{"properties":{"eq":{"type":"string","description":"Filter on values equal to the given one","example":"bulk.operation.created","enum":["bulk.operation.created","bulk.operation.ended","course.attempt.closed","group.created","group.deleted","group.updated","groups.library.courses.added","groups.library.paths.added","path.archived","path.created","path.deleted","path.session.added","path.session.removed","path.session.classroom.slot.users.unregistered.full","path.session.classroom.slot.waitlist.closed","path.session.classroom.slot.waitlist.opened","path.session.classroom.slot.waitlist.user.joined","path.session.user.status.updated","path.session.users.enrolled","path.session.users.unenrolled","path.updated","user.activated","user.assessment.corrected","user.certificate.awarded","user.classroom.slot.registered","user.classroom.slot.rsvp.going.yes","user.classroom.slot.rsvp.going.no","user.classroom.slot.unregistered","user.created","user.customfield.created","user.customfield.deleted","user.customfield.updated","user.customfield.values.updated","user.deleted","user.invited","user.reactivated","user.updated","xapi.started","xapi"]},"ne":{"type":"string","description":"Filter on values not equal to the given one","example":"bulk.operation.created","enum":["bulk.operation.created","bulk.operation.ended","course.attempt.closed","group.created","group.deleted","group.updated","groups.library.courses.added","groups.library.paths.added","path.archived","path.created","path.deleted","path.session.added","path.session.removed","path.session.classroom.slot.users.unregistered.full","path.session.classroom.slot.waitlist.closed","path.session.classroom.slot.waitlist.opened","path.session.classroom.slot.waitlist.user.joined","path.session.user.status.updated","path.session.users.enrolled","path.session.users.unenrolled","path.updated","user.activated","user.assessment.corrected","user.certificate.awarded","user.classroom.slot.registered","user.classroom.slot.rsvp.going.yes","user.classroom.slot.rsvp.going.no","user.classroom.slot.unregistered","user.created","user.customfield.created","user.customfield.deleted","user.customfield.updated","user.customfield.values.updated","user.deleted","user.invited","user.reactivated","user.updated","xapi.started","xapi"]},"in":{"type":"array","description":"Filter on values including the given ones","items":{"type":"string","example":"bulk.operation.created","enum":["bulk.operation.created","bulk.operation.ended","course.attempt.closed","group.created","group.deleted","group.updated","groups.library.courses.added","groups.library.paths.added","path.archived","path.created","path.deleted","path.session.added","path.session.removed","path.session.classroom.slot.users.unregistered.full","path.session.classroom.slot.waitlist.closed","path.session.classroom.slot.waitlist.opened","path.session.classroom.slot.waitlist.user.joined","path.session.user.status.updated","path.session.users.enrolled","path.session.users.unenrolled","path.updated","user.activated","user.assessment.corrected","user.certificate.awarded","user.classroom.slot.registered","user.classroom.slot.rsvp.going.yes","user.classroom.slot.rsvp.going.no","user.classroom.slot.unregistered","user.created","user.customfield.created","user.customfield.deleted","user.customfield.updated","user.customfield.values.updated","user.deleted","user.invited","user.reactivated","user.updated","xapi.started","xapi"]}},"nin":{"type":"array","description":"Filter on values excluding the given ones","items":{"type":"string","example":"bulk.operation.created","enum":["bulk.operation.created","bulk.operation.ended","course.attempt.closed","group.created","group.deleted","group.updated","groups.library.courses.added","groups.library.paths.added","path.archived","path.created","path.deleted","path.session.added","path.session.removed","path.session.classroom.slot.users.unregistered.full","path.session.classroom.slot.waitlist.closed","path.session.classroom.slot.waitlist.opened","path.session.classroom.slot.waitlist.user.joined","path.session.user.status.updated","path.session.users.enrolled","path.session.users.unenrolled","path.updated","user.activated","user.assessment.corrected","user.certificate.awarded","user.classroom.slot.registered","user.classroom.slot.rsvp.going.yes","user.classroom.slot.rsvp.going.no","user.classroom.slot.unregistered","user.created","user.customfield.created","user.customfield.deleted","user.customfield.updated","user.customfield.values.updated","user.deleted","user.invited","user.reactivated","user.updated","xapi.started","xapi"]}}}}}],"responses":{"200":{"description":"Returns one page of 2000 webhook subscriptions.","headers":{"Link":{"schema":{"type":"string"},"description":"URL (between `<` `>`) to fetch the immediate next page of results. For more information, see our [Pagination guide](doc:pagination).\n\n⚠️ Only included if there is another page of results.","example":"<my/resource/url>; rel=\"next\""}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SubscriptionDTO"}}}}},"401":{"description":"The given access token is either missing, invalid, has expired, or has been revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["invalid_token"]}},"required":["error"]}}}},"403":{"description":"The given access token does not have the required OAuth scope to execute the request.","content":{"application/json":{"schema":{"title":"Invalid Scope","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_scope"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"The client has sent too many requests in a short amount of time. ","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["tooManyRequests"]}},"required":["error"]}}}}},"security":[{"oauth2":[]}],"summary":"List all webhook subscriptions","tags":["Subscriptions"]}},"/api/v2/webhooks/subscriptions/{subscriptionId}":{"delete":{"description":"> 🔑\n>\n> Required OAuth scope: `webhooks:write`.\n\nDeletes a specific webhook subscription given its unique ID.","operationId":"v2.webhook.subscriptions.DeleteSubscriptionController_deleteSubscription","parameters":[{"name":"360-api-version","in":"header","description":"The version of the API.","required":true,"schema":{"type":"string","enum":["v2.0"]}},{"name":"subscriptionId","required":true,"in":"path","description":"The unique ID of the webhook subscription.","schema":{"format":"ObjectId","pattern":"^[a-fA-F0-9]{24}$","example":"507f1f77bcf86cd799439011","type":"string"}}],"responses":{"204":{"description":"Deletes a specific webhook subscription."},"401":{"description":"The given access token is either missing, invalid, has expired, or has been revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["invalid_token"]}},"required":["error"]}}}},"403":{"description":"The given access token does not have the required OAuth scope to execute the request.","content":{"application/json":{"schema":{"title":"Invalid Scope","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_scope"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The given `subscriptionId` does not correspond to any existing subscription.","content":{"application/json":{"schema":{"title":"Subscription Not Found","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["subscriptionNotFound"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"The client has sent too many requests in a short amount of time. ","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["tooManyRequests"]}},"required":["error"]}}}}},"security":[{"oauth2":[]}],"summary":"Delete a webhook subscription","tags":["Subscriptions"]},"get":{"description":"> 🔑\n>\n> Required OAuth scope: `webhooks:read`.\n\nRetrieves the details of a specific webhook subscription with the provided subscription ID.","operationId":"v2.webhook.subscriptions.GetSubscriptionController_getSubscription","parameters":[{"name":"360-api-version","in":"header","description":"The version of the API.","required":true,"schema":{"type":"string","enum":["v2.0"]}},{"name":"subscriptionId","required":true,"in":"path","description":"The unique ID of the webhook subscription.","schema":{"format":"ObjectId","pattern":"^[a-fA-F0-9]{24}$","example":"507f1f77bcf86cd799439011","type":"string"}}],"responses":{"200":{"description":"Returns the details of the webhook subscription.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionDTO"}}}},"401":{"description":"The given access token is either missing, invalid, has expired, or has been revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["invalid_token"]}},"required":["error"]}}}},"403":{"description":"The given access token does not have the required OAuth scope to execute the request.","content":{"application/json":{"schema":{"title":"Invalid Scope","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_scope"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The given `subscriptionId` does not correspond to any existing subscription.","content":{"application/json":{"schema":{"title":"Subscription Not Found","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["subscriptionNotFound"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"The client has sent too many requests in a short amount of time. ","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["tooManyRequests"]}},"required":["error"]}}}}},"security":[{"oauth2":[]}],"summary":"Retrieve a webhook subscription","tags":["Subscriptions"]},"patch":{"description":"> 🔑\n>\n> Required OAuth scope: `webhooks:write`.\n\nEdits specific fields of an existing webhook subscription. Fields not included in the request payload remain unchanged.","operationId":"v2.webhook.subscriptions.UpdateSubscriptionController_updateSubscription","parameters":[{"name":"360-api-version","in":"header","description":"The version of the API.","required":true,"schema":{"type":"string","enum":["v2.0"]}},{"name":"subscriptionId","required":true,"in":"path","description":"The unique ID of the webhook subscription.","schema":{"format":"ObjectId","pattern":"^[a-fA-F0-9]{24}$","example":"507f1f77bcf86cd799439011","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchSubscriptionDTO"}}}},"responses":{"200":{"description":"Returns the updated webhook subscription.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionDTO"}}}},"400":{"description":"The server cannot or will not process the request due to something that is perceived to be a client error.","content":{"application/json":{"schema":{"oneOf":[{"description":"A subscription already exists for this event type and URL.","title":"Subscription Already Exists","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["subscriptionAlreadyExists"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]},{"description":"The provided URL is unreachable.","title":"Url Unreachable","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["urlUnreachable"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]},{"description":"The provided URL scheme is not supported.","title":"Url Scheme","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["urlScheme"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]}]}}}},"401":{"description":"The given access token is either missing, invalid, has expired, or has been revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["invalid_token"]}},"required":["error"]}}}},"403":{"description":"The given access token does not have the required OAuth scope to execute the request.","content":{"application/json":{"schema":{"title":"Invalid Scope","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_scope"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The given `subscriptionId` does not correspond to any existing subscription.","content":{"application/json":{"schema":{"title":"Subscription Not Found","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["subscriptionNotFound"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"The client has sent too many requests in a short amount of time. ","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["tooManyRequests"]}},"required":["error"]}}}}},"security":[{"oauth2":[]}],"summary":"Edit a webhook subscription","tags":["Subscriptions"]}},"/api/v2/webhooks/subscriptions/{subscriptionId}/events":{"get":{"description":"> 🔑\n>\n> Required OAuth scope: `webhooks:read`.\n\n> 📖\n>\n> This endpoint is paginated with a page size of 250 webhook events. For more information, see the [Pagination guide](doc:pagination).\n\nLists all events for a given webhook subscription.","operationId":"v2.webhook.subscriptions.GetEventsController_getEvents","parameters":[{"name":"360-api-version","in":"header","description":"The version of the API.","required":true,"schema":{"type":"string","enum":["v2.0"]}},{"name":"subscriptionId","required":true,"in":"path","description":"The unique ID of the webhook subscription.","schema":{"format":"ObjectId","pattern":"^[a-fA-F0-9]{24}$","example":"507f1f77bcf86cd799439011","type":"string"}},{"name":"createdAt","required":false,"in":"query","style":"deepObject","explode":true,"description":"Filter on **createdAt** property with LHS bracket notation.\n\nExpected value format is a date (YYYY-MM-DDThh:mm:ss.sssZ). The milliseconds are always set to 0.","schema":{"properties":{"lt":{"type":"string","format":"date-time","description":"Filter on dates lower than the given one","example":"2020-01-01T10:30:26.000Z"},"gte":{"type":"string","format":"date-time","description":"Filter on dates greater than or equal the given one","example":"2020-01-01T10:30:26.000Z"}}}},{"name":"status","required":false,"in":"query","style":"deepObject","explode":true,"description":"Filter on **status** property with LHS bracket notation.\n\nExpected value format is a string (`canceled`, `delivered`, `failed`, `pending`, `sending`).","schema":{"properties":{"eq":{"type":"string","description":"Filter on values equal to the given one","example":"canceled","enum":["canceled","delivered","failed","pending","sending"]}}}}],"responses":{"200":{"description":"Returns one page of 250 webhook events.","headers":{"Link":{"schema":{"type":"string"},"description":"URL (between `<` `>`) to fetch the immediate next page of results. For more information, see our [Pagination guide](doc:pagination).\n\n⚠️ Only included if there is another page of results.","example":"<my/resource/url>; rel=\"next\""}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EventDTO"}}}}},"401":{"description":"The given access token is either missing, invalid, has expired, or has been revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["invalid_token"]}},"required":["error"]}}}},"403":{"description":"The given access token does not have the required OAuth scope to execute the request.","content":{"application/json":{"schema":{"title":"Invalid Scope","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_scope"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The given `subscriptionId` does not correspond to any existing subscription.","content":{"application/json":{"schema":{"title":"Subscription Not Found","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["subscriptionNotFound"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"The client has sent too many requests in a short amount of time. ","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["tooManyRequests"]}},"required":["error"]}}}}},"security":[{"oauth2":[]}],"summary":"List all events for a webhook subscription","tags":["Subscriptions"]}},"/api/v2/webhooks/subscriptions/{subscriptionId}/secrets":{"get":{"description":"> 🔑\n>\n> Required OAuth scope: `webhookSecrets:read`.\n\nRetrieves the details of the signing secret associated with the provided webhook subscription ID.","operationId":"v2.webhook.subscriptions.GetSigningSecretController_getSigningSecret","parameters":[{"name":"360-api-version","in":"header","description":"The version of the API.","required":true,"schema":{"type":"string","enum":["v2.0"]}},{"name":"subscriptionId","required":true,"in":"path","description":"The unique ID of the webhook subscription.","schema":{"format":"ObjectId","pattern":"^[a-fA-F0-9]{24}$","example":"507f1f77bcf86cd799439011","type":"string"}}],"responses":{"200":{"description":"Returns the value of the current signing secret of the webhook subscription.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SigningSecretDTO"}}}},"401":{"description":"The given access token is either missing, invalid, has expired, or has been revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["invalid_token"]}},"required":["error"]}}}},"403":{"description":"The given access token does not have the required OAuth scope to execute the request.","content":{"application/json":{"schema":{"title":"Invalid Scope","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_scope"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The given `subscriptionId` does not correspond to any existing subscription.","content":{"application/json":{"schema":{"title":"Subscription Not Found","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["subscriptionNotFound"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"The client has sent too many requests in a short amount of time. ","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["tooManyRequests"]}},"required":["error"]}}}}},"security":[{"oauth2":[]}],"summary":"Retrieve the signing secret of a webhook subscription","tags":["Subscriptions"]}},"/api/v2/webhooks/subscriptions/{subscriptionId}/events/retry-failure":{"post":{"description":"> 🔑\n>\n> Required OAuth scope: `webhooks:write`.\n\nRetries all failed webhook events for a subscription within the specified timeframe (maximum 3 days per request). Events are retained for 90 days and can be retried in multiple requests.","operationId":"v2.webhook.subscriptions.RetryEventFailuresController_retryEventFailures","parameters":[{"name":"360-api-version","in":"header","description":"The version of the API.","required":true,"schema":{"type":"string","enum":["v2.0"]}},{"name":"subscriptionId","required":true,"in":"path","description":"The unique ID of the webhook subscription.","schema":{"format":"ObjectId","pattern":"^[a-fA-F0-9]{24}$","example":"507f1f77bcf86cd799439011","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetryEventsDTO"}}}},"responses":{"204":{"description":"Retries the failed webhook events for the given webhook subscription and the given timeframe."},"400":{"description":"The given `startDate` and `endDate` are invalid. The retry timeframe is limited to 3 days and the `endDate` must be after the `startDate`.","content":{"application/json":{"schema":{"title":"Invalid Retry Timeframe","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalidRetryTimeframe"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"The given access token is either missing, invalid, has expired, or has been revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["invalid_token"]}},"required":["error"]}}}},"403":{"description":"The given access token does not have the required OAuth scope to execute the request.","content":{"application/json":{"schema":{"title":"Invalid Scope","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_scope"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The given `subscriptionId` does not correspond to any active subscription.","content":{"application/json":{"schema":{"title":"Active Subscription Not Found","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["activeSubscriptionNotFound"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"The client has sent too many requests in a short amount of time. ","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["tooManyRequests"]}},"required":["error"]}}}}},"security":[{"oauth2":[]}],"summary":"Retry the failed webhook events of a webhook subscription","tags":["Subscriptions"]}},"/api/v2/webhooks/subscriptions/{subscriptionId}/events/retry-success":{"post":{"description":"> 🔑\n>\n> Required OAuth scope: `webhooks:write`.\n\nRetries all successful webhook events for a subscription within the specified timeframe (maximum 3 days per request). Events are retained for 90 days and can be retried in multiple requests.","operationId":"v2.webhook.subscriptions.RetryEventSuccessesController_retryEventSuccesses","parameters":[{"name":"360-api-version","in":"header","description":"The version of the API.","required":true,"schema":{"type":"string","enum":["v2.0"]}},{"name":"subscriptionId","required":true,"in":"path","description":"The unique ID of the webhook subscription.","schema":{"format":"ObjectId","pattern":"^[a-fA-F0-9]{24}$","example":"507f1f77bcf86cd799439011","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetryEventsDTO"}}}},"responses":{"204":{"description":"Retries the successful webhook events for the given webhook subscription and the given timeframe."},"400":{"description":"The given `startDate` and `endDate` are invalid. The retry timeframe is limited to 3 days and the `endDate` must be after the `startDate`.","content":{"application/json":{"schema":{"title":"Invalid Retry Timeframe","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalidRetryTimeframe"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"The given access token is either missing, invalid, has expired, or has been revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["invalid_token"]}},"required":["error"]}}}},"403":{"description":"The given access token does not have the required OAuth scope to execute the request.","content":{"application/json":{"schema":{"title":"Invalid Scope","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_scope"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The given `subscriptionId` does not correspond to any active subscription.","content":{"application/json":{"schema":{"title":"Active Subscription Not Found","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["activeSubscriptionNotFound"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"The client has sent too many requests in a short amount of time. ","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["tooManyRequests"]}},"required":["error"]}}}}},"security":[{"oauth2":[]}],"summary":"Retry the successful webhook events of a webhook subscription","tags":["Subscriptions"]}},"/api/v2/webhooks/subscriptions/{subscriptionId}/secrets/rotate":{"post":{"description":"> 🔑\n>\n> Required OAuth scope: `webhookSecrets:write`.\n\nRotates the signing secret for the given webhook subscription. In addition to the new signature, the events will also be signed with the legacy secret for 24 hours.","operationId":"v2.webhook.subscriptions.RotateSigningSecretController_rotateSigningSecret","parameters":[{"name":"360-api-version","in":"header","description":"The version of the API.","required":true,"schema":{"type":"string","enum":["v2.0"]}},{"name":"subscriptionId","required":true,"in":"path","description":"The unique ID of the webhook subscription.","schema":{"format":"ObjectId","pattern":"^[a-fA-F0-9]{24}$","example":"507f1f77bcf86cd799439011","type":"string"}}],"responses":{"201":{"description":"Returns the new signing secret of the webhook subscription.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SigningSecretDTO"}}}},"401":{"description":"The given access token is either missing, invalid, has expired, or has been revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["invalid_token"]}},"required":["error"]}}}},"403":{"description":"The given access token does not have the required OAuth scope to execute the request.","content":{"application/json":{"schema":{"title":"Invalid Scope","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_scope"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The given `subscriptionId` does not correspond to any existing subscription.","content":{"application/json":{"schema":{"title":"Subscription Not Found","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["subscriptionNotFound"]},"message":{"type":"string","example":"A human-readable message to help with debugging."}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"The client has sent too many requests in a short amount of time. ","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["tooManyRequests"]}},"required":["error"]}}}}},"security":[{"oauth2":[]}],"summary":"Rotate the signing secret of a webhook subscription","tags":["Subscriptions"]}}},"info":{"title":"Webhook API","description":"","version":"1.0.0","contact":{}},"tags":[],"servers":[{"url":"https://app.360learning.com","description":"Production EU"},{"url":"https://app.us.360learning.com","description":"Production US"}],"components":{"securitySchemes":{"oauth2":{"type":"oauth2","flows":{},"description":"Use the token from the authentication endpoint in the Authorization header.\n\nExample: `Authorization: Bearer <token>`"}},"schemas":{"BaseSubscriptionDTO":{"title":"Base Subscription","type":"object","properties":{"eventType":{"type":"string","enum":["bulk.operation.created","bulk.operation.ended","course.attempt.closed","group.created","group.deleted","group.updated","groups.library.courses.added","groups.library.paths.added","path.archived","path.created","path.deleted","path.session.added","path.session.removed","path.session.classroom.slot.users.unregistered.full","path.session.classroom.slot.waitlist.closed","path.session.classroom.slot.waitlist.opened","path.session.classroom.slot.waitlist.user.joined","path.session.user.status.updated","path.session.users.enrolled","path.session.users.unenrolled","path.updated","user.activated","user.assessment.corrected","user.certificate.awarded","user.classroom.slot.registered","user.classroom.slot.rsvp.going.yes","user.classroom.slot.rsvp.going.no","user.classroom.slot.unregistered","user.created","user.customfield.created","user.customfield.deleted","user.customfield.updated","user.customfield.values.updated","user.deleted","user.invited","user.reactivated","user.updated","xapi.started","xapi"],"description":"The type of event that should be managed by this webhook subscription."},"name":{"type":"string","description":"The name of the webhook subscription.","example":"HRIS system subscription","minLength":1},"url":{"type":"string","description":"The URL where the events are sent for this webhook subscription.","example":"https://example.com/webhook","minLength":1}},"required":["eventType","name","url"]},"SubscriptionDTO":{"title":"Subscription","type":"object","properties":{"eventType":{"type":"string","enum":["bulk.operation.created","bulk.operation.ended","course.attempt.closed","group.created","group.deleted","group.updated","groups.library.courses.added","groups.library.paths.added","path.archived","path.created","path.deleted","path.session.added","path.session.removed","path.session.classroom.slot.users.unregistered.full","path.session.classroom.slot.waitlist.closed","path.session.classroom.slot.waitlist.opened","path.session.classroom.slot.waitlist.user.joined","path.session.user.status.updated","path.session.users.enrolled","path.session.users.unenrolled","path.updated","user.activated","user.assessment.corrected","user.certificate.awarded","user.classroom.slot.registered","user.classroom.slot.rsvp.going.yes","user.classroom.slot.rsvp.going.no","user.classroom.slot.unregistered","user.created","user.customfield.created","user.customfield.deleted","user.customfield.updated","user.customfield.values.updated","user.deleted","user.invited","user.reactivated","user.updated","xapi.started","xapi"],"description":"The type of event that should be managed by this webhook subscription."},"name":{"type":"string","description":"The name of the webhook subscription.","example":"HRIS system subscription","minLength":1},"url":{"type":"string","description":"The URL where the events are sent for this webhook subscription.","example":"https://example.com/webhook","minLength":1},"_id":{"type":"string","description":"The unique ID of the webhook subscription.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"status":{"type":"string","enum":["active","inactive"],"description":"The status of the webhook subscription. Options are:\n- `active`: events are sent to your endpoint.\n- `inactive`: events are not sent to your endpoint."}},"required":["eventType","name","url","_id","status"]},"EventDTO":{"title":"Event","type":"object","properties":{"_id":{"type":"string","description":"The unique ID of the webhook event. It corresponds to the header value **webhook-id** in the webhook event request delivered to your endpoint.","example":"msg_1srOrx2ZWZBpBUvZwXKQmoEYga2r"},"createdAt":{"format":"date-time","type":"string","description":"The date and time when the webhook event was created, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."},"status":{"type":"string","enum":["canceled","delivered","failed","pending","sending"],"description":"The status of the webhook event. Options are:\n- `canceled`: The event delivery was intentionally interrupted.\n- `delivered`: The event was successfully delivered.\n- `failed`: The event failed to be delivered after all the retries.\n- `pending`: The event delivery process is not yet started.\n- `sending`: The event delivery is in progress following the retry schedule."},"payload":{"type":"object","description":"The payload sent in the webhook event."}},"required":["_id","createdAt","status","payload"]},"SigningSecretDTO":{"title":"Signing Secret","type":"object","properties":{"secret":{"type":"string","description":"The signing secret of the webhook subscription. You can use this secret to verify the authenticity of the received events.","example":"password123","minLength":1}},"required":["secret"]},"RetryEventsDTO":{"title":"Retry Events","type":"object","properties":{"startDate":{"format":"date-time","type":"string","description":"The date from which the events should be retried, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."},"endDate":{"format":"date-time","type":"string","description":"The date until which the events should be retried, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["startDate","endDate"]},"PatchSubscriptionDTO":{"title":"Patch Subscription","type":"object","properties":{"name":{"type":"string","description":"The name of the webhook subscription.","example":"HRIS system subscription","minLength":1},"status":{"type":"string","enum":["active","inactive"],"description":"The status of the webhook subscription. Options are:\n- `active`: events are sent to your endpoint.\n- `inactive`: events are not sent to your endpoint."},"url":{"type":"string","description":"The URL where the events are sent for this webhook subscription.","example":"https://example.com/webhook","minLength":1}}},"AttemptClosedContextDTO":{"title":"Attempt Closed Context","type":"object","properties":{"pathId":{"type":"string","description":"The unique ID of the path if the course is played in the path context.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"pathSessionId":{"type":"string","description":"The unique ID of the path session if the course is played in the path context.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"}}},"AttemptClosedDTO":{"title":"Attempt Closed","type":"object","properties":{"attemptId":{"type":"string","description":"The unique ID of the attempt.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"closedAt":{"format":"date-time","type":"string","description":"The date and time when the attempt was closed, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."},"userId":{"type":"string","description":"The unique ID of the user who closed the attempt.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"courseId":{"type":"string","description":"The unique ID of the course.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"reason":{"type":"string","enum":["learnerFinished"],"description":"The reason for closing the attempt."},"context":{"description":"The context object for this attempt.","allOf":[{"$ref":"#/components/schemas/AttemptClosedContextDTO"}]}},"required":["attemptId","closedAt","userId","courseId","reason","context"]},"BulkOperationCreatedDTO":{"title":"Bulk Operation Created","type":"object","properties":{"bulkOperationId":{"type":"string","description":"The unique ID of the bulk operation.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"type":{"type":"string","enum":["addContentsToGroupsCatalog","addContentsToGroupsLibrary","addSkillReviews","addUsersToGroups","archiveExternalCourses","deleteSkills","createGroups","createSubscriptionEvents","deleteGroups","deleteJobs","deleteLibraries","importExternalCourses","importExternalStatistics","removeContentsFromGroupsCatalog","removeContentsFromGroupsLibrary","removeUsersFromGroups","replaceJobsSkills","replaceUsersJobs","upsertJobs","upsertLibraries","upsertSkills"],"description":"The type of bulk operation."},"createdAt":{"format":"date-time","type":"string","description":"The date and time when the bulk operation was created, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["bulkOperationId","type","createdAt"]},"BulkOperationEndedDTO":{"title":"Bulk Operation Ended","type":"object","properties":{"bulkOperationId":{"type":"string","description":"The unique ID of the bulk operation.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"type":{"type":"string","enum":["addContentsToGroupsCatalog","addContentsToGroupsLibrary","addSkillReviews","addUsersToGroups","archiveExternalCourses","deleteSkills","createGroups","createSubscriptionEvents","deleteGroups","deleteJobs","deleteLibraries","importExternalCourses","importExternalStatistics","removeContentsFromGroupsCatalog","removeContentsFromGroupsLibrary","removeUsersFromGroups","replaceJobsSkills","replaceUsersJobs","upsertJobs","upsertLibraries","upsertSkills"],"description":"The type of bulk operation."},"createdAt":{"format":"date-time","type":"string","description":"The date and time when the bulk operation was created, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."},"endedAt":{"format":"date-time","type":"string","description":"The date and time when the bulk operation has ended at, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."},"status":{"type":"string","enum":["completed","error"],"description":"The status of the bulk operation."}},"required":["bulkOperationId","type","createdAt","endedAt","status"]},"ClassroomSlotWaitlistClosedDTO":{"title":"Classroom Slot Waitlist Closed","type":"object","properties":{"classroomSlotId":{"type":"string","description":"The unique ID of the classroom slot.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"pathSessionId":{"type":"string","description":"The unique ID of the path session.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"closedAt":{"format":"date-time","type":"string","description":"The date and time when the waitlist closed, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["classroomSlotId","pathSessionId","closedAt"]},"ClassroomSlotWaitlistOpenedDTO":{"title":"Classroom Slot Waitlist Opened","type":"object","properties":{"classroomSlotId":{"type":"string","description":"The unique ID of the classroom slot.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"createdBy":{"type":"string","description":"The unique ID of the user who added the waitlist to the slot.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"pathSessionId":{"type":"string","description":"The unique ID of the path session.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"openedAt":{"format":"date-time","type":"string","description":"The date and time when the waitlist opened, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["classroomSlotId","createdBy","pathSessionId","openedAt"]},"GroupCreatedDTO":{"title":"Group Created","type":"object","properties":{"groupId":{"type":"string","description":"The unique ID of the group.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"createdAt":{"format":"date-time","type":"string","description":"The date and time when the group was created, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."},"name":{"type":"string","description":"The name of the group."}},"required":["groupId","createdAt","name"]},"GroupDeletedDTO":{"title":"Group Deleted","type":"object","properties":{"groupId":{"type":"string","description":"The unique ID of the group.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"deletedAt":{"format":"date-time","type":"string","description":"The date and time when the group was deleted, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."},"name":{"type":"string","description":"The name of the group."}},"required":["groupId","deletedAt","name"]},"PolicyDTO":{"title":"Policy","type":"object","properties":{"url":{"type":"string","description":"The URL of the policy document.","example":"https://example.com/policy","minLength":1},"explicitConsent":{"type":"boolean","description":"When true, user must provide explicit consent at first login. Default is false."}},"required":["url"]},"GroupUpdatedDTO":{"title":"Group Updated","type":"object","properties":{"groupId":{"type":"string","description":"The unique ID of the group.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"updatedAt":{"format":"date-time","type":"string","description":"The date and time when the group was updated, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."},"name":{"type":"string","description":"The name of the group.","example":"Engineering Team","minLength":1},"public":{"type":"boolean","description":"True if the group is public; false if the group is private."},"parentId":{"type":"string","description":"The unique ID of the parent group. Not defined for the root group.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"custom":{"type":"string","description":"A custom field to store information available only in the General settings of the group, the CSV exports, and the API.","example":"Unit 101","minLength":1},"bannerImageId":{"type":"string","description":"The banner image of the group.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"backgroundImageId":{"type":"string","description":"The background image of the group.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"faviconImageId":{"type":"string","description":"The favicon image of the group.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"logoImageId":{"type":"string","description":"The logo image of the group.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"subdomain":{"type":"string","description":"The subdomain of the group.","example":"company-subdomain","minLength":1},"url":{"type":"string","description":"The custom url of the group.","example":"company-domain.com","minLength":1},"privacyPolicy":{"description":"The privacy policy of the group.","allOf":[{"$ref":"#/components/schemas/PolicyDTO"}]},"moderationCharter":{"description":"The moderation charter of the group.","allOf":[{"$ref":"#/components/schemas/PolicyDTO"}]},"termsOfUse":{"description":"The terms of use of the group.","allOf":[{"$ref":"#/components/schemas/PolicyDTO"}]},"imprint":{"description":"The imprint of the group.","allOf":[{"$ref":"#/components/schemas/PolicyDTO"}]}},"required":["groupId","updatedAt","name","public"]},"GroupsLibraryCoursesAddedDTO":{"title":"Groups Library Courses Added","type":"object","properties":{"groupIds":{"maxItems":1000,"description":"The unique IDs of the groups whose library was modified.","example":["507f1f77bcf86cd799439011"],"type":"array","items":{"type":"string","format":"ObjectId","pattern":"^[a-fA-F0-9]{24}$"}},"courseIds":{"maxItems":1000,"description":"The unique IDs of the added courses.","example":["507f1f77bcf86cd799439011"],"type":"array","items":{"type":"string","format":"ObjectId","pattern":"^[a-fA-F0-9]{24}$"}},"addedAt":{"format":"date-time","type":"string","description":"The date and time when the courses were added, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["groupIds","courseIds","addedAt"]},"GroupsLibraryPathsAddedDTO":{"title":"Groups Library Paths Added","type":"object","properties":{"groupIds":{"maxItems":1000,"description":"The unique IDs of the groups whose library was modified.","example":["507f1f77bcf86cd799439011"],"type":"array","items":{"type":"string","format":"ObjectId","pattern":"^[a-fA-F0-9]{24}$"}},"pathIds":{"maxItems":1000,"description":"The unique IDs of the added paths.","example":["507f1f77bcf86cd799439011"],"type":"array","items":{"type":"string","format":"ObjectId","pattern":"^[a-fA-F0-9]{24}$"}},"addedAt":{"format":"date-time","type":"string","description":"The date and time when the paths were added, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["groupIds","pathIds","addedAt"]},"LearnerJoinedClassroomSlotWaitlistDTO":{"title":"Learner Joined Classroom Slot Waitlist","type":"object","properties":{"classroomSlotId":{"type":"string","description":"The unique ID of the classroom slot.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"learnerId":{"type":"string","description":"The unique ID of the learner.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"pathSessionId":{"type":"string","description":"The unique ID of the path session.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"joinedAt":{"format":"date-time","type":"string","description":"The date and time when the learner joined, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["classroomSlotId","learnerId","pathSessionId","joinedAt"]},"LearnersUnregisteredFullClassroomSlotDTO":{"title":"Learners Unregistered Full Classroom Slot","type":"object","properties":{"classroomSlotId":{"type":"string","description":"The unique ID of the classroom slot.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"learnerIds":{"description":"The unique IDs of the learners.","example":["507f1f77bcf86cd799439011"],"type":"array","items":{"type":"string","format":"ObjectId","pattern":"^[a-fA-F0-9]{24}$"}},"pathSessionId":{"type":"string","description":"The unique ID of the path session.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"leftAt":{"format":"date-time","type":"string","description":"The date and time when learners unregistered, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["classroomSlotId","learnerIds","pathSessionId","leftAt"]},"PathArchivedDTO":{"title":"Path Archived","type":"object","properties":{"pathId":{"type":"string","description":"The unique ID of the path.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"archivedAt":{"format":"date-time","type":"string","description":"The date and time when the path was archived, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."},"name":{"type":"string","description":"The name of the path.","example":"Employee Onboarding"}},"required":["pathId","archivedAt","name"]},"PathCreatedDTO":{"title":"Path Created","type":"object","properties":{"pathId":{"type":"string","description":"The unique ID of the path.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"createdAt":{"format":"date-time","type":"string","description":"The date and time when the path was created, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["pathId","createdAt"]},"PathDeletedDTO":{"title":"Path Deleted","type":"object","properties":{"pathId":{"type":"string","description":"The unique ID of the path.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"deletedAt":{"format":"date-time","type":"string","description":"The date and time when the path was deleted, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."},"name":{"type":"string","description":"The name of the path.","example":"Employee Onboarding"}},"required":["pathId","deletedAt","name"]},"PathSessionAddedDTO":{"title":"Path Session Added","type":"object","properties":{"pathId":{"type":"string","description":"The unique ID of the path.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"sessionId":{"type":"string","description":"The unique ID of the session.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"name":{"type":"string","description":"The name of the session.","example":"January 2026","minLength":1},"createdAt":{"format":"date-time","type":"string","description":"The date and time when the session was created, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["pathId","sessionId","name","createdAt"]},"PathSessionRemovedDTO":{"title":"Path Session Removed","type":"object","properties":{"pathId":{"type":"string","description":"The unique ID of the path.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"sessionId":{"type":"string","description":"The unique ID of the deleted session.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"name":{"type":"string","description":"The name of the session.","example":"January 2026","minLength":1},"deletedAt":{"format":"date-time","type":"string","description":"The date and time when the session was deleted, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["pathId","sessionId","name","deletedAt"]},"PathSessionUsersEnrolledDTO":{"title":"Path Session Users Enrolled","type":"object","properties":{"pathId":{"type":"string","description":"The unique ID of the path.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"sessionId":{"type":"string","description":"The unique ID of the path session.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"enrolledAt":{"format":"date-time","type":"string","description":"The date and time when the enrollment change occurred, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["pathId","sessionId","enrolledAt"]},"PathSessionUsersUnenrolledDTO":{"title":"Path Session Users Unenrolled","type":"object","properties":{"pathId":{"type":"string","description":"The unique ID of the path.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"sessionId":{"type":"string","description":"The unique ID of the path session.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"unenrolledAt":{"format":"date-time","type":"string","description":"The date and time when the unenrollment occurred, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC)). Equal to the `archivedAt` field on the unenrolled enrollments."}},"required":["pathId","sessionId","unenrolledAt"]},"PathUpdatedDTO":{"title":"Path Updated","type":"object","properties":{"pathId":{"type":"string","description":"The unique ID of the path.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"name":{"type":"string","description":"The name of the path.","example":"Employee Onboarding","minLength":1},"changeType":{"type":"string","enum":["authors","certificate","duration","group","requirements","settings","steps"],"description":"The type of change that triggered the event. New values may be added in future releases — only match the values your integration handles."},"updatedAt":{"format":"date-time","type":"string","description":"The date and time when the path was updated, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["pathId","name","changeType","updatedAt"]},"UserPathSessionStatusUpdatedDTO":{"title":"User Path Session Status Updated","type":"object","properties":{"userId":{"type":"string","description":"The unique ID of the learner.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"pathId":{"type":"string","description":"The unique ID of the path.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"sessionId":{"type":"string","description":"The unique ID of the path session.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"enrollmentId":{"type":"string","description":"The unique ID of the enrollment.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"status":{"type":"string","enum":["awaitingCorrection","late","notEnrolled","notYetStarted","onTime","sessionNotOpened","successful","toRetake","unsuccessful"],"description":"The detailed status of the learner on the path session."},"updatedAt":{"format":"date-time","type":"string","description":"The date and time when the status changed, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["userId","pathId","sessionId","enrollmentId","status","updatedAt"]},"UserActivatedDTO":{"title":"User Activated","type":"object","properties":{"userId":{"type":"string","description":"The unique ID of the user.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"firstName":{"type":"string","description":"The first name of the user.","example":"John","minLength":1},"lastName":{"type":"string","description":"The last name of the user.","example":"Smith","minLength":1},"mail":{"type":"string","description":"The email address of the user.","example":"john.smith@yopmail.com","minLength":1},"username":{"type":"string","description":"The username that can be used to log in if the company allows it.","example":"johnsmith","minLength":1},"createdFrom":{"type":"string","enum":["selfRegistration"],"description":"Present and set to `\"selfRegistration\"` if the user registered via the self-registration form. Absent otherwise."},"firstActivatedAt":{"format":"date-time","type":"string","description":"The date and time when the user was activated for the first time, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["userId","firstActivatedAt"]},"UserAssessmentCorrectedDTO":{"title":"User Assessment Corrected","type":"object","properties":{"userId":{"type":"string","description":"The unique ID of the user whose assessment was corrected.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"assessmentId":{"type":"string","description":"The unique ID of the assessment definition.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"name":{"type":"string","description":"The name of the assessment.","example":"Final assessment"},"pathId":{"type":"string","description":"The unique ID of the path the assessment belongs to.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"sessionId":{"type":"string","description":"The unique ID of the path session in which the assessment was taken.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"enrollmentId":{"type":"string","description":"The unique ID of the user's enrollment that the assessment is tied to. Distinguishes assessments across multiple enrollments of the same user in the same session.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"success":{"type":"boolean","description":"Whether the user passed (`true`) or failed (`false`) the assessment."},"score":{"type":"number","minimum":0,"maximum":100,"description":"The score the user obtained, as a percentage between 0 and 100. Only present for scored assessments.","example":87},"correctedAt":{"format":"date-time","type":"string","description":"The date and time when the assessment was corrected, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["userId","assessmentId","name","pathId","sessionId","enrollmentId","success","correctedAt"]},"CertificateAwardedDTO":{"title":"Certificate Awarded","type":"object","properties":{"userId":{"type":"string","description":"The unique ID of the user.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"certificateId":{"type":"string","description":"The unique ID of the awarded certificate.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"certificateOutlineId":{"type":"string","description":"The unique ID of the certificate outline linked to the awarded certificate.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"deliveryDate":{"format":"date-time","type":"string","description":"The date and time when the user obtained the certificate, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."},"pathId":{"type":"string","description":"The unique ID of the completed path where the certificate was awarded.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"pathSessionId":{"type":"string","description":"The unique ID of the completed path session where the certificate was awarded.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"}},"required":["userId","certificateId","deliveryDate"]},"UserClassroomSlotRegisteredDTO":{"title":"User Classroom Slot Registered","type":"object","properties":{"pathSessionId":{"type":"string","description":"The unique ID of path session associated with the classroom slot.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"classroomSlotId":{"type":"string","description":"The unique ID of the classroom slot.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"userId":{"type":"string","description":"The unique ID of the registered user.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"registrationRequesterId":{"type":"string","description":"The unique ID of the user who registered the user (either admin, or own user _id if self-enrolled).","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"registeredAt":{"format":"date-time","type":"string","description":"The date and time when the user registered for the classroom slot, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["pathSessionId","classroomSlotId","userId","registrationRequesterId","registeredAt"]},"UserClassroomSlotRsvpAnsweredYesDTO":{"title":"User Classroom Slot Rsvp Answered Yes","type":"object","properties":{"classroomSlotId":{"type":"string","description":"The unique ID of the classroom slot.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"pathSessionId":{"type":"string","description":"The unique ID of the path session containing the classroom slot.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"rsvpAt":{"format":"date-time","type":"string","description":"The date and time when the user answered yes to the RSVP, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."},"userId":{"type":"string","description":"The unique ID of the user.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"}},"required":["classroomSlotId","pathSessionId","rsvpAt","userId"]},"UserClassroomSlotRsvpAnsweredNoDTO":{"title":"User Classroom Slot Rsvp Answered No","type":"object","properties":{"classroomSlotId":{"type":"string","description":"The unique ID of the classroom slot.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"pathSessionId":{"type":"string","description":"The unique ID of the path session containing the classroom slot.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"rsvpAt":{"format":"date-time","type":"string","description":"The date and time when the user answered no to the RSVP, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."},"userId":{"type":"string","description":"The unique ID of the user.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"}},"required":["classroomSlotId","pathSessionId","rsvpAt","userId"]},"UserClassroomSlotUnregisteredDTO":{"title":"User Classroom Slot Unregistered","type":"object","properties":{"pathSessionId":{"type":"string","description":"The unique ID of path session associated with the classroom slot.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"classroomSlotId":{"type":"string","description":"The unique ID of the classroom slot.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"userId":{"type":"string","description":"The unique ID of the unregistered user.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"unregisteredAt":{"format":"date-time","type":"string","description":"The date and time when the user unregistered from the classroom slot, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["pathSessionId","classroomSlotId","userId","unregisteredAt"]},"UserCreatedDTO":{"title":"User Created","type":"object","properties":{"userId":{"type":"string","description":"The unique ID of the user.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"firstName":{"type":"string","description":"The first name of the user.","example":"John","minLength":1},"lastName":{"type":"string","description":"The last name of the user.","example":"Smith","minLength":1},"mail":{"type":"string","description":"The email address of the user.","example":"john.smith@yopmail.com","minLength":1},"username":{"type":"string","description":"The username that can be used to log in if the company allows it.","example":"johnsmith","minLength":1},"createdAt":{"format":"date-time","type":"string","description":"The date and time when the user was created, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["userId","createdAt"]},"UserCustomFieldCreatedDTO":{"title":"User Custom Field Created","type":"object","properties":{"customFieldId":{"type":"string","description":"The unique ID of the custom field.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"name":{"type":"string","example":"Country","description":"The name of the custom field.","minLength":1},"type":{"type":"string","enum":["string","date"],"description":"The type of the custom field. Options are:\n- `string`: the field holds a text value.\n- `date`: the field holds an ISO 8601 date value."},"createdAt":{"format":"date-time","type":"string","description":"The date and time when the custom field was created, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["customFieldId","name","type","createdAt"]},"UserCustomFieldDeletedDTO":{"title":"User Custom Field Deleted","type":"object","properties":{"customFieldId":{"type":"string","description":"The unique ID of the custom field.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"name":{"type":"string","example":"Country","description":"The name of the custom field.","minLength":1},"type":{"type":"string","enum":["string","date"],"description":"The type of the custom field. Options are:\n- `string`: the field holds a text value.\n- `date`: the field holds an ISO 8601 date value."},"deletedAt":{"format":"date-time","type":"string","description":"The date and time when the user custom field was deleted, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["customFieldId","name","type","deletedAt"]},"UserCustomFieldUpdatedDTO":{"title":"User Custom Field Updated","type":"object","properties":{"customFieldId":{"type":"string","description":"The unique ID of the custom field.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"name":{"type":"string","example":"Country","description":"The name of the custom field.","minLength":1},"updatedAt":{"format":"date-time","type":"string","description":"The date and time when the user custom field was updated, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["customFieldId","name","updatedAt"]},"UserCustomFieldValueDTO":{"title":"User Custom Field Value","type":"object","properties":{"customFieldId":{"type":"string","description":"The unique ID of the custom field.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"customFieldName":{"type":"string","example":"Country","description":"The name of the custom field.","minLength":1},"customFieldType":{"type":"string","enum":["string","date"],"description":"The type of the custom field. Options are:\n- `string`: the field holds a text value.\n- `date`: the field holds an ISO 8601 date value."},"values":{"description":"The complete set of values held by the custom field after the change. It replaces the values you previously received for this field, and is empty when the field is no longer set.","type":"array","items":{"type":"string"}}},"required":["customFieldId","customFieldName","customFieldType","values"]},"UserWithUpdatedCustomFieldValuesDTO":{"title":"User With Updated Custom Field Values","type":"object","properties":{"userId":{"type":"string","description":"The unique ID of the user.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"changedAt":{"format":"date-time","type":"string","description":"The date and time when the values of this user were changed, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."},"fields":{"description":"The custom fields whose values changed for this user. The custom fields left untouched are not listed.","type":"array","items":{"$ref":"#/components/schemas/UserCustomFieldValueDTO"}}},"required":["userId","changedAt","fields"]},"UserCustomFieldValuesUpdatedDTO":{"title":"User Custom Field Values Updated","type":"object","properties":{"users":{"description":"The users whose custom field values changed.","type":"array","items":{"$ref":"#/components/schemas/UserWithUpdatedCustomFieldValuesDTO"}}},"required":["users"]},"UserDeletedDTO":{"title":"User Deleted","type":"object","properties":{"userId":{"type":"string","description":"The unique ID of the user.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"firstName":{"type":"string","description":"The first name of the user.","example":"John","minLength":1},"lastName":{"type":"string","description":"The last name of the user.","example":"Smith","minLength":1},"mail":{"type":"string","description":"The email address of the user.","example":"john.smith@yopmail.com","minLength":1},"username":{"type":"string","description":"The username that can be used to log in if the company allows it.","example":"johnsmith","minLength":1},"deletedAt":{"format":"date-time","type":"string","description":"The date and time when the user was soft deleted, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["userId","deletedAt"]},"UserInvitedDTO":{"title":"User Invited","type":"object","properties":{"userId":{"type":"string","description":"The unique ID of the user.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"firstName":{"type":"string","description":"The first name of the user.","example":"John","minLength":1},"lastName":{"type":"string","description":"The last name of the user.","example":"Smith","minLength":1},"mail":{"type":"string","description":"The email address of the user.","example":"john.smith@yopmail.com","minLength":1},"username":{"type":"string","description":"The username that can be used to log in if the company allows it.","example":"johnsmith","minLength":1},"createdFrom":{"type":"string","enum":["selfRegistration"],"description":"Present and set to `\"selfRegistration\"` if the user registered via the self-registration form. Absent otherwise."},"invitedAt":{"format":"date-time","type":"string","description":"The date and time when the user was invited, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["userId","invitedAt"]},"UserReactivatedDTO":{"title":"User Reactivated","type":"object","properties":{"userId":{"type":"string","description":"The unique ID of the user.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"firstName":{"type":"string","description":"The first name of the user.","example":"John","minLength":1},"lastName":{"type":"string","description":"The last name of the user.","example":"Smith","minLength":1},"mail":{"type":"string","description":"The email address of the user.","example":"john.smith@yopmail.com","minLength":1},"username":{"type":"string","description":"The username that can be used to log in if the company allows it.","example":"johnsmith","minLength":1},"createdFrom":{"type":"string","enum":["selfRegistration"],"description":"Present and set to `\"selfRegistration\"` if the user registered via the self-registration form. Absent otherwise."},"reactivatedAt":{"format":"date-time","type":"string","description":"The date and time when the user was reactivated, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["userId","reactivatedAt"]},"UserUpdatedDTO":{"title":"User Updated","type":"object","properties":{"userId":{"type":"string","description":"The unique ID of the user.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"},"firstName":{"type":"string","description":"The first name of the user.","example":"John","minLength":1},"lastName":{"type":"string","description":"The last name of the user.","example":"Smith","minLength":1},"mail":{"type":"string","description":"The email address of the user.","example":"john.smith@yopmail.com","minLength":1},"username":{"type":"string","description":"The username that can be used to log in if the company allows it.","example":"johnsmith","minLength":1},"updatedAt":{"format":"date-time","type":"string","description":"The date and time when the user was updated, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."},"lang":{"type":"string","enum":["bg","cs","da","de","el","en","es","fi","fr","hr","ht_HT","hu","id","it","ja","kar_MM","ko","lt","mh_MH","nl","nl_BE","no","pl","pt","ro","ru","rw_RW","sk","sl","so_SO","sv","sw_KE","th","ti_ET","tr","uk","zh","vi"],"description":"The default language of the user, in a bigram format (en, fr, de, etc.)."},"custom":{"type":"string","description":"The value of the **Additional information** field in the user's profile. This is not the value of the custom fields associated with the user.","example":"Half-time worker","minLength":1},"job":{"type":"string","description":"The role title of the user.","example":"Software Engineer","minLength":1},"organization":{"type":"string","description":"The organization that the user belongs to.","example":"360Learning","minLength":1},"phone":{"type":"string","description":"The phone number of the user.","example":"+33123456789","minLength":1},"toBeDeactivatedAt":{"format":"date-time","type":"string","description":"The date and time when the user will be deactivated, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."},"primaryGroupId":{"type":"string","description":"The unique ID of the primary group of the user.","format":"ObjectId","example":"507f1f77bcf86cd799439011","pattern":"^[a-fA-F0-9]{24}$"}},"required":["userId","updatedAt"]},"XapiAgentEmail":{"title":"Xapi Agent Email","type":"object","properties":{"objectType":{"type":"string","enum":["Agent"],"description":"The type of actor."},"mbox":{"type":"string","example":"mailto:john.smith@yopmail.com","description":"The email address of the user. The format is 'mailto:{{email_address}}'."}},"required":["objectType","mbox"]},"XapiAccount":{"title":"Xapi Account","type":"object","properties":{"name":{"type":"string","example":"johnsmith","description":"The username of the user."},"homePage":{"type":"string","format":"url","example":"https://app.360learning.com","description":"The canonical home page the account is on."}},"required":["name","homePage"]},"XapiAgentUsername":{"title":"Xapi Agent Username","type":"object","properties":{"objectType":{"type":"string","enum":["Agent"],"description":"The type of actor."},"account":{"description":"The information to identify a user in a company allowing the usage of a username to log in.","allOf":[{"$ref":"#/components/schemas/XapiAccount"}]}},"required":["objectType","account"]},"XapiInitializedVerb":{"title":"Xapi Initialized Verb","type":"object","properties":{"id":{"type":"string","enum":["http://adlnet.gov/expapi/verbs/initialized"],"description":"The type of actor."},"display":{"type":"object","additionalProperties":true,"example":{"en-US":"initialized"},"description":"The human readable representation of the verb in one or more languages. The key is the language code (ISO 639 language code plus an optional ISO 3166-1 country code), and the value is the verb in that language."}},"required":["id","display"]},"XapiObjectDefinition":{"title":"Xapi Object Definition","type":"object","properties":{"name":{"type":"object","additionalProperties":true,"example":{"en-US":"My course name"},"description":"The title of the course in one or more languages. The key is the language code (ISO 639 language code plus an optional ISO 3166-1 country code), and the value is the course title in that language."},"description":{"type":"object","additionalProperties":true,"example":{"en-US":"My course description"},"description":"The description of the course in one or more languages. The key is the language code (ISO 639 language code plus an optional ISO 3166-1 country code), and the value is the course description in that language."},"type":{"type":"string","enum":["http://adlnet.gov/expapi/activities/module"],"description":"The type of the activity."}},"required":["name","description","type"]},"XapiCourseObject":{"title":"Xapi Course Object","type":"object","properties":{"objectType":{"type":"string","enum":["Activity"],"description":"The type of object."},"id":{"type":"string","example":"urn:360learning:course:507f1f77bcf86cd799439011","description":"The unique ID of the course activity. The format is 'urn:360learning:course:{{unique_ID}}'."},"definition":{"description":"The metadata relative to the activity.","allOf":[{"$ref":"#/components/schemas/XapiObjectDefinition"}]}},"required":["objectType","id","definition"]},"XapiPathContextActivity":{"title":"Xapi Path Context Activity","type":"object","properties":{"id":{"type":"string","example":"urn:360learning:path:507f1f77bcf86cd799439045","description":"The unique ID of the path activity. The format is 'urn:360learning:path:{{unique_ID}}'."},"objectType":{"type":"string","enum":["Activity"],"description":"The type of object."}},"required":["id","objectType"]},"XapiSessionContextActivity":{"title":"Xapi Session Context Activity","type":"object","properties":{"id":{"type":"string","example":"urn:360learning:session:507f1f77bcf86cd799439011","description":"The unique ID of the session activity. The format is 'urn:360learning:session:{{unique_ID}}'."},"objectType":{"type":"string","enum":["Activity"],"description":"The type of object."}},"required":["id","objectType"]},"XapiContextActivitiesForCourse":{"title":"Xapi Context Activities For Course","type":"object","properties":{"parent":{"minItems":1,"maxItems":1,"description":"The path context of this activity.","type":"array","items":{"$ref":"#/components/schemas/XapiPathContextActivity"}},"other":{"minItems":1,"maxItems":1,"description":"The session context of this activity.","type":"array","items":{"$ref":"#/components/schemas/XapiSessionContextActivity"}}},"required":["parent","other"]},"XapiContextExtensions":{"title":"Xapi Context Extensions","type":"object","properties":{"https://app.360learning.com/api/xapi/extensions/offline":{"type":"boolean","description":"If true, the statement was done in an offline context (mobile specificity); false otherwise."}},"required":["https://app.360learning.com/api/xapi/extensions/offline"]},"XapiCourseContext":{"title":"Xapi Course Context","type":"object","properties":{"contextActivities":{"description":"The related activities this statement is related to.","allOf":[{"$ref":"#/components/schemas/XapiContextActivitiesForCourse"}]},"language":{"type":"string","enum":["bg","cs","da","de","el","en","es","fi","fr","hr","ht-HT","hu","id","it","ja","kar-MM","ko","lt","mh-MH","nl","nl-BE","no","pl","pt","ro","ru","rw-RW","sk","sl","so-SO","sv","sw-KE","th","ti-ET","tr","uk","zh","am-ET","bn","bs","ca","cy","en-CA","en-GB","es-AR","es-MX","et","fr-CA","gu","he-IL","hy","kk","km","lo","lv","mi","mn-MN","mr","ms","my-MM","nn-NO","or","pa","pt-BR","pt-MZ","rn-BI","si","ta","te","tl-PH","ur","uz","yo-NG","zh-tw","el","hi","sr","ar","vi","zh-HANT"],"description":"The language of the activity."},"extensions":{"description":"Additional information regarding the context of the statement.","allOf":[{"$ref":"#/components/schemas/XapiContextExtensions"}]}},"required":["language","extensions"]},"XapiStartedDTO":{"title":"Xapi Started","type":"object","properties":{"id":{"type":"string","format":"uuid","example":"6b951307-9deb-47f5-b8f9-65e505bac3e4","description":"The unique ID of the statement."},"actor":{"oneOf":[{"$ref":"#/components/schemas/XapiAgentEmail"},{"$ref":"#/components/schemas/XapiAgentUsername"}],"description":"The agent or group who performed the action. The email schema is used by default and the username schema is only used if the company allow the usage of a username to log in."},"verb":{"description":"The action between the actor and the object.","allOf":[{"$ref":"#/components/schemas/XapiInitializedVerb"}]},"object":{"description":"The activity or agent undergoing the action.","allOf":[{"$ref":"#/components/schemas/XapiCourseObject"}]},"context":{"description":"The contextual information of the statement.","allOf":[{"$ref":"#/components/schemas/XapiCourseContext"}]},"timestamp":{"format":"date-time","type":"string","description":"The date and time when the activity was started, in the `YYYY-MM-DDThh:mm:ss.sssZ` format (ISO 8601 in Coordinated Universal Time (UTC))."}},"required":["id","actor","verb","object","context","timestamp"]}}},"webhooks":{"xapi":{"post":{"description":"Sent to your endpoint when any xAPI event occurs. This event is a statement following the xAPI specification.","operationId":"webhook.xapi","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/XapiStartedDTO"}]}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"xAPI","tags":["Xapi"]}},"xapi.started":{"post":{"description":"Sent to your endpoint when a learner starts a course on the platform. This event is a statement following the xAPI specification.","operationId":"webhook.xapi.started","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/XapiStartedDTO"}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"xAPI Course Started","tags":["Xapi"]}},"user.updated":{"post":{"description":"Sent to your endpoint when one or more of the following user properties are updated: mail, username, firstName, lastName, lang, custom, job, organization, phone, toBeDeactivatedAt, primaryGroupId.","operationId":"webhook.user.updated","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["user.updated"],"description":"The type of the event.","example":"user.updated"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/UserUpdatedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"User updated","tags":["User"]}},"user.reactivated":{"post":{"description":"Sent to your endpoint when a user is reactivated in your platform.","operationId":"webhook.user.reactivated","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["user.reactivated"],"description":"The type of the event.","example":"user.reactivated"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/UserReactivatedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"User reactivated","tags":["User"]}},"user.invited":{"post":{"description":"Sent to your endpoint when a user is invited to your platform.","operationId":"webhook.user.invited","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["user.invited"],"description":"The type of the event.","example":"user.invited"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/UserInvitedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"User invited","tags":["User"]}},"user.deleted":{"post":{"description":"Sent to your endpoint when a user is soft deleted from your platform.","operationId":"webhook.user.deleted","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["user.deleted"],"description":"The type of the event.","example":"user.deleted"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/UserDeletedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"User deleted","tags":["User"]}},"user.customfield.values.updated":{"post":{"description":"Sent to your endpoint when the custom field values of one or several users change in your platform. The users are sent by batch, so a single change can reach your endpoint as several events. Deleting a custom field does not trigger this event, even though it removes all its values from users: listen to the `user.customfield.deleted` event to cover that case.","operationId":"webhook.user.customfield.values.updated","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["user.customfield.values.updated"],"description":"The type of the event.","example":"user.customfield.values.updated"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/UserCustomFieldValuesUpdatedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"User custom field values updated","tags":["User"]}},"user.customfield.updated":{"post":{"description":"Sent to your endpoint when a user custom field is renamed in your platform. Changing only the case or the spaces in a name does not trigger this event.","operationId":"webhook.user.customfield.updated","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["user.customfield.updated"],"description":"The type of the event.","example":"user.customfield.updated"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/UserCustomFieldUpdatedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"User custom field updated","tags":["User"]}},"user.customfield.deleted":{"post":{"description":"Sent to your endpoint when a user custom field is deleted in your platform. Deleting a custom field also removes all its values from users; no separate value-update events are sent for this cascade.","operationId":"webhook.user.customfield.deleted","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["user.customfield.deleted"],"description":"The type of the event.","example":"user.customfield.deleted"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/UserCustomFieldDeletedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"User custom field deleted","tags":["User"]}},"user.customfield.created":{"post":{"description":"Sent to your endpoint when a user custom field is created in your platform.","operationId":"webhook.user.customfield.created","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["user.customfield.created"],"description":"The type of the event.","example":"user.customfield.created"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/UserCustomFieldCreatedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"User custom field created","tags":["User"]}},"user.created":{"post":{"description":"Sent to your endpoint when a user is created as active in your platform.","operationId":"webhook.user.created","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["user.created"],"description":"The type of the event.","example":"user.created"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/UserCreatedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"User created","tags":["User"]}},"user.classroom.slot.unregistered":{"post":{"description":"Sent to your endpoint when a user unregisters or is unenrolled from a classroom slot.","operationId":"webhook.user.classroom.slot.unregistered","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["user.classroom.slot.unregistered"],"description":"The type of the event.","example":"user.classroom.slot.unregistered"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/UserClassroomSlotUnregisteredDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"User unregistered from a classroom slot","tags":["User"]}},"user.classroom.slot.rsvp.going.no":{"post":{"description":"Sent to your endpoint when a 'no' RSVP response is submitted for a learner in a classroom slot that they are registered to.","operationId":"webhook.user.classroom.slot.rsvp.going.no","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["user.classroom.slot.rsvp.going.no"],"description":"The type of the event.","example":"user.classroom.slot.rsvp.going.no"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/UserClassroomSlotRsvpAnsweredNoDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"User answered no to classroom slot RSVP","tags":["User"]}},"user.classroom.slot.rsvp.going.yes":{"post":{"description":"Sent to your endpoint when a 'yes' RSVP response is submitted for a learner in a classroom slot that they are registered to.","operationId":"webhook.user.classroom.slot.rsvp.going.yes","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["user.classroom.slot.rsvp.going.yes"],"description":"The type of the event.","example":"user.classroom.slot.rsvp.going.yes"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/UserClassroomSlotRsvpAnsweredYesDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"User answered yes to classroom slot RSVP","tags":["User"]}},"user.classroom.slot.registered":{"post":{"description":"Sent to your endpoint when a user registers or is registered to a classroom slot.","operationId":"webhook.user.classroom.slot.registered","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["user.classroom.slot.registered"],"description":"The type of the event.","example":"user.classroom.slot.registered"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/UserClassroomSlotRegisteredDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"User registered to a classroom slot","tags":["User"]}},"user.certificate.awarded":{"post":{"description":"Sent to your endpoint when a user certificate is awarded in your platform.","operationId":"webhook.user.certificate.awarded","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["user.certificate.awarded"],"description":"The type of the event.","example":"user.certificate.awarded"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/CertificateAwardedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"User certificate awarded","tags":["User"]}},"user.assessment.corrected":{"post":{"description":"Sent to your endpoint when a user assessment in a path is corrected on your platform. The payload's success field indicates whether the user passed or failed.","operationId":"webhook.user.assessment.corrected","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["user.assessment.corrected"],"description":"The type of the event.","example":"user.assessment.corrected"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/UserAssessmentCorrectedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"User assessment corrected","tags":["User"]}},"user.activated":{"post":{"description":"Sent to your endpoint when a user is activated for the first time in your platform.","operationId":"webhook.user.activated","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["user.activated"],"description":"The type of the event.","example":"user.activated"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/UserActivatedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"User activated","tags":["User"]}},"path.session.user.status.updated":{"post":{"description":"Sent to your endpoint when a learner's status in a path session changes. This event is emitted once per status transition (e.g. onTime → late, onTime → successful). It is also emitted the first time a status is computed for a learner after enrollment. Each status change results from a tracking recalculation triggered by learner activity or other platform processes — for example, when a session opens or when a mandatory step is added to a path. One recalculation may affect multiple learners at once, producing bursts of webhook events. See our Webhook processing best practices guide (https://360learning.readme.io/docs/webhooks-processing-best-practices).","operationId":"webhook.path.session.user.status.updated","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["path.session.user.status.updated"],"description":"The type of the event.","example":"path.session.user.status.updated"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/UserPathSessionStatusUpdatedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"Path session user status updated","tags":["Path"]}},"path.updated":{"post":{"description":"Sent to your endpoint when a path is updated on your platform. The payload's changeType field identifies the type of change (one of: settings, authors, group, duration, certificate, requirements, or steps) so consumers can decide whether to react. New changeType values may be added in future releases — only match the values your integration handles.","operationId":"webhook.path.updated","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["path.updated"],"description":"The type of the event.","example":"path.updated"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/PathUpdatedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"Path updated","tags":["Path"]}},"path.session.users.unenrolled":{"post":{"description":"Sent to your endpoint when users are unenrolled from a path session on your platform.","operationId":"webhook.path.session.users.unenrolled","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["path.session.users.unenrolled"],"description":"The type of the event.","example":"path.session.users.unenrolled"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/PathSessionUsersUnenrolledDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"Path session users unenrolled","tags":["Path"]}},"path.session.users.enrolled":{"post":{"description":"Sent to your endpoint when users are enrolled in a path session on your platform. Call the `List all enrollments` endpoint to get the updated list of enrolled users.","operationId":"webhook.path.session.users.enrolled","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["path.session.users.enrolled"],"description":"The type of the event.","example":"path.session.users.enrolled"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/PathSessionUsersEnrolledDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"Path session users enrolled","tags":["Path"]}},"path.session.removed":{"post":{"description":"Sent to your endpoint when a session is removed from a path. For paths with path steps, this event only fires for the top-level session, not for sessions removed within each path step. This event is not fired when a session is removed as part of a path deletion.","operationId":"webhook.path.session.removed","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["path.session.removed"],"description":"The type of the event.","example":"path.session.removed"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/PathSessionRemovedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"Path session removed","tags":["Path"]}},"path.session.added":{"post":{"description":"Sent to your endpoint when a session is added to a path. For paths with path steps, this event only fires for the top-level session, not for sessions created within each path step.","operationId":"webhook.path.session.added","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["path.session.added"],"description":"The type of the event.","example":"path.session.added"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/PathSessionAddedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"Path session added","tags":["Path"]}},"path.deleted":{"post":{"description":"Sent to your endpoint when a path is deleted in your platform.","operationId":"webhook.path.deleted","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["path.deleted"],"description":"The type of the event.","example":"path.deleted"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/PathDeletedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"Path deleted","tags":["Path"]}},"path.created":{"post":{"description":"Sent to your endpoint when a path is created in your platform.","operationId":"webhook.path.created","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["path.created"],"description":"The type of the event.","example":"path.created"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/PathCreatedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"Path created","tags":["Path"]}},"path.archived":{"post":{"description":"Sent to your endpoint when a path is archived in your platform.","operationId":"webhook.path.archived","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["path.archived"],"description":"The type of the event.","example":"path.archived"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/PathArchivedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"Path archived","tags":["Path"]}},"path.session.classroom.slot.users.unregistered.full":{"post":{"description":"Sent to your endpoint when a full classroom slot is left by learners.","operationId":"webhook.path.session.classroom.slot.users.unregistered.full","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["path.session.classroom.slot.users.unregistered.full"],"description":"The type of the event.","example":"path.session.classroom.slot.users.unregistered.full"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/LearnersUnregisteredFullClassroomSlotDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"Learners unregistered full classroom slot","tags":["Path"]}},"path.session.classroom.slot.waitlist.user.joined":{"post":{"description":"Sent to your endpoint when a learner joins a classroom slot waitlist within a path session.","operationId":"webhook.path.session.classroom.slot.waitlist.user.joined","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["path.session.classroom.slot.waitlist.user.joined"],"description":"The type of the event.","example":"path.session.classroom.slot.waitlist.user.joined"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/LearnerJoinedClassroomSlotWaitlistDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"Learner joined classroom slot waitlist","tags":["Path"]}},"groups.library.paths.added":{"post":{"description":"Sent to your endpoint when learning paths are added to one or more groups' library in your platform. If the action triggering this event impacts a lot of groups and paths, you can receive the impacted group IDs and path IDs spread in several events.","operationId":"webhook.groups.library.paths.added","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["groups.library.paths.added"],"description":"The type of the event.","example":"groups.library.paths.added"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/GroupsLibraryPathsAddedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"Paths added to groups library","tags":["Group contents"]}},"groups.library.courses.added":{"post":{"description":"Sent to your endpoint when courses are added to one or more groups' library in your platform. If the action triggering this event impacts a lot of groups and courses, you can receive the impacted group IDs and course IDs spread in several events.","operationId":"webhook.groups.library.courses.added","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["groups.library.courses.added"],"description":"The type of the event.","example":"groups.library.courses.added"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/GroupsLibraryCoursesAddedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"Courses added to groups library","tags":["Group contents"]}},"group.updated":{"post":{"description":"Sent to your endpoint when any of the following group fields are updated in your platform: public, parentId, name, custom, bannerImageId, backgroundImageId, faviconImageId, logoImageId, subdomain, url, moderationCharter, privacyPolicy, termsOfUse, or imprint.","operationId":"webhook.group.updated","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["group.updated"],"description":"The type of the event.","example":"group.updated"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/GroupUpdatedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"Group updated","tags":["Group"]}},"group.deleted":{"post":{"description":"Sent to your endpoint when a group is deleted in your platform.","operationId":"webhook.group.deleted","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["group.deleted"],"description":"The type of the event.","example":"group.deleted"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/GroupDeletedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"Group deleted","tags":["Group"]}},"group.created":{"post":{"description":"Sent to your endpoint when a group is created in your platform.","operationId":"webhook.group.created","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["group.created"],"description":"The type of the event.","example":"group.created"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/GroupCreatedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"Group created","tags":["Group"]}},"path.session.classroom.slot.waitlist.opened":{"post":{"description":"Sent to your endpoint when a waitlist is added to a classroom slot.","operationId":"webhook.path.session.classroom.slot.waitlist.opened","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["path.session.classroom.slot.waitlist.opened"],"description":"The type of the event.","example":"path.session.classroom.slot.waitlist.opened"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/ClassroomSlotWaitlistOpenedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"Classroom slot waitlist opened","tags":["Path"]}},"path.session.classroom.slot.waitlist.closed":{"post":{"description":"Sent to your endpoint when a classroom slot's waitlist is closed.","operationId":"webhook.path.session.classroom.slot.waitlist.closed","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["path.session.classroom.slot.waitlist.closed"],"description":"The type of the event.","example":"path.session.classroom.slot.waitlist.closed"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/ClassroomSlotWaitlistClosedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"Classroom slot waitlist closed","tags":["Path"]}},"bulk.operation.ended":{"post":{"description":"Sent to your endpoint when a bulk operation has ended on your platform.","operationId":"webhook.bulk.operation.ended","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["bulk.operation.ended"],"description":"The type of the event.","example":"bulk.operation.ended"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/BulkOperationEndedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"Bulk operation ended","tags":["Bulk"]}},"bulk.operation.created":{"post":{"description":"Sent to your endpoint when a bulk operation is created through API on your platform.","operationId":"webhook.bulk.operation.created","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["bulk.operation.created"],"description":"The type of the event.","example":"bulk.operation.created"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/BulkOperationCreatedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"Bulk operation created","tags":["Bulk"]}},"course.attempt.closed":{"post":{"description":"Sent to your endpoint when an attempt is closed. This event is currently triggered only when learners finish an attempt, materialized through the reason attribute. The reason attribute potential values are expected to grow over time as new closure reasons will be supported.","operationId":"webhook.course.attempt.closed","parameters":[{"name":"webhook-signature","in":"header","required":true,"description":"The signature of the event payload, used to verify the authenticity of the event. If multiple signatures are present, they are space delimited.","schema":{"type":"string","example":"v1,4UHnozIIxoqswxyYsplgMpo1w5JaUjaPDlg5dm8n1SE="}},{"name":"webhook-id","in":"header","required":true,"description":"The unique identifier of the event. It is the same ID for the retry attempts of the same event.","schema":{"type":"string","example":"msg_35bE2UOtsaBIqUl7VW4mLuR9q2B"}},{"name":"webhook-timestamp","in":"header","required":true,"description":"The date and time when the event was emitted, in the Unix epoch format (number of seconds that have elapsed since January 1, 1970).","schema":{"type":"string","example":"1763370163"}}],"requestBody":{"description":"The payload sent to your endpoint when the event is triggered.","content":{"application/json":{"schema":{"type":"object","required":["type","timestamp","data"],"properties":{"type":{"type":"string","enum":["course.attempt.closed"],"description":"The type of the event.","example":"course.attempt.closed"},"timestamp":{"type":"integer","description":"The date and time when the event was triggered in your platform, in the Unix epoch format (number of milliseconds that have elapsed since January 1, 1970).","example":"1748346292000"},"data":{"description":"The data associated with the event.","$ref":"#/components/schemas/AttemptClosedDTO"}}}}}},"responses":{"2XX":{"description":"The event is considered as accepted for any 2xx response code."},"default":{"description":"The event is considered as rejected for any other response code. The event emission will be retried later."}},"summary":"Course attempt closed","tags":["Course"]}}}}