> ## 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 player props API with prop lines & odds

> Get the player prop lines & American odds X shows for 1 NFL game, such as passing yards & anytime touchdown scorers, with each player's team. 1 credit.

**200**

```json theme={null}
{
  "id": "2055084502741929984",
  "league": "nfl",
  "sportsbookUrl": null,
  "categories": [],
  "players": {}
}
```

**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."
}
```

**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](https://docs.xquik.com/llms.txt).

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

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

```javascript Node.js theme={null}
const gameId = "2055084502741929984";
const response = await fetch(`https://xquik.com/api/v1/x/sports/nfl/games/${gameId}/player-props`, {
  headers: { "x-api-key": "xq_your_api_key_here" },
});
const game = await response.json();
if (!response.ok) throw new Error(JSON.stringify(game));
for (const category of game.categories) {
  for (const prop of category.props) {
    const player = game.players[prop.playerId];
    console.log(`${category.name}: ${player?.name} ${prop.line ?? ""} ${prop.odds}`);
  }
}
```

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

game_id = "2055084502741929984"
response = requests.get(
    f"https://xquik.com/api/v1/x/sports/nfl/games/{game_id}/player-props",
    headers={"x-api-key": "xq_your_api_key_here"},
)
game = response.json()
if not response.ok:
    raise RuntimeError(game)
for category in game["categories"]:
    for prop in category["props"]:
        player = game["players"].get(prop["playerId"], {})
        print(category["name"], player.get("name"), prop["line"], prop["odds"])
```

## Read player props

Use `GET /x/sports/{league}/games/{id}/player-props` for the prop lines X shows. Find the game ID with
[List football games](https://docs.xquik.com/api-reference/x/sports-games.md).

* `categories` holds each kind of prop, such as passing yards, in X's order.
* Each prop has a `playerId`, the `line`, `odds` & `alternateOdds` in American odds, and
  `openForBetting`.
* `players` holds each player once, keyed by ID, with name, jersey & team.

X lists props before & during a game. A finished game or a game X does not know returns no
categories. A prop without a line, such as the first touchdown scorer, has a null `line`.

## Path parameters

**league** `string` *required*

`nfl`, in any case. X has no college props, so `ncaafb` gets a free `400 unsupported_league`.
Another value gets a free `400 invalid_league`.

**id** `string` *required*

Game ID, a number up to 19 digits, such as `2055084502741929984`. [List football
games](https://docs.xquik.com/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`

Always `nfl`.

**sportsbookUrl** `string`

The sportsbook page X links for these props. Null without props.

**categories** `object[]`

Each kind of prop, in X's order.

**key** `string`

X's key for the prop, such as `passing_yards`.

**name** `string`

The name X shows, such as `Passing Yards`.

**rank** `number`

The category's place in X's order, from 1.

**props** `object[]`

Each player's line, in X's order.

**playerId** `string`

The player, a key of `players`.

**rank** `number`

The line's place in its category, from 1.

**line** `number`

The line the odds price, such as `248.5` yards. Null when the prop has no line.

**odds** `number`

The American odds X shows first, such as `-115` or `240`.

**alternateOdds** `number`

The American odds X shows second. Null for a prop with 1 price.

**openForBetting** `boolean`

Whether the sportsbook takes bets on the line.

**players** `object`

The players these props name, keyed by player ID. X sends each player's name, jersey & team, so
other fields are null.

**id** `string`

The player ID that plays & stats refer to.

**teamId** `string`

The player's team, a key of `teams`.

**name** `string`

The player's full name.

**shortName** `string`

The name play descriptions use, such as `B.Purdy`.

**jersey** `string`

The jersey number, as text.

**position** `string`

The position, such as `QB` or `DE`.

**college** `string`

The college the player came from.

**birthPlace** `string`

Where the player was born. X sends it only for NFL players.

**birthDate** `string`

The birth date, as `YYYY-MM-DD`.

**headshots** `object`

Photo links in `original`, `large`, `medium` & `small`. Any of them can be null.

**xUser** `object`

The player's X account, with `id`, `username` & `blueVerified`. Null when the player has none.
Rosters also fill `protected`, `superFollowEligible` & the highlighted `labelType`, such as
`BusinessLabel`. Other answers send them as null.

### 400 Unsupported league

```json theme={null}
{
  "error": "unsupported_league",
  "message": "Rosters & player props cover nfl only. Send nfl as the league."
}
```

Send `nfl` as the league. A game ID that is not a number gets `invalid_game_id`. Both answers are
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.** [List football games](https://docs.xquik.com/api-reference/x/sports-games.md) · [Get football
> scoreboard](https://docs.xquik.com/api-reference/x/sports-game.md) · [Get NFL game
> rosters](https://docs.xquik.com/api-reference/x/sports-game-roster.md)


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