> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xquik.com/llms.txt
> Use this file to discover all available pages before exploring further.

# X live status API to check if a user is live

> Check whether a Twitter or X user is broadcasting live right now, with their latest broadcast's title, state, times, and viewer counts. 1 credit per check.

<Panel>
  <Tabs defaultTabIndex={0} sync={false}>
    <Tab title="200" id="response-x-user-live-status-200">
      ```json theme={null}
      {
        "live": false,
        "userId": "11348282",
        "userName": "NASA",
        "broadcast": {
          "id": "1DxLdZyVPMMxm",
          "title": "NASA's SpaceX Crew-12 Re-Entry & Splashdown",
          "state": "Ended",
          "startedAt": "2026-10-08T14:20:33.863Z",
          "endedAt": "2026-10-08T16:38:16.770Z"
        }
      }
      ```
    </Tab>

    <Tab title="400" id="response-x-user-live-status-400">
      ```json theme={null}
      {
        "error": "invalid_input",
        "message": "Invalid input. Check the request body."
      }
      ```
    </Tab>

    <Tab title="401" id="response-x-user-live-status-401">
      ```json theme={null}
      {
        "error": "unauthenticated",
        "message": "Authentication required."
      }
      ```
    </Tab>

    <Tab title="402" id="response-x-user-live-status-402">
      ```json theme={null}
      {
        "error": "insufficient_credits",
        "message": "Insufficient credits. Top up or subscribe to continue."
      }
      ```
    </Tab>

    <Tab title="404" id="response-x-user-live-status-404">
      ```json theme={null}
      {
        "error": "user_not_found",
        "message": "X user not found. Check the username."
      }
      ```
    </Tab>

    <Tab title="424" id="response-x-user-live-status-424">
      ```json theme={null}
      {
        "error": "x_api_unavailable",
        "message": "X data source temporarily unavailable. Try again later."
      }
      ```
    </Tab>

    <Tab title="429" id="response-x-user-live-status-429">
      ```json theme={null}
      {
        "error": "rate_limit_exceeded",
        "message": "Too many requests. Try again later.",
        "retryAfter": 60
      }
      ```
    </Tab>

    <Tab title="502" id="response-x-user-live-status-502">
      ```json theme={null}
      {
        "error": "x_api_unavailable",
        "message": "X data source temporarily unavailable. Try again later."
      }
      ```
    </Tab>

    <Tab title="503" id="response-x-user-live-status-503">
      ```json theme={null}
      {
        "error": "x_api_unavailable",
        "message": "Xquik is busy right now. Retry shortly."
      }
      ```
    </Tab>
  </Tabs>
</Panel>

<blockquote className="agent-llms-directive">
  For the complete documentation index, see <a href="/llms.txt">llms.txt</a>.
</blockquote>

