X · AsyncAPI Specification

X Webhooks

Version

View Spec View on GitHub SocialSocial-MediaPostsUserDirect MessagesStreamingWebhookReal-TimeTrendsMediaSpacesContentConversationAgentsMCPAsyncAPIEvents

AsyncAPI Specification

Raw ↑
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.
All 92 tools →

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.