Skip to main content
GET
Twitter batch user lookup API & profile details
integer
Require this minimum follower count. Filtering happens before billing.
integer
Allow this maximum follower count. Missing counts pass this filter.
integer
Require this minimum following count.
integer
Allow this maximum following count. Missing counts pass this filter.
integer
Require this minimum post count.
integer
Allow this maximum post count. Missing counts pass this filter.
integer
Require this minimum account age in days.
boolean
When true, only return verified profiles.
string
Match the exact verification type.
boolean
When true, require a profile website.
boolean
When true, require a profile location.
string
Require every comma-separated or line-separated bio term.
string
Require this text in the profile location.
string
Require this text in the username.
Requested result counts are upper bounds for paid authenticated calls. When remaining credits cannot cover the full page or ID list, Xquik returns fewer results. If zero paid results are affordable, it returns 402 insufficient_credits.
1 credit per user returned · All plans from $0.00012/credit
The Node.js and Python snippets build profile rows. They do not print full profile objects. Store profileRows or profile_rows with the original ID list. Retry failed_ids now. Retry unprocessed_ids after adding credits. Skip unavailable_ids, which have no profile on X.

Direct batch user handoff

Use GET /x/users/batch when a CRM, warehouse, enrichment, lead scoring, or agent workflow already has numeric X user IDs. One JSON response returns the profile details. Use Get User when you have one ID or username to resolve. Store requested_ids, user_id, username, display_name, profile metrics, verification state, profile_image_url, has_next_page, and next_cursor. Join returned users by user_id. Do not rely on response order. Send at most 100 IDs per request. Batch requests always return has_next_page: false and next_cursor: "". Zero affordable results return 402 insufficient_credits.

Known IDs

Send comma-separated X user IDs in ids. Keep the original list as requested_ids for retry and audit rows.

Profile rows

Store each returned id as user_id with username, name, description, followers, following, verified, and verifiedType.

Missing rows

Retry failed_ids now & unprocessed_ids after adding credits. Skip unavailable_ids, which have no profile on X. With usernames, these lists name the usernames as sent, and a profile link by its username.

No pagination

A batch returns one page: has_next_page: false and next_cursor: "". Do not paginate it.

Which lookup endpoint?

One profile

Use GET /x/users/{id} for one username or one user ID.

Many known IDs

Use GET /x/users/batch for up to 100 comma-separated user IDs, usernames, or profile links in one request.

Name or partial handle

Use GET /x/users/search before batch lookup when the workflow starts from a name, brand, or handle fragment.

Tweet IDs

Use GET /x/tweets?ids= when the input list contains tweet IDs instead of user IDs.

Audience pages

Use GET /x/users/{id}/followers or GET /x/users/{id}/following when the job starts from an account audience.

Saved exports

Use Create extraction when the source is a follower, following, timeline, media, or search job instead of an existing ID list.

Enrich a known set of user IDs

Use batch lookup after another workflow already identified exact profiles. Examples include follower exports, tweet authors, community members, or CRM records. Prepare one deduplicated ID list. Keep the original source beside each ID. After lookup, map every returned profile back to its source row. Useful enrichment fields include:
  • Current username and profile name.
  • Biography, location, and verification state.
  • Follower and following counts.
  • Profile image and account creation time.
Mark missing IDs as missing. Do not shift remaining profiles into another row’s position. Join responses by numeric user ID. Split oversized workloads into supported batches. Save each completed batch before starting the next. A failed enrichment job can then resume from the last saved batch.

Query parameters

string
Comma-separated numeric user IDs. Maximum 100 per request. Send ids or usernames, not both.
string
Comma-separated X usernames, with or without @, or profile links such as x.com/nasa, in place of ids. Maximum 100 per request. A name in another case is the same account. A link & a username for 1 account are read once.

Headers

string
Full account key. Sessions and OAuth also work.
string
Bearer xq_your_guest_key_here for paid_reads.

Response

200 OK

object[]
Array of user profiles matching the requested IDs. User object fields.
string
X user ID.
string
X username.
string
Display name.
string
Profile bio.
number
Follower count.
number
Following count.
boolean
Verified status.
string
Profile image URL.
string
Profile location.
object | null
Country or region X shows for the account, with value, level & observedAt. X infers it from account access. It states no nationality or exact location. null when X shows none. Omitted when X withholds it.
boolean
true when X withheld accountBasedIn from this read. Retry later to get it. Omitted otherwise.
string
Account creation date (ISO 8601).
number
Total number of tweets posted. Omitted if unavailable.
string
Cover or banner image URL. Omitted if unavailable.
number
Total number of media tweets posted. Omitted if unavailable.
string
Website URL from profile. Omitted if empty.
number
Total number of tweets liked. Omitted if unavailable.
boolean
Whether the user has custom timelines. Omitted if unavailable.
boolean
Whether the user is an X translator. Omitted if unavailable.
string[]
Country codes where the account is withheld. Omitted if empty.
boolean
Whether X flags the account as possibly sensitive. Omitted if unavailable.
string[]
IDs of pinned tweets. Omitted if none.
boolean
Whether X marks the account as automated. Omitted if unavailable.
string
Username of the account operator if automated. Omitted if not automated.
boolean
Whether the account is unavailable. Omitted if available.
string
Reason the account is unavailable. Omitted if available.
string
Verification type (for example Business, Government). Omitted if not verified or standard blue check.
object
Structured profile bio with entity annotations. Omitted if unavailable.
boolean
Whether the account has X Premium verification. Omitted if unavailable.
boolean
Normalized verification status. Omitted if unavailable.
string
Profile banner URL. Omitted if unavailable.
boolean
Whether the account protects its posts. Omitted if unavailable.
string
Role within the requested community context. Omitted outside community results.
boolean
Always false for batch requests.
string
Always empty for batch requests.
string[]
IDs with no profile on X. Skip them.
string[]
IDs that failed to load. They cost nothing. Retry them.
string[]
IDs skipped for low credits. Retry them after adding credits.

400 Missing IDs

400 Too many IDs

400 Invalid usernames

Each usernames value must be a username or a link to a profile on x.com or twitter.com. A post link, a user ID link, another site, and the text undefined or null answer 400. Send a user ID in ids. The request costs nothing.

401 Unauthenticated

Anonymous requests get WWW-Authenticate: Bearer and a guest wallet checkout action. This is not a Payment challenge.

402 Payment required

Account keys get account options. Guest keys get guest top-up only. No checkout starts automatically. Confirm any payment action.

502 X API unavailable

The read service returned an error. Retry after a short delay.

429 Rate limit exceeded

You exceeded your tier rate limit. Wait for the Retry-After header before retrying.

424 Dependency failed

The normalized v1 response contract can return 424 when the read service is unavailable.