# Webhook events

> The 18 Xholic event types sent to webhooks and the events feed: posts published, leads found, DMs received, Worker drafts ready and more.

Source: https://docs.xholic.ai/webhooks/events/

Each endpoint picks the events it wants. The same events are in the [events feed](/webhooks/events-feed/) and in `get_updates` on MCP.

| Event | When it fires |
| --- | --- |
| `post.published` | A scheduled or queued post went live on X. |
| `post.failed` | X rejected a post. The payload carries the reason. |
| `post.outperforming` | A recent post reached at least 2× the account's normal impressions. Fires once per post, after metrics sync. |
| `post.automation_ran` | An auto-repost, auto-plug or auto-DM ran on a post. |
| `article.published` | An X Article went live. |
| `mention.received` | Someone mentioned the account. Arrives at the plan's mention sync cadence. |
| `reply.received` | Someone replied to the account's post. Arrives at the sync cadence. |
| `lead.found` | A Signals agent found a lead. |
| `dm.received` | A direct message arrived. |
| `dm.campaign_completed` | A DM campaign finished sending. |
| `contacts.import_completed` | A follower or list import finished. |
| `ask.task_completed` | A job handed to Xholic with ask_xholic or draft_with_xholic finished, failed or was cancelled. |
| `worker.batch_ready` | A Worker run finished and drafts are waiting for review. |
| `credits.low` | AI credits fell below 10% of the plan's monthly amount. |
| `x_account.reconnect_needed` | X access expired. The owner must reconnect the account in Xholic. |
| `subscription.changed` | The subscription started, ended, paused, resumed or lapsed. |
| `connection.revoked` | An API key or OAuth app was revoked. |
| `webhook.test` | A test event sent from Settings. |

Every event uses the envelope shown in [Webhooks](/webhooks/#what-arrives): `id`, `type`, `occurred_at`, `account`, `data` and `api_version`.
