---
title: "Get football play-by-play"
method: GET
path: "/x/sports/{league}/games/{id}/plays"
tags: ["Sports"]
---

# Get football play-by-play

`GET /x/sports/{league}/games/{id}/plays`

## Request

- Base URL: `https://xquik.com/api/v1`
- URL: `https://xquik.com/api/v1/x/sports/{league}/games/{id}/plays`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer
  - none

Returns every drive & play of 1 game, by quarter. Each play has its clock, down & distance, details, penalties & linked posts. Each request costs 1 credit.

## Path parameters

- `league` 'nfl' | 'ncaafb', required
- `id` string, required

## Query parameters

- `fields` string
- `omit` string

## Response `200`

The game's drives & plays

- FootballPlays: 1 game's drives & plays, by quarter.
  - `id` string, required: The ID of the game these plays come from.
  - `league` 'nfl' | 'ncaafb', required: The league of the game these plays come from.
  - `homeTeamId` string, nullable, required: The home team, a key of teams.
  - `awayTeamId` string, nullable, required: The away team, a key of teams.
  - `quarters` FootballQuarter[], required: The game's quarters, in order. Empty before kickoff.
    - `id` string, nullable, required: X's ID for the quarter within the game.
    - `number` integer, nullable, required: The quarter's number.
    - `sequence` integer, nullable, required: The quarter's place in the game, from 1.
    - `drives` FootballDrive[], required: The quarter's drives, in order.
      - `id` string, nullable, required: X's ID for the drive within the game.
      - `sequence` integer, nullable, required: The drive's place in the game, from 1.
      - `offense` string, nullable, required: The team that drove. Home or Away in NFL games, the team's alternateId in college games.
      - `defense` string, nullable, required: The team on defense. Home or Away in NFL games, the team's alternateId in college games.
      - `startClock` string, nullable, required: The game clock when the drive started, as HH:MM:SS.
      - `endClock` string, nullable, required: The game clock when the drive ended, as HH:MM:SS.
      - `startReason` string, nullable, required: How the drive started, such as Kickoff or Punt.
      - `endReason` string, nullable, required: How the drive ended, such as Touchdown or Punt.
      - `playCount` integer, nullable, required: The drive's plays.
      - `firstDowns` integer, nullable, required: The first downs the drive gained.
      - `netYards` integer, nullable, required: The yards the drive gained.
      - `scoring` boolean, nullable, required: Whether the drive scored.
      - `plays` FootballPlay[], required: The drive's plays, in order.
        - `id` string, nullable, required: X's ID for the play within the game.
        - `sequence` integer, nullable, required: The play's place in its drive, or null when X sends no digits.
        - `clock` string, nullable, required: The game clock when the play started, as HH:MM:SS.
        - `type` string, nullable, required: X's kind of play, such as Pass, Rush, Punt or Conversion.
        - `direction` string, nullable, required: Where the play went, such as Left or Middle.
        - `description` string, nullable, required: The play as the official play-by-play writes it.
        - `scoring` boolean, nullable, required: Whether the play scored points.
        - `homePoints` integer, nullable, required: The home team's points after the play.
        - `awayPoints` integer, nullable, required: The away team's points after the play.
        - `score` object, nullable, required: The points a scoring play added, or null.
          - `homePoints` integer, nullable, required: The home team's score once this scoring play counted.
          - `awayPoints` integer, nullable, required: The away team's score once this scoring play counted.
          - `points` integer, nullable, required: The points the play scored.
        - `start` object, nullable, required: Down & distance when the play started, or null.
          - `down` integer, nullable, required: The down, from 1 to 4.
          - `yardsToGo` integer, nullable, required: The yards needed for a first down.
          - `yardline` integer, nullable, required: The yard line of the ball.
          - `yardlineSide` string, nullable, required: Whose half the ball was in. Home or Away in NFL games, the team's alternateId in college games.
          - `possession` string, nullable, required: The team with the ball. Home or Away in NFL games, the team's alternateId in college games.
        - `onField` object, nullable, required: Flags X shows on the field for the play, or null.
          - `calledBack` boolean, nullable, required: Whether a penalty called the play back.
          - `penaltyOnField` boolean, nullable, required: Whether a flag was thrown.
          - `timeout` boolean, nullable, required: Whether a timeout followed the play.
          - `underReview` boolean, nullable, required: Whether officials were reviewing the play.
        - `details` FootballPlayDetail[], required: The play's steps, in order.
          - `sequence` integer, nullable, required: The step's place in the play, from 1.
          - `category` string, nullable, required: X's kind of step, such as Pass, Tackle or Penalty.
          - `description` string, nullable, required: What happened in the step.
          - `direction` string, nullable, required: The direction X gives for the step.
          - `yards` integer, nullable, required: The yards the step gained or lost.
          - `players` object[], required: The players in the step & their roles.
            - `playerId` string, nullable, required: The player, a key of players.
            - `playerRole` string, nullable, required: The player's role, such as Pass, Receive or Tackle.
          - `penalty` object, nullable, required: The penalty this step called, or null.
            - `description` string, nullable, required: The penalty's name.
            - `nextDown` string, nullable, required: What the penalty does to the down.
            - `result` string, nullable, required: Whether the penalty was accepted or declined.
            - `teamId` string, nullable, required: The penalized team, a key of teams.
            - `yards` integer, nullable, required: The penalty's yards.
        - `post` object, nullable, required: The post X links to the play, or null.
          - `id` string, required: The post's ID.
          - `username` string, nullable, required: The username of the post's author, when X sends it.
        - `videoPostId` string, nullable, required: The ID of a post with the play's video.
        - `videoReplyPostId` string, nullable, required: The ID of a reply with the play's video.
  - `teams` object, required: The teams these plays name, by team ID.
  - `players` object, required: The players these plays name, by player ID.

