> ## 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.

# NFL & college football live viewers & fan picks API

> Get 1 NFL or college football game's audience on X, with live viewers, fan picks per team, the game chat's state & each team's location. 1 credit per request.

**200**

```json theme={null}
{
  "id": "2055084502741811200",
  "league": "nfl",
  "viewers": {
    "count": 155,
    "asOf": "2026-10-20T06:19:50.000Z"
  },
  "teamPicks": {
    "total": 7976,
    "teams": [
      {
        "teamId": "689566294702555136",
        "count": 4998
      }
    ]
  },
  "chat": {
    "available": false,
    "broadcastId": "nfl-2055084502741811200",
    "opensIn": null
  },
  "teams": {}
}
```

**400**

```json theme={null}
{
  "error": "invalid_input",
  "message": "Invalid input. Check the request body."
}
```

**401**

```json theme={null}
{
  "error": "unauthenticated",
  "message": "Authentication required. Provide a valid API key or bearer token."
}
```

**402**

```json theme={null}
{
  "error": "insufficient_credits",
  "message": "Insufficient credits. Top up or subscribe to continue."
}
```

**404**

```json theme={null}
{
  "error": "not_found",
  "message": "Resource not found."
}
```

**424**

```json theme={null}
{
  "error": "x_api_unavailable",
  "message": "X data source temporarily unavailable. Try again later."
}
```

**429**

```json theme={null}
{
  "error": "rate_limit_exceeded",
  "message": "Too many requests. Try again later.",
  "retryAfter": 60
}
```

**502**

```json theme={null}
{
  "error": "x_api_unavailable",
  "message": "X data source temporarily unavailable. Try again later."
}
```

**503**

```json theme={null}
{
  "error": "x_api_unavailable",
  "message": "Xquik is busy right now. Retry shortly."
}
```

> For the complete documentation index, see [llms.txt](/llms.txt).

**1 credit per request** · [All plans](https://xquik.com/#pricing) from \$0.00012/credit · Direct [MPP](/mpp/machine-payments-protocol.md) at USD 0.00015 per call · Supports [guest paid reads](/guides/guest-wallets.md)

```bash cURL theme={null}
curl "https://xquik.com/api/v1/x/sports/nfl/games/2055084502741811200/audience" \
  -H "x-api-key: xq_your_api_key_here" | jq
```

```javascript Node.js theme={null}
const gameId = "2055084502741811200";
const response = await fetch(`https://xquik.com/api/v1/x/sports/nfl/games/${gameId}/audience`, {
  headers: { "x-api-key": "xq_your_api_key_here" },
});
const audience = await response.json();
if (!response.ok) throw new Error(JSON.stringify(audience));

console.log(`${audience.viewers?.count ?? 0} watching`);
for (const { teamId, count } of audience.teamPicks.teams) {
  console.log(`${audience.teams[teamId]?.name}: ${count} fans`);
}
```

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

game_id = "2055084502741811200"
response = requests.get(
    f"https://xquik.com/api/v1/x/sports/nfl/games/{game_id}/audience",
    headers={"x-api-key": "xq_your_api_key_here"},
)
audience = response.json()
if not response.ok:
    raise RuntimeError(audience)

print((audience["viewers"] or {}).get("count", 0), "watching")
for pick in audience["teamPicks"]["teams"]:
    print(audience["teams"].get(pick["teamId"], {}).get("name"), pick["count"], "fans")
```

## Read who follows a football game

Use `GET /x/sports/{league}/games/{id}/audience` for the crowd around 1 game on X. Find the game ID
with [List football games](/api-reference/x/sports-games.md). Call it again to follow a live game.

* `viewers` has how many people watched the game on X & when X counted them.
* `teamPicks` has how many people picked each team to root for.
* `chat` says whether the game chat is open, or how long until it opens.
* `teams` holds each team once, keyed by ID, with its location.

`viewers` is null until X counts any viewers, as before kickoff. Each `teamId` is a key of `teams`.

## Path parameters

**league** `string` *required*

`nfl` for the NFL or `ncaafb` for college football, in any case. Another value gets a free
`400 invalid_league`.

**id** `string` *required*

Game ID, a number up to 19 digits, such as `2055084502741811200`.
[List football games](/api-reference/x/sports-games.md) returns it as `id`. Another value gets a free
`400 invalid_game_id`.

## Query parameters

**fields** `string`

Fields to keep in each row, comma-separated, such as `id,text,author.username`. Use dots for nested fields. Case & underscores do not matter. A row that lacks a field leaves it out. Cursors, counts & diagnostics always stay. An unknown name returns `400 unknown_field` with the valid names, before any read. The price stays the same.

**omit** `string`

Fields to drop from each row, comma-separated, such as `entities,media`. It takes the same names as `fields`. With `fields`, it drops from the kept fields.

## Headers

**x-api-key** `string`

Full account key. Sessions and OAuth also work.

**Authorization** `string`

`Bearer xq_your_guest_key_here` for `paid_reads`.

## Response

### 200 OK

**id** `string`

The game ID from your request.

**league** `string`

The league from your request, `nfl` or `ncaafb`.

**viewers** `object`

People watching the game on X at X's last count. Null before X counts any.

**count** `number`

How many people watched the game on X.

**asOf** `string`

When X counted them, as an ISO 8601 time.

**teamPicks** `object`

How many people on X picked a team to root for.

**total** `number`

Picks for every team in the game.

**teams** `object[]`

Picks per team. Each has `teamId`, a key of `teams`, & `count`.

**chat** `object`

The game's live chat on X.

**available** `boolean`

Whether the chat is open now.

**broadcastId** `string`

X's ID for the game's chat room, such as `nfl-2055084502741811200`.

**opensIn** `object`

Time left until the chat opens, as `days`, `hours` & `minutes`. Null while it is open & after the
game.

**teams** `object`

The game's teams, keyed by team ID. X sends no short name, alternate ID or X account here, so those
are null. [Get football scoreboard](/api-reference/x/sports-game.md) has them.

**id** `string`

The team ID that games & players refer to.

**name** `string`

The team's full name, such as `San Francisco 49ers`.

**shortName** `string`

The team's short name.

**abbreviation** `string`

The team's abbreviation, such as `SF`.

**alternateId** `string`

Another ID X keeps for the team. College plays & drives name a side by it.

**location** `string`

The school or place the team plays for. College schedules & a game's audience send it.

**colors** `object[]`

The team's colors. Each has `r`, `g` & `b`, from 0 to 255.

**logos** `object`

The team's logo links. `default` is the one X shows. `light` & `dark` suit light or dark
backgrounds.

**xUserId** `string`

The user ID of the team's X account. Pass it to [Get
user](/api-reference/x/twitter-profile-lookup.md).

### 400 Invalid game ID

```json theme={null}
{
  "error": "invalid_game_id",
  "message": "Send a numeric game ID, such as 2055084502741811200."
}
```

The game ID is not a number. A league other than `nfl` or `ncaafb` gets `invalid_league`. Both
answers are free.

### 404 Game not found

```json theme={null}
{
  "error": "game_not_found",
  "message": "Game not found. Find game IDs with GET /x/sports/nfl/games."
}
```

X knows no game with this ID in the league. This answer is free.

### 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 football scoreboard](/api-reference/x/sports-game.md) · [List football games](/api-reference/x/sports-games.md) · [Get football plays](/api-reference/x/sports-game-plays.md)


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