Twitter Account Status API | Check Suspended or Deleted
Return the liveness state of a handle: alive, suspended, not_found, or unavailable. Every outcome is an HTTP 200 and the caller branches on the status field. This exists because a standard profile lookup collapses suspended, deleted, and never-existed into one indistinguishable 404. Cost: $0.0008 per call.
User Status tells you whether a Twitter/X account is alive, suspended, or gone. It returns a single status field with one of four values: alive, suspended, not_found, or unavailable. Every outcome is an HTTP 200, so you branch on the status value rather than on a status code. Use it to tell a banned account apart from a deleted one or a typo, which a normal profile lookup cannot do because all three come back as a 404. One $0.0008 read with bearer auth.
Authorization
bearerAuth Pass your API key as a bearer token on every request: Authorization: Bearer <API_KEY>.
In: header
Query Parameters
Handle without the leading @. The alias username is also accepted.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/user/status?userName=openai"{ "userName": "openai", "status": "alive", "id": "1634058197493178368", "reason": null}{ "error": "bad_request", "message": "Missing or malformed parameter. Fix the request before retrying."}{ "error": "unauthorized", "message": "The API key is missing, malformed, or revoked. Check the Authorization header."}{ "error": "insufficient_credits", "message": "Your balance is exhausted. Top up your credits to continue."}{ "error": "not_found", "message": "The resource does not exist, for example a deleted tweet or a private account."}{ "error": "rate_limited", "message": "Too many requests. Back off and retry with exponential backoff."}{ "error": "server_error", "message": "Something failed on our side. Retry with backoff; if it persists, contact support."}Pricing
| Unit | Price |
|---|---|
| Per call | $0.0008 |
| Per 1,000 calls | $0.80 |
When to use
Use it to audit a list of handles for bans and deletions, for example checking a follower export or an influencer roster before a campaign, or monitoring whether a watched account has been suspended.
Related endpoints
- User Info by Username: Fetch a full profile by @handle.
- User Info by ID: Fetch a full profile by numeric user ID.
- User Search: Find users by keyword across display names, handles, and bios.
FAQ
Why not just use User Info and check for a 404?
User Info returns the same 404 for a suspended account, a deleted account, and a handle that never existed, so you cannot tell which happened. User Status separates them into distinct values.
Does it return an error for a suspended account?
No. Every outcome is an HTTP 200 and you read the status field. A suspended account is a successful answer to the question you asked, not a failure.
What does unavailable mean?
It means X returned a state we do not map to one of the other three. The reason field carries X's own wording so you can see what happened, rather than the account being wrongly reported as alive or missing.
Does it return the user ID?
Yes, when the account is alive. The id field is null for every other status, since a suspended or deleted account exposes no ID.
Are protected accounts reported as suspended?
No. A protected (private) account is alive. Protection is a visibility setting, not an account state.
Bookmark Folder Timeline GET
Fetch the tweets inside one of the caller's own bookmark folders, identified by folder_id (from Bookmark Folders). Cursor-paginated. Requires a registered session. Billed at $0.0008 per call. Cost: $0.0008 per call.
Overview
Follower Graph: Page through followers and following lists, including the verified-only and v2 cursor-paginated variants.