---
title: "X Tweets by IDs"
method: GET
path: "/gateway/v1/x/tweets"
tags: ["X"]
---

# X Tweets by IDs

`GET /gateway/v1/x/tweets`

Returns normalized X posts by numeric ID. Authentication is required. Each request costs at least 7 credits per unique requested ID; the actual cost reflects plan and tenant pricing. Repeated IDs are billed and looked up once. Unavailable IDs are billed and omitted from `data`; returned posts preserve first-input order.

## Query parameters

- `ids` string, required — Comma-separated numeric tweet IDs, from 1 to 100 values; each ID must contain 1 to 19 digits without leading zeros

## Response `200`

OK

- DataResponseXTweet
  - `$schema` string, uri — A URL to the JSON Schema for this object.
  - `data` XTweet[], nullable, required
    - `author` XAuthor, required
      - `avatar` string — Profile picture URL
      - `handle` string, required — X/Twitter handle without the @ prefix (e.g. 'cz_binance')
      - `name` string, required — Display name on X/Twitter
      - `user_id` string, required — Numeric X/Twitter user ID as a string
    - `cover_image_url` string — Article cover image URL; present only when type is 'article'
    - `created_at` integer, required — Unix timestamp (seconds) when the tweet was posted
    - `lang` string — Tweet language code when available
    - `media` XMedia[], nullable — Attached media items (photos, videos, GIFs)
      - `type` string, required — Media type: photo, video, or animated_gif
      - `url` string, required — Direct URL to the media asset
    - `stats` XStats, required
      - `likes` integer, required — Number of likes (hearts)
      - `replies` integer, required — Number of replies
      - `reposts` integer, required — Number of retweets/reposts
      - `views` integer, required — Total view count
    - `text` string, required — Full text content of the tweet
    - `title` string — Article title; present only when type is 'article'
    - `tweet_id` string, required — Numeric tweet ID as a string (e.g. '1234567890123456789')
    - `type` string — Tweet type when available (e.g. 'article' for long-form posts)
    - `url` string, required — Permanent link to the tweet on X/Twitter
  - `meta` OffsetMeta, required
    - `cached` boolean, required — Whether this response was served from cache
    - `credits_used` integer, required — Credits deducted for this request
    - `empty_reason` string — Hint explaining why the data array is empty, when applicable
    - `has_more` boolean — Whether more items may exist beyond this response. For offset-paged endpoints, continue with a larger offset. For time-series endpoints without offset/cursor controls, true means the requested time range hit an upstream cap; narrow from/to to continue. Omitted when exhaustion cannot be proven.
    - `limit` integer, required — Maximum number of items returned in this response
    - `offset` integer, required — Number of items skipped (pagination offset)
    - `total` integer — Total number of matching items (before pagination). Omitted when total is unknown.
    - `watermark` integer — Warehouse watermark (Unix seconds) this response was computed at, on warehouse-backed endpoints (e.g. Hyperliquid /trades/aggregate) — rows up to this time come from the warehouse, newer rows from the live tail. Omitted elsewhere.

## Other responses

- `default` — Error

---

[API](https://skmtc.dev/asksurf/apis/asksurf-public-rest-api.md) · [All operations](https://skmtc.dev/asksurf/apis/asksurf-public-rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/asksurf/asksurf-public-rest-api/revisions/498f461e81c4/schema)
