The Account Activity API (AAA) was X's webhook for account events: new posts, direct messages, likes, follows and blocks, sent to your server as they happened. X now marks it as deprecated in its documentation and points to the X Activity API (XAA) instead. If you still run on AAA, or found it in an old tutorial, this post shows where each use case goes now.

What the Account Activity API did

AAA sent events for accounts you owned or that had subscribed to your app. A user authorized your app, you subscribed their account to your webhook, and from then on X pushed that account's activity to you. It was built for apps acting on behalf of their users: support inboxes, DM bots, follower tools.

It was never a way to watch accounts that had not authorized you. That is the part many people searched for it to do.

What replaces it: the X Activity API

The X Activity API delivers activity events over a webhook or a persistent HTTP stream. You filter by user_id. For posts it has these events:

EventFires when
post.createThe user posts, replies, quotes or reposts
post.deleteThe user deletes a post
post.mention.createSomeone @mentions the user
post.reply.createSomeone replies directly to the user's post
post.quote.createSomeone quotes the user's post
post.repost.createSomeone reposts the user's post

X bills each delivered post event as a post; its pricing page lists $0.005 per new-post webhook event (post.create)as of Oct 2026. Private events, such as likes, need the user's authorization (OAuth 2.0 user context). Posts from protected accounts are not delivered.

Which tool fits which job

You wantUse
DMs, likes, follows of your own usersX Activity API with user authorization. Third-party data providers cannot do this.
New posts of public accounts you do not ownX Activity API post.create, billed per event, or a monitoring plan, billed per month
Mentions and replies to an accountX Activity API mention and reply events, or poll search for @username with since_id
Keywords, hashtags, cashtagsX filtered stream, or poll search with since_id

For anything that involves a user's private activity or acting on their behalf, stay with X. It is the only source for that data.

New posts of public accounts: per event or per month

If what you used AAA for, or wanted it for, is "tell me when these accounts post", a monitoring plan is the simpler route. You add the accounts, set a webhook and receive every new post as a signed event. There is no app at console.x.com and no user authorization, because the posts are public.

The bill is a flat monthly fee per plan, so it does not grow when the accounts post more:

AccountsStandard (60 s)Fast (5 s)Real-time (1 s)
10$5$9$19
50$15$29$59
250$49$99$199
1,000$149$299$599
5,000$499$999$1,999

Each account is checked at least every 60 s, 5 s or 1 s, depending on the class. We compare the two billing models with numbers in X API webhooks for new posts, and the webhook guide sets it up in Python.

What a monitoring plan does not do: it sends new posts, not deletions, mentions, likes or follows. If you need those events, the X Activity API covers them.

Mentions and replies without a webhook

To follow what people say to an account, search works well. Every post that mentions @NASA or replies to it is found with:

@NASA OR to:NASA

Poll it with category=Latest and pass the newest ID you have seen as since_id, so each call returns only new posts:

import os
import time
 
import requests
 
API = "https://api.twittrapi.com"
HEADERS = {"X-API-KEY": os.environ["TWITTRAPI_API_KEY"]}
 
 
 
def poll(query: str, newest: str | None) -> str | None:
    """Print posts newer than `newest` and return the new newest ID."""
    q = f"{query} since_id:{newest}" if newest else query
    params = {"query": q, "category": "Latest", "format": "simple"}
    page = requests.get(f"{API}/search", headers=HEADERS, params=params, timeout=30).json()
    for t in reversed(page["data"]):  # oldest first
        print(t["author"]["username"], t["text"][:80])
    return page["data"][0]["id"] if page["data"] else newest
 
 
newest = None
while True:
    newest = poll("@NASA OR to:NASA", newest)
    time.sleep(60)

Each poll is one call, from $0.065 per 1,000 calls. One poll a minute is about 43,000 calls a month. The search guide lists the operators.

Frequently asked questions

Is the Twitter Account Activity API still available?

X lists it as deprecated and recommends the X Activity API for real-time activity. Check X's documentation for the dates that apply to your app.

Can the Account Activity API watch any account?

No. It sent events for accounts you owned or that had subscribed to your app. To watch public accounts that have not authorized you, use the X Activity API's post events or a monitoring plan.

Do I need a developer account for the X Activity API?

Yes. It is part of the official X API, so you need an app at console.x.com.

Can a third-party API read my users' direct messages?

Not on their behalf. Private data such as DMs and likes needs the user's authorization through the official API.

Sources

TwittrAPI is not affiliated with X Corp. It reads only public data.