Skip to main content
GET
Twitter user search, lookup & audience counts
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 result returned · All plans from $0.00012/credit
The Node.js and Python snippets build search-result rows. They do not print full profile pages. Store searchRows or search_rows with nextCursor or next_cursor before requesting the next page.

Direct user search handoff

Use GET /x/users/search when a CRM, enrichment, creator discovery, support, or agent workflow has a name, brand, or handle fragment. It returns matching X profiles. Use Get User when you have one exact ID or username. Use Get Users (Batch) when you already have numeric user IDs. Store search_query, result_rank, user_id, username, display_name, profile metrics, verification state, profile_image_url, has_next_page, and next_cursor. Treat next_cursor as opaque and pass it back as cursor only when has_next_page is true. Zero affordable results return 402 insufficient_credits.

Resolve the intended X profile

Use user search when a workflow starts with a name or username fragment. Inspect several candidates before choosing a numeric user ID. Similar profile names can represent unrelated people or organizations. Show reviewers:
  • Username and profile name.
  • Biography and location.
  • Verification state.
  • Follower and following counts.
  • Profile image and numeric user ID.
Store the chosen user ID for later requests. Usernames can change. Numeric IDs are the safer key for followers, following, timelines, and profile lookups. An empty search result is not an API failure. Separate no matches from invalid authentication, rate limits, and insufficient credits. Do not use a result row number as identity. Ranking can change between searches. Always pass the selected user ID into the next workflow.

Query parameters

string
required
Search query string.
string
Pagination cursor from a previous response. Omit for the first page.
integer
Profiles per page. Range: 20-200. Defaults to 20.
boolean
default:"false"
Set true to add each row’s full profile, as GET /x/users/{id} returns it. Pages take several seconds longer. The price per row stays the same.

User result filters

These filters apply before billing. Selective filters can return fewer rows.
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.

Headers

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

Response

200 OK

With enrichProfiles=true, each row carries the full profile. The x-xquik-profile-enrichment header then counts the rows that have it, as in enriched=180; requested=200. A row without it keeps its list fields.
object[]
Array of matching user profiles. 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. Present with enrichProfiles=true, unless X withholds it.
boolean
true when X withheld accountBasedIn from this row. 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
Whether more results are available.
string
Cursor for the next page.

400 Missing query

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.
Next steps. Get User to fetch full details, or Search Tweets to find tweets by query.