## Other responses

- `400`: Invalid input. A value past its maxLength gets this answer, & the message names the field & its limit.
- `401`: Unauthenticated
- `402`: Payment required. MPP reads include `WWW-Authenticate`. Authenticated reads include balances, plus checkout when the key can open it. A key that reads only gets the account page instead. A failed request never creates checkout. A caller on a plan gets top-up only, plus `credits_renew_at` when the plan renews. Guest keys offer top-up.
- `404`: Not found
- `424`: Dependency unavailable, unauthorized, or limited. Default v1 uses 502. Best-practice responses use 424 for transparent dependency failures. Search answers 424 `search_unavailable` when X fails the query itself, or when its filters matched none of the last 3,000 posts read. The message says how far back the search read.
- `429`: Too many requests right now. Each user gets 500 reads a second. Each minute allows 120 writes & 60 deletes. `x_api_rate_limited` means X limits this read for now. Neither answer costs anything. Wait for the seconds in `Retry-After`, then retry.
- `502`: Dependency unavailable, unauthorized, or limited. Default v1 uses 502. Best-practice responses use 424 for transparent dependency failures. Search answers 424 `search_unavailable` when X fails the query itself, or when its filters matched none of the last 3,000 posts read. The message says how far back the search read.
- `503`: Retry x_api_unavailable after Retry-After. With X-Xquik-Busy, retry until your deadline.

## Changes

> 68 revisions in range; 1 not diffed.

- **2026-10-23** `e29bc136a9cc`: 4 breaking
  - the `dashboard` response property const value changed from `/dashboard/account` to `/dashboard/billing` for the status `402`
  - the `dashboard` response property const value changed from `/dashboard/account` to `/dashboard/billing` for the status `402`
  - the `dashboard` response property const value changed from `/dashboard/account` to `/dashboard/billing` for the status `402`
  - the `next_step` response property const value changed from `Ask the user to top up at /dashboard/account. This key cannot open checkout.` to `Ask the user to top up at /dashboard/billing. This key cannot open checkout.` for the status `402`
- **2026-10-22** `d94eba2599ff`: 1 info
  - added the required property `teams/additionalProperties/record` to the response with the `200` status
- **2026-10-22** `5840cd7e39fd`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/xquik-dev/apis/xquik-api/changes/x/sports/:league/games/:id/plays/get.md)

---

[API](https://skmtc.dev/xquik-dev/apis/xquik-api.md) - [All operations](https://skmtc.dev/xquik-dev/apis/xquik-api/llms.txt) - [OpenAPI document](https://skmtc.dev/xquik-dev/apis/xquik-api/revisions/4b2c5d75d99b?raw)
