X · AsyncAPI Specification
X Webhooks
Version
View Spec
View on GitHub
SocialSocial-MediaPostsUserDirect MessagesStreamingWebhookReal-TimeTrendsMediaSpacesContentConversationAgentsMCPAsyncAPIEvents
AsyncAPI Specification
generated: '2026-08-28'
method: searched
source: >-
https://docs.x.com/x-api/activity/introduction.md,
https://docs.x.com/x-api/getting-started/pricing.md,
openapi/_original/x-api-v2-openapi.json
docs: https://docs.x.com/x-api/webhooks/introduction
description: >-
X's event and real-time surface. X publishes NO AsyncAPI document (https://docs.x.com/asyncapi.yaml
returns 404), so this is a webhook + streaming catalog assembled from X's own event tables
and the webhook management operations in its OpenAPI. Nothing here is fabricated; event
names come from the X Activity API documentation and the billing table.
asyncapi_document: null
asyncapi_probe:
url: https://docs.x.com/asyncapi.yaml
status: 404
delivery_mechanisms:
- name: Webhooks
description: HTTP callbacks registered against a webhook URL, with CRC validation and replay.
docs: https://docs.x.com/x-api/webhooks/introduction
- name: Persistent HTTP stream
description: X Activity API events delivered over a long-lived HTTP connection.
operation: activityStream
- name: Filtered stream
description: Rule-driven real-time Post stream with up to 1000 rules and 250 posts/sec delivery.
operations: [streamPosts, getRules, updateRules, getRuleCounts]
- name: Volume streams
description: Sampled and firehose streams for Posts and Likes.
operations: [streamPostsSample, streamPostsSample10, streamPostsFirehose, streamLikesFirehose, streamLikesSample10]
- name: Compliance streams
description: Deletion, edit and withheld-content compliance events.
operations: [streamPostsCompliance, streamUsersCompliance, streamLikesCompliance, streamLabelsCompliance]
management_operations:
- operationId: createWebhooks
path: POST /2/webhooks
- operationId: getWebhooks
path: GET /2/webhooks
- operationId: deleteWebhooks
path: DELETE /2/webhooks/{webhook_id}
- operationId: validateWebhooks
path: PUT /2/webhooks/{webhook_id}
- operationId: createWebhookReplayJob
path: POST /2/webhooks/replay
- operationId: createActivitySubscription
path: POST /2/activity/subscriptions
- operationId: getActivitySubscriptions
path: GET /2/activity/subscriptions
- operationId: updateActivitySubscription
path: PUT /2/activity/subscriptions/{subscription_id}
- operationId: deleteActivitySubscription
path: DELETE /2/activity/subscriptions/{subscription_id}
- operationId: createWebhooksStreamLink
path: POST /2/tweets/search/webhooks/{webhook_id}
- operationId: deleteWebhooksStreamLink
path: DELETE /2/tweets/search/webhooks/{webhook_id}
- operationId: getWebhooksStreamLinks
path: GET /2/tweets/search/webhooks
subscription_filters: [user_id, direction]
events:
- name: post.create
category: Post
filter: user_id
billed: '0.005'
description: Fired when the filtered user creates a Post — standalone, reply, quote or repost.
- name: post.delete
category: Post
filter: user_id
billed: null
description: Fired when the filtered user deletes a Post.
- name: post.mention.create
category: Post
filter: user_id
description: Fired when another user explicitly @mentions the filtered user in a Post body.
- name: follow.follow
category: Connection
billed: '0.010'
- name: follow.unfollow
category: Connection
billed: '0.010'
- name: mute.mute
category: Connection
billed: '0.001'
added: '2026-07-21'
scope: mute.read
- name: mute.unmute
category: Connection
billed: '0.001'
added: '2026-07-21'
scope: mute.read
- name: block.block
category: Connection
billed: '0.001'
added: '2026-07-21'
scope: block.read
- name: block.unblock
category: Connection
billed: '0.001'
added: '2026-07-21'
scope: block.read
- name: profile.update.*
category: Profile
billed: '0.005'
description: Profile field updates, e.g. profile.update.bio.
- name: chat.received
category: Chat
billed: '0.010'
- name: chat.sent
category: Chat
billed: null
- name: chat.conversation_join
category: Chat
billed: null
- name: dm.received
category: Direct Message
billed: '0.010'
- name: dm.sent
category: Direct Message
billed: null
- name: dm.read
category: Direct Message
billed: null
- name: dm.indicate_typing
category: Direct Message
billed: null
- name: news.new
category: News
billed: '0.005'
- name: spaces.start
category: Spaces
billed: '0.005'
- name: spaces.end
category: Spaces
billed: '0.005'
event_payloads: https://docs.x.com/x-api/activity/event-payloads
latency: sub-second (X's own description of XAA delivery)
notes:
- >-
Event NAMING changed on 2026-03-18 (changelog 2026-03-13); consumers pinned to the older
format needed to migrate.
- >-
Webhook events are billed per event delivered, deduplicated in the same 24-hour UTC window
as resource reads. An over-broad subscription is a cost decision, not just a noise decision.
Work with this as data
Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for asyncapi
4 MCP tools reach this
find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/x-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.