Get up to 100 public X profiles by id
GET /v1/x/users
Looks up many accounts in one request, for hydrating ids you already hold, such as post authors or followers. Profiles come back in the order requested. An id that cannot be returned (suspended, deactivated, or never existed) is listed in meta.notFound and not billed. Billed per profile returned, at the same rate as getXUser.
Price: 1 credit per call, plus 2 credits per X profile returned. Failed and refused calls cost nothing.
Rate limit: Counts as 2 requests against your per-minute rate limit.
MCP tool: get_x_users, on every MCP connection.
Requires an API key, sent as Authorization: Bearer <key>.
Request
curl --request GET \
--url https://api.weirapp.io/v1/x/users?ids=IDS \
--header "Authorization: Bearer $WEIR_API_KEY"Query parameters
| Field | Type | Required | Notes |
|---|---|---|---|
ids |
string | yes | Comma-separated numeric account ids, 1 to 100, no spaces. Duplicates are ignored. · matches ^\d{1,19}(,\d{1,19}){0,99}$ |
Response
The profiles found, in request order.
200
| Field | Type | Required | Notes |
|---|---|---|---|
data |
array of object | yes | |
data[].id |
string | yes | |
data[].username |
string | yes | Handle without the @ prefix. |
data[].name |
string | yes | Display name. |
data[].description |
string or null | yes | |
data[].url |
string | yes | |
data[].profileImageUrl |
string or null | yes | |
data[].profileBannerUrl |
string or null | yes | |
data[].location |
string or null | yes | |
data[].verified |
boolean | yes | |
data[].followersCount |
integer | yes | min 0 |
data[].followingCount |
integer | yes | min 0 |
data[].statusesCount |
integer | yes | Posts published. · min 0 |
data[].likeCount |
integer | yes | min 0 |
data[].createdAt |
string (date-time) | yes | |
data[].pinnedPostIds |
array of string | yes | Ids of the posts pinned to the top of the profile, usually zero or one. |
data[].protected |
boolean | yes | True when only approved followers can see this account's posts. Its posts, replies, media, and relationship lists are then not available through this API. |
meta |
object | yes | |
meta.requestId |
string | yes | |
meta.notFound |
array of string | yes | Requested ids that came back empty: deleted, suspended, protected, withheld, or never existed. They cost nothing. |
Errors
| Status | Meaning | What to do |
|---|---|---|
400 |
The request failed validation. | The request was malformed. The details object names the field. |
401 |
The API key is missing, malformed, expired, or revoked. | The key is missing, malformed, revoked, or expired. |
402 |
The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes. | Out of credits. Never retry. Only a person can clear it, by adding credits at https://weirapp.io/dashboard/billing. Retrying never will. |
403 |
The API key does not carry the scope this route requires. | The key is valid but lacks the scope this operation needs. |
404 |
The requested resource does not exist. | No such resource, or it is not public. |
429 |
The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again. | Rate limited. Retryable: wait for Retry-After, then try again. |
500 |
An unexpected error occurred. | Something failed on our side. Retryable with backoff. |
503 |
The source is temporarily unavailable. The request is safe to retry. | A source was unreachable. Retryable with backoff. |