---
title: "Look up multiple users by IDs in one call"
method: GET
path: "/api/v1/x/users/batch"
tags: ["Users"]
---

# Look up multiple users by IDs in one call

`GET /api/v1/x/users/batch`

Look up multiple users by IDs in one call.

## Query parameters

- `ids` string, required

## Response `200`

Matched users plus reconciliation metadata for unavailable IDs.

- BatchUsers — Batch user lookup results. Duplicate requested IDs are ignored while preserving first-seen order. unavailable_ids identifies processed IDs with no returned profile. unprocessed_ids identifies IDs skipped when available credits limit processing.
  - `users` UserProfile[], required
    - `id` string, required
    - `username` string, required
    - `name` string, required
    - `description` string
    - `followers` integer
    - `following` integer
    - `verified` boolean
    - `isBlueVerified` boolean — Whether X shows a blue verification badge
    - `isVerified` boolean — Whether X marks the profile as verified
    - `profilePicture` string
    - `coverPicture` string
    - `profileBannerUrl` string — Original X profile banner field when available
    - `location` string
    - `createdAt` string
    - `statusesCount` integer
    - `mediaCount` integer
    - `protected` boolean — Whether the profile protects its posts
    - `url` string
    - `favouritesCount` integer
    - `hasCustomTimelines` boolean
    - `isTranslator` boolean
    - `withheldInCountries` string[]
    - `possiblySensitive` boolean
    - `pinnedTweetIds` string[]
    - `isAutomated` boolean
    - `automatedBy` string
    - `unavailable` boolean
    - `unavailableReason` string
    - `verifiedType` string
    - `affiliatesHighlightedLabel` UserAffiliateLabel — Organization affiliation label shown on an X profile.
      - `badgeUrl` string
      - `description` string
      - `url` string
      - `urlType` string
      - `userLabelDisplayType` string
      - `userLabelType` string
    - `businessAccountAffiliatesCount` integer
    - `creatorSubscriptionsCount` integer
    - `hasGraduatedAccess` boolean
    - `hasHiddenSubscriptionsOnProfile` boolean
    - `highlightsInfo` UserHighlightsInfo — Profile highlight availability and count metadata.
      - `canHighlightTweets` boolean
      - `highlightedTweets` string
    - `identityVerification` UserIdentityVerification — Identity verification metadata displayed by X.
      - `description` string
      - `isIdentityVerified` boolean
      - `verifiedSinceMsec` string
    - `isProfileTranslatable` boolean
    - `parodyCommentaryFanLabel` string
    - `profileDescriptionLanguage` string
    - `profileImageShape` string
    - `profileInterstitialType` string
    - `profileSortEnabled` boolean
    - `profileTranslatorType` string
    - `superFollowEligible` boolean
    - `communityRole` string — Community role when returned by community member reads
    - `profile_bio` object — Structured profile bio with entity annotations
  - `has_next_page` false, required — Batch lookups never paginate.
  - `next_cursor` string, required — Empty because batch lookups never paginate.
  - `requested_count` integer, required — Number of unique IDs requested.
  - `processed_count` integer, required — Number of requested IDs included in the lookup.
  - `returned_count` integer, required — Number of user profiles returned and charged.
  - `unavailable_ids` string[], required — Processed IDs with no returned profile, in first-seen request order.
  - `unprocessed_ids` string[], required — Requested IDs skipped because available credits limited processing. Retry these IDs after adding credits.

## Other responses

- `400` — Invalid input
- `401` — Authentication required for a non-MPP paid read. The Bearer challenge requests authentication and is not a Payment challenge. Requests without credentials advertise accountless Stripe checkout, but create no checkout. Explicit invalid credentials return the plain error shape. Call an advertised action only after explicit user confirmation.
- `402` — Payment required. Fixed-price direct MPP requests return a Machine Payments Protocol problem document and a WWW-Authenticate challenge. Authenticated X data requests return balances and explicit Stripe checkout-creation actions. Guest paid-read keys receive only the accountless guest top-up action. Direct MPP challenges also advertise the Stripe wallet action. Other authenticated endpoints return a legacy error shape. A failed request never creates checkout. Create checkout only after the user confirms a payment option.
- `424` — Dependency unavailable, unauthorized, or rate limited. Default v1 returns 502. The best-practice response contract returns 424 for transparent dependency failures.
- `429` — Xquik tier rate limit exceeded. The response includes a `Retry-After` header with the number of seconds to wait before retrying.
- `502` — Dependency unavailable, unauthorized, or rate limited. Default v1 returns 502. The best-practice response contract returns 424 for transparent dependency failures.
- `default` — Unexpected error.

---

[API](https://skmtc.net/xquik-dev/apis/xquik-api-2.md) · [All operations](https://skmtc.net/xquik-dev/apis/xquik-api-2/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/xquik-dev/xquik-api-2/versions/c70f0e286159/schema)
