Skip to main content
Events delivered by the X Activity API (via the persistent HTTP stream or webhooks) share a common envelope:
Event envelope
The examples below are representative real-world payloads with sample account identifiers and profile fields substituted for documentation. Field availability can vary based on account settings, expansions, and the object state at delivery time. See the introduction for the full list of supported event types and authentication requirements. Payload samples use Mintlify code blocks with titles, line numbers, and wrapping. Longer examples are expandable—click to expand and copy the full delivery body.

Post events

post.create

Fired when the filtered user creates a Post. Fires for standalone Posts, replies, quote Posts, and reposts by the filtered user. Inspect the payload to distinguish the type — for example, in_reply_to_tweet_id is present on replies, and referenced_tweets indicates quotes and reposts. The payload is a Post object; includes may contain related users and tweets.
post.create

post.delete

Fired when the filtered user deletes a Post. The payload contains the deleted Post ID and author ID.
post.delete

post.mention.create

Fired when another user explicitly @mentions the filtered user in the body of a Post. Does not fire for implicit mentions carried by replies or reposts. Private event — requires user-context authentication with the tweet.read scope.
post.mention.create

post.reply.create

Fired when a user other than the filtered user posts a direct reply to a Post by the filtered user. Direct replies only (does not fire for replies to replies). Private event — requires user-context authentication with the tweet.read scope. The payload is a Post object for the reply; includes may contain related users and tweets (including the Post being replied to).
post.reply.create

post.quote.create

Fired when a user other than the filtered user quote Posts a Post by the filtered user. Direct quotes only (does not fire for quotes of quotes). Private event — requires user-context authentication with the tweet.read scope. The payload is a Post object for the quote; referenced_tweets identifies the quoted Post.
post.quote.create

post.repost.create

Fired when a user other than the filtered user reposts a Post by the filtered user. Private event — requires user-context authentication with the tweet.read scope. The payload is a Post object for the repost; referenced_tweets with type: "retweeted" identifies the original Post.
post.repost.create
Protected accounts: Posts from protected accounts are not delivered through XAA, even when the subscribing app has user-context authorization for the filtered user.
Billing: Each delivered Post event (post.create, post.delete, post.mention.create, post.reply.create, post.quote.create, post.repost.create) is billed as a Post.

Like events

like.create

Fired when the filtered user likes a Post, or when one of their Posts is liked. Private event — requires user-context authentication. Supports an optional direction filter (inbound or outbound). The payload is a like object with the following fields: includes may contain the liked Post and related users.
like.create

Follow events

follow.follow

Fired when the filtered user follows another user, or is followed. The payload includes source (the follower) and target (the user being followed).
follow.follow

follow.unfollow

Fired when the filtered user unfollows another user, or is unfollowed. Same source / target shape as follow.follow.
follow.unfollow

Profile events

All profile.update.* events share a before / after payload shape. Supported types: profile.update.bio, profile.update.profile_picture, profile.update.banner_picture, profile.update.screenname, profile.update.handle, profile.update.geo, profile.update.url, profile.update.verified_badge, profile.update.affiliate_badge.

profile.update.bio

Fired when the filtered user updates their profile bio.
profile.update.bio

profile.update.profile_picture

Fired when the filtered user updates their profile picture.
profile.update.profile_picture

profile.update.banner_picture

Fired when the filtered user updates their profile banner.
profile.update.banner_picture

profile.update.screenname

Fired when the filtered user updates their display name.
profile.update.screenname

profile.update.geo

Fired when the filtered user updates their profile location.
profile.update.geo

profile.update.url

Fired when the filtered user updates their profile website URL.
profile.update.url

profile.update.handle

Fired when the filtered user updates their @handle. Same before / after payload shape as other profile events.

profile.update.verified_badge

Fired when the filtered user’s verified badge changes. Same before / after payload shape as other profile events.

profile.update.affiliate_badge

Fired when the filtered user’s affiliate badge changes. Same before / after payload shape as other profile events.

Chat events (XChat)

Encrypted chat payloads include opaque encoded fields used by the XChat client libraries. Private events — require user-context authentication. Encoded crypto fields below are truncated for readability; real deliveries include the full strings.

chat.received

chat.received

chat.sent

chat.sent

chat.conversation_join

Fired when a user joins an encrypted chat conversation. The payload shape matches other chat events (conversation identity and encoded crypto material). Private event — requires user-context authentication.

Legacy DM events

Legacy (unencrypted) DM events. Private events — require user-context authentication.

dm.sent

Fired when the filtered user sends an unencrypted DM. The payload includes direct_message_events and a users map.
dm.sent

dm.received

Fired when the filtered user receives an unencrypted DM. Same payload shape as dm.sent (direct_message_events plus a users map). Private event — requires user-context authentication.
dm.received

dm.read

Fired when a participant reads the filtered user’s unencrypted DM (read receipt). Private event — requires user-context authentication.

dm.indicate_typing

Fired when a participant is typing a message to the filtered user. Private event — requires user-context authentication.

News events

news.new

Filter by keyword. The payload includes Grok-curated news fields such as category, name, hook, summary, contexts, and related cluster post results.
news.new

Spaces events

spaces.start

Fired when the filtered user starts a Space. The payload includes the host user, broadcast_id, and an inner event_type of start.
spaces.start

spaces.end

Fired when the filtered user ends a Space. Same shape as spaces.start with an inner event_type of end.
spaces.end

Mute events

Mute events use a source / target user pair similar to follow events. Private events — require user-context authentication with the mute.read scope. The user_id filter matches the user performing the mute or unmute (not the account being muted).

mute.mute

Fired when the filtered user mutes another user.

mute.unmute

Fired when the filtered user unmutes another user.

Block events

Block events use a source / target user pair similar to follow events. Private events — require user-context authentication with the block.read scope. The user_id filter matches the user performing the block or unblock (not the account being blocked).

block.block

Fired when the filtered user blocks another user.

block.unblock

Fired when the filtered user unblocks another user.

Broadcast events

broadcast.chat

Fired when the filtered user receives a chat message in a broadcast that they own. Private event — requires user-context authentication with the broadcast.read scope. The payload includes the broadcast_id, the chat message_id and message text, and an author block with the sending user’s profile.
broadcast.chat

OAuth events

oauth.revoke

Fired when a user revokes your application’s access. The filter may be empty. Use this to clean up local state for the revoked user.
oauth.revoke

Next steps

Introduction

Supported event types, privacy, and authentication

Quickstart

Create a subscription and receive events

Activity stream

Connect to the persistent HTTP stream

Webhooks

Deliver activity events to your webhook URL