Content Subscription Events
Subscription key: content_subscription
All events on this page are delivered to the URL configured under content_subscription. This subscription covers event namespaces: content lifecycle, pages, posts, comments, and moderation. Notification events are delivered via a separate notification_subscription.
content.* - Content Lifecycle Events
Fired when a content item changes state in the content library.
Event types: content.created · content.updated · content.published · content.deleted · content.archived · content.restored
| Field | Type | Nullable | Description |
|---|---|---|---|
eventType |
string | No | One of the 6 content event types listed above |
tenantId |
string | No | Your Thrive tenant identifier |
content |
object | No | The content item |
content.id |
string | No | Content item ID |
content.title |
string | Yes | Content title. May be null if the lookup failed at dispatch time |
content.type |
string | Yes | Content type (e.g. course, pathway). May be null if the lookup failed |
content.urls |
string[] | No | Full URLs to the content item on each of your configured tenant domains |
user |
object | Yes | User who triggered the event. Omitted if no user was associated with the event |
user.id |
string | Yes | User ID |
user.reference |
string | Yes | External reference (e.g. HR system ID) |
user.email |
string | Yes | User email address |
user.firstName |
string | Yes | User’s first name |
user.lastName |
string | Yes | User’s last name |
createdAt |
string | No | ISO 8601 timestamp of when the event occurred on the platform |
dispatchedAt |
string | No | ISO 8601 timestamp of when this webhook was dispatched |
Example payload (content.published):
{
"eventType": "content.published",
"tenantId": "acme-corp",
"content": {
"id": "64a1b2c3d4e5f6789abcdef0",
"title": "Health & Safety Induction",
"type": "course",
"urls": ["https://acme.learn.link/content/64a1b2c3d4e5f6789abcdef0"]
},
"user": {
"id": "usr_abc123",
"reference": "EMP-00042",
"email": "jane.smith@acme.com",
"firstName": "Jane",
"lastName": "Smith"
},
"createdAt": "2024-03-15T10:30:00.000Z",
"dispatchedAt": "2024-03-15T10:30:01.234Z"
}
page.* — Page Events
Fired when a community or content page changes state.
Event types: page.published · page.deleted · page.archived
| Field | Type | Nullable | Description |
|---|---|---|---|
eventType |
string | No | One of the 3 page event types |
tenantId |
string | No | Your Thrive tenant identifier |
page |
object | No | The page |
page.id |
string | No | Page ID |
page.title |
string | Yes | Page title |
page.type |
string | Yes | Page type |
page.urls |
string[] | No | Full URLs to the page on each of your configured tenant domains |
createdAt |
string | No | ISO 8601 timestamp of when the event occurred on the platform |
dispatchedAt |
string | No | ISO 8601 timestamp of when this webhook was dispatched |
Example payload:
{
"eventType": "page.published",
"tenantId": "acme-corp",
"page": {
"id": "pg_abc123",
"title": "Company Announcements",
"type": "community",
"urls": ["https://acme.learn.link/pages/pg_abc123"]
},
"createdAt": "2024-03-15T10:30:00.000Z",
"dispatchedAt": "2024-03-15T10:30:01.234Z"
}
post.* — Post Events
Fired when a post within a community page is created, changed, or interacted with.
Event types: post.posted · post.updated · post.deleted · post.liked · post.unliked · post.pinned · post.unpinned · post.users-mentioned
| Field | Type | Nullable | Description |
|---|---|---|---|
eventType |
string | No | One of the 8 post event types |
tenantId |
string | No | Your Thrive tenant identifier |
post |
object | No | The post |
post.id |
string | No | Post ID |
post.title |
string | Yes | Post title |
page |
object | No | The parent page |
page.id |
string | No | ID of the page the post belongs to |
page.title |
string | Yes | Title of the parent page |
page.contentType |
string | Yes | Content type of the parent page |
page.urls |
string[] | No | Full URLs to the parent page on each of your configured tenant domains |
user |
object | Yes | The user who triggered the event. May be absent if user data unavailable |
user.id |
string | Yes | User ID |
user.reference |
string | Yes | External reference (e.g. HR system ID) |
user.email |
string | Yes | User email address |
user.firstName |
string | Yes | User’s first name |
user.lastName |
string | Yes | User’s last name |
users |
object[] | Yes | Additional users relevant to the event (e.g. users mentioned). May be empty |
users[].id |
string | Yes | User ID |
users[].reference |
string | Yes | External reference (e.g. HR system ID) |
users[].email |
string | Yes | User email address |
users[].firstName |
string | Yes | User’s first name |
users[].lastName |
string | Yes | User’s last name |
createdAt |
string | No | ISO 8601 timestamp of when the event occurred on the platform |
dispatchedAt |
string | No | ISO 8601 timestamp of when this webhook was dispatched |
Example payload (post.users-mentioned):
{
"eventType": "post.users-mentioned",
"tenantId": "acme-corp",
"post": {
"id": "post_xyz789",
"title": "Welcome to the team!"
},
"page": {
"id": "pg_abc123",
"title": "Company Announcements",
"contentType": "community",
"urls": ["https://acme.learn.link/pages/pg_abc123"]
},
"user": {
"id": "usr_abc123",
"reference": "EMP-00042",
"email": "jane.smith@acme.com",
"firstName": "Jane",
"lastName": "Smith"
},
"users": [
{
"id": "usr_def456",
"reference": "EMP-00043",
"email": "john.doe@acme.com",
"firstName": "John",
"lastName": "Does"
},
{
"id": "usr_ghi789",
"reference": "EMP-00044",
"email": "alice.jones@acme.com",
"firstName": "Alice",
"lastName": "Jones"
}
],
"createdAt": "2024-03-15T10:30:00.000Z",
"dispatchedAt": "2024-03-15T10:30:01.234Z"
}
comment.* — Comment Events
Fired when a user replies to a comment, mentions someone in a comment, or likes a comment on a post.
Event types: comment.replied · comment.mentioned · comment.liked
| Field | Type | Nullable | Description |
|---|---|---|---|
eventType |
string | No | One of the 3 comment event types |
tenantId |
string | No | Your Thrive tenant identifier |
post |
object | No | The post |
post.id |
string | No | ID of the post the comment belongs to |
page |
object | No | The parent page |
page.id |
string | No | ID of the page |
page.title |
string | Yes | Title of the parent page |
page.urls |
string[] | No | Full URLs to the parent page on each of your configured tenant domains |
comment |
object | Yes | The comment. May be absent if the source event did not include it |
comment.author.id |
string | No | Author's user ID |
comment.author.reference |
string | Yes | External reference (e.g. HR system ID) |
comment.author.email |
string | Yes | Author email address |
comment.author.firstName |
string | Yes | Author's first name |
comment.author.lastName |
string | Yes | Author's last name |
comment.text |
string | No | Comment body text |
user |
object | Yes | The user who triggered the event. May be absent if user data unavailable |
user.id |
string | Yes | User ID |
user.reference |
string | Yes | External reference (e.g. HR system ID) |
user.email |
string | Yes | User email address |
user.firstName |
string | Yes | User’s first name |
user.lastName |
string | Yes | User’s last name |
users |
object[] | Yes | Additional users relevant to the event (e.g. users mentioned). May be empty |
users[].id |
string | Yes | User ID |
users[].reference |
string | Yes | External reference (e.g. HR system ID) |
users[].email |
string | Yes | User email address |
users[].firstName |
string | Yes | User’s first name |
users[].lastName |
string | Yes | User’s last name |
repliedToUser |
object | Yes | The user being replied to. Present on comment.replied events |
repliedToUser.id |
string | Yes | User ID |
repliedToUser.reference |
string | Yes | External reference (e.g. HR system ID) |
repliedToUser.email |
string | Yes | User email address |
repliedToUser.firstName |
string | Yes | User’s first name |
repliedToUser.lastName |
string | Yes | User’s last name |
createdAt |
string | No | ISO 8601 timestamp of when the event occurred on the platform |
dispatchedAt |
string | No | ISO 8601 timestamp of when this webhook was dispatched |
Example payload (comment.replied):
{
"eventType": "comment.replied",
"tenantId": "acme-corp",
"post": { "id": "post_xyz789" },
"page": {
"id": "pg_abc123",
"title": "Company Announcements",
"urls": ["https://acme.learn.link/pages/pg_abc123"]
},
"comment": {
"author": {
"id": "usr_abc123",
"reference": "EMP-00042",
"email": "jane.smith@acme.com",
"firstName": "Jane",
"lastName": "Smith"
},
"text": "Great point, totally agree!"
},
"user": {
"id": "usr_abc123",
"reference": "EMP-00042",
"email": "jane.smith@acme.com",
"firstName": "Jane",
"lastName": "Smith"
},
"repliedToUser": {
"id": "usr_def456",
"reference": "EMP-00043",
"email": "john.doe@acme.com",
"firstName": "John",
"lastName": "Does"
},
"users": [],
"createdAt": "2024-03-15T10:30:00.000Z",
"dispatchedAt": "2024-03-15T10:30:01.234Z"
}
moderation.* — Moderation Events
Fired when a post or comment is flagged for moderation.
Event types: moderation.post-flagged · moderation.comment-flagged
| Field | Type | Nullable | Description |
|---|---|---|---|
eventType |
string | No | moderation.post-flagged or moderation.comment-flagged |
tenantId |
string | No | Your Thrive tenant identifier |
user |
object | Yes | The user who was flagged, omitted if no user associated |
user.id |
string | No | User ID |
user.reference |
string | Yes | External reference (e.g. HR system ID) |
user.email |
string | Yes | User email address |
user.firstName |
string | Yes | User’s first name |
user.lastName |
string | Yes | User’s last name |
flag |
object | No | Details of the flag raised |
flag.id |
string | No | Flag ID |
flag.type |
string | No | Flag type |
flag.reason |
string | Yes | Reason provided by the reporter |
flag.message |
string | Yes | Additional message from the reporter |
flag.status |
string | Yes | Current flag status |
flag.reporterId |
string | Yes | ID of the user who raised the flag |
flag.reportedUserId |
string | Yes | ID of the user who was reported |
flag.createdAt |
string | Yes | ISO 8601 timestamp of when the flag was raised |
content |
object | No | The content item that was flagged |
content.id |
string | No | Content ID |
content.title |
string | Yes | Content title |
content.pageId |
string | No | Page ID |
content.pageTitle |
string | Yes | Page title |
content.contentType |
string | Yes | Content type |
urls |
string[] | No | Full URLs to the parent page on each of your configured tenant domains |
createdAt |
string | No | ISO 8601 timestamp of when the event occurred on the platform |
dispatchedAt |
string | No | ISO 8601 timestamp of when this webhook was dispatched |
Example payload (moderation.post-flagged):
{
"eventType": "moderation.post-flagged",
"tenantId": "acme-corp",
"user": {
"id": "usr_abc123",
"reference": "EMP-00042",
"email": "jane.smith@acme.com",
"firstName": "Jane",
"lastName": "Smith"
},
"flag": {
"id": "flag_001",
"type": "inappropriate",
"reason": "Offensive language",
"message": "This post contains inappropriate content",
"status": "open",
"reporterId": "usr_abc123",
"reportedUserId": "usr_def456",
"createdAt": "2024-03-15T10:30:00.000Z"
},
"content": {
"id": "post_xyz789",
"title": "Controversial post",
"pageId": "pg_abc123",
"pageTitle": "Company Announcements",
"contentType": "community"
},
"urls": ["https://acme.learn.link/pages/pg_abc123"],
"createdAt": "2024-03-15T10:30:00.000Z",
"dispatchedAt": "2024-03-15T10:30:01.234Z"
}