<Callout icon="coins" color="#5c3327">
  **1 credit per check** · [All plans](https://xquik.com/#pricing) from \$0.00012/credit · Supports [guest paid reads](/guides/guest-wallets)
</Callout>

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://xquik.com/api/v1/x/users/nasa/live" \
    -H "x-api-key: xq_your_api_key_here" | jq
  ```

  ```javascript Node.js theme={null}
  const response = await fetch("https://xquik.com/api/v1/x/users/nasa/live", {
    headers: { "x-api-key": "xq_your_api_key_here" },
  });
  const body = await response.json();
  if (!response.ok) throw new Error(JSON.stringify(body));

  if (body.live) {
    console.log(`@${body.userName} is live: ${body.broadcast.title}`);
  } else if (body.broadcast === null) {
    console.log(`@${body.userName} has no broadcast`);
  } else {
    console.log(`@${body.userName} last broadcast ended at ${body.broadcast.endedAt}`);
  }
  ```

  ```python Python theme={null}
  import requests

  response = requests.get(
      "https://xquik.com/api/v1/x/users/nasa/live",
      headers={"x-api-key": "xq_your_api_key_here"},
  )
  body = response.json()
  if not response.ok:
      raise RuntimeError(body)

  broadcast = body["broadcast"]
  if body["live"]:
      print(f'@{body["userName"]} is live: {broadcast["title"]}')
  elif broadcast is None:
      print(f'@{body["userName"]} has no broadcast')
  else:
      print(f'@{body["userName"]} last broadcast ended at {broadcast.get("endedAt")}')
  ```
</CodeGroup>

## Is a user live right now?

Use `GET /x/users/{id}/live` to check whether a user is broadcasting live video on X. Name the user by user ID,
username, or profile URL.

`live` is `true` while the user's latest broadcast is running. `broadcast` is that latest broadcast, live or ended,
with the same fields as [Get broadcast](/api-reference/x/get-broadcast). It is `null` when X shows no broadcast for
the user.

Poll it to alert your team when a creator goes live, or to log when a brand's streams start and end.

## Path parameters

<ParamField path="id" type="string" required>
  User ID, username with or without `@`, or URL-encoded profile URL, such as `x.com/nasa`. See
  [path IDs](/api-reference/overview#path-ids).
</ParamField>

## Headers

<ParamField header="x-api-key" type="string">
  Full account key. Sessions and OAuth also work.
</ParamField>

<ParamField header="Authorization" type="string">
  `Bearer xq_your_guest_key_here` for `paid_reads`.
</ParamField>

## Response

### 200 OK

<ResponseField name="live" type="boolean">
  `true` while the user's latest broadcast is running.
</ResponseField>

<ResponseField name="broadcast" type="object | null">
  The user's latest broadcast, live or ended, or `null` when X shows none. See
  [Get broadcast](/api-reference/x/get-broadcast) for every field.

  <ResponseField name="id" type="string">
    Broadcast ID.
  </ResponseField>

  <ResponseField name="title" type="string">
    Broadcast title.
  </ResponseField>

  <ResponseField name="state" type="string">
    Such as `NotStarted`, `Running`, or `Ended`, as X names it.
  </ResponseField>

  <ResponseField name="startedAt" type="string">
    When the broadcast started, as ISO 8601.
  </ResponseField>

  <ResponseField name="endedAt" type="string">
    When the broadcast ended, as ISO 8601. Omitted while it runs.
  </ResponseField>

  <ResponseField name="totalWatching" type="number">
    Viewers watching, as X counts them.
  </ResponseField>
</ResponseField>

<ResponseField name="userId" type="string">
  ID of the user.
</ResponseField>

<ResponseField name="userName" type="string">
  Username of the user.
</ResponseField>

### 400 Invalid input

```json theme={null}
{ "error": "invalid_user_id" }
```

Send a user ID, a username, or a profile URL.

### 404 User not found

```json theme={null}
{ "error": "user_not_found", "message": "X user not found. Check the username." }
```

A user X does not know is free of charge.

### 401 Unauthenticated

Anonymous requests get `WWW-Authenticate: Bearer` and a guest wallet checkout action. This is not a Payment challenge.

```json theme={null}
{ "error": "unauthenticated" }
```

### 402 Payment required

Account keys get account options. Guest keys get guest top-up only.
No checkout starts automatically. Confirm any payment action.

### 502 X API unavailable

```json theme={null}
{ "error": "x_api_unavailable" }
```

The read service returned an error. Retry after a short delay.

<Note>
  **Related.** [Get broadcast](/api-reference/x/get-broadcast) · [Get user](/api-reference/x/twitter-profile-lookup) · [Get Space](/api-reference/x/get-space)
</Note>

<div className="related-api-links">
  <Accordion title="Related tweet, reply & media APIs" icon="link">
    * Tweets: [Get tweet](/api-reference/x/get-tweet) · [Batch tweets](/api-reference/x/batch-tweets) · [Tweet thread](/api-reference/x/tweet-thread) · [Hidden replies](/api-reference/x/tweet-hidden-replies) · [Translate tweet](/api-reference/x/tweet-translation) · [Embed tweet](/api-reference/x/tweet-embed) · [Resolve links](/api-reference/x/resolve-links) · [Tweet subtitles](/api-reference/x/tweet-subtitles) · [X Article](/api-reference/x/get-article)
    * Analysis: [Sentiment analysis](/api-reference/x/sentiment-analysis) · [Brand mentions](/api-reference/x/brand-monitoring) · [News classification](/api-reference/x/news-classification) · [Market signals](/api-reference/x/market-signals) · [Viral score](/api-reference/x/viral-score) · [Classify posts](/api-reference/x/classify-tweets)
    * Engagement: [Tweet replies](/api-reference/x/tweet-replies) · [Quote tweets](/api-reference/x/tweet-quotes) · [Likers](/api-reference/x/favoriters) · [Reposters](/api-reference/x/retweeters) · [Reposter IDs](/api-reference/x/retweeter-ids) · [Check repost](/api-reference/x/tweet-repost-check)
    * Profiles: [User tweets](/api-reference/x/user-tweets) · [Batch user tweets](/api-reference/x/batch-user-tweets) · [User replies](/api-reference/x/user-replies) · [User likes](/api-reference/x/user-likes) · [User media](/api-reference/x/user-media) · [User highlights](/api-reference/x/user-highlights) · [User articles](/api-reference/x/user-articles)
    * Feeds: [List tweets](/api-reference/x/list-tweets) · [Trends](/api-reference/x/trends) · [Trend locations](/api-reference/x/trend-locations) · [Search Spaces](/api-reference/x/search-spaces) · [Get Space](/api-reference/x/get-space) · [Space replay](/api-reference/x/space-replay) · [Get broadcast](/api-reference/x/get-broadcast) · [User live status](/api-reference/x/user-live-status) · [Hashflags](/api-reference/x/hashflags) · [Search places](/api-reference/x/search-places) · [Download media](/api-reference/x/download-media)
  </Accordion>
</div>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.