Reference
Event types
Every webhook event, who can subscribe to it and what its data holds.
Every event is delivered in the same envelope: id, type, created_at, org_id, workspace_id and data. How to receive and verify them is in Webhooks. The shape of data depends on the type, as listed here.
{
"id": "evt_0192a7c4-5d00-7b88-8f99-a0b1c2d3e001",
"type": "comment.created",
"created_at": "2026-11-02T09:00:00Z",
"org_id": "0192a7c1-5d2e-7a10-9c4b-2f6e8d1a3b01",
"workspace_id": "0192a7c1-5d2e-7a10-9c4b-2f6e8d1a3b02",
"data": { "comment": { "…": "…" } }
}Who can subscribe:
- Org: an org subscription (
/v1/webhook-subscriptions) takes the org events below. - Partner: a partner subscription (
/v1/partner/webhook-subscriptions) takes the partner events, and the org events too if the partner is in operator mode. It then gets the org events of all its orgs.
Events that are not sent yet can still be subscribed to. Ignore event types you do not know; more will be added.
Accounts
data is { "account": SocialAccount }. Org events.
| Type | Sent when |
|---|---|
account.connected |
A user finished a connect session and the account was connected, or a reconnect refreshed an existing one. |
account.needs_reauth |
The platform stopped accepting the account's credential (expired, revoked, or a permission was removed). Publishing and replies fail with account_needs_reauth until you reconnect. |
account.disconnected |
The account was disconnected through the API, or the user removed the app on the platform. Its tokens are deleted and its history kept. |
Posts
| Type | Sent when | data |
|---|---|---|
post.published |
Every target of the post is published. | { "post": PostSummary } |
post.partially_published |
Some targets are published and some failed (status PARTIAL). Failed targets can be retried. |
{ "post": PostSummary } |
post.failed |
No target could be published. | { "post": PostSummary } |
post.target.published |
One account's copy of the post is live. | { "post_id", "target": PostTarget } |
post.target.failed |
One account's copy of the post failed; target.error says why. |
{ "post_id", "target": PostTarget } |
These are org events. A PostSummary is { id, workspace_id, status, targets: [{ id, account_id, status, external_post_id, permalink }] }. It is not the whole post: fetch GET /v1/posts/{postId} for the text, media and errors. external_post_id and permalink are empty strings when not known.
Comments
data is { "comment": Comment }, the comment as it now stands. Org events.
| Type | Sent when |
|---|---|
comment.created |
A new comment on one of the org's posts, including replies and comments posted through the API (is_own: true). |
comment.updated |
The text changed, the comment was unhidden, or a LinkedIn organization commenter's name was filled in. |
comment.hidden |
The comment was hidden on the platform. |
comment.deleted |
The comment was deleted on the platform, by its author, the page or the API. |
Conversations and messages
Org events.
| Type | Sent when | data |
|---|---|---|
conversation.created |
Someone wrote to one of the org's accounts for the first time. | { "conversation": Conversation } |
message.received |
An incoming message. | { "conversation_id", "message": Message } |
message.sent |
An outgoing message reached the platform, whether sent through the API or from the platform's own inbox. | { "conversation_id", "message": Message } |
message.delivered |
The platform reports the message delivered. | { "conversation_id", "message": Message } |
message.read |
The person read the message. | { "conversation_id", "message": Message } |
message.failed |
The message could not be sent; message.error.code says why. send_outcome_unknown means we never learned whether it arrived. |
{ "conversation_id", "message": Message } |
Plan limits
Subscribable now, not sent yet. Calls that would go over a limit already answer 402 quota_exceeded.
| Type | Audience | data |
|---|---|---|
quota.warning |
Org events | { "limit", "used", "max" }: a plan limit is at 80%. |
quota.exceeded |
Org events | { "limit", "used", "max" }: a plan limit is reached. |
org.quota.warning |
Partner events | { "org_id", "limit", "used", "max" } |
org.quota.exceeded |
Partner events | { "org_id", "limit", "used", "max" } |
Orgs and usage
Partner events. For org.*, data is { "org": Org }, the partner's view of the org, with counts only.
| Type | Sent when |
|---|---|
org.created |
One of your orgs was created. |
org.updated |
Its name, plan, timezone or external_ref changed. |
org.suspended |
Its Content API calls now answer 403 org_suspended. |
org.resumed |
The org is active again. |
org.closed |
The org was closed for good. |
org.transferred_out |
The org moved to another partner. This is the last event you get about it. |
usage.daily_ready |
Once a day, after the previous UTC day is counted: { "day", "totals" } across all your orgs. org_id is null. See Billing and usage. |
Webhooks
| Type | Audience | Sent when |
|---|---|---|
webhook.disabled |
Org and partner | A subscription was disabled after 20 dead deliveries in a row. It goes to the same owner's other active subscriptions. data is { "subscription_id", "reason" }. Re-enable with PATCH and "status": "ACTIVE". |
webhook.test |
Not subscribable | A test delivery from POST …/webhook-subscriptions/{subscriptionId}/test. data is { "subscription_id", "message" }. It is not stored or retried. |
Next: Error codes