> For the complete documentation index, see [llms.txt](https://docs.pullbay.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.pullbay.com/documentation/api-and-references/twitter-x.md).

# Twitter / X

The Pullbay Twitter API provides programmatic access to public Twitter/X data — tweet search, individual tweets, and user profiles by handle or numeric ID. Integrate Twitter data into your applications, dashboards, and analytics pipelines without scraping or using the official Twitter/X developer platform.

**Base URL:** `https://dashboard.pullbay.com/api`

## Overview

The Twitter service lets you:

* Search tweets by keyword, sorted by `Top` or `Latest`
* Look up a single tweet by its numeric ID
* Look up a user profile by handle (`@username`) or by numeric user ID
* Fetch extended "about" details for a user (account region, profile image shape, username change history)
* Pull all tweets posted by a given user

All endpoints are read-only `GET` requests against public Twitter/X data — no posting, no DMs, and no authenticated account access is included.

## Common Use Cases

**Brand & Keyword Monitoring** — Search for mentions of a brand, product, or keyword and feed matching tweets into your own alerting or sentiment pipeline.

**Influencer & Competitor Tracking** — Pull a user's profile and recent tweets to track follower growth, posting cadence, and engagement trends over time.

**Content Research** — Use Search Twitter to discover what's being said about a topic, then pull the authoring accounts' profiles to understand who's driving the conversation.

**Lead & Audience Enrichment** — Resolve a handle to its numeric user ID and profile fields (bio, follower count, verification status) to enrich a CRM record or audience segment.

**Historical Tweet Lookup** — Fetch a specific tweet by ID when you already have a link or ID from another source and need the full text, engagement counts, and author details.

## Endpoints

| Endpoint                             | Description                              | Pagination        |
| ------------------------------------ | ---------------------------------------- | ----------------- |
| `GET /twitter/search`                | Search tweets by query                   | Cursor / maxItems |
| `GET /twitter/tweet/{id}`            | Get a single tweet by ID                 | —                 |
| `GET /twitter/handle/{handle}`       | Get a user by handle                     | —                 |
| `GET /twitter/handle/{handle}/about` | Get a user's about/bio details by handle | —                 |
| `GET /twitter/user/{id}`             | Get a user by numeric ID                 | —                 |
| `GET /twitter/user/{id}/tweets`      | Get tweets posted by a user              | Cursor / maxItems |

***

### Search Twitter

Search tweets matching a query.

**Request**

```bash
GET /twitter/search
Authorization: Bearer YOUR_API_KEY
```

**Parameters**

| Parameter  | Type                    | Required | Default  | Description                                                                    |
| ---------- | ----------------------- | -------- | -------- | ------------------------------------------------------------------------------ |
| `query`    | string                  | Yes      | —        | Search query, 1–100 characters                                                 |
| `sort`     | string                  | No       | `Latest` | `Top` or `Latest`                                                              |
| `useFirst` | string (`true`/`false`) | No       | `false`  | `true` or `false`                                                              |
| `maxItems` | integer                 | No       | —        | One-shot bulk pull, 1–200 results. Mutually exclusive with `cursor`            |
| `cursor`   | string                  | No       | —        | Pagination cursor from a previous response. Mutually exclusive with `maxItems` |

**Example**

```bash
curl -G "https://dashboard.pullbay.com/api/twitter/search" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d query="openai" \
  -d sort=Latest \
  -d maxItems=20
```

**Response**

```json
{
  "status": 200,
  "message": "OK",
  "success": true,
  "data": [
    {
      "type": "tweet",
      "id": "20",
      "url": "https://x.com/jack/status/20",
      "twitterUrl": "https://twitter.com/jack/status/20",
      "text": "just setting up my twttr",
      "fullText": "just setting up my twttr",
      "source": "Twitter Web Client",
      "lang": "en",
      "createdAt": "Tue Mar 21 20:50:14 +0000 2006",
      "conversationId": "20",
      "retweetCount": 126541,
      "replyCount": 17858,
      "likeCount": 309719,
      "quoteCount": 6384,
      "bookmarkCount": 21386,
      "viewCount": null,
      "isReply": false,
      "isPinned": false,
      "isRetweet": false,
      "isQuote": false,
      "author": {
        "type": "user",
        "id": "44196397",
        "userName": "elonmusk",
        "name": "Elon Musk",
        "url": "https://x.com/elonmusk",
        "twitterUrl": "https://twitter.com/elonmusk",
        "description": "https://t.co/dDtDyVssfm",
        "location": "",
        "profilePicture": "https://pbs.twimg.com/profile_images/2035314704307081216/71U1ftM3_normal.jpg",
        "coverPicture": "https://pbs.twimg.com/profile_banners/44196397/1774145451",
        "isVerified": true,
        "isBlueVerified": true,
        "protected": false,
        "canDm": false,
        "canMediaTag": false,
        "followers": 239698341,
        "following": 1319,
        "fastFollowersCount": 0,
        "favouritesCount": 225074,
        "listedCount": 168631,
        "mediaCount": 4467,
        "statusesCount": 101980,
        "createdAt": "Tue Jun 02 20:12:29 +0000 2009",
        "status": ""
      },
      "media": []
    }
  ],
  "pagination": { "page": null, "hasNextPage": true, "cursor": "DAACCgACGY...", "offset": null },
  "pricing": { "creditsCharged": 1 }
}
```

**Response Schema**

| Field                    | Type              | Description                                    |
| ------------------------ | ----------------- | ---------------------------------------------- |
| `data`                   | array             | Array of [Tweet objects](#tweet-object)        |
| `pagination.page`        | null              | Unused by this endpoint — always `null` here   |
| `pagination.hasNextPage` | boolean, nullable | Whether another page is available              |
| `pagination.cursor`      | string, nullable  | Cursor to pass as `cursor` on the next request |
| `pagination.offset`      | null              | Unused by this endpoint — always `null` here   |
| `pricing.creditsCharged` | number            | Credits charged for this request               |

**Credit cost:** dynamic, returned in `pricing.creditsCharged`. No published flat rate — read the figure from each response.

***

### Get Tweet

Returns a single tweet by its numeric ID.

**Request**

```bash
GET /twitter/tweet/{id}
Authorization: Bearer YOUR_API_KEY
```

**Parameters**

| Parameter | Type   | Required | Default | Description                                    |
| --------- | ------ | -------- | ------- | ---------------------------------------------- |
| `id`      | string | Yes      | —       | Numeric tweet ID, 1–100 characters (e.g. `20`) |

**Example**

```bash
curl -G "https://dashboard.pullbay.com/api/twitter/tweet/20" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

**Response**

```json
{
  "status": 200,
  "message": "OK",
  "success": true,
  "data": [
    {
      "type": "tweet",
      "id": "20",
      "url": "https://x.com/jack/status/20",
      "twitterUrl": "https://twitter.com/jack/status/20",
      "text": "just setting up my twttr",
      "fullText": "just setting up my twttr",
      "source": "Twitter Web Client",
      "lang": "en",
      "createdAt": "Tue Mar 21 20:50:14 +0000 2006",
      "conversationId": "20",
      "retweetCount": 126541,
      "replyCount": 17858,
      "likeCount": 309719,
      "quoteCount": 6384,
      "bookmarkCount": 21386,
      "viewCount": null,
      "isReply": false,
      "isPinned": false,
      "isRetweet": false,
      "isQuote": false,
      "author": {
        "type": "user",
        "id": "12",
        "userName": "jack",
        "name": "jack",
        "url": "https://x.com/jack",
        "twitterUrl": "https://twitter.com/jack",
        "description": "",
        "location": "",
        "profilePicture": "https://pbs.twimg.com/profile_images/1115644092329758721/AFjOzXz3_normal.jpg",
        "coverPicture": "",
        "isVerified": false,
        "isBlueVerified": false,
        "protected": false,
        "canDm": false,
        "canMediaTag": false,
        "followers": 6800000,
        "following": 4500,
        "fastFollowersCount": 0,
        "favouritesCount": 25000,
        "listedCount": 22000,
        "mediaCount": 350,
        "statusesCount": 30000,
        "createdAt": "Tue Mar 21 20:50:14 +0000 2006",
        "status": ""
      },
      "media": []
    }
  ],
  "pricing": { "creditsCharged": 1 }
}
```

**Response Schema**

| Field                    | Type   | Description                                             |
| ------------------------ | ------ | ------------------------------------------------------- |
| `data`                   | array  | Array containing a single [Tweet object](#tweet-object) |
| `pricing.creditsCharged` | number | Credits charged for this request                        |

**Credit cost:** dynamic, returned in `pricing.creditsCharged`. No published flat rate.

***

### Get User By Handle

Returns a Twitter user by handle (without `@`).

**Request**

```bash
GET /twitter/handle/{handle}
Authorization: Bearer YOUR_API_KEY
```

**Parameters**

| Parameter | Type   | Required | Default | Description                                                    |
| --------- | ------ | -------- | ------- | -------------------------------------------------------------- |
| `handle`  | string | Yes      | —       | Twitter handle without `@`, 1–100 characters (e.g. `elonmusk`) |

**Example**

```bash
curl -G "https://dashboard.pullbay.com/api/twitter/handle/elonmusk" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

**Response**

```json
{
  "status": 200,
  "message": "OK",
  "success": true,
  "data": [
    {
      "type": "user",
      "id": "44196397",
      "userName": "elonmusk",
      "name": "Elon Musk",
      "url": "https://x.com/elonmusk",
      "twitterUrl": "https://twitter.com/elonmusk",
      "description": "https://t.co/dDtDyVssfm",
      "location": "",
      "profilePicture": "https://pbs.twimg.com/profile_images/2035314704307081216/71U1ftM3_normal.jpg",
      "coverPicture": "https://pbs.twimg.com/profile_banners/44196397/1774145451",
      "isVerified": true,
      "isBlueVerified": true,
      "protected": false,
      "canDm": false,
      "canMediaTag": false,
      "followers": 239698341,
      "following": 1319,
      "fastFollowersCount": 0,
      "favouritesCount": 225074,
      "listedCount": 168631,
      "mediaCount": 4467,
      "statusesCount": 101980,
      "createdAt": "Tue Jun 02 20:12:29 +0000 2009",
      "status": ""
    }
  ],
  "pricing": { "creditsCharged": 1 }
}
```

**Response Schema**

| Field                    | Type   | Description                                           |
| ------------------------ | ------ | ----------------------------------------------------- |
| `data`                   | array  | Array containing a single [User object](#user-object) |
| `pricing.creditsCharged` | number | Credits charged for this request                      |

**Credit cost:** dynamic, returned in `pricing.creditsCharged`.

***

### Get User About By Handle

Returns extended profile / about details for a Twitter user, by handle.

**Request**

```bash
GET /twitter/handle/{handle}/about
Authorization: Bearer YOUR_API_KEY
```

**Parameters**

| Parameter | Type   | Required | Default | Description                                                    |
| --------- | ------ | -------- | ------- | -------------------------------------------------------------- |
| `handle`  | string | Yes      | —       | Twitter handle without `@`, 1–100 characters (e.g. `elonmusk`) |

**Example**

```bash
curl -G "https://dashboard.pullbay.com/api/twitter/handle/elonmusk/about" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

**Response**

```json
{
  "status": 200,
  "message": "OK",
  "success": true,
  "data": [
    {
      "accountBasedIn": "United States",
      "locationAccurate": true,
      "profileImageShape": "Circle",
      "avatarUrl": "https://pbs.twimg.com/profile_images/2035314704307081216/71U1ftM3_normal.jpg",
      "usernameChangeCount": "0",
      "accountCreatedAt": "Tue Jun 02 20:12:29 +0000 2009",
      "accountSource": "United States App Store",
      "verifiedSince": "-156836000000000"
    }
  ],
  "pricing": { "creditsCharged": 1 }
}
```

**Response Schema**

| Field                    | Type   | Description                                                       |
| ------------------------ | ------ | ----------------------------------------------------------------- |
| `data`                   | array  | Array containing a single [User About object](#user-about-object) |
| `pricing.creditsCharged` | number | Credits charged for this request                                  |

**Credit cost:** dynamic, returned in `pricing.creditsCharged`.

***

### Get User By ID

Returns a Twitter user by their numeric user ID.

**Request**

```bash
GET /twitter/user/{id}
Authorization: Bearer YOUR_API_KEY
```

**Parameters**

| Parameter | Type   | Required | Default | Description                                                 |
| --------- | ------ | -------- | ------- | ----------------------------------------------------------- |
| `id`      | string | Yes      | —       | Numeric Twitter user ID, 1–100 characters (e.g. `44196397`) |

**Example**

```bash
curl -G "https://dashboard.pullbay.com/api/twitter/user/44196397" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

**Response**

```json
{
  "status": 200,
  "message": "OK",
  "success": true,
  "data": [
    {
      "type": "user",
      "id": "44196397",
      "userName": "elonmusk",
      "name": "Elon Musk",
      "url": "https://x.com/elonmusk",
      "twitterUrl": "https://twitter.com/elonmusk",
      "description": "https://t.co/dDtDyVssfm",
      "location": "",
      "profilePicture": "https://pbs.twimg.com/profile_images/2035314704307081216/71U1ftM3_normal.jpg",
      "coverPicture": "https://pbs.twimg.com/profile_banners/44196397/1774145451",
      "isVerified": true,
      "isBlueVerified": true,
      "protected": false,
      "canDm": false,
      "canMediaTag": false,
      "followers": 239698341,
      "following": 1319,
      "fastFollowersCount": 0,
      "favouritesCount": 225074,
      "listedCount": 168631,
      "mediaCount": 4467,
      "statusesCount": 101980,
      "createdAt": "Tue Jun 02 20:12:29 +0000 2009",
      "status": ""
    }
  ],
  "pricing": { "creditsCharged": 1 }
}
```

**Response Schema**

| Field                    | Type   | Description                                           |
| ------------------------ | ------ | ----------------------------------------------------- |
| `data`                   | array  | Array containing a single [User object](#user-object) |
| `pricing.creditsCharged` | number | Credits charged for this request                      |

**Credit cost:** dynamic, returned in `pricing.creditsCharged`.

***

### Get User's Tweets

Returns tweets posted by a user, by user ID.

**Request**

```bash
GET /twitter/user/{id}/tweets
Authorization: Bearer YOUR_API_KEY
```

**Parameters**

| Parameter  | Type    | Required | Default | Description                                                                    |
| ---------- | ------- | -------- | ------- | ------------------------------------------------------------------------------ |
| `id`       | string  | Yes      | —       | Numeric Twitter user ID, 1–100 characters (e.g. `44196397`)                    |
| `maxItems` | integer | No       | —       | One-shot bulk pull, 1–200 results. Mutually exclusive with `cursor`            |
| `cursor`   | string  | No       | —       | Pagination cursor from a previous response. Mutually exclusive with `maxItems` |

**Example**

```bash
curl -G "https://dashboard.pullbay.com/api/twitter/user/44196397/tweets" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d maxItems=20
```

**Response**

```json
{
  "status": 200,
  "message": "OK",
  "success": true,
  "data": [
    {
      "type": "tweet",
      "id": "20",
      "url": "https://x.com/jack/status/20",
      "twitterUrl": "https://twitter.com/jack/status/20",
      "text": "just setting up my twttr",
      "fullText": "just setting up my twttr",
      "source": "Twitter Web Client",
      "lang": "en",
      "createdAt": "Tue Mar 21 20:50:14 +0000 2006",
      "conversationId": "20",
      "retweetCount": 126541,
      "replyCount": 17858,
      "likeCount": 309719,
      "quoteCount": 6384,
      "bookmarkCount": 21386,
      "viewCount": null,
      "isReply": false,
      "isPinned": false,
      "isRetweet": false,
      "isQuote": false,
      "author": {
        "type": "user",
        "id": "44196397",
        "userName": "elonmusk",
        "name": "Elon Musk",
        "url": "https://x.com/elonmusk",
        "twitterUrl": "https://twitter.com/elonmusk",
        "description": "https://t.co/dDtDyVssfm",
        "location": "",
        "profilePicture": "https://pbs.twimg.com/profile_images/2035314704307081216/71U1ftM3_normal.jpg",
        "coverPicture": "https://pbs.twimg.com/profile_banners/44196397/1774145451",
        "isVerified": true,
        "isBlueVerified": true,
        "protected": false,
        "canDm": false,
        "canMediaTag": false,
        "followers": 239698341,
        "following": 1319,
        "fastFollowersCount": 0,
        "favouritesCount": 225074,
        "listedCount": 168631,
        "mediaCount": 4467,
        "statusesCount": 101980,
        "createdAt": "Tue Jun 02 20:12:29 +0000 2009",
        "status": ""
      },
      "media": []
    }
  ],
  "pagination": { "page": null, "hasNextPage": true, "cursor": "DAACCgACGY...", "offset": null },
  "pricing": { "creditsCharged": 1 }
}
```

**Response Schema**

| Field                    | Type              | Description                                    |
| ------------------------ | ----------------- | ---------------------------------------------- |
| `data`                   | array             | Array of [Tweet objects](#tweet-object)        |
| `pagination.page`        | null              | Unused by this endpoint — always `null` here   |
| `pagination.hasNextPage` | boolean, nullable | Whether another page is available              |
| `pagination.cursor`      | string, nullable  | Cursor to pass as `cursor` on the next request |
| `pagination.offset`      | null              | Unused by this endpoint — always `null` here   |
| `pricing.creditsCharged` | number            | Credits charged for this request               |

**Credit cost:** dynamic, returned in `pricing.creditsCharged`. No flat per-request rate is published — read the figure from each response.

***

## Errors

All non-2xx responses share the same envelope:

```json
{
  "status": 400,
  "message": "Bad request",
  "success": false,
  "error": { "code": "BAD_REQUEST" }
}
```

| Status | Meaning                                  |
| ------ | ---------------------------------------- |
| `400`  | Bad request — missing/invalid parameters |
| `402`  | Insufficient credits                     |
| `404`  | Tweet or user not found                  |

## Object Schema

### Tweet object

| Field                                                                        | Type                        | Description                                  |
| ---------------------------------------------------------------------------- | --------------------------- | -------------------------------------------- |
| `type`                                                                       | string                      | Always `tweet`                               |
| `id`                                                                         | string                      | Numeric tweet ID                             |
| `url` / `twitterUrl`                                                         | string                      | Tweet permalink on `x.com` and `twitter.com` |
| `text` / `fullText`                                                          | string                      | Tweet body (truncated and full)              |
| `source`                                                                     | string                      | Client used to post the tweet                |
| `lang`                                                                       | string                      | Tweet language code                          |
| `createdAt`                                                                  | string                      | Posted timestamp (Twitter date format)       |
| `conversationId`                                                             | string                      | ID of the root tweet in the thread           |
| `retweetCount` / `replyCount` / `likeCount` / `quoteCount` / `bookmarkCount` | integer                     | Engagement counts                            |
| `viewCount`                                                                  | integer, nullable           | View count, when available                   |
| `isReply` / `isPinned` / `isRetweet` / `isQuote`                             | boolean                     | Tweet type flags                             |
| `author`                                                                     | [User object](#user-object) | The tweet's author                           |
| `media`                                                                      | array                       | Attached media objects                       |

### User object

| Field                             | Type    | Description                                           |
| --------------------------------- | ------- | ----------------------------------------------------- |
| `type`                            | string  | Always `user`                                         |
| `id`                              | string  | Numeric Twitter user ID                               |
| `userName`                        | string  | Handle, without `@`                                   |
| `name`                            | string  | Display name                                          |
| `url` / `twitterUrl`              | string  | Profile URL on `x.com` and `twitter.com`              |
| `description`                     | string  | Bio text                                              |
| `location`                        | string  | Free-text profile location                            |
| `profilePicture` / `coverPicture` | string  | Avatar and banner image URLs                          |
| `isVerified` / `isBlueVerified`   | boolean | Legacy verification and Blue subscriber verification  |
| `protected`                       | boolean | Whether the account's tweets are protected            |
| `canDm` / `canMediaTag`           | boolean | Whether the user accepts DMs / can be tagged in media |
| `followers` / `following`         | integer | Follower and following counts                         |
| `fastFollowersCount`              | integer | Recently-gained follower count                        |
| `favouritesCount`                 | integer | Total likes given by the user                         |
| `listedCount`                     | integer | Number of lists the user appears on                   |
| `mediaCount`                      | integer | Number of tweets containing media                     |
| `statusesCount`                   | integer | Total tweet count                                     |
| `createdAt`                       | string  | Account creation timestamp (Twitter date format)      |
| `status`                          | string  | Reserved/internal status field                        |

Note: `User object` is the schema returned by both Get User By Handle and Get User By ID — it is a distinct object from `User About object` below, which only the about/bio endpoint returns.

### User about object

| Field                 | Type    | Description                                                        |
| --------------------- | ------- | ------------------------------------------------------------------ |
| `accountBasedIn`      | string  | Inferred account region                                            |
| `locationAccurate`    | boolean | Whether `accountBasedIn` is considered accurate                    |
| `profileImageShape`   | string  | Profile picture mask shape (e.g. `Circle`)                         |
| `avatarUrl`           | string  | Avatar image URL                                                   |
| `usernameChangeCount` | string  | Number of times the handle has been changed (returned as a string) |
| `accountCreatedAt`    | string  | Account creation timestamp (Twitter date format)                   |
| `accountSource`       | string  | Platform/channel the account was created from                      |
| `verifiedSince`       | string  | Verification timestamp, when applicable (returned as a string)     |

Note: the User About object does not include `id`, `userName`, or any other linking field back to the User object — correlate the two by the `handle` you requested, not by a shared key in the response body.

## Finding User and Tweet IDs

* **Handle**: the `@username` shown on a profile or in a tweet URL, without the `@` (e.g. `https://x.com/elonmusk` → `elonmusk`). Pass this to the `/twitter/handle/{handle}` and `/twitter/handle/{handle}/about` endpoints.
* **Numeric user ID**: a stable internal ID, distinct from the handle. You can get it from a prior handle lookup's `id` field, or from a tweet's `author.id`. Pass this to `/twitter/user/{id}` and `/twitter/user/{id}/tweets`. Numeric IDs don't change even if a user changes their handle, so prefer caching the ID for repeated lookups.
* **Tweet ID**: the numeric ID in a tweet's URL, e.g. `https://x.com/jack/status/20` → `20`. Pass this to `/twitter/tweet/{id}`.
* Handle and numeric ID resolve to the same user but are not interchangeable inputs — each endpoint accepts only one or the other, not both.

## Python Example

This example fetches all tweets for a user a page at a time, following the `cursor` returned in `pagination.cursor` until `pagination.hasNextPage` is `false` or the page cap is reached:

```python
import requests

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://dashboard.pullbay.com/api"

def get_all_user_tweets(user_id, max_pages=10):
    all_tweets = []
    cursor = None
    pages_fetched = 0
    while pages_fetched < max_pages:
        params = {}
        if cursor:
            params["cursor"] = cursor
        resp = requests.get(
            f"{BASE_URL}/twitter/user/{user_id}/tweets",
            headers={"Authorization": f"Bearer {API_KEY}"},
            params=params,
        )
        resp.raise_for_status()
        body = resp.json()
        all_tweets.extend(body["data"])
        pagination = body.get("pagination") or {}
        if not pagination.get("hasNextPage"):
            break
        cursor = pagination.get("cursor")
        pages_fetched += 1
    return all_tweets

tweets = get_all_user_tweets("44196397")
print(f"Fetched {len(tweets)} tweets")
```

Each request is billed independently, with the charged amount reported in that response's `pricing.creditsCharged` — there's no separate "fetch everything in one call" endpoint, so a multi-page pull like this makes one request per page.

## FAQ

<details>

<summary>How do I find a user's numeric ID if I only have their handle?</summary>

Call `/twitter/handle/{handle}` first — the response's `id` field is the numeric user ID. You can also get a user's numeric ID from `author.id` on any of their tweets.

</details>

<details>

<summary>What's the difference between the basic user lookup and the "about" endpoint?</summary>

The basic lookup (`/twitter/handle/{handle}` or `/twitter/user/{id}`) returns the User object: bio, follower counts, verification status, and engagement counters. The about endpoint (`/twitter/handle/{handle}/about`) returns a separate User About object with different fields — inferred account region, profile image shape, username change count, and verification timestamp. The about endpoint is only available by handle, not by numeric ID.

</details>

<details>

<summary>Is <code>useFirst</code> a boolean?</summary>

No. It's documented and validated as a string with the literal enum values `true` and `false`, not a JSON boolean. Send it as the string `"true"` or `"false"` (e.g. `useFirst=true` in a query string), not as a boolean literal.

</details>

<details>

<summary>How many tweets can I fetch in one call?</summary>

Up to 200 with `maxItems` on Search Twitter or Get User's Tweets. `cursor` and `maxItems` are mutually exclusive — use one or the other per request.

</details>

<details>

<summary>Can I sort search results?</summary>

Yes — `sort` accepts `Top` or `Latest` (default `Latest`). There's no other sort order published for search.

</details>

<details>

<summary>What's the credit cost per request?</summary>

It's dynamic — every response includes `pricing.creditsCharged` with the exact amount for that call. There's no fixed published rate per endpoint or per result.

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.pullbay.com/documentation/api-and-references/twitter-x.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
