Get a public X profile
GET /v1/x/users/{user}
Returns one account's profile: name, bio, counters, pinned posts, and whether it is protected. A protected account's profile is public on X, so it is returned; its posts are not. 404 when the account does not exist or is suspended.
Price: 1 credit per call, plus 2 credits per X profile returned. Failed and refused calls cost nothing.
Rate limit: Counts as 1 request against your per-minute rate limit.
MCP tool: get_x_user, 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/USER \
--header "Authorization: Bearer $WEIR_API_KEY"Path parameters
| Field | Type | Required | Notes |
|---|---|---|---|
user |
string | yes | A username, with or without the @, or a numeric account id. An all-digit value is read as an id. · matches ^@?[A-Za-z0-9_]{1,50}$ |
Response
An X profile, in X's own field names.
200
| Field | Type | Required | Notes |
|---|---|---|---|
data |
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.nextCursor |
string or null | no |
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. |