---
title: "Webhooks events"
slug: "webhooks-events"
description: "Learn how to create and manage webhooks in Docebo to track events, collect data, and enhance your learning platform's reporting and integrations."
updated: 2026-07-30T14:28:45Z
published: 2026-07-30T14:28:45Z
canonical: "developer.docebo.com/webhooks-events"
excludeFromExternalSearch: true
---

> ## Documentation Index
> Fetch the complete documentation index at: https://developer.docebo.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Webhooks events

## Introduction

In Docebo, you can create webhooks to trigger once an event occurs in your platform, sending you information about that event to a specific payload URL. This allows you to collect data from your learning platform to build reports, integrations, dashboards and more. You can, for example, also connect to your Human Capital Management system (HCM), email non-Docebo users about actions that occur within the platform or update your Content Storage Management.

Refer to this article on creating and managing webhooks on how to activate the webhook functionality and on how to create and manage webhooks.

This article lists all of the events that can be tracked via webhooks, including a detailed description of the payloads. Events are divided into areas, for better understanding.

## Events triggering

The events managed by the Webhooks app are fired according to the platform's main logic. They can be triggered by the user through the platform interface and by APIs. The same action may trigger different events because of the platform built-in logic. Please make sure to check your use cases for a proper webhook configuration.

For example, you have created a webhook including the following events:

Enrollment updated (event name: `course.enrollment.updated`)

Learner completed course (event name: `course.enrollment.completed`)

If the user enrollment status is set to completed, the triggered event will be course.enrollment.completed and not course.enrollment.updated, despite the fact that the action triggering the event is an update.

## Events common properties

Every event tracks specific details, but all of them have the following common properties:

| Property | Description |
| --- | --- |
| `message_id` | A unique message ID to identify the webhook. |
| `webhook_id` | The unique identifier of the webhook. |
| `original_domain` | The domain of the platform where the webhook originated. |
| `event` | The event name that triggered the webhook. |
| `fired_by_batch_action` | `True` if the event was fired during a batch API call, false otherwise. |
| `fired_by_background_job_hash` | Background job alphanumeric unique identifier, it is displayed only when the event is generated by a background job. |
| `payload` | Depending on the event, a different payload containing different information. |

If you have activated the payload collection option, when webhooks include more than one event, the `payload` webhook common property turns into payloads, indicating that the message includes more events. If you enable the payload collection feature, make sure that your endpoint system is ready to receive webhooks with two different structures.

The following is an example of a single payload, triggered because a user has been deleted:

```json
{
  "message_id":"wh-638ce960-1363-11e9-a15d-d1c47c8f7593",
  "webhook_id":11,
  "original_domain":"example-domain.docebosaas.com",
  "event":"user.deleted",
  "fired_by_batch_action":false,
  "payload":{
    "user_id":12301,
    "deletion_date":"2019-01-08 16:35:05",
    "fired_at":"2019-01-08 16:35:05"
  }
}
```

Here is an example of payload collection, triggered because three users have been deleted from the platform, with a single process:

```json
{
  "event":"user.deleted",
  "fired_by_batch_action":false,
  "message_id":"wh-d2f70d80-ab24-11ea-8467-5972fffe49aa",
  "webhook_id":11,
  "original_domain":"example-domain.docebosaas.com",
  "payloads":[
    {
      "fired_at":"2020-06-10 14:15:18",
      "user_id":13366,
      "deletion_date":"2020-06-10 14:15:18"
    },
    {
      "fired_at":"2020-06-10 14:15:18",
      "user_id":13369,
      "deletion_date":"2020-06-10 14:15:18"
    },
    {
      "fired_at":"2020-06-10 14:15:18",
      "user_id":13376,
      "deletion_date":"2020-06-10 14:15:18"
    }
  ]
}
```

> [!NOTE]
> Notes about events common properties
> 
> - The details included in each event are the same, independently from whether it is a single event or a payload collection. The webhook structure changes depending on whether the payload includes one or more events.
> - Some events include the `user_id` property to track the user performing or involved in the action tracked by the webhook. When Superadmins impersonate other users or Power Users, the tracked `user_id` is the ID of the impersonated user or Power User.

## Events

The following is a list of all available events, divided into areas:

### Assets

#### Asset has been deleted (`contribute.deleted`)

DescriptionEventsExample payload

Triggers when an asset has been deleted.

For more information, please see the [Sharing and managing content (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020080340) article of the [Docebo knowledge base (opens in a new tab)](https://help.docebo.com/hc/en-us/).

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `id` | The asset ID. |
| `title` | The asset title. |

```json
{
  "webhook_id": 27,
  "original_domain": "example.exampledomain.com",
  "event": "contribute.deleted",
  "fired_by_batch_action": false,
  "message_id": "wh-20250821-143121-0403fea7-1723-480d-b91e-a157bf0c536a",
  "payload": {
    "fired_at": "2025-08-21 14:31:20",
    "id": 373,
    "title": "Example icon",
    "extra_data": null
  }
}
```

#### Asset has been unpublished (`contribute.unpublished`)

DescriptionEventsExample payload

Triggers when an asset has been unpublished.

For more information, please see the [Sharing and managing content (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020080340) article of the [Docebo knowledge base (opens in a new tab)](https://help.docebo.com/hc/en-us/).

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `asset_id` | The asset ID. |
| `type` | The asset type. **Possible values are**: - `video` - `document` - `excel` - `power-point` - `pdf` - `text` - `other` - `image` - `audio` - `archive` - `link` - `drive-document` - `drive-sheet` - `drive-slide` - `playlist` - `youtube` - `vimeo` - `wistia` |
| `title` | The asset title. |
| `update_date` | The date of the update in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |

```json
{
  "webhook_id": 27,
  "original_domain": "example.exampledomain.com",
  "event": "contribute.unpublished",
  "fired_by_batch_action": false,
  "message_id": "wh-20290821-142856-5effd40a-782e-4ee4-8225-b7c94234124c",
  "payload": {
    "fired_at": "2025-08-21 14:28:55",
    "asset_id": 373,
    "asset_type": 7,
    "title": "Example icon",
    "update_date": "2025-08-21 14:28:55",
    "extra_data": null
  }
}
```

#### Asset has been updated (`contribute.updated`)

DescriptionEventsExample payload

Triggers when an asset has been updated.

For more information, please see the chapter [Editing the details of your asset (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020080340#01H8PC3J3FN2JSDQ1T9AZBG3Z5), found in the [Sharing and managing content (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020080340) article of the [Docebo knowledge base (opens in a new tab)](https://help.docebo.com/hc/en-us/).

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `id` | The asset ID. |
| `title` | The asset title. |
| `type` | The asset type. **Possible values are**: - `video` - `document` - `excel` - `power-point` - `pdf` - `text` - `other` - `image` - `audio` - `archive` - `link` - `drive-document` - `drive-sheet` - `drive-slide` - `playlist` - `youtube` - `vimeo` - `wistia` |
| `visibility` | The asset visibility. Possible values are: - `public` - `private` |
| `published` | The asset publication status. |
| `extra_data` | The extra data section. - `description` - Asset description - `tags` - Asset tags, both manually inserted and automatically generated by the platform's artificial intelligence - `id` - Tag ID - `text` - Tag value - `channels` - Channels where the asset has been loaded |

```json
{
  "webhook_id": 27,
  "original_domain": "example.exampledomain.com",
  "event": "contribute.updated",
  "fired_by_batch_action": false,
  "message_id": "wh-20290821-142434-b1b5fb54-fb7b-455f-8756-960527352737",
  "payload": {
    "fired_at": "2025-08-21 14:24:33",
    "id": 373,
    "title": "Example icon",
    "type": "images",
    "visibility": "public",
    "published": true,
    "extra_data": {
      "description": "<p>An updated example picture</p>",
      "tags": [],
      "channels": [
        17,
        22,
        69
      ]
    }
  }
}
```

#### Asset has been uploaded (`contribute.created`)

DescriptionEventsExample payload

Triggers when an asset has been uploaded.

For more information, please see the chapter [Upload an asset to the platform (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020080340#h_01J7X4T0DF6VDDK4DYP368MQ4V), found in the [Sharing and managing content (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020080340) article of the [Docebo knowledge base (opens in a new tab)](https://help.docebo.com/hc/en-us/).

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `id` | The asset ID. |
| `title` | The asset title. |
| `type` | The asset type. **Possible values are**: - `video` - `document` - `excel` - `power-point` - `pdf` - `text` - `other` - `image` - `audio` - `archive` - `link` - `drive-document` - `drive-sheet` - `drive-slide` - `playlist` - `youtube` - `vimeo` - `wistia` |
| `visibility` | The asset visibility. Possible values are: - `public` - `private` |
| `published` | The asset publication status. |
| `extra_data` | The extra data section. - `description` - Asset description - `tags` - Asset tags, both manually inserted and automatically generated by the platform's artificial intelligence - `id` - Tag ID - `text` - Tag value - `channels` - Channels where the asset has been loaded |

```json
{
  "webhook_id": 27,
  "original_domain": "example.exampledomain.com",
  "event": "contribute.created",
  "fired_by_batch_action": false,
  "message_id": "wh-20290821-142053-77fc4832-cddf-4d66-a38e-c2fbef46ecca",
  "payload": {
    "fired_at": "2025-08-21 14:20:50",
    "id": 373,
    "title": "Example icon",
    "type": "images",
    "visibility": "private",
    "published": true,
    "extra_data": {
      "description": "<p>An example description</p>",
      "tags": [],
      "channels": [
        17,
        22,
        69
      ]
    }
  }
}
```

#### Invitation to watch deleted (`contribute.watchinvitation.deleted`)

DescriptionEventsExample payload

Triggers when an invitation to watch a published asset has been deleted.

For more information, please see the chapter [Inviting other users to watch content (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020080340#01H8PC3J3F3J2NSHCJ1X64FFQR) found in the [Sharing and managing content (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020080340) article of the [Docebo knowledge base (opens in a new tab)](https://help.docebo.com/hc/en-us/).

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC **Format**: `YYYY-MM-DD HH:mm:ss` |
| `id_asset` | The asset ID. |
| `invitations` | The users invited to watch. |
| `users` | The IDs of the users no longer invited to watch. |
| `channels` | The channels where the asset has been loaded. |

```json
{
  "webhook_id": 27,
  "original_domain": "example.exampledomain.com",
  "event": "contribute.watchinvitation.deleted",
  "fired_by_batch_action": false,
  "message_id": "wh-20290821-142641-2b8293a4-aa48-411a-b4eb-f3c39f3c39d9",
  "payload": {
    "fired_at": "2025-08-21 14:26:36",
    "id_asset": 373,
    "invitations": {
      "users": [
        13725
      ],
      "channels": []
    },
    "extra_data": null
  }
}
```

### Background jobs

#### Background job aborted (`bj.execution.aborted`)

DescriptionEventsExample payload

Triggers when a background job has been aborted.

For more information, please see the article [Managing background jobs (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020127579-Managing-background-jobs) in the [Docebo knowledge base (opens in a new tab)](https://help.docebo.com/hc/en-us/).

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `job_hash` | The background job alphanumeric unique identifier. |

```json
{
  "webhook_id": 27,
  "original_domain": "example.exampledomain.com",
  "event": "bj.execution.aborted",
  "fired_by_batch_action": false,
  "message_id": "wh-20290821-145104-b9d7ca21-9ff0-4d11-94e6-0111202a4f0e",
  "payload": {
    "fired_at": "2025-08-21 14:51:03",
    "job_hash": "1b4be2e4b4c5601b8316726e11d94217e2af51ea",
    "extra_data": null
  }
}
```

#### Background job completed (`bj.execution.completed`)

DescriptionEventsExample payload

Triggers when a background job has executed successfully.

For more information, please see the article [Managing background jobs (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020127579-Managing-background-jobs) in the [Docebo knowledge base (opens in a new tab)](https://help.docebo.com/hc/en-us/).

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `job_hash` | The background job alphanumeric unique identifier. |
| `errors_count` | If the background job ended with errors, the number of errors occurred. |

```json
{
  "webhook_id": 27,
  "original_domain": "example.exampledomain.com",
  "event": "bj.execution.completed",
  "fired_by_batch_action": false,
  "message_id": "wh-20290821-144303-086fdaef-3bf2-4349-a533-bcd909f7d968",
  "payload": {
    "fired_at": "2025-08-21 14:43:02",
    "job_hash": "1fdb26fce5c533800f243ed9cd5b072288f1d3c4",
    "errors_count": 0,
    "extra_data": null
  }
}
```

#### Background job created (`bj.created`)

DescriptionEventsExample payload

Triggers when a background job has been created.

For more information, please see the article [Managing background jobs (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020127579-Managing-background-jobs) in the [Docebo knowledge base (opens in a new tab)](https://help.docebo.com/hc/en-us/).

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC **Format**: `YYYY-MM-DD HH:mm:ss` |
| `job_hash` | The background job alphanumeric unique identifier. |
| `name` | The background job name, automatically assigned by the platform. |
| `endpoint` | The API call that will be used for the scheduled background job. |
| `method` | The method used in the API call. |

```json
{
  "webhook_id": 27,
  "original_domain": "example.exampledomain.com",
  "event": "bj.created",
  "fired_by_batch_action": false,
  "message_id": "wh-20290821-144243-0a9b14e1-04f4-4d21-9dfc-5221b8c6acfd",
  "payload": {
    "fired_at": "2025-08-21 14:42:41",
    "job_hash": "1fdb26fce5c533800f243ed9cd5b072288f1d3c4",
    "name": "Extraction for background job report",
    "endpoint": "/analytics/v1/exports/polling/echo",
    "method": "GET",
    "extra_data": null
  }
}
```

#### Background job deleted (`bj.deleted`)

DescriptionEventsExample payload

Triggers when a background job has been deleted.

For more information, please see the article [Managing background jobs (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020127579-Managing-background-jobs) in the [Docebo knowledge base (opens in a new tab)](https://help.docebo.com/hc/en-us/).

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `job_hash` | The background job alphanumeric unique identifier. |

```json
{
  "webhook_id": 27,
  "original_domain": "example.exampledomain.com",
  "event": "bj.deleted",
  "fired_by_batch_action": false,
  "message_id": "wh-20290821-144743-d85c46f4-4d43-412e-b38c-31ccb5809845",
  "payload": {
    "fired_at": "2025-08-21 14:47:42",
    "job_hash": "1fdb26fce5c533800f243ed9cd5b072288f1d3c4",
    "extra_data": null
  }
}
```

#### Background job execution started (`bj.execution.started`)

DescriptionEventsExample payload

Triggers when the execution of a background job has started.

For more information, please see the article [Managing background jobs (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020127579-Managing-background-jobs) in the [Docebo knowledge base (opens in a new tab)](https://help.docebo.com/hc/en-us/).

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `job_hash` | The background job alphanumeric unique identifier. |

```json
{
  "webhook_id": 27,
  "original_domain": "example.exampledomain.com",
  "event": "bj.execution.started",
  "fired_by_batch_action": false,
  "message_id": "wh-20290821-144303-d93a044b-7fa8-4020-83f5-c31c12ebf71c",
  "payload": {
    "fired_at": "2025-08-21 14:42:49",
    "job_hash": "1fdb26fce5c533800f243ed9cd5b072288f1d3c4",
    "extra_data": null
  }
}
```

### Branches

#### Branch has been created (`branch.created`)

DescriptionEventsExample payload

Triggers when a branch has been created.

For more information, please see the chapter [Creating a branch in your organizational chart (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020084140#h_01J0B1QSFJR9KNSDZTPJHQ0AE6), found in the [Organizing users with branches (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020084140) article of the [Docebo knowledge base (opens in a new tab)](https://help.docebo.com/hc/en-us/).

| Property | Description |
| --- | --- |
| `branch_id` | ID of the created branch. |
| `parent_id` | ID of the branch into which the new branch has been created. |
| `code` | Code of the new branch, or an empty string. |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |

```json
{
  "webhook_id": 27,
  "original_domain": "example.exampledomain.com",
  "event": "branch.created",
  "fired_by_batch_action": false,
  "message_id": "wh-20290821-150417-b018ccfa-f0b3-4219-8a48-db0be1f40a45",
  "payload": {
    "fired_at": "2025-08-21 15:04:11",
    "branch_id": 39,
    "parent_id": 0,
    "code": "DP01",
    "name": "DevPortal",
    "extra_data": null
  }
}
```

#### Branch has been deleted (`branch.deleted`)

DescriptionEventsExample payload

Triggers when a branch has been deleted.

For more information, please see the chapter [Managing folders and branches (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020084140#h_01J0B1QSFJYD7J1S1AZ96SK1ND), found in the [Organizing users with branches (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020084140) article of the [Docebo knowledge base (opens in a new tab)](https://help.docebo.com/hc/en-us/).

| Property | Description |
| --- | --- |
| `branch_id` | ID of the deleted branch. |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |

```json
{
  "webhook_id": 27,
  "original_domain": "example.exampledomain.com",
  "event": "branch.deleted",
  "fired_by_batch_action": false,
  "message_id": "wh-20290821-151233-474cdfa7-615b-4e49-a2cc-8741bc863723",
  "payload": {
    "fired_at": "2025-08-21 15:12:32",
    "branch_id": 39,
    "code": "DP001",
    "name": "DevPortal",
    "extra_data": null
  }
}
```

#### Branch has been updated (`branch.updated`)

DescriptionEventsExample payload

Triggers when a branch has been updated.

For more information, please see the chapter [Managing folders and branches (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020084140#h_01J0B1QSFJYD7J1S1AZ96SK1ND), found in the [Organizing users with branches (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020084140) article of the [Docebo knowledge base (opens in a new tab)](https://help.docebo.com/hc/en-us/).

| Property | Description |
| --- | --- |
| `branch_id` | ID of the created branch. |
| `parent_id` | ID of the branch into which the branch has been moved. Not present if the branch has not been moved. |
| `code` | New code of the branch, can be an empty string. Not present if the code has not been changed. |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |

```json
{
  "webhook_id": 27,
  "original_domain": "example.exampledomain.com",
  "event": "branch.updated",
  "fired_by_batch_action": false,
  "message_id": "wh-20290821-150628-a5bdb134-a74c-4f17-a73c-2e3bbecc4b59",
  "payload": {
    "fired_at": "2025-08-21 15:06:26",
    "branch_id": 39,
    "code": "DP001",
    "name": "DevPortal",
    "extra_data": null
  }
}
```

#### User assigned to a branch (`branch.user.added`)

DescriptionEventsExample payload

Triggers when a user has been assigned to a branch.

For more information, please see the chapter [Adding users to a branch (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020084140#h_01J0B1QSFJ7T7RBXC95CV692FY) and [Moving users to a branch (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020084140#h_01J0B1QSFJ4DB0GJAXA9M727TE), found in the [Organizing users with branches (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020084140) article of the [Docebo knowledge base (opens in a new tab)](https://help.docebo.com/hc/en-us/).

| Property | Description |
| --- | --- |
| `user_id` | ID of the user assigned to the branch. |
| `username` | Username of the user. |
| `branch_id` | ID of the branch to which the user has been assigned. |
| `branch_name` | Name of the branch to which the user has been assigned. |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |

```json
{
  "webhook_id": 27,
  "original_domain": "example.exampledomain.com",
  "event": "branch.user.added",
  "fired_by_batch_action": false,
  "message_id": "wh-20290821-150920-74a1c843-b0cb-40b8-b8d5-a0443f580f37",
  "payload": {
    "fired_at": "2025-08-21 15:09:18",
    "user_id": 14230,
    "branch_id": 39,
    "username": "test.exampleUser",
    "branch_name": "DevPortal",
    "user_uuid": "f71c9230-ec42-11ee-b13f-06c4aa1316bd",
    "extra_data": null
  }
}
```

#### User removed from a branch (`branch.user.removed`)

DescriptionEventsExample payload

Triggers when a user has been removed from a branch.

For more information, please see the chapter [Removing users from a branch (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020084140#h_01J0B1QSFJVAHGEA8SYQVT7Q4B), found in the [Organizing users with branches (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020084140) article of the [Docebo knowledge base (opens in a new tab)](https://help.docebo.com/hc/en-us/).

| Property | Description |
| --- | --- |
| `user_id` | ID of the user removed from the branch |
| `username` | username of the user removed from the branch |
| `branch_id` | ID of the branch from which the user has been removed |
| `branch_name` | Name of the branch from which the user has been removed |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |

```json
{
  "webhook_id": 27,
  "original_domain": "example.exampledomain.com",
  "event": "branch.user.removed",
  "fired_by_batch_action": false,
  "message_id": "wh-20290821-151044-3b9ba22a-a4a4-40fb-8449-22600bcb2f24",
  "payload": {
    "fired_at": "2025-08-21 15:10:43",
    "user_id": 14230,
    "branch_id": 39,
    "username": "test.exampleUser",
    "branch_name": "DevPortal",
    "user_uuid": "f71c9230-ec42-11ee-b13f-06c4aa1316bd",
    "extra_data": null
  }
}
```

### Central repository

#### Training material pushed to course (`tmrepo.course.trainingmaterial.added`)

DescriptionEvents

Triggers when training material has been added to a course

| Property | Description |
| --- | --- |
| `user_id` | ID of the user who assigned the training material to the course from the Central repository. |
| `username` | Username of the user who assigned the training material to the course from the Central repository. |
| `course_id` | ID of the course to which the training material was assigned from the Central repository. |
| `course_name` | Title of the course to which the training material was assigned from the Central repository. |
| `course_type` | Type of course to which the training material was assigned from the Central repository. **Possible values are**: - `elearning` - `classroom` |
| `training_material_name` | Title of the training material assigned to the course from the Central repository. |
| `training_material_type` | The type of training material. **Possible values are**: - `scorm` - `aicc` - `tincan_xapi` - `video` - `file` - `assignment` - `elucidat` - `google_drive` - `lti` - `otj` - `slides_converter` - `html` - `survey` - `test` |
| `training_material_id` | ID of the training material assigned to the course from the Central repository. |
| `training_material_version_id` | Version ID of the training material assigned to the course from the Central repository. |
| `training_material_version_name` | Version name of the training material coming from the Central repository that was removed from the course. |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |

#### Training material removed from course (`tmrepo.course.trainingmaterial.removed`)

DescriptionEvents

Triggers when training material has been removed from a course

| Property | Description |
| --- | --- |
| `user_id` | ID of the user who removed the training material coming from the Central repository from the course. |
| `username` | Username of the user who removed the training material coming from the Central repository from the course. |
| `course_id` | ID of the course from which the training material coming from the Central repository was removed. |
| `course_name` | Title of the course from which the training material coming from the Central repository was removed. |
| `course_type` | Type of course from which the training material coming from the Central repository was removed. **Possible values are**: - `elearning` - `classroom` |
| `training_material_name` | Title of the training material coming from the Central repository that was removed from the course. |
| `training_material_type` | Type of training material. **Possible values are**: - `scorm` - `aicc` - `tincan_xapi` - `video` - `file` - `assignment` - `elucidat` - `google_drive` - `lti` - `otj` - `slides_converter` - `html` - `survey` - `test` |
| `training_material_id` | ID of the training material coming from the Central repository that was removed from the course. |
| `training_material_version_id` | Version ID of the training material coming from the Central repository that was removed from the course. |
| `training_material_version_name` | Version name of the training material assigned to the course from the Central repository. |
| `user_play_count` | Number of users who played the training material. |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |

#### Training material updated (`tmrepo.trainingmaterial.updated`)

DescriptionEvents

Triggers when training material has been updated in a course

| Property | Description |
| --- | --- |
| `user_id` | ID of the user who updated the training material in the Central repository. |
| `username` | Username of the user who updated the training material in the Central repository. |
| `training_material_name` | Title of the training material updated in the Central repository. |
| `training_material_type` | the type of training material. **Possible values are**: - `scorm` - `aicc` - `tincan_xapi` - `video` - `file` - `assignment` - `elucidat` - `google_drive` - `lti` - `otj` - `slides_converter` - `html` - `survey` - `test` |
| `training_material_id` | ID of the training material updated in the Central repository. |
| `assigned_courses_count` | Number of courses the updated training material is assigned to. |
| `versions_count` | Number of the training material version updated in the Central repository. |
| `users_play_count` | Number of users who played the training material. |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |

### Certifications

#### Certification awarded (`certification.award.awarded`)

DescriptionEventsExample payload

Triggers when a certification has been awarded

> [!TIP]
> Tip
> 
> This webhook is intended for use with external certification providers and is designed to be used only in conjunction with [Docebo Connect](https://help.docebo.com/hc/en-us/articles/4407581695378). In order for this webhook to be available in your platform you must have Docebo Connect activated and in the *Advanced options* tab of the *Advanced settings* menu the **External certifications** functionality found in the *Connect* section must be **activated**. Please note that this option in the advanced settings is only available **after** Connect has been activated on your platform.
> 
> ![](https://cdn.document360.io/75d583ae-622e-4bde-98e6-0ddd0e7a16bb/Images/Documentation/image(14).png)

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `certification_id` | The ID of the certification. |
| `user_id` | The ID of the user. |
| `issue_date` | The issue date. **Format**: `YYYY-MM-DD` |
| `expiration_date` | The expiration date. Use `null` for no expiration date. **Format**: `YYYY-MM-DD` |
| `always_valid` | Returns `1` if always valid, otherwise returns `0`. |
| `association_type` | The type the certification is associated with. **Example**: `external_integration` |
| `certification_user_id` | The user ID of the certification in the externally integrated platform. |

```json
{
  "event": "certification.award.awarded",
  "fired_by_batch_action": false,
  "message_id": "wh-366d69b0-b5f1-11ee-89d3-e3991e9d4525",
  "webhook_id":11,
  "original_domain":"example-domain.docebosaas.com",
  "payload": {
    "fired_at": "2024-01-18 11:03:28",
    "certification_id": 1,
    "user_id": 100,
    "issue_date": "2024-01-16",
    "expiration_date": null,
    "always_valid": 1,
    "association_type": "external_integration",
    "certification_user_id": 140
  }
}
```

#### Certification revoked (`certification.award.revoked`)

DescriptionEventsExample payload

Triggers when a certification has been revoked

> [!TIP]
> Tip
> 
> This webhook is intended for use with external certification providers and is designed to be used only in conjunction with [Docebo Connect](https://help.docebo.com/hc/en-us/articles/4407581695378). In order for this webhook to be available in your platform you must have Docebo Connect activated and in the *Advanced options* tab of the *Advanced settings* menu the **External certifications** functionality found in the *Connect* section must be **activated**. Please note that this option in the advanced settings is only available **after** Connect has been activated on your platform.
> 
> ![](https://cdn.document360.io/75d583ae-622e-4bde-98e6-0ddd0e7a16bb/Images/Documentation/image(14).png)

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `certification_id` | The ID of the certification. |
| `user_id` | The ID of the user. |
| `issue_date` | The issue date. **Format**: `YYYY-MM-DD` |
| `expiration_date` | The expiration date. Use `null` for no expiration date. **Format**: `YYYY-MM-DD` |
| `always_valid` | Returns `1` if always valid, otherwise returns `0`. |
| `association_type` | The type the certification is associated with. **Example**: `external_integration` |
| `certification_user_id` | The user ID of the certification in the externally integrated platform. |

**Example with single payload**:

```json
{
  "event": "certification.award.revoked",
  "fired_by_batch_action": false,
  "message_id": "wh-ad70bb50-b6bb-11ee-ac50-7561ccd0056e",
  "webhook_id":11,
  "original_domain":"example-domain.docebosaas.com",
  "payload": {
    "fired_at": "2024-01-19 11:12:46",
    "certification_id": 123,
    "user_id": 1,
    "issue_date": "2024-01-16",
    "expiration_date": null,
    "always_valid": 1,
    "association_type": "external_integration",
    "certification_user_id": "1000"
  }
}
```

**Example with multiple payloads**:

```json
{
  "event": "certification.award.revoked",
  "fired_by_batch_action": false,
  "message_id": "wh-ab6569c0-b5f1-11ee-89d3-e3991e9d4525",
  "webhook_id":11,
  "original_domain":"example-domain.docebosaas.com",
  "payloads": [
    {
      "fired_at": "2024-01-18 11:06:44",
      "certification_id": 123,
      "user_id": 1,
      "issue_date": "2024-01-16",
      "expiration_date": null,
      "always_valid": 1,
      "association_type": "external_integration",
      "certification_user_id": 1000
    },
    {
      "fired_at": "2024-01-18 11:06:44",
      "certification_id": 123,
      "user_id": 2,
      "issue_date": "2024-01-16",
      "expiration_date": "2024-01-23",
      "always_valid": 0,
      "association_type": "external_integration",
      "certification_user_id": 2000
    }
  ]
}
```

#### Certification updated (`certification.award.updated`)

DescriptionEventsExample payload

Triggers when a certification has been updated

> [!TIP]
> Tip
> 
> This webhook is intended for use with external certification providers and is designed to be used only in conjunction with [Docebo Connect](https://help.docebo.com/hc/en-us/articles/4407581695378). In order for this webhook to be available in your platform you must have Docebo Connect activated and in the Advanced options tab of the Advanced settings menu the External certifications functionality found in the Connect section must be activated. Please note that this option in the advanced settings is only available after Connect has been activated on your platform.
> 
> ![](https://cdn.document360.io/75d583ae-622e-4bde-98e6-0ddd0e7a16bb/Images/Documentation/image(14).png)

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `certification_id` | The ID of the certification. |
| `user_id` | The ID of the user. |
| `issue_date` | The updated issue date. **Format**: `YYYY-MM-DD` |
| `issue_date_old` | The previous issue date. **Format**: `YYYY-MM-DD` |
| `expiration_date` | The updated expiration date or `null` for no expiration date. **Format**: `YYYY-MM-DD` |
| `expiration_date_old` | The previous expiration date or `null` for no expiration date. **Format**: `YYYY-MM-DD` |
| `always_valid` | Returns `1` if always valid, otherwise returns `0`. |
| `always_valid_old` | The previous value for `always_valid`; returns `1` if it was always valid, otherwise returns `0`. |
| `association_type` | The type the certification is associated with. **Example**: `external_integration` |
| `certification_user_id` | The user ID of the certification in the externally integrated platform. |

```json
{
  "event": "certification.award.updated",
  "fired_by_batch_action": false,
  "message_id": "wh-c4e72d30-e516-11ee-97d3-3b0acad5c01f",
  "webhook_id":11,
  "original_domain":"example-domain.docebosaas.com",
  "payload": {
    "fired_at": "2024-03-18 11:00:41",
    "certification_id": 2,
    "user_id": 13107,
    "issue_date": "2023-01-12",
    "issue_date_old": "2023-01-12",
    "expiration_date": "2024-01-12",
    "expiration_date_old": "2024-01-12",
    "always_valid": 0,
    "always_valid_old": 0,
    "association_type": "manual"
  }
}
```

### Channels

#### Channel content has been assigned (`channel.content.assigned`)

DescriptionEvents

Triggers when content has been assigned to a channel

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `channel_id` | Channel ID. |
| `title` | Channel name. |
| `language` | Channel language. |
| `asset_id` | The ID of each piece of content assigned. |
| `asset_type` | The type of each piece of content assigned. **Possible values are**: - `my-course` (courses and learning plans) - `asset` - `playlist` |

#### Channel content has been removed (`channel.content.removed`)

DescriptionEvents

Triggers when content has been removed from a channel

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `channel_id` | Channel ID. |
| `title` | Channel name. |
| `language` | Channel language. |
| `asset_id` | The ID of each piece of content assigned. |
| `asset_type` | The type of each piece of content assigned. **Possible values are**: - `my-course` (courses and learning plans) - `asset` - `playlist` |

#### Channel created (`channel.created`)

DescriptionEvents

Triggers when a channel is created

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `channel_id` | ID of the newly created channel. |
| `title` | Channel name. |
| `language` | Channel language. |
| `upload_permissions` | Who is allowed to upload content to the channel. **Possible values are**: - `everyone` - `peer_review` - `experts_only` |
| `enabled` | Whether the channel is shown or not. **Possible values are**: - `true` - `false` |
| `creation_date` | The channel creation date in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `extra_data` | - `description` - Channel description - `visibility` - Channel visibility - `all` - Channel is visible for all users - `groups` - Channel is visible for the selected groups - `branches` - Channel is visible for the selected branches - `id` - Branch ID - `descendants` - Branch descendants included or not |

#### Channel deleted (`channel.deleted`)

DescriptionEvents

Triggers when a channel is deleted

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `channel_id` | ID of the deleted channel. |
| `title` | Channel name. |
| `language` | Channel language. |
| `upload_permissions` | Who is allowed to upload content to the channel. **Possible values are**: - `everyone` - `peer_review` - `experts_only` |
| `enabled` | Whether the channel is shown or not. **Possible values are**: - `true` - `false` |
| `deletion_date` | The channel deletion date in UTC **Format**: `YYYY-MM-DD HH:mm:ss` |
| `extra_data` | Extra data section. |

#### Channel expert added (`channel.expert.added`)

DescriptionEvents

Triggers when an expert is added to a channel

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | Expert ID. |
| `channel_id` | ID of the channel associated with the expert. |
| `extra_data` | Extra data section. |

#### Channel expert removed (`channel.expert.removed`)

DescriptionEventsExample payload

Triggers when an expert is removed from a channel

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | Expert ID. |
| `channel_id` | ID of the channel associated with the expert. |
| `extra_data` | Extra data section. |

No payload available

#### Channel updated (`channel.updated`)

DescriptionEvents

Triggers when a channel is updated

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `channel_id` | ID of the updated channel. |
| `title` | Channel name. |
| `language` | Channel language. |
| `upload_permissions` | Who is allowed to upload content to the channel. **Possible values are**: - `everyone` - `peer_review` - `experts_only` |
| `enabled` | Whether the channel is shown or not. **Possible values are**: - `true` - `false` |
| `update_date` | The channel update date in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `extra_data` | - `description` - Channel description - `visibility` - Channel visibility - `all` - Channel is visible for all users - `groups` - Channel is visible for the selected groups - `branches` - Channel is visible for the selected branches - `id` - Branch ID - `descendants` - Branch descendants included or not |

### Course additional fields

#### Course additional field has been deleted (`courseadditionalfield.deleted`)

DescriptionEvents

Triggers when a course additional field has been deleted

| Property | Description |
| --- | --- |
| `additional_field_id` | ID of the deleted additional field |
| `course_type` | Type of course from which the additional field was deleted. **Possible values are**: - `elearning` - `ilt` |
| `type` | The type of additional field. **Possible values are**: - `date` - `dropdown` - `textfield` - `textarea` - `accrediframe` |
| `name` | Name of the deleted additional field. |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |

### Course catalog

#### Course removed from catalog (`catalog.course.deleted`)

DescriptionEvents

Triggers when a course is removed from a catalog

| Property | Description |
| --- | --- |
| `catalog_id` | ID of the catalog from where the course was deleted. |
| `course_id` | ID of the course deleted from the catalog. |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |

#### Learning plan removed from catalog (`catalog.learningplan.deleted`)

DescriptionEvents

Triggers when a learning plan is removed from a catalog

| Property | Description |
| --- | --- |
| `catalog_id` | ID of the catalog from where the learning plan was deleted. |
| `learning_plan_id` | ID of the learning plan deleted from the catalog. |
| `fired_at` | The date and time of the moment the event was fired in UTC. Format: `YYYY-MM-DD HH:mm:ss` |

### Courses

#### Course created (`course.created`)

DescriptionEvents

Triggers when a course is created.

| Property | Description |
| --- | --- |
| `course_id` | ID of the course. |
| `name` | Course title. |
| `type` | Type of course. Possible values are - `elearning` - `classroom` - `webinar` |
| `code` | Course code (can be empty or `null`). |
| `creation_date` | The date of the creation in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `start_date` | Course start date. |
| `end_date` | Course end date. |
| `language` | Course language. |
| `duration` | Course duration, expressed in seconds. |
| `extra_data` | - `self_enrollment_policy` - Type of self-enrollment currently set. Possible options are: - `disabled` - `admin_approval` - `free` - `self_unenrollment_policy` - Self-unenrollment setting. Possible values are: - `disabled` - `on_course_not_completed` - `even_on_course_completed` - `allow_session_self_unenrollment`- Whether the user can self-unenroll from the course session. - `course_rating_permission`- Identifies if the user is allowed to rate the course. Possible values are: - `disabled` - `always` - `if_enrolled` - `on_completion` - `credits`- Number of credits assigned to the course. - `description` - Course description. - `provider` - Content provider, needed only when the course has been imported from an external catalog. |

#### Course deleted (`course.deleted`)

DescriptionEvents

Triggers when a course is deleted.

> [!NOTE]
> Please note:
> 
> This event also fires when a course is archived. Archiving a course is not the same as deleting it; archived courses remain in the system and can be retrieved via the `course` service but the platform's built-in logic fires `course.deleted` in both cases. If your integration handles this event, make sure your logic accounts for the possibility that the course has been archived rather than permanently removed.

| Property | Description |
| --- | --- |
| `course_id` | ID of the course. |
| `name` | Title of the course. |
| `type` | Type of course. **Possible values are**: - `elearning` - `classroom` - `webinar` |
| `code` | Course code (can be empty or `null`). |
| `deletion_date` | The date of the deletion in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `start_date` | Course start date. |
| `end_date` | Course end date. |
| `language` | Course language. |
| `duration` | Course duration, expressed in seconds. |

#### Course properties have been changed (`course.updated`)

DescriptionEvents

Triggers when the course properties have been updated.

| Property | Description |
| --- | --- |
| `course_id` | ID of the course. |
| `name` | Title of the course. |
| `type` | Type of course. **Possible values are**: - `elearning` - `classroom` - `webinar` |
| `code` | Course code (can be empty or `null`). |
| `update_date` | The date of the update in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `start_date` | Course start date. |
| `end_date` | Course end date. |
| `language` | Course language. |
| `duration` | Course duration, expressed in seconds. |
| `skills` | The list of assigned skills, each one containing: - `id` - the ID of the skill - `name` - the name of the skill - `code` - the code of the skill - `is_custom` - returns `true` if the skill is custom, otherwise `false` - `is_ai_tagged` - returns `true` if the skill was assigned by AI, otherwise `false` |
| `extra_data` | - `self_enrollment_policy` - Type of self-enrollment currently set. Possible options are: - `disabled` - `admin_approval` - `free` - `self_unenrollment_policy` - Self-unenrollment setting. Possible values are - `disabled` - `on_course_not_completed` - `even_on_course_completed` - `allow_session_self_unenrollment`- Whether the user can self-unenroll from the course session. - `course_rating_permission` - Identifies if the user is allowed to rate the course. Possible values are: - `disabled` - `always` - `if_enrolled` - `on_completion` - `credits` - Number of credits assigned to the course. - `description` - Course description. - `provider` - Content provider, needed only when the course has been imported from an external catalog. |

#### The course has been marked as outdated (`content.markedoutdated`)

DescriptionEvents

Triggers if a course has been marked as outdated

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `course_id` | ID of the course marked as outdated. |
| `user_id` | ID of the user who marked as outdated. |
| `number_of_reports` | Number of times the course has been marked as outdated. |

#### User has rated a course (`course.rating.updated`)

DescriptionEvents

Triggers when a course is rated by a user

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `course_id` | ID of the rated course. |
| `user_id` | ID of the user who rated the course. |
| `user_rating` | Rating value. |
| `average_rating` | Average course rating, including the current user rating. |
| `number_of_votes` | Number of ratings received by the course. |

### Enrollments

#### Enrollment updated (`course.enrollment.updated`)

DescriptionEvents

Triggers when the user enrollment in a course has been updated

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | ID of the user enrolled. |
| `course_id` | ID of the course to which the user is enrolled. |
| `status` | A string that represents the new enrollment status. **Possible values are**: - `subscribed` - `in_progress` - `completed` - `waiting` - `subscription_to_confirm` - `suspended` - `overbooking` |
| `level` | User level in the course. **Possible values are**: - `learner` - `instructor` - `tutor` |
| `enrollment_date` | The date when the enrollment was recorded, in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `enrollment_date_begin_validity` | The date when the enrollment validity starts, in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `enrollment_date_end_validity` | The date when the enrollment validity starts, in UTC **Format**: `YYYY-MM-DD HH:mm:ss` |
| `subscribed_by_id` | ID of the user enrolling the user identified by the `user_id` parameter. |
| `extra_data` | - `score` - User score in the course. - `additional_fields` - Enrollment additional fields. - `language` - Platform default language, defined in the [Localization tool (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020084500-Managing-the-Localization-Tool-Platform-Languages) - `list` - `id` - Additional field ID. - `name` - Additional field name, in the platform default language. - `value` - Additional field value. |

#### ILT session enrollment updated (`ilt.session.enrollment.updated`)

DescriptionEvents

Triggers when an ILT session’s enrollment has been updated

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | ID of the user. |
| `course_id` | ID of the course. |
| `session_id` | ID of the ILT session associated with the course. |
| `session_name` | Name of the session in which the user has been enrolled. |
| `level` | The enrollment level of the user. **Possible values are**: - `learner` - `tutor` |
| `enrollment_date` | Date of the enrollment. |
| `enrollment_date_begin_validity` | Start of the validity period for the enrollment (can be `null`). |
| `enrollment_date_end_validity` | End of the validity period (can be `null`). |
| `subscribed_by_id` | ID of the Superadmin or Power User who enrolled the user, or the user ID if the user enrolled by themself. |
| `status` | Enrollment status. **Possible values are**: - `subscribed` - `in_progress` - `completed` - `waiting` - `subscription_to_confirm` - `suspended` - `overbooking` |
| `extra_data` | - `additional_fields` - Enrollment additional fields. - `language` - Platform default language, defined in the [Localization tool.](https://help.docebo.com/hc/en-us/articles/360020084500-Managing-the-Localization-Tool-Platform-Languages) - `list` - `id` - Additional field ID. - `name` - Additional field name, in the platform default language. - `value` - additional field value |

#### Learner completed course (`course.enrollment.completed`)

DescriptionEventsExample payload

Triggers when a learner completes a course

| Property | Description |
| --- | --- |
| `user_id` | ID of the user. |
| `course_id` | ID of the course. |
| `completion_date` | Date of completion. |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `level` | User level in the course. **Possible values are**: - `learner` - `instructor` - `tutor` |
| `subscribed_by_id` | ID of the user enrolling the user identified by the `user_id` parameter. |
| `status` | Enrollment status. **Possible values are**: - `subscribed` - `in_progress` - `completed` - `waiting` - `subscription_to_confirm` - `suspended` - `overbooking` |
| `enrollment_date` | The date when the enrollment was recorded in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `enrollment_date_begin_validity` | The date when the enrollment validity starts, in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `enrollment_date_end_validity` | The date when the enrollment validity ends, in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `assignment_type` | The learning plan enrollment priority attribute. Possible values are:`mandatory`, `required`, `recommended`, `optional`. This field is tracked only if the **Show the Enrollment attributes** option is enabled in the [platform's advanced settings menu](https://help.docebo.com/hc/en-us/articles/360020079900-Managing-the-platform-advanced-settings). |
| `extra_data` | - `total_time` - Time spent by the user on the course. - `score` - - User score in the course. - `additional_fields` - Enrollment additional fields. - `language` - Platform default language, defined in the [Localization tool.](https://help.docebo.com/hc/en-us/articles/360020084500-Managing-the-Localization-Tool-Platform-Languages) - `list` - `id` - Additional field ID. - `name`Additional field name, in the platform default language. - `value` - Additional field value. |

```json
{
  "event":"course.enrollment.completed",
  "fired_by_batch_action":false,
  "message_id":"wh-20240318-056045-baf44a12-722b-4de1-a631-1a68938be6e9",
  "webhook_id":11,
  "original_domain":"example-domain.docebosaas.com",
  "payload":{
    "fired_at":"2024-03-18 09:00:45",
    "user_id":13827,
    "course_id":146,
    "completion_date":"2024-03-18 09:00:44",
    "subscribed_by_id":13827,
    "status":"completed",
    "level":"learner",
    "enrollment_date":"2022-04-22 10:21:28",
    "enrollment_date_begin_validity":null,
    "enrollment_date_end_validity":null,
    "extra_data":{
      "total_time":21934,
      "score":0,
      "additional_fields":null,
      "date_first_access":"2022-04-22 10:24:19"
    }
  }
}
```

#### User enrolled in ILT session (`ilt.session.enrollment.created`)

DescriptionEvents

Triggers when a user enrolls into an ILT session

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | ID of the user. |
| `course_id` | ID of the course. |
| `session_id` | ID of the ILT session associated with the course. |
| `session_name` | Name of the session in which the user has been enrolled. |
| `level` | The enrollment level of the user. **Possible values are**: - `learner` - `tutor` |
| `enrollment_date` | Date of the enrollment. |
| `enrollment_date_begin_validity` | Start of the validity period for the enrollment (can be `null`). |
| `enrollment_date_end_validity` | End of the validity period (can be `null`). |
| `subscribed_by_id` | ID of the Superadmin or Power User who enrolled the user, or the user ID if the user enrolled by themself. |
| `status` | Enrollment status. Possible values are - `subscribed` - `in_progress` - `completed` - `waiting` - `subscription_to_confirm` - `suspended` - `overbooking` |
| `extra_data` | - `additional_fields` - Enrollment additional fields. - `language` - Platform default language, defined in the [Localization tool.](https://help.docebo.com/hc/en-us/articles/360020084500-Managing-the-Localization-Tool-Platform-Languages) - `list` - `id` - Additional field ID. - `name`- - Additional field name, in the platform default language. - `value` - Additional field value. |

#### User enrolled in a course (`course.enrollment.created`)

DescriptionEvents

Triggers when a user is enrolled in a course

| Property | Description |
| --- | --- |
| `user_id` | ID of the user. |
| `username` | Username of the user. |
| `course_id` | ID of the course. |
| `course_name` | Course title. |
| `level` | The enrollment level of the user. **Possible values are**: - `learner` - `tutor` - `instructor` - `coach` |
| `enrollment_date` | Date of the enrollment. |
| `enrollment_date_begin_validity` | Start of the validity period for the enrollment (can be `null`). |
| `enrollment_date_end_validity` | End of the validity period (can be `null`). |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `subscribed_by_id` | ID of the Superadmin or Power User who enrolled the user, or the user ID if the user enrolled by themself. |
| `status` | Enrollment status. **Possible values are**: - `subscribed` - `in_progress` - `completed` - `waiting` - `subscription_to_confirm` - `suspended` - `overbooking` |
| `assignment_type` | The learning plan enrollment priority attribute. Possible values are:`mandatory`, `required`, `recommended`, `optional`. This field is tracked only if the **Show the Enrollment attributes** option is enabled in the [platform's advanced settings menu](https://help.docebo.com/hc/en-us/articles/360020079900-Managing-the-platform-advanced-settings). |
| `extra_data` | - `score` - - User score in the course. - `additional_fields` - Enrollment additional fields. - `language` - Platform default language, defined in the [Localization tool.](https://help.docebo.com/hc/en-us/articles/360020084500-Managing-the-Localization-Tool-Platform-Languages) - `list` - `id` - Additional field ID. - `name` - Additional field name, in the platform default language. - `value` - Additional field value. |

#### User unenrolled from course (`course.enrollment.deleted`)

DescriptionEvents

Triggers when a learner has unenrolled from a course.

| Property | Description |
| --- | --- |
| `user_id` | ID of the user enrolled. |
| `username` | Username of the user. |
| `course_id` | ID of the course to which the user is enrolled. |
| `course_name` | Title of the course to which the user is enrolled. |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `level` | User level in the course. **Possible values are**: - `learner` - `instructor` - `tutor` |
| `enrollment_date` | The date when the enrollment was recorded, in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `enrollment_date_begin_validity` | The date when the enrollment validity starts, in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `enrollment_date_end_validity` | The date when the enrollment validity ends, in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `subscribed_by_id` | ID of the user enrolling the user identified by the `user_id` parameter. |
| `status` | Enrollment status. **Possible values are**: - `subscribed` - `in_progress` - `completed` - `waiting` - `subscription_to_confirm` - `suspended` - `overbooking` |
| `extra_data` | - `total_time` - time spent by the user on the course |

#### User enrollment in a course has been updated (`course.enrollment.updatedbyadmin`)

DescriptionEvents

Triggers when a Superadmin has updated a course enrollment

| **Property** | **Description** |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | The ID of the user enrolled. |
| `user_name` | The username of the user. |
| `course_id` | ID of the course where the enrollment was updated by the Superadmin. |
| `course_name` | Title of the course where the enrollment was updated by the Superadmin. |
| `enrollment_updates` | Enrollment updates section. |
| `enrollment_priority_old` | Previous enrollment priority. Possible values are: - `mandatory` - `required` - `recommended` - `optional` |
| `enrollment_priority` | New enrollment priority. |

### Gamification

#### User earned a badge (`badge.earned`)

DescriptionEvents

Triggers when a user has earned a badge

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `id_badge` | The badge ID. |
| `id_user` | The user ID. |
| `score` | The total score attained |
| `issued_on` | The date and time the badge was issued, in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `event_type` | The type of the event. **Possible values are**: - Learn Badges - `StudentCompletedCourse` - Learner completed course - `StudentCompletedLO` - Learner completed training material - `NewReply` - Learner posted a reply on a forum discussion - `NewThread` - Learner started a new discussion in a forum - `NewHelpfulFeedback` - Learner clicked "Helpful" - `NewToneFeedback` - Learner clicked "Rate" - `StudentCompletedLearningPlan` - Learner completed a Learning Plan - Discover, Coach & Share badges - `UserReachedAGoal` - User met a goal - `AssetReachedAGoal` - User's asset met a goal - `AssetViewedForLongestTime` - User's asset viewed for the longest duration of time - `ExpertReachedAGoal` - Expert met a goal - `UserReachedAGoalAsTopContributor` - User became a top contributor (uploaded assets) |
| `badge_name` | The name of the badge |
| `badge_image` | The URL of the image of the badge |
| `is_shareable` | A boolean value indicating if the badge can be shared |

### Groups

#### User assigned to a group (`group.user.added`)

DescriptionEventsExample payload

Triggers when a user is assigned to a group

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | The ID of the user assigned to the group |
| `group_id` | The ID of the group to which the user has been assigned |
| `username` | The username of the user |
| `group_name` | The name of the group to which the user has been assigned |

```json
{
  "webhook_id": 28,
  "original_domain": "exampleplatform.exampledomain.com",
  "event": "group.user.added",
  "fired_by_batch_action": true,
  "message_id": "wh-20250328-113419-7ff55e07-cc5c-49ee-9165-533fdb695ea1",
  "payload": {
    "fired_at": "2025-03-28 11:34:16",
    "user_id": 13936,
    "group_id": 13887,
    "username": "john.doe@exampledomain.com",
    "group_name": "Example Group",
    "extra_data": null
  }
}
```

#### User removed from a group (`group.user.removed`)

DescriptionEventsExample payload

Triggers when a user is removed from a group

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | The ID of the user removed from the group |
| `group_id` | The ID of the group from which the user has been removed |
| `username` | The username of the user |
| `group_name` | The name of the group from which the user has been removed |

```json
{
  "webhook_id": 28,
  "original_domain": "exampleplatform.exampledomain.com",
  "event": "group.user.removed",
  "fired_by_batch_action": true,
  "message_id": "wh-20250328-113430-5d959e8b-ba9d-4e43-881a-4b88ba20e36a",
  "payload": {
    "fired_at": "2025-03-28 11:34:29",
    "user_id": 13936,
    "group_id": 13887,
    "username": "john.doe@exampledomain.com",
    "group_name": "Example Group",
    "extra_data": null
  }
}
```

### ILT sessions

#### User unenrolled from an ILT session (`ilt.session.enrollment.deleted`)

DescriptionEvents

Triggers when a user has been unenrolled from an ILT session.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | ID of the user. |
| `course_id` | ID of the course. |
| `session_id` | ID of the ILT session associated with the course. |
| `session_name` | Name of the session in which the user has been enrolled. |
| `level` | The enrollment level of the user. **Possible values are**: - `learner` - `tutor` |
| `enrollment_date` | Date of the enrollment. |
| `enrollment_date_begin_validity` | Start of the validity period for the enrollment (can be `null`). |
| `enrollment_date_end_validity` | End of the validity period (can be `null`). |
| `subscribed_by_id` | ID of the Superadmin or Power User who enrolled the user, or the user ID if the user enrolled by themself. |
| `status` | Enrollment status. **Possible values are**: - `subscribed` - `in_progress` - `completed` - `waiting` - `subscription_to_confirm` - `suspended` - `overbooking` |

#### ILT external calendar event changed (`ilt.extcalendar.event.changed`)

**Description**

Triggers when a specific ILT event occurrence (a date within a session) changes in a way that affects the external calendar view. This includes adding, updating or deleting an event date. External calendar services should listen to this event to keep individual calendar entries synchronized with ILT event scheduling changes.

> [!NOTE]
> Please note
> 
> This webhook is for use by specific Docebo Connect recipes only. It is intended to support external calendar integrations, such as the MS Outlook calendar integration, and should not be used outside of that context.

**Events**

| Property | Description |
| --- | --- |
| fired_at | The date and time the event was fired, in UTC. **Format:** `YYYY-MM-DD HH:mm:ss` |
| course_id | The ID of the ILT course associated with the session. |
| session_id | The ID of the ILT session. |
| event_id | The ID of the ILT event (date occurrence) that changed. |
| action_type | The type of action that triggered the event. **Possible values:** - `event_added` - `event_updated` - `event_deleted` |
| session_path | The path component of the session link, excluding the domain. Consumers use this to construct the full session URL. **Format:** ```http /learn/courses/{course_id}/{course_slug}/sessions/{session_id}/{session_slug} ``` |

**Example payload**

```json
{
  "webhook_id": 27,
  "original_domain": "example.exampledomain.com",
  "event": "ilt.extcalendar.event.changed",
  "fired_by_batch_action": false,
  "message_id": "wh-20260401-103515-b2c3d4e5-2345-6789-bcde-f23456789012",
  "payload": {
    "fired_at": "2026-04-01 10:35:14",
    "course_id": 42,
    "session_id": 17,
    "event_id": 83,
    "action_type": "event_updated",
    "session_path": "/learn/courses/42/example-ilt-course/sessions/17/spring-session",
    "extra_data": null
  }
}
```

#### ILT external calendar session changed (`ilt.extcalendar.session.changed`)

**Description**

Triggers when an ILT session changes in a way that affects the external calendar view. This includes changes to core session metadata or configuration that external calendar services need to reflect, such as enabling or disabling calendar synchronization, updating session attendance settings, or deleting a session. When an ILT course is duplicated, this event fires once for each session in the duplicated course.

> [!NOTE]
> Please note
> 
> This webhook is for use by specific Docebo Connect recipes only. It is intended to support external calendar integrations, such as the MS Outlook calendar integration, and should not be used outside of that context.

**Events**

| Property | Description |
| --- | --- |
| `fired_at` | The date and time the event was fired, in UTC. **Format:** `YYYY-MM-DD HH:mm:ss` |
| `course_id` | The ID of the ILT course associated with the session. |
| `session_id` | The ID of the ILT session. |
| `action_type` | The type of action that triggered the event. **Possible values:** - `session_sync_enabled` - `session_sync_disabled` - `session_attendance_updated` - `session_deleted` |
| `session_path` | The path component of the session link, excluding the domain. Consumers use this to construct the full session URL. **Format:** ```http /learn/courses/{course_id}/{course_slug}/sessions/{session_id}/{session_slug} ``` |

**Example payload**

```json
{
  "webhook_id": 27,
  "original_domain": "example.exampledomain.com",
  "event": "ilt.extcalendar.session.changed",
  "fired_by_batch_action": false,
  "message_id": "wh-20260401-103012-a1b2c3d4-1234-5678-abcd-ef1234567890",
  "payload": {
    "fired_at": "2026-04-01 10:30:11",
    "course_id": 42,
    "session_id": 17,
    "action_type": "session_sync_enabled",
    "session_path": "/learn/courses/42/example-ilt-course/sessions/17/spring-session",
    "extra_data": null
  }
}
```

#### ILT session changed (`ilt.session.updated`)

DescriptionEvents

Triggers when an ILT session has been changed or updated.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `course_id` | ID of the course associated with the updated ILT session. |
| `course_code` | Code of the course associated with the updated ILT session. |
| `session_id` | ID of the updated ILT session. |
| `session_code` | Code of the updated ILT session. |
| `session_name` | Name of the updated ILT session. |
| `extra_data` | - `session_description` - Description of the updated ILT session. - `session_maximum_enrollments` - Maximum number of enrollments allowed for the updated ILT session. - `session_minimum_enrollments` - Minimum number of enrollments allowed for the updated ILT session. - `last_subscription_date` - Last date for enrolling into the ILT session. - `dates` - `name` - Name of the updated ILT session. - `original_date` - Date of the updated ILT session. - `original_timezone`- Timezone set of the updated session. - `date_time_start` - Starting time set for the updated session. - `date_time_end` - End time set for the updated session. - `break_date_time_start` - Break starting time for the updated session. - `break_date_time_end` - Break end time for the updated session. - `location_name` - Name of the location where the session is held. - `location_country` - Country where the session is held. - `classrom_name` - Name of the classroom where the session is held. - `additional_fields` - Session additional fields. - `language` - Platform default language defined in the [Localization tool](https://help.docebo.com/hc/en-us/articles/360020084500-Managing-the-Localization-Tool-Platform-Languages). - `list` - `id` - Additional field ID. - `name` - Additional field name, in the platform default language defined in the [Localization tool](https://help.docebo.com/hc/en-us/articles/360020084500-Managing-the-Localization-Tool-Platform-Languages). - `value` - Additional field value. |

#### ILT session deleted (`ilt.session.deleted`)

DescriptionEvents

Triggers when an ILT session is deleted.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `course_id` | ID of the course of the deleted ILT session. |
| `course_code` | Code of the course of the deleted ILT session. |
| `session_id` | ID of the deleted ILT session. |
| `session_code` | Code of the deleted ILT session. |
| `session_name` | Name of the deleted ILT session. |

#### New ILT session created (`ilt.session.created`)

DescriptionEvents

Triggers when a new ILT session is created.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `course_id` | ID of the course associated with the ILT session. |
| `course_code` | Code of the course associated with the ILT session. |
| `session_id` | ID of the new ILT session. |
| `session_code` | Code of the new ILT session. |
| `session_name` | Name of the new ILT session. |
| `extra_data` | - `session_description` - Description of the new ILT session. - `session_maximum_enrollments` - Maximum number of enrollments allowed for the new ILT session. - `session_minimum_enrollments` - Minimum number of enrollments allowed for the new ILT session. - `last_subscription_date` - Last date for enrolling into the ILT session. - `dates` - `name` - Name of the new ILT session. - `original_date` - Date of the new ILT session. - `original_timezone`- Timezone set of the new session. - `date_time_start` - Starting time set for the new session. - `date_time_end` - End time set for the new session. - `break_date_time_start` - Break starting time for the new session. - `break_date_time_end` - Break end time for the new session - `location_name` - Name of the location where the session is held. - `location_country` - Country where the session is held. - `classrom_name` - Name of the classroom where the session is held. - `additional_fields` - Session additional fields. - `language` - Platform default language defined in the [Localization tool](https://help.docebo.com/hc/en-us/articles/360020084500-Managing-the-Localization-Tool-Platform-Languages). - `list` - `id` - Additional field ID. - `name` - Additional field name, in the platform default language defined in the [Localization tool](https://help.docebo.com/hc/en-us/articles/360020084500-Managing-the-Localization-Tool-Platform-Languages). - `value` - Additional field value. |

#### New ILT event created (`ilt.event.created`)

**Description**

Triggers when a new ILT event is created.

**Events**

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC **Format**: `YYYY-MM-DD HH:mm:ss` |
| `event_id` | ID of the ILT event created |
| `event_name` | Name of the ILT event created |
| `course_name` | Name of the ILT course associated with the ILT event |
| `course_id` | ID of the ILT course associated with the ILT event |
| `session_name` | Name of the ILT session where the event was created |
| `session_id` | ID of the ILT session where the event was created |
| `original_date` | The date when the ILT event is scheduled to take place Format: `YYYY-MM-DD` |
| `original_timezone` | The timezone to which the ILT event dates and times are referred |
| `date_time_start` | The scheduled start time of the ILT event Format: `HH-mm-ss` |
| `date_time_end` | The scheduled end time of the ILT event Format: `HH-mm-ss` |
| `break_date_time_start` | The scheduled break start time of the ILT event Format: `HH-mm-ss` |
| `break_date_time_end` | The scheduled break end time of the ILT event Format: `HH-mm-ss` |
| `location_name` | Location name for ILT event with a venue |
| `location_country` | Location country for ILT event with a venue |
| `classroom_name` | Classroom name for ILT event with a venue |
| `webinar_tool` | Video conference tool configured for the ILT event |

#### ILT event updated (`ilt.event.updated`)

**Description**

Triggers when an ILT event is updated.

**Events**

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC **Format**: `YYYY-MM-DD HH:mm:ss` |
| `event_id` | ID of the ILT event |
| `event_name` | Name of the ILT event |
| `course_name` | Name of the ILT course associated with the ILT event |
| `course_id` | ID of the ILT course associated with the ILT event |
| `session_name` | Name of the ILT session where the event was created |
| `session_id` | ID of the ILT session where the event was created |
| `original_date` | The date when the ILT event is scheduled to take place Format: `YYYY-MM-DD` |
| `original_timezone` | The timezone to which the ILT event dates and times are referred |
| `date_time_start` | The scheduled start time of the ILT event Format: `HH-mm-ss` |
| `date_time_end` | The scheduled end time of the ILT event Format: `HH-mm-ss` |
| `break_date_time_start` | The scheduled break start time of the ILT event Format: `HH-mm-ss` |
| `break_date_time_end` | The scheduled break end time of the ILT event Format: `HH-mm-ss` |
| `location_name` | Location name for ILT event with a venue |
| `location_country` | Location country for ILT event with a venue |
| `classroom_name` | Classroom name for ILT event with a venue |
| `webinar_tool` | Video conference tool configured for the ILT event |

#### ILT event deleted (`ilt.event.deleted`)

**Description**

Triggers when an ILT event is deleted.

**Events**

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC **Format**: `YYYY-MM-DD HH:mm:ss` |
| `event_id` | ID of the ILT event |
| `event_name` | Name of the ILT event |
| `course_name` | Name of the ILT course associated with the ILT event |
| `course_id` | ID of the ILT course associated with the ILT event |
| `session_name` | Name of the ILT session where the event was created |
| `session_id` | ID of the ILT session where the event was created |
| `original_date` | The date when the ILT event was scheduled to take place Format: `YYYY-MM-DD` |
| `original_timezone` | The timezone to which the ILT event dates and times are referred |
| `date_time_start` | The scheduled start time of the ILT event Format: `HH-mm-ss` |
| `date_time_end` | The scheduled end time of the ILT event Format: `HH-mm-ss` |
| `break_date_time_start` | The scheduled break start time of the ILT event Format: `HH-mm-ss` |
| `break_date_time_end` | The scheduled break end time of the ILT event Format: `HH-mm-ss` |
| `location_name` | Location name for ILT event with a venue |
| `location_country` | Location country for ILT event with a venue |
| `classroom_name` | Classroom name for ILT event with a venue |
| `webinar_tool` | Video conference tool configured for the ILT event |

### Learning plans

#### Admin added a course to a learning plan (`learningplan.course.added`)

DescriptionEvents

Triggers when an admin adds a course to a learning plan

| Property | Description |
| --- | --- |
| `learning_plan_id` | ID of the learning plan. |
| `course_id` | ID of the course added to the learning plan. |
| `course_name` | Title of the course added to the learning plan. |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |

#### Admin created a learning plan (`learningplan.created`)

DescriptionEvents

Triggers when an admin creates a learning plan

| Property | Description |
| --- | --- |
| `learning_plan_id` | ID of the learning plan. |
| `name` | Title of the learning plan. |
| `code` | Code of the learning plan (can be empty or `null`). |
| `creation_date` | The date of the creation, in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `extra_data` | - `description` - Learning plan description. |

#### Admin deleted a learning plan (`learningplan.deleted`)

DescriptionEvents

Triggers when an admin deletes a learning plan

| Property | Description |
| --- | --- |
| `learning_plan_id` | ID of the learning plan. |
| `name` | Title of the learning plan. |
| `code` | Code of the learning plan (it can be empty or `null`). |
| `deletion_date` | The date of the deletion, in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `fired_at` | The date and time of the moment the event was fired, in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |

#### Admin removed a course from a learning plan (`learningplan.course.removed`)

DescriptionEvents

Triggers when an admin removes a course from a learning plan

| Property | Description |
| --- | --- |
| `learning_plan_id` | ID of the learning plan. |
| `course_id` | ID of the course removed from the learning plan. |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |

#### Admin updated a learning plan (`learningplan.updated`)

DescriptionEvents

Triggers when an admin updates a learning plan

| Property | Description |
| --- | --- |
| `learning_plan_id` | ID of the learning plan. |
| `name` | Title of the learning plan. |
| `code` | Code of the learning plan (it can be empty or `null`). |
| `update_date` | The date of the update in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `extra_data` | - `description` - Learning plan description. |

#### Learner completed learning plan (`learningplan.enrollment.completed`)

DescriptionEvents

Triggers when a learner completed a learning plan

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | ID of the enrolled user. |
| `username` | Username of the enrolled user. |
| `learning_plan_id` | ID of the learning plan. |
| `learning_plan_name` | Learning plan title. |
| `triggering_course_id` | ID of the course triggering the learning plan completion. |
| `triggering_course_name` | Title of the course triggering the learning plan completion. |
| `assignment_type` | The learning plan enrollment priority attribute. Possible values are:`mandatory`, `required`, `recommended`, `optional`. > [!NOTE] > Please note: > > This field is tracked only if the **Show the Enrollment attributes section** option is enabled in the [platform's advanced settings menu (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020079900-Managing-the-platform-advanced-settings). |
| `completion_date` | If the completion is not forced via API, the date when the learner completed the last course of the learning plan. > [!TIP] > Tip: > > More details about completion rules in the Marking a learning plan as completed chapter of the knowledge base article [Creating and managing learning plans (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020083980-Creating-and-managing-learning-plans#h_01JAZATAGRPMD6TC63BQS2V32N). |
| `context` | Identifies whether the completion was performed manually by an administrator or achieved by the learner through completing the learning plan. |

#### User enrollment in a learning plan has been updated (`learningplan.enrollment.updated`)

DescriptionEvents

Triggers when the user enrollment in a learning plan has been updated.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | ID of the user whose enrollment was updated. |
| `username` | Username of the user whose enrollment was updated. |
| `learning_plan_id` | ID of the learning plan. |
| `learning_plan_name` | Learning plan title. |
| `enrollment_updates` | Enrollment updates section. |
| `enrollment_priority_old` | Previous enrollment priority. Possible values are: - `mandatory` - `required` - `recommended` - `optional` |
| `enrollment_priority` | New enrollment priority. |
| `assignment_type` | The learning plan enrollment priority attribute. Possible values are: - `mandatory` - `required` - `recommended` - `optional` > [!NOTE] > Please note: > > This field is tracked only if the **Show the Enrollment attributes** option is enabled in the [platform's advanced settings menu (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020079900-Managing-the-platform-advanced-settings). |
| `extra_data` | - `description` - Description of the learning plan. |

#### Learning plan enrollment created (`learningplan.enrollment.created`)

DescriptionEvents

Triggers when a new learning plan enrollment is created.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | ID of the enrolled user. |
| `username` | Username of the enrolled user. |
| `learning_plan_id` | ID of the learning plan. |
| `learning_plan_name` | Learning plan title. |
| `learning_plan_code` | Learning plan code. |
| `enrollment_date` | The date of the enrollment **Format**: `YYYY-MM-DD HH:mm:ss` |
| `subscribed_by_id` | ID of the Superadmin or Power User who enrolled the user, or the user ID if the user enrolled by themself. |
| `enrollment_date_begin_validity` | The start of the validity period for the enrollment (can be `null`). |
| `enrollment_date_end_validity` | The end of the validity period (can be `null`). |
| `assignment_type` | The learning plan enrollment priority attribute. Possible values are: - `mandatory` - `required` - `recommended` - `optional` > [!NOTE] > Please note: > > This field is tracked only if the **Show the Enrollment attributes** option is enabled in the [platform's advanced settings menu (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020079900-Managing-the-platform-advanced-settings). |
| `extra_data` | - `description` - Description of the learning plan. |

#### Learning plan enrollment deleted (`learningplan.enrollment.deleted`)

DescriptionEvents

Triggers when an enrollment in a learning plan is deleted.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | ID of the enrolled user. |
| `username` | Username of the enrolled user |
| `learning_plan_id` | The ID of the learning plan |

### Observation checklists

#### Checklist Approval Step Submitted (`checklist.approval.step.submitted`)

DescriptionEventsExample payload

Triggers when an observation checklist approval step is submitted.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `checklist_id` | The ID of the checklist |
| `checklist_name` | The name of the checklist |
| `schedule_type` | The type of the schedule Possible values: - `course` - `anytime` - `timeframe` - `event` |
| `assignment_id` | The ID of the assignment |
| `assignment_start_date` | The starting date of the assignment in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` This value can be `null` |
| `assignment_end_date` | The ending date of the assignment in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` This value can be `null` |
| `evaluator_id` | The ID of the evaluator |
| `evaluator_username` | The username of the evaluator |
| `evaluation_type` | The type of the evaluation Possible values: - `self` - `manager` - `custom_user` |
| `evaluated_id` | The ID of the user being evaluated |
| `evaluated_username` | The username of the user being evaluated |
| `evaluation_score` | The score of the evaluation This value can be `null` |
| `evaluation_status` | The status of the evaluation Possible values: - `completed` |
| `approval_type` | The approval type Possible values: - `custom_user` - `manager` This value can be `null` |
| `approver_id` | The ID of the approver This value can be `null` |
| `approver_username` | The username of the approver This value can be `null` |
| `approval_status` | The status of the approval Possible values: - `approved` |
| `completion_date` | The completion date in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` This value can be `null` |

```json
{
  "event": "checklist.approval.step.submitted",
  "fired_by_batch_action": false,
  "message_id": "wh-1fb64100-7e52-11ee-9ab7-f15508adc694",
  "payload": {
    "fired_at": "2023-11-08 16:16:06",
    "checklist_id": 2,
    "checklist_name": "Test1",
    "schedule_type": "course",
    "assignment_id": 1,
    "assignment_start_date": "2023-11-08 16:11:42",
    "assignment_end_date": null,
    "evaluator_id": 13436,
    "evaluator_username": "helen.harris",
    "evaluation_type": "self",
    "evaluated_id": 13436,
    "evaluated_username": "test",
    "evaluation_score": null,
    "evaluation_status": "completed",
    "approval_type": "custom_user",
    "approver_id": 13226,
    "approver_username": "helen.harris",
    "approval_status": "approved",
    "completion_date": "2023-11-08 16:16:06"
  }
}
```

#### Checklist Observation Step Submitted (`checklist.observation.step.submitted`)

DescriptionEventsExample payload

Triggers when an observation checklist observation step is submitted.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `checklist_id` | The ID of the checklist |
| `checklist_name` | The name of the checklist |
| `schedule_type` | The type of the schedule Possible values: - `course` - `anytime` - `timeframe` - `event` |
| `assignment_id` | The ID of the assignment |
| `assignment_start_date` | The starting date of the assignment in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` This value can be `null` |
| `assignment_end_date` | The ending date of the assignment in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` This value can be `null` |
| `evaluator_id` | The ID of the evaluator |
| `evaluator_username` | The username of the evaluator |
| `evaluation_type` | The type of the evaluation Possible values: - `self` - `manager` - `custom_user` |
| `evaluated_id` | The ID of the user being evaluated |
| `evaluated_username` | The username of the user being evaluated |
| `evaluation_score` | The score of the evaluation This value can be `null` |
| `evaluation_status` | The status of the evaluation Possible values: - `completed` |
| `approval_type` | The approval type Possible values: - `custom_user` - `manager` This value can be `null` |
| `approver_id` | The ID of the approver This value can be `null` |
| `approver_username` | The username of the approver This value can be `null` |
| `completion_date` | The completion date in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` This value can be `null` |

```json
{
  "event": "checklist.observation.step.submitted",
  "fired_by_batch_action": false,
  "message_id": "wh-1fb64100-7e52-11ee-9ab7-f15508adc694",
  "payload": {
    "fired_at": "2023-11-08 16:16:06",
    "checklist_id": 2,
    "checklist_name": "Test2",
    "schedule_type": "anytime",
    "assignment_id": 2,
    "assignment_start_date": "2023-11-08 16:11:42",
    "assignment_end_date": null,
    "evaluator_id": 13436,
    "evaluator_username": "jeff.jones",
    "evaluation_type": "custom_user",
    "evaluated_id": 13436,
    "evaluated_username": "test",
    "evaluation_score": null,
    "evaluation_status": "completed",
    "approval_type": null,
    "approver_id": null,
    "approver_username": null,
    "completion_date": "2023-11-08 16:16:06"
  }
}
```

#### Checklist Observation to Complete (`checklist.observation.to.complete`)

DescriptionEventsExample payload

Triggers when an observation checklist has become available for completion.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `checklist_id` | The ID of the checklist |
| `checklist_name` | The name of the checklist |
| `schedule_type` | The type of the schedule Possible values: - `course` - `anytime` - `timeframe` - `event` |
| `assignment_id` | The ID of the assignment |
| `assignment_start_date` | The starting date of the assignment in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` This value can be `null` |
| `assignment_end_date` | The ending date of the assignment in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` This value can be `null` |
| `evaluator_id` | The ID of the evaluator |
| `evaluator_username` | The username of the evaluator |
| `evaluation_type` | The type of the evaluation Possible values: - `self` - `manager` - `custom_user` |
| `evaluated_id` | The ID of the user being evaluated |
| `evaluated_username` | The username of the user being evaluated |
| `approval_type` | The approval type Possible values: - `custom_user` - `manager` This value can be `null` |
| `approver_id` | The ID of the approver This value can be `null` |
| `approver_username` | The username of the approver This value can be `null` |

```json
{
  "event": "checklist.observation.to.complete",
  "fired_by_batch_action": false,
  "message_id": "wh-1fb64100-7e52-11ee-9ab7-f15508adc694",
  "payload": {
    "fired_at": "2023-11-08 16:16:06",
    "checklist_id": 2,
    "checklist_name": "Test2",
    "schedule_type": "anytime",
    "assignment_id": 2,
    "assignment_start_date": "2023-11-08 16:11:42",
    "assignment_end_date": null,
    "evaluator_id": 13436,
    "evaluator_username": "brian.smith",
    "evaluation_type": "custom_user",
    "evaluated_id": 13436,
    "evaluated_username": "test",
    "approval_type": null,
    "approver_id": null,
    "approver_username": null
  }
}
```

### Skills

#### Learner completed content with assigned skills (`skill.object.completed`)

DescriptionEvents

Triggers when a learner has completed content with skills assigned to it.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `id_user` | ID of the user. |
| `object_id` | ID of the content. |
| `object_type` | Type of content. **Value:** - `course` |
| `name` | Title of the content. |
| `skills` | Skills associated with the content. - `code` - ID of the skill. - `name` - name of the skill. |

### Training materials

#### An assignment has been submitted (`lo.assignment.submission`)

DescriptionEvents

Triggers when an assignment has been submitted.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `submission_id` | ID of the assignment submission created by the learner. |
| `creation_date` | The date and time when the submission was generated in UTC **Format**: `YYYY-MM-DD HH:ii:ss` |
| `user_id` | ID of the learner submitting the assignment. |
| `lo_id` | ID of the assignment training material. |
| `lo_name` | Title of the assignment training material. |
| `name` | Title for the submission, as defined by the learner. |
| `description` | Comments added by the learner along with the submission. |
| `course_id` | ID of the course where the assignment training material was created. |
| `files` | One or more uploaded files. - `url` - Hashed filename generated by the platform. - `filename` - Original file name, as defined by the learner. |

#### An assignment tracking has been reset (`lo.assignment.submission.reset`)

DescriptionEvents

Triggers when an assingment tracking has been reset.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `submission_id` | ID of the assignment submission created by the learner. |
| `user_id` | ID of the learner submitting the assignment. |
| `lo_id` | ID of the assignment training material. |
| `lo_name` | Name of the assignment training material. |
| `name` | Title for the assignment submission as given by the learner. |
| `description` | Comments added by the learner along with the submission. |
| `creation_date` | The date when the assignment was submitted in UTC **Format**: `YYYY-MM-DD HH:ii:ss` |
| `course_id` | ID of the course where the assignment training material was created. |
| `files` | One or more uploaded files. - `url` - Hashed assignment filename. - `filename` - Original filename as uploaded by the learner. |

#### Assignment has been evaluated (`lo.assignment.evaluation`)

DescriptionEvents

Triggers when an assignment has been evaluated.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `instructor_id` | The ID of the instructor who evaluated this assignment. |
| `submission_id` | ID of the assignment submission evaluated by the instructor |
| `user_id` | ID of the learner in evaluation by the instructor |
| `lo_id` | ID of the assignment training material |
| `lo_name` | The name of the assignment training material. |
| `course_id` | ID of the course where the assignment training material was created |
| `score` | The score given by the instructor. - The allowed range is: `0` - `100` - The default value is "0". |
| `comment` | The evaluation comments written by the instructor |
| `allow_reupload` | A boolean value sets whether the learner is allowed to submit again the assignment when failed. The default value is `true`. |
| `status` | The evaluation status. **Possible values are**: - `failed` - `passed` |
| `url` | A hashed filename of the instructor’s evaluation report. |
| `filename` | The original filename, as uploaded by the instructor |

#### Training material has been created in a course (`course.trainingmaterial.created`)

DescriptionEvents

Triggers when new training material has been created in a course.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | ID of the user who created the training material. |
| `username` | Username of the user who created the training material. |
| `course_id` | ID of the course where the training material was created. |
| `course_name` | Title of the course where the training material was created. |
| `training_material_name` | Title of the newly created training material. |
| `training_material_type` | Type of training material. **Possible values are**: - `scorm` - `aicc` - `tincan_xapi` - `video` - `file` - `assignment` - `elucidat` - `google_drive` - `lti` - `otj` - `slides_converter` - `html` - `survey` - `test` |
| `training_material_id` | ID of the newly created training material. |

#### Training material has been updated in a course (`course.trainingmaterial.updated`)

DescriptionEvents

Triggers when training material has been updated in a course.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | ID of the user who updated the training material. |
| `username` | Username of the user who updated the training material. |
| `course_id` | ID of the course where the training material was updated. |
| `course_name` | Title of the course where the training material was updated. |
| `training_material_name` | Title of the updated training material. |
| `training_material_type` | Type of training material. **Possible values are**: - `scorm` - `aicc` - `tincan_xapi` - `video` - `file` - `assignment` - `elucidat` - `google_drive` - `lti` - `otj` - `slides_converter` - `html` - `survey` - `test` |
| `training_material_id` | ID of the updated training material. |
| `user_play_count` | Number of users who played the training material. |

#### Training material has been deleted from a course (`course.trainingmaterial.deleted`)

DescriptionEvents

Triggers when a training material has been deleted from a course.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | The ID of the user who deleted the training material. |
| `username` | The username of the user who deleted the training material. |
| `course_id` | The ID of the course from where the training material was deleted. |
| `course_name` | The title of the course from where the training material was deleted. |
| `training_material_name` | The title of the deleted training material. |
| `training_material_type` | The type of training material. **Possible values are**: - `scorm` - `aicc` - `tincan_xapi` - `video` - `file` - `assignment` - `elucidat` - `google_drive` - `lti` - `otj` - `slides_converter` - `html` - `survey` - `test` |
| `training_material_id` | ID of the deleted created training material. |

#### Training material status has changed (`trainingmaterial.playstatus.updated`)

DescriptionEvents

Triggers when the status of a training material has changed.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | ID of the user whose action changed the status of the training material. |
| `username` | Username of the user whose action changed the status of the training material. |
| `course_id` | ID of the course where the status of the training material changed. |
| `course_name` | Title of the course where the status of the training material changed. |
| `course_type` | Type of course to which the training material with changed status. **Possible values are**: - `elearning` - `classroom` |
| `training_material_name` | Title of the training material with changed status. |
| `training_material_type` | The type of training material. **Possible values are**: - `scorm` - `aicc` - `tincan_xapi` - `video` - `file` - `assignment` - `elucidat` - `google_drive` - `lti` - `otj` - `slides_converter` - `html` - `survey` - `test` |
| `training_material_id` | ID of the training material with changed status. |
| `training_material_status` | New status of the training material. **Possible values are**: - `not_started` - `in_progress` - `failed` - `completed` |

#### Training material has been assigned to a course from the Central repository (`tmrepo.course.trainingmaterial.added`)

DescriptionEvents

Triggers when training material in the Central repository has been assigned to a course.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | ID of the user who assigned the training material to the course from the Central repository. |
| `username` | Username of the user who assigned the training material to the course from the Central repository. |
| `course_id` | ID of the course to which the training material was assigned from the Central repository. |
| `course_name` | Title of the course to which the training material was assigned from the Central repository. |
| `course_type` | The type of course to which the training material was assigned from the Central repository. **Possible values are**: - `elearning` - `classroom` |
| `training_material_name` | Title of the training material assigned to the course from the Central repository. |
| `training_material_type` | The type of training material. **Possible values are**: - `scorm` - `aicc` - `tincan_xapi` - `video` - `file` - `assignment` - `elucidat` - `google_drive` - `lti` - `otj` - `slides_converter` - `html` - `survey` - `test` |
| `training_material_id` | ID of the training material assigned to the course from the Central repository. |
| `training_material_version_id` | Version ID of the training material assigned to the course from the Central repository. |
| `training_material_version_name` | Version name of the training material coming from the Central repository that was removed from the course. |

#### Training material coming from the Central repository has been removed from a course (`tmrepo.course.trainingmaterial.removed`)

DescriptionEvents

Triggers when training material in the Central repository has been removed from a course.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | ID of the user who removed the training material coming from the Central repository from the course. |
| `username` | Username of the user who removed the training material coming from the Central repository from the course. |
| `course_id` | ID of the course from which the training material coming from the Central repository was removed. |
| `course_name` | Title of the course from which the training material coming from the Central repository was removed. |
| `course_type` | Type of course from which the training material coming from the Central repository was removed. **Possible values are**: - `elearning` - `classroom` |
| `training_material_name` | Title of the training material coming from the Central repository that was removed from the course. |
| `training_material_type` | Type of training material. **Possible values are**: - `scorm` - `aicc` - `tincan_xapi` - `video` - `file` - `assignment` - `elucidat` - `google_drive` - `lti` - `otj` - `slides_converter` - `html` - `survey` - `test` |
| `training_material_id` | ID of the training material coming from the Central repository that was removed from the course. |
| `training_material_version_id` | Version ID of the training material coming from the Central repository that was removed from the course. |
| `training_material_version_name` | Version name of the training material assigned to the course from the Central repository. |
| `user_play_count` | Number of users who played the training material. |

#### Training material coming from the Central repository has been updated in a course (`tmrepo.course.trainingmaterial.updated`)

DescriptionEvents

Triggers when training material in the Central repository has been updated in a course.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | ID of the user who removed the training material coming from the Central repository from the course. |
| `username` | Username of the user who removed the training material coming from the Central repository from the course. |
| `training_material_name` | Title of the training material coming from the Central repository that was removed from the course. |
| `training_material_type` | Type of training material. **Possible values are**: - `scorm` - `aicc` - `tincan_xapi` - `video` - `file` - `assignment` - `elucidat` - `google_drive` - `lti` - `otj` - `slides_converter` - `html` - `survey` - `test` |
| `training_material_id` | ID of the training material coming from the Central repository that was removed from the course. |
| `assigned_courses_count` | Number of assigned courses |
| `versions_count` | Number of versions |
| `user_play_count` | Number of users who played the training material. |

### Transactions

#### Transaction created (`ecommerce.transaction.created`)

DescriptionEvents

Triggers when a transaction is created

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `transaction_id` | Transaction ID, automatically assigned by the platform. |
| `user_id` | ID of the user who executed the transaction. |
| `transaction_date` | The transaction date and time in UTC. **Format**: `yyyy-dd-mm hh:mm:ss` |
| `payment_type` | Payment type used to settle the transaction. |
| `external_transaction_id` | Transaction ID on the payment gateway side (not always present). |
| `payment_status` | Payment status. **Possible values are**: - `successful` - `failed` - `pending` - `canceled` |
| `total_paidamount` | The total amount paid for the transaction. |
| `currency` | Currency used to settle the transaction. |

#### Transaction deleted (`ecommerce.transaction.deleted`)

DescriptionEvents

Triggers when a transaction is deleted.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `transaction_id` | Transaction ID, automatically assigned by the platform. |
| `user_id` | ID of the user who executed the transaction. |
| `transaction_date` | The transaction date and time in UTC. **Format**: `yyyy-dd-mm hh:mm:ss` |
| `payment_type` | Payment type used to settle the transaction. |
| `external_transaction_id` | Transaction ID on the payment gateway side (not always present). |
| `payment_status` | Payment status, always set to `canceled`. |
| `total_paidamount` | Total amount paid for the transaction. |

#### Transaction updated (`ecommerce.transaction.updated`)

DescriptionEvents

Triggers when a transaction is updated.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `transaction_id` | Transaction ID, automatically assigned by the platform. |
| `user_id` | ID of the user who executed the transaction. |
| `transaction_date` | The transaction date and time in UTC. **Format**: `yyyy-dd-mm hh:mm:ss` |
| `payment_type` | Payment type used to settle the transaction. |
| `external_transaction_id` | Transaction ID on the payment gateway side (not always present). |
| `payment_status` | Payment status, always set to `canceled`. |
| `total_paidamount` | The total amount paid for the transaction. |

### Users

#### Registration request sent (`user.selfregistrationrequest.sent`)

DescriptionEvents

Triggers when a user requests to self-register in the platform.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | ID of the user requesting to self-register in the platform. |
| `username` | Username of the user requesting to self-register in the platform. |
| `level` | Level of the user requesting to self-register. |
| `email` | Email of the user requesting to self-register. |
| `firstname` | First name of the user requesting to self-register. |
| `lastname` | Last name of the user requesting to self-register. |

#### Registration confirmed (`user.selfregistrationrequest.approved`)

DescriptionEvents

Triggers when a user’s request to self-register in the platform is approved.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | ID of the user requesting to self-register. |
| `username` | Username of the user requesting to self-register. |
| `level` | Level of the user requesting to self-register. |
| `email` | Email of the user requesting to self-register. |
| `approval_time` | The timestamp when the Superadmin approves the user's self-registration. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `firstname` | First name of the user requesting to self-register. |
| `lastname` | Last name of the user requesting to self-register. |

#### User has been created (`user.created`)

DescriptionEvents

Triggers when a user has been created.

| Property | Description |
| --- | --- |
| `user_id` | ID for the new user. |
| `username` | Username of the new user |
| `email` | Email for the newly created user (can be `null`or empty). |
| `creation_date` | The date of creation for the user in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `expiration_date` | The date of expiration for the user in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `level` | Level of the user created. **Possible values are**: - `superadmin` - `poweruser` - `user` |
| `firstname` | The first name of the user (can be `null`). |
| `lastname` | The last name of the user (can be `null`). |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `provisioned` | Identity Provider (IdP) with which the newly created user has been provisioned. **Possible values are:** - `saml` if the user was provisioned using SAML. - `null` if the user was manually created or was provisioned with an IdP different from SAML. |
| `extra_data` | - `additional_fields` - Additional field language in the platform's default language. - `language` - Field language - `List` - `id` - Additional field ID - `name` - Additional field name in the platform default language defined in the [Localization tool (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020084500-Managing-the-Localization-Tool-Platform-Languages). - `value` - Additional field value. |

#### User has been deactivated (`user.deactivated`)

DescriptionEvents

Triggers when a user has been deactivated.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | Deactivated user ID. |
| `username` | Username of the user. |
| `email` | Email of the deactivated user (can be `null`or empty). |
| `deactivation_date` | The date of the deactivation of the user in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `expiration_date` | The date of expiration for the user in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `level` | Level of the deactivated user. |
| `firstname` | The first name of the user (can be `null`or empty). |
| `lastname` | The last name of the user (can be `null`or empty). |
| `extra_data` | - `additional_fields` - Additional field language in the platform's default language. - `language` - Field language - `List` - `id` - Additional field ID - `name` - Additional field name in the platform default language defined in the [Localization tool (opens in a new tab)](https://help.docebo.com/hc/en-us/articles/360020084500-Managing-the-Localization-Tool-Platform-Languages). - `value` - Additional field value. |

#### User has been deleted (`user.deleted`)

DescriptionEvents

Triggers when a user has been deleted.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | ID of the deleted user. |
| `username` | Username of the deleted user. |
| `deletion_date` | The date of deletion of the user in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |

#### User has been modified (`user.updated`)

DescriptionEvents

Triggers when a user has been modified.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | ID of the updated user. |
| `username` | Username of the updated user. |
| `email` | Email of the updated user (can be `null` or empty). |
| `update_date` | The date of the update in UTC **Format**: `YYYY-MM-DD HH:mm:ss` |
| `expiration_date` | The date of expiration for the user in UTC **Format**: `YYYY-MM-DD HH:mm:ss` |
| `level` | Level of the updated user. |
| `firstname` | First name of the user (can be `null` or empty). |
| `lastname` | Last name of the user (can be `null` or empty). |
| `extra_data` | `additional_fields` - additional field language in the platform default language - `language` - fields language - `List` - `id` - additional field ID - `name` - additional field name, in the platform default language defined in the Localization Tool - `value` - additional field value |

#### User has been re-activated (`user.reactivated`)

DescriptionEvents

Triggers when a user has been re-activated.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | ID of the reactivated user. |
| `username` | Username of the reactivated user. |
| `email` | Email of the reactivated user (can be `null` or empty). |
| `reactivation_date` | The date when the user is reactivated in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `expiration_date` | The date of expiration for the user in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `level` | Level of the reactivated user. |
| `firstname` | First name of the reactivated user (can be `null` or empty). |
| `lastname` | Last name of the reactivated user (can be `null` or empty). |

#### User registered into the platform (`user.selfregistered`)

DescriptionEvents

Triggers when a user has self-registered into the platform.

| Property | Description |
| --- | --- |
| `fired_at` | The date and time of the moment the event was fired in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `user_id` | ID of the user. |
| `username` | Username of the user. |
| `email` | Email of the user (can be `null` or empty). |
| `creation_date` | The date of creation for the user in UTC. **Format**: `YYYY-MM-DD HH:mm:ss` |
| `level` | The level of the user. **Possible values are**: - `superadmin` - `poweruser` - `user` |
| `firstname` | First name of the user (can be `null` or empty). |
| `lastname` | Last name of the user (can be `null` or empty). |

A webhook is a method for one application to automatically send real-time data to another application when a specific event occurs. It acts as a user-defined HTTP callback, triggered by events, rather than the traditional polling method where applications repeatedly query for updates.

An asset is the term used to refer to any content, such as files or links, that is uploaded and published as a contribution for informal learning. Assets can be shared, organized into playlists, and viewed by other learners.

A background job is a mass action within the Docebo platform that is processed in the background, allowing a user to continue working, log out, or close their browser. Common examples include importing large lists of users, courses, or training materials.

A branch in Docebo is a way to organize users in a hierarchical structure that mirrors a company's organizational chart. Each branch or sub-branch can represent a department, team, or any other unit. Users can only be assigned to a single branch, and this structure can be used to manage permissions, enrollments, and content visibility.

## Related

- [Creating and managing webhooks](/creating-and-managing-webhooks.md)
