{
  "openapi": "3.1.0",
  "info": {
    "title": "PFF Premium Stats Pro CLI API",
    "version": "2.1.0",
    "summary": "Every operation the pff-pro CLI wraps: the original Premium Stats Pro API, mirrored under /v1, and PFF's own contract under /v2.",
    "description": "The machine-readable contract for the `pff-pro` CLI, served public-read at `GET /openapi.json`\nand `GET /openapi.yaml`. It describes the 59 read-only operations of the original Premium Stats Pro API\nunder `/v1` — league and game reference data, team and player reports, league-wide leaderboards and\nPFF signature stats — and PFF's own operations under `/v2`, starting with the team page.\n\n**Two surfaces, one document.** `servers[].url` is the bare origin, and every path key carries\nits own version prefix. `/v1/...` mirrors the original Premium Stats Pro JSON API exactly — snake_case,\nwire format untouched, the same reports the website has served for years. `/v2/...` is PFF's own\ncontract over the newer data — camelCase, a `columns` + `rows` table shape, and later a CSV form of\nevery table; `team-stats` is its first operation, the rest of the team page follows. Command names\ncome from `operationId`, so which surface a command reaches is not something a caller ever has to\nthink about.\n\n**Every operation also answers `HEAD`**, with the same status and headers and no body.\n\n**No response is cacheable, with exactly one exception.** Every operation below carries\n`cache-control: no-store`. The exception is not an operation at all: this document, served at\n`/openapi.json` and `/openapi.yaml`, carries `cache-control: public, max-age=3600` and a\nstrong `ETag`, so a CLI can revalidate it with `If-None-Match` and get a `304`.\n\n**Every response carries `x-request-id`** — the caller's own `x-request-id` when it sent a\nwell-formed one, and a fresh UUID otherwise. It is repeated in `error.request_id` on every error,\nand it is the one thing worth quoting in a bug report.\n\n**No `Link` headers.** This API never emits `Link: rel=\"next\"`, so a client that auto-paginates on\nit (restish among them) has nothing to follow. Result-set breadth is controlled by the query\nparameters.\n\n**Errors are one shape, always JSON.** Every failure below is\n`{\"error\":{\"code\",\"message\",\"request_id\",\"details\"?}}`, and `error.code` is the field to branch on —\nit is stable, and the human-readable `message` is not. Stable means an existing code never changes its\nmeaning; the table below can still GROW (`rate_limited` arrived in 2.1.0), so a client that switches on\n`error.code` needs a default branch — treat an unknown code by its HTTP status.\n\n| Status | `error.code` | Means |\n| --- | --- | --- |\n| `400` | `invalid_parameter` | A required parameter is missing or empty, or the parameters were rejected. |\n| `401` | `unauthorized` | The credential is missing or was refused; `details.reason` says which. |\n| `403` | `forbidden` | The credential verified but may not do this — see `details.reason` below. |\n| `404` | `not_found` | No such route, or no such report. |\n| `422` | `upstream_error` | The export spans too many weeks or seasons. |\n| `429` | `rate_limited` / `upstream_error` | A budget is exhausted — this API's own per-account one, or the data source's export metering; `Retry-After` says when to come back. |\n| `500` | `internal_error` | This API failed. |\n| `502` | `upstream_error` | The data behind this API failed, or could not be reached. |\n| `503` | `upstream_error` / `session_provisioning` | Temporarily unavailable; `Retry-After` says when to come back. |\n| `504` | `upstream_timeout` | The request did not complete in time. |\n\n**One command per operation.** `operationId` is the command name. The taxonomy is flat\nkebab-case with a family prefix — `ref-`, `team-`, `player-`, `facet-`, `signature-` — because\nthere are no nested command groups to hang a tree off; ten of the commands also answer to a short\nalias (`leagues`, `games`, `players`, `teams`, `passing`, `receiving`, `rushing`, `defense`,\n`blocking`, `special-teams`). A **required** parameter becomes a positional argument, in the order\nthe operation declares it; every other parameter is a `--kebab-case` flag. The `facet` leaderboards\nand `ref-leagues` require nothing, so every filter on them is a flag. The rest take positionals:\n`ref-players` and `team-list` take `league`; `team-overview` takes `league season`; `ref-games`\nand the four `signature` commands take `league season week`; `team-summary` takes\n`league season franchise-id`; the `player-` reports take `league player-id`, and seven of them\n(`player-passing-concept`, `player-passing-depth`, `player-passing-pressure`,\n`player-receiving-depth`, `player-rushing-direction`, `player-snaps-summary`,\n`player-position-pivot`) take `league season player-id`. Each command's `--help` prints its order.\n\n**Budgets.** Every account has a read budget and an export budget, each per minute, shared across\nevery operation here and across both credentials the account may hold; a `/v1` request with\n`export=true` on an operation that honours it, or a `/v2` request with `format=csv`, spends an\nexport slot, and anything else spends a read. Every counted response — refused or not — carries\n`x-ratelimit-limit`, `x-ratelimit-remaining` and `x-ratelimit-reset` (seconds since the Unix\nepoch), so a script can slow down before it is told to; over budget is a `429` with\n`error.code` `rate_limited`, `error.details.scope` naming the budget, and a `Retry-After`.\n`whoami` and `logout` are never counted.\n\n**Retries are the caller's business, and none is a reasonable choice.** Every operation here is a\nread, so retrying one is safe — but an export spends its quota whether or not the attempt\nsucceeds, and this API never sends `Retry-After` on anything a retry would fix except `429` and\n`503`. A restish-based client retries twice by default; `RSH_RETRY=0` in the environment, or\n`--rsh-retry 0` on the command, makes every command a single attempt.\n\n**Authentication.** Every operation below needs one of two credentials, described fully under\n`securitySchemes`: `pffOAuth` — sign in with your PFF account in the browser, once; refresh\nhappens silently afterwards — or `pffApiKey` — a PFF API key, for scripts and CI, created at\nwww.pff.com/account/api-keys (the API-keys section of your pff.com account page). `x-cli-config`\npre-seeds the `pffOAuth` browser flow so `restish api connect` sets it up with no further input; a\nsecond, API-key profile is a client's own to add with `restish api set` (`api configure` was the\nrestish v1 command). `whoami` reports what this API believes about the caller without spending\nanything; `logout` ends this host's access for the credential presented.\n\n**CSV.** 33 of the 59 operations take `?export=true` and answer `200 text/csv` with a\n`Content-Disposition` attachment instead of JSON; on the other 26 the parameter is ignored and is\nnot declared. Ask for `Accept: application/json` even when exporting — `Accept: text/csv` is\nrefused with a `406`, and the CSV content type is set on the response regardless. An **unentitled**\ncaller gets a `200 text/csv` with an empty body rather than a `403`; see `CsvBody`.\n\n**CSV on `/v2`.** Every `/v2` table operation takes `format=csv` (`--format csv`) and answers\n`200 text/csv` with a `Content-Disposition` attachment — the same table as its JSON body, header row\nof column keys, CRLF lines, RFC 4180 quoting; see `CsvTable`. `Accept` is not consulted: one\nmechanism, stated here. Errors keep the JSON envelope whatever `format` asked for.\n\n**Report columns are data-driven.** A report's stat columns are not enumerated here — which ones come\nback depends on the report, the position, the query and the entitlement — so the schemas below pin\nthe envelope and the identity columns exactly and leave the rest to `additionalProperties`.\n\n**Every operation shows a real response.** The example on each `200` below is an actual body — the\nJSON, and the CSV where the operation exports — cut to its first few rows, from one coherent request:\nthe Cincinnati Bengals (franchise `7`) in the 2022 season, week 1, Joe Burrow (player `28022`) and\nthe Bengals' week-1 game (`23108`). Every parameter's `example` is the value that produced them, so\na request assembled from the examples returns the body shown beside it — every row of it, not just\nthe first three. Each example's description says exactly what was asked.",
    "contact": {
      "name": "PFF Premium Stats Pro"
    }
  },
  "servers": [
    {
      "url": "https://api.pff.com",
      "description": "PFF Developer API"
    }
  ],
  "x-cli-config": {
    "profiles": {
      "default": {
        "credentials": {
          "pffOAuth": {
            "auth": {
              "type": "oauth-authorization-code",
              "params": {
                "client_id": "XUtPv8SrFd7WgPSk",
                "authorize_url": "https://clerk.pff.com/oauth/authorize",
                "token_url": "https://clerk.pff.com/oauth/token",
                "scopes": "openid profile email offline_access",
                "redirect_path": "/callback"
              }
            }
          }
        }
      }
    }
  },
  "security": [
    {
      "pffOAuth": [
        "openid",
        "profile",
        "email",
        "offline_access"
      ]
    },
    {
      "pffApiKey": []
    }
  ],
  "tags": [
    {
      "name": "ref",
      "description": "Reference data — the leagues, games and players every other call is filtered by."
    },
    {
      "name": "team",
      "description": "Team-level rosters and reports."
    },
    {
      "name": "player",
      "description": "Single-player reports and snap data."
    },
    {
      "name": "facet",
      "description": "League-wide leaderboards across every player matching the filters. All 28 support ?export=true."
    },
    {
      "name": "signature",
      "description": "PFF signature stats. Nested under `/facet/signature`."
    },
    {
      "name": "auth",
      "description": "Sign-in status and session control for the credential in use."
    },
    {
      "name": "meta",
      "description": "The contract describing itself."
    },
    {
      "name": "position",
      "description": "The by-position report library, league-wide: the same nineteen player reports the `team`\ncommands serve for one club, here for every player in the league at once."
    }
  ],
  "paths": {
    "/v1/leagues": {
      "get": {
        "operationId": "ref-leagues",
        "summary": "List the leagues you can read, with their seasons and weeks",
        "description": "The starting point for everything else, and the one command that takes no arguments at all. Returns\none entry per league you may view — `nfl`, `ncaa`, `aaf` and `ufl` — each carrying its seasons, its\nweek calendar, its named week groups, and the season, week and week group a client should fall back\nto when the caller names none.\n\nThe one operation with no league-entitlement check — a signed-in caller of any tier can list the\nleagues; every other operation needs a session for at least some of what it returns.",
        "tags": [
          "ref"
        ],
        "x-cli-aliases": [
          "leagues"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LeaguesResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Every league the account can read, with its seasons and weeks",
                    "description": "`GET /v1/leagues`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "leagues": [
                        {
                          "abbreviation": "NFL",
                          "default_season": 2026,
                          "default_week": -4,
                          "default_week_group": "PRE",
                          "id": 1,
                          "name": "Pro Football",
                          "seasons": [
                            2026,
                            2025,
                            2024,
                            2023,
                            2022,
                            2021,
                            2020,
                            2019,
                            2018,
                            2017
                          ],
                          "slug": "nfl",
                          "week_groups": [
                            {
                              "default": false,
                              "label": "Preseason",
                              "value": "PRE",
                              "weeks": [
                                -1,
                                -2,
                                -3,
                                -4,
                                -5
                              ]
                            },
                            {
                              "default": false,
                              "label": "Regular",
                              "value": "REG",
                              "weeks": [
                                1,
                                2,
                                3,
                                4,
                                5,
                                6,
                                7,
                                8,
                                9,
                                10
                              ]
                            },
                            {
                              "default": false,
                              "label": "Postseason",
                              "value": "PO",
                              "weeks": [
                                28,
                                29,
                                30,
                                32
                              ]
                            }
                          ],
                          "weeks": [
                            {
                              "abbreviation": "HF",
                              "all_star": false,
                              "display_order": 1,
                              "id": -1,
                              "name": "Hall of Fame",
                              "post_season": false,
                              "pre_season": true,
                              "regular_season": false
                            },
                            {
                              "abbreviation": "P1",
                              "all_star": false,
                              "display_order": 2,
                              "id": -2,
                              "name": "Preseason Week 1",
                              "post_season": false,
                              "pre_season": true,
                              "regular_season": false
                            },
                            {
                              "abbreviation": "P2",
                              "all_star": false,
                              "display_order": 3,
                              "id": -3,
                              "name": "Preseason Week 2",
                              "post_season": false,
                              "pre_season": true,
                              "regular_season": false
                            }
                          ]
                        },
                        {
                          "abbreviation": "NCAA",
                          "default_season": 2026,
                          "default_week": 1,
                          "default_week_group": "REGPO",
                          "id": 2,
                          "name": "College Football",
                          "seasons": [
                            2026,
                            2025,
                            2024,
                            2023,
                            2022,
                            2021,
                            2020,
                            2019,
                            2018,
                            2017
                          ],
                          "slug": "ncaa",
                          "week_groups": [
                            {
                              "default": false,
                              "label": "Regular",
                              "value": "REG",
                              "weeks": [
                                0,
                                1,
                                2,
                                3,
                                4,
                                5,
                                6,
                                7,
                                8,
                                9
                              ]
                            },
                            {
                              "default": false,
                              "label": "Postseason",
                              "value": "PO",
                              "weeks": [
                                17,
                                18,
                                19,
                                20
                              ]
                            },
                            {
                              "default": true,
                              "label": "Reg + Post",
                              "value": "REGPO",
                              "weeks": [
                                0,
                                1,
                                2,
                                3,
                                4,
                                5,
                                6,
                                7,
                                8,
                                9
                              ]
                            }
                          ],
                          "weeks": [
                            {
                              "abbreviation": "0",
                              "all_star": false,
                              "display_order": 1,
                              "id": 0,
                              "name": "Week 0",
                              "post_season": false,
                              "pre_season": false,
                              "regular_season": true
                            },
                            {
                              "abbreviation": "1",
                              "all_star": false,
                              "display_order": 2,
                              "id": 1,
                              "name": "Week 1",
                              "post_season": false,
                              "pre_season": false,
                              "regular_season": true
                            },
                            {
                              "abbreviation": "2",
                              "all_star": false,
                              "display_order": 3,
                              "id": 2,
                              "name": "Week 2",
                              "post_season": false,
                              "pre_season": false,
                              "regular_season": true
                            }
                          ]
                        },
                        {
                          "abbreviation": "AAF",
                          "default_season": 2019,
                          "default_week": 8,
                          "default_week_group": "REGPO",
                          "id": 4,
                          "name": "Alliance of American Football",
                          "seasons": [
                            2019
                          ],
                          "slug": "aaf",
                          "week_groups": [
                            {
                              "default": false,
                              "label": "Preseason",
                              "value": "PRE",
                              "weeks": [
                                -1
                              ]
                            },
                            {
                              "default": false,
                              "label": "Regular",
                              "value": "REG",
                              "weeks": [
                                1,
                                2,
                                3,
                                4,
                                5,
                                6,
                                7,
                                8,
                                9,
                                10
                              ]
                            },
                            {
                              "default": false,
                              "label": "Postseason",
                              "value": "PO",
                              "weeks": [
                                11,
                                12
                              ]
                            }
                          ],
                          "weeks": [
                            {
                              "abbreviation": "P1",
                              "all_star": false,
                              "display_order": 1,
                              "id": -1,
                              "name": "Practice Games",
                              "post_season": false,
                              "pre_season": true,
                              "regular_season": false
                            },
                            {
                              "abbreviation": "1",
                              "all_star": false,
                              "display_order": 2,
                              "id": 1,
                              "name": "Week 1",
                              "post_season": false,
                              "pre_season": false,
                              "regular_season": true
                            },
                            {
                              "abbreviation": "2",
                              "all_star": false,
                              "display_order": 3,
                              "id": 2,
                              "name": "Week 2",
                              "post_season": false,
                              "pre_season": false,
                              "regular_season": true
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/games": {
      "get": {
        "operationId": "ref-games",
        "summary": "List game results for a league, season and week",
        "description": "`league`, `season` and `week` are all required, and restish takes them as positional arguments in\nthat order — `restish pff games nfl 2025 1`. One row per game: kickoff time, the home and away\nfranchise ids, the final score, the venue id and how far the game has been charted. Use a row `id`\nas `--game` on any `facet-` command. This is the one command whose week is a single number rather\nthan a list; `--franchise` narrows it to one team.",
        "tags": [
          "ref"
        ],
        "x-cli-aliases": [
          "games"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season_required"
          },
          {
            "$ref": "#/components/parameters/week_integer"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GamesResponse"
                },
                "examples": {
                  "default": {
                    "summary": "NFL, 2022 season, week 1",
                    "description": "`GET /v1/games?league=nfl&season=2022&week=1`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "games": [
                        {
                          "away_franchise_id": 8,
                          "away_team": {
                            "abbreviation": "CLV",
                            "city": "Cleveland",
                            "color_metadata": null,
                            "display_abbreviation": "CLV",
                            "franchise_id": 8,
                            "mid_abbreviation": null,
                            "nickname": "Browns",
                            "slug": "cleveland-browns"
                          },
                          "has_stats": true,
                          "home_franchise_id": 5,
                          "home_team": {
                            "abbreviation": "CAR",
                            "city": "Carolina",
                            "color_metadata": null,
                            "display_abbreviation": "CAR",
                            "franchise_id": 5,
                            "mid_abbreviation": null,
                            "nickname": "Panthers",
                            "slug": "carolina-panthers"
                          },
                          "id": 23101,
                          "league": {
                            "abbreviation": "NFL",
                            "id": 1,
                            "name": "NFL"
                          },
                          "league_id": 1,
                          "lock_status": "processed",
                          "score": {
                            "away_team": 26,
                            "home_team": 24
                          },
                          "season": 2022,
                          "stadium_id": 8,
                          "start": "2022-09-11T17:00:00Z",
                          "week": 1
                        },
                        {
                          "away_franchise_id": 4,
                          "away_team": {
                            "abbreviation": "BUF",
                            "city": "Buffalo",
                            "color_metadata": null,
                            "display_abbreviation": "BUF",
                            "franchise_id": 4,
                            "mid_abbreviation": null,
                            "nickname": "Bills",
                            "slug": "buffalo-bills"
                          },
                          "has_stats": true,
                          "home_franchise_id": 26,
                          "home_team": {
                            "abbreviation": "LA",
                            "city": "Los Angeles",
                            "color_metadata": null,
                            "display_abbreviation": "LA",
                            "franchise_id": 26,
                            "mid_abbreviation": null,
                            "nickname": "Rams",
                            "slug": "los-angeles-rams"
                          },
                          "id": 23098,
                          "league": {
                            "abbreviation": "NFL",
                            "id": 1,
                            "name": "NFL"
                          },
                          "league_id": 1,
                          "lock_status": "processed",
                          "score": {
                            "away_team": 31,
                            "home_team": 10
                          },
                          "season": 2022,
                          "stadium_id": 56,
                          "start": "2022-09-09T00:20:00Z",
                          "week": 1
                        },
                        {
                          "away_franchise_id": 12,
                          "away_team": {
                            "abbreviation": "GB",
                            "city": "Green Bay",
                            "color_metadata": null,
                            "display_abbreviation": "GB",
                            "franchise_id": 12,
                            "mid_abbreviation": null,
                            "nickname": "Packers",
                            "slug": "green-bay-packers"
                          },
                          "has_stats": true,
                          "home_franchise_id": 18,
                          "home_team": {
                            "abbreviation": "MIN",
                            "city": "Minnesota",
                            "color_metadata": null,
                            "display_abbreviation": "MIN",
                            "franchise_id": 18,
                            "mid_abbreviation": null,
                            "nickname": "Vikings",
                            "slug": "minnesota-vikings"
                          },
                          "id": 23111,
                          "league": {
                            "abbreviation": "NFL",
                            "id": 1,
                            "name": "NFL"
                          },
                          "league_id": 1,
                          "lock_status": "processed",
                          "score": {
                            "away_team": 7,
                            "home_team": 23
                          },
                          "season": 2022,
                          "stadium_id": 54,
                          "start": "2022-09-11T20:25:00Z",
                          "week": 1
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/players": {
      "get": {
        "operationId": "ref-players",
        "summary": "Search the player directory by name or id",
        "description": "`league` is required and taken as the positional argument — `restish pff players nfl --name\nmahomes`. One row per player: id, name, position, jersey number, current team, college, draft\nrecord, and height and weight in inches and pounds. `--name` is a free-text search and `--id` an\nexact lookup; give one of the two, or the request is refused with `400 invalid_parameter`. Use a row\n`id` as the player positional on any `player-` command.\n\n`name` is forwarded upstream as `q`.",
        "tags": [
          "ref"
        ],
        "x-cli-aliases": [
          "players"
        ],
        "x-requires-one-of": {
          "message": "Give name to search, or id for an exact lookup",
          "alternatives": [
            [
              "name"
            ],
            [
              "id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/id"
          },
          {
            "$ref": "#/components/parameters/name"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayersResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Search by name: burrow",
                    "description": "`GET /v1/players?league=nfl&name=burrow`, complete.",
                    "value": {
                      "players": [
                        {
                          "college": "LSU Tigers",
                          "current_class": null,
                          "current_eligible_year": 2020,
                          "dob": "1996-12-10",
                          "draft": {
                            "round": 1,
                            "season": 2020,
                            "selection": 1,
                            "team": {
                              "abbreviation": "CIN",
                              "city": "Cincinnati",
                              "id": 7,
                              "nickname": "Bengals",
                              "primary_color": "#fb4f14",
                              "secondary_color": "#000000",
                              "slug": "cincinnati-bengals"
                            },
                            "type": "AD"
                          },
                          "first_name": "Joe",
                          "height": 604,
                          "id": 28022,
                          "jersey_number": "9",
                          "last_name": "Burrow",
                          "position": "QB",
                          "speed": null,
                          "team": {
                            "abbreviation": "CIN",
                            "city": "Cincinnati",
                            "id": 7,
                            "nickname": "Bengals",
                            "primary_color": "#fb4f14",
                            "secondary_color": "#000000",
                            "slug": "cincinnati-bengals"
                          },
                          "weight": 215
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/teams": {
      "get": {
        "operationId": "team-list",
        "summary": "List a season's teams, franchise groups and schedule",
        "description": "`league` is required and taken as the positional argument — `restish pff team-list nfl --season\n2025`; without `--season` the teams span every era. Three collections in one body: `teams` (the\nseason's franchises with their colours and abbreviations), `franchise_groups` (the conference and\ndivision tree they hang off) and `games` (the season's whole schedule, trimmed to id, both franchise\nids, week and kickoff). Use a `franchise_id` from here as `--franchise` anywhere else, and a game\n`id` as `--game` on any `facet-` command.",
        "tags": [
          "team"
        ],
        "x-cli-aliases": [
          "teams"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamsResponse"
                },
                "examples": {
                  "default": {
                    "summary": "NFL, 2022 season: teams, franchise groups and schedule",
                    "description": "`GET /v1/teams?league=nfl&season=2022`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "franchise_groups": [
                        {
                          "heirarchy": [
                            1
                          ],
                          "id": 1,
                          "name": "AFC",
                          "slug": "afc"
                        },
                        {
                          "heirarchy": [
                            1,
                            2
                          ],
                          "id": 2,
                          "name": "AFC East",
                          "slug": "afc-east"
                        },
                        {
                          "heirarchy": [
                            1,
                            3
                          ],
                          "id": 3,
                          "name": "AFC North",
                          "slug": "afc-north"
                        }
                      ],
                      "games": [
                        {
                          "away_franchise_id": 15,
                          "home_franchise_id": 23,
                          "id": 23370,
                          "start": "2022-08-05T00:00:00Z",
                          "week": -1
                        },
                        {
                          "away_franchise_id": 21,
                          "home_franchise_id": 19,
                          "id": 23371,
                          "start": "2022-08-11T23:00:00Z",
                          "week": -2
                        },
                        {
                          "away_franchise_id": 31,
                          "home_franchise_id": 3,
                          "id": 23372,
                          "start": "2022-08-11T23:30:00Z",
                          "week": -2
                        }
                      ],
                      "teams": [
                        {
                          "abbreviation": "WAS",
                          "city": "Washington",
                          "color_metadata": {
                            "background_color_ref": "#773141",
                            "dark_color_ref": "#773141",
                            "foreground_color": "#ffffff",
                            "helmet_color_ref": "#ffb612",
                            "jersey_color_ref": "#773141",
                            "light_color_ref": "#ffb612",
                            "primary_color": "#773141",
                            "secondary_color": "#ffb612",
                            "tertiary_color": "#ffffff"
                          },
                          "display_abbreviation": "WAS",
                          "end_season": 3000,
                          "franchise_id": 32,
                          "groups": [
                            {
                              "heirarchy": [
                                6
                              ],
                              "id": 6,
                              "name": "NFC",
                              "slug": "nfc"
                            },
                            {
                              "heirarchy": [
                                6,
                                7
                              ],
                              "id": 7,
                              "name": "NFC East",
                              "slug": "nfc-east"
                            }
                          ],
                          "gsis_abbreviation": "COMMAN",
                          "league": "NFL",
                          "league_id": 1,
                          "mid_abbreviation": null,
                          "nickname": "Commanders",
                          "primary_color": "#773141",
                          "secondary_color": "#ffb612",
                          "slug": "washington-commanders",
                          "start_season": 2022,
                          "updated_at": "2022-02-02T14:16:28.421114"
                        },
                        {
                          "abbreviation": "LV",
                          "city": "Las Vegas",
                          "color_metadata": {
                            "background_color_ref": "#000000",
                            "dark_color_ref": "#000000",
                            "foreground_color": "#ffffff",
                            "helmet_color_ref": "#a5acaf",
                            "jersey_color_ref": "#000000",
                            "light_color_ref": "#a5acaf",
                            "primary_color": "#000000",
                            "secondary_color": "#a5acaf",
                            "tertiary_color": "#ffffff"
                          },
                          "display_abbreviation": "LV",
                          "end_season": 3000,
                          "franchise_id": 23,
                          "groups": [
                            {
                              "heirarchy": [
                                1
                              ],
                              "id": 1,
                              "name": "AFC",
                              "slug": "afc"
                            },
                            {
                              "heirarchy": [
                                1,
                                5
                              ],
                              "id": 5,
                              "name": "AFC West",
                              "slug": "afc-west"
                            }
                          ],
                          "gsis_abbreviation": "RAIDER",
                          "league": "NFL",
                          "league_id": 1,
                          "mid_abbreviation": null,
                          "nickname": "Raiders",
                          "primary_color": "#000000",
                          "secondary_color": "#a5acaf",
                          "slug": "las-vegas-raiders",
                          "start_season": 2020,
                          "updated_at": "2020-04-09T16:45:51.743263"
                        },
                        {
                          "abbreviation": "LA",
                          "city": "Los Angeles",
                          "color_metadata": {
                            "background_color_ref": "#003594",
                            "dark_color_ref": "#003594",
                            "foreground_color": "#ffd100",
                            "helmet_color_ref": "#ffd100",
                            "jersey_color_ref": "#003594",
                            "light_color_ref": "#ffd100",
                            "primary_color": "#003594",
                            "secondary_color": "#ffd100",
                            "tertiary_color": "#0c2340"
                          },
                          "display_abbreviation": "LA",
                          "end_season": 3000,
                          "franchise_id": 26,
                          "groups": [
                            {
                              "heirarchy": [
                                6
                              ],
                              "id": 6,
                              "name": "NFC",
                              "slug": "nfc"
                            },
                            {
                              "heirarchy": [
                                6,
                                10
                              ],
                              "id": 10,
                              "name": "NFC West",
                              "slug": "nfc-west"
                            }
                          ],
                          "gsis_abbreviation": "RAMS",
                          "league": "NFL",
                          "league_id": 1,
                          "mid_abbreviation": null,
                          "nickname": "Rams",
                          "primary_color": "#003594",
                          "secondary_color": "#ffd100",
                          "slug": "los-angeles-rams",
                          "start_season": 2020,
                          "updated_at": "2020-04-08T19:48:04.557239"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/teams/overview": {
      "get": {
        "operationId": "team-overview",
        "summary": "Season-to-date team report, one row per team",
        "description": "`league` and `season` are required, and restish takes them as positional arguments in that order —\n`restish pff team-overview nfl 2025`. One row per franchise, totalled over the weeks you ask for;\n`--week` narrows the range and `--franchise` narrows it to one team. Grades are on PFF's 0-100 scale\nand every other column is a raw total or rate; which columns come back depends on the league, the\nquery and the caller's entitlement.",
        "tags": [
          "team"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season_required"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamOverviewResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Every NFL team, 2022 season, week 1",
                    "description": "`GET /v1/teams/overview?league=nfl&season=2022&week=1`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "team_overview": [
                        {
                          "abbreviation": "ARZ",
                          "franchise_id": 1,
                          "grades_coverage_defense": 36.8,
                          "grades_defense": 39.6,
                          "grades_misc_st": 61.1,
                          "grades_offense": 61.2,
                          "grades_overall": 50.5,
                          "grades_pass": 56.2,
                          "grades_pass_block": 57.4,
                          "grades_pass_route": 64.8,
                          "grades_pass_rush_defense": 59,
                          "grades_run": 67.7,
                          "grades_run_block": 53.5,
                          "grades_run_defense": 47,
                          "grades_tackle": 59.6,
                          "losses": 1,
                          "name": "Arizona Cardinals",
                          "points_allowed": 44,
                          "points_scored": 21,
                          "ties": 0,
                          "wins": 0
                        },
                        {
                          "abbreviation": "ATL",
                          "franchise_id": 2,
                          "grades_coverage_defense": 62.4,
                          "grades_defense": 59,
                          "grades_misc_st": 65.8,
                          "grades_offense": 65.4,
                          "grades_overall": 65.9,
                          "grades_pass": 59.8,
                          "grades_pass_block": 80.5,
                          "grades_pass_route": 63.7,
                          "grades_pass_rush_defense": 58,
                          "grades_run": 63.3,
                          "grades_run_block": 62.3,
                          "grades_run_defense": 56.6,
                          "grades_tackle": 63.4,
                          "losses": 1,
                          "name": "Atlanta Falcons",
                          "points_allowed": 27,
                          "points_scored": 26,
                          "ties": 0,
                          "wins": 0
                        },
                        {
                          "abbreviation": "BLT",
                          "franchise_id": 3,
                          "grades_coverage_defense": 65.6,
                          "grades_defense": 68.3,
                          "grades_misc_st": 57.9,
                          "grades_offense": 65.1,
                          "grades_overall": 69.3,
                          "grades_pass": 72.1,
                          "grades_pass_block": 71.6,
                          "grades_pass_route": 62.8,
                          "grades_pass_rush_defense": 78.3,
                          "grades_run": 57.1,
                          "grades_run_block": 57.4,
                          "grades_run_defense": 42.9,
                          "grades_tackle": 51.7,
                          "losses": 0,
                          "name": "Baltimore Ravens",
                          "points_allowed": 9,
                          "points_scored": 24,
                          "ties": 0,
                          "wins": 1
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/teams/summary": {
      "get": {
        "operationId": "team-summary",
        "summary": "Per-game team report for one franchise, one row per game",
        "description": "`league`, `season` and `franchise_id` are all required, and restish takes them as positional\narguments in that order — `restish pff team-summary nfl 2024 14` (franchise ids come from\n`team-list`). One row per game rather than per team, so a range of weeks gives a game-by-game line;\n`--week` narrows it. Grades are on PFF's 0-100 scale and every other column is a raw total or rate;\nwhich columns come back depends on the league, the query and the caller's entitlement.",
        "tags": [
          "team"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season_required"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id_required"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamSummaryResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/teams/summary?league=nfl&season=2022&week=1&franchise_id=7`, complete.",
                    "value": {
                      "team_summary": [
                        {
                          "away": false,
                          "franchise_id": 7,
                          "game_id": 23108,
                          "grades_coverage_defense": 79.7,
                          "grades_defense": 81.4,
                          "grades_misc_st": 51.5,
                          "grades_offense": 62.1,
                          "grades_overall": 69.7,
                          "grades_pass": 52.6,
                          "grades_pass_block": 63.2,
                          "grades_pass_route": 65.6,
                          "grades_pass_rush_defense": 62.8,
                          "grades_run": 60.9,
                          "grades_run_block": 60.8,
                          "grades_run_defense": 82.3,
                          "grades_tackle": 65.5,
                          "home": true,
                          "lock_status": "processed",
                          "opponent": "PIT",
                          "opponent_franchise_id": 25,
                          "points_allowed": 23,
                          "points_scored": 20,
                          "start": "2022-09-11T17:00:00Z",
                          "week": 1
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/player/seasons": {
      "get": {
        "operationId": "player-seasons",
        "summary": "List the seasons a player has data for",
        "description": "`league` and `player` are required, and restish takes them as positional arguments in that order —\n`restish pff player-seasons nfl 4924`. The seasons a player can be asked about, so a client can\noffer a season picker rather than guess. `--season` and `--week` are accepted and make no\ndifference: the answer is the player's whole history either way.\n\nReturns the raw upstream payload — no report envelope.",
        "tags": [
          "player"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/player_id"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerSeasonsResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Joe Burrow (QB)",
                    "description": "`GET /v1/player/seasons?league=nfl&player_id=28022`, complete.",
                    "value": {
                      "seasons": [
                        2026,
                        2025,
                        2024,
                        2023,
                        2022,
                        2021,
                        2020
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/player/snaps/summary": {
      "get": {
        "operationId": "player-snaps-summary",
        "summary": "Snap counts for a player, broken out by position",
        "description": "`league`, `season` and `player` are required, and restish takes them as positional arguments in that\norder — `restish pff player-snaps-summary nfl 2025 4924`. How many snaps a player took, and where.\n`--week` narrows the counts to one week. This is the one command whose `snap_counts` stays a nested\nobject instead of being flattened into `snap_counts_*` columns.\n\nReturns the raw upstream payload — no report envelope.",
        "tags": [
          "player"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season_required"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/player_id"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerSnapsSummaryResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Joe Burrow (QB), 2022 season, week 1",
                    "description": "`GET /v1/player/snaps/summary?league=nfl&season=2022&week=1&player_id=28022`, complete.",
                    "value": {
                      "snaps": {
                        "season": 2022,
                        "snap_counts": {
                          "coverage": 0,
                          "defense": 0,
                          "field_goal": 0,
                          "field_goal_blocking": 0,
                          "field_goal_kicking": 0,
                          "kickoff_coverage": 0,
                          "kickoff_kicking": 0,
                          "kickoff_return_blocking": 0,
                          "kickoff_returning": 0,
                          "offense": 100,
                          "pass": 71,
                          "pass_block": 0,
                          "pass_route": 0,
                          "pass_rush": 0,
                          "punt_coverage": 0,
                          "punt_punting": 0,
                          "punt_return_blocking": 0,
                          "punt_returning": 0,
                          "run": 1,
                          "run_block": 28,
                          "run_defense": 0,
                          "special_teams": 0
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/player/position/pivot": {
      "get": {
        "operationId": "player-position-pivot",
        "summary": "Player snap counts pivoted by position",
        "description": "`league`, `season` and `player` are required, and restish takes them as positional arguments in that\norder — `restish pff player-position-pivot nfl 2025 4924`. One row per position a player lined up\nat, with the snaps taken there; `--week` narrows it. The only export outside the `facet` and\n`signature` families: add `--export true` for the raw CSV instead of JSON.\n\nThe export returns an empty body — no header row — when the caller is not entitled; an entitled\nexport with no matching records still carries its header row.\n\nWith `export=true` the response is `text/csv` as an attachment named\n`player_<player_id>_position_pivot_<season>.csv` instead of JSON.",
        "tags": [
          "player"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season_required"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/player_id"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named\n`player_<player_id>_position_pivot_<season>.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"player_<player_id>_position_pivot_<season>.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PositionPivotResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Joe Burrow (QB), 2022 season, week 1",
                    "description": "`GET /v1/player/position/pivot?league=nfl&season=2022&week=1&player_id=28022`, complete.",
                    "value": {
                      "snaps": [
                        {
                          "group": "QB",
                          "group_order": 0,
                          "positions": [
                            {
                              "group": "QB",
                              "position": "QB",
                              "weeks": [
                                {
                                  "coverage": 0,
                                  "defense": 0,
                                  "field_goal": 0,
                                  "field_goal_blocking": 0,
                                  "field_goal_kicking": 0,
                                  "kickoff_coverage": 0,
                                  "kickoff_kicking": 0,
                                  "kickoff_return_blocking": 0,
                                  "kickoff_returning": 0,
                                  "off_def": "O",
                                  "offense": 100,
                                  "pass": 71,
                                  "pass_block": 0,
                                  "pass_route": 0,
                                  "pass_rush": 0,
                                  "position": "QB",
                                  "position_group": "QB",
                                  "punt_coverage": 0,
                                  "punt_punting": 0,
                                  "punt_return_blocking": 0,
                                  "punt_returning": 0,
                                  "run": 1,
                                  "run_block": 28,
                                  "run_defense": 0,
                                  "special_teams": 0,
                                  "week_id": 1
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Joe Burrow (QB), 2022 season, week 1",
                    "description": "`GET /v1/player/position/pivot?league=nfl&season=2022&week=1&player_id=28022&export=true`, complete.",
                    "value": "position_group,position,week_id,pass,pass_route,pass_block,run,run_block,pass_rush,run_defense,coverage,field_goal_blocking,field_goal,field_goal_kicking,kickoff_return_blocking,kickoff_returning,kickoff_coverage,kickoff_kicking,punt_return_blocking,punt_returning,punt_coverage,punt_punting\r\nQB,QB,1,71,0,0,1,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/player/offense/summary": {
      "get": {
        "operationId": "player-offense-summary",
        "summary": "Offense summary for one player",
        "description": "A player's offensive snaps, production and grades, week by week. `league` and `player` are required,\nand restish takes them as positional arguments in that order — `restish pff <command> nfl 4924\n--season 2025` (player ids come from `ref-players`). Add `--season` for one season, week by week, or\n`--career true` for career and per-season totals; leaving both out is refused with `400\ninvalid_parameter`. `--week` narrows to one week. Grades are on PFF's 0-100 scale and every other\ncolumn is a raw total or rate.",
        "tags": [
          "player"
        ],
        "x-requires-one-of": {
          "message": "Give season for one season, or career=true for career totals",
          "alternatives": [
            [
              "season"
            ],
            [
              "career"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/player_id"
          },
          {
            "$ref": "#/components/parameters/career"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerOffenseSummaryResponse"
                },
                "examples": {
                  "career": {
                    "summary": "Joe Burrow (QB), career totals",
                    "description": "`GET /v1/player/offense/summary?league=nfl&week=1&player_id=28022&career=true`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "offense_summary": {
                        "career": {
                          "declined_penalties": 0,
                          "penalties": 3,
                          "player_id": 28022,
                          "snap_counts_pass": 252,
                          "snap_counts_pass_block": 0,
                          "snap_counts_pass_route": 0,
                          "snap_counts_run": 7,
                          "snap_counts_run_block": 133,
                          "snap_counts_total": 392,
                          "snap_counts_total_pass": 252,
                          "snap_counts_total_run": 140
                        },
                        "seasons": [
                          {
                            "declined_penalties": 0,
                            "franchise_id": [
                              7
                            ],
                            "grades_hands_fumble": 77.4,
                            "grades_offense": 75.6,
                            "grades_offense_penalty": 78.3,
                            "grades_pass": 78.7,
                            "grades_run": 48.1,
                            "grades_run_block": 60,
                            "penalties": 1,
                            "season": 2025,
                            "season_id": 2025,
                            "snap_counts_pass": 30,
                            "snap_counts_pass_block": 0,
                            "snap_counts_pass_route": 0,
                            "snap_counts_run": 0,
                            "snap_counts_run_block": 22,
                            "snap_counts_total": 52,
                            "snap_counts_total_pass": 30,
                            "snap_counts_total_run": 22
                          },
                          {
                            "declined_penalties": 0,
                            "franchise_id": [
                              7
                            ],
                            "grades_hands_fumble": 28.1,
                            "grades_offense": 62.9,
                            "grades_offense_penalty": 78,
                            "grades_pass": 67.2,
                            "grades_run": 49.4,
                            "grades_run_block": 60,
                            "penalties": 0,
                            "season": 2024,
                            "season_id": 2024,
                            "snap_counts_pass": 38,
                            "snap_counts_pass_block": 0,
                            "snap_counts_pass_route": 0,
                            "snap_counts_run": 1,
                            "snap_counts_run_block": 12,
                            "snap_counts_total": 51,
                            "snap_counts_total_pass": 38,
                            "snap_counts_total_run": 13
                          },
                          {
                            "declined_penalties": 0,
                            "franchise_id": [
                              7
                            ],
                            "grades_hands_fumble": 78.5,
                            "grades_offense": 43,
                            "grades_offense_penalty": 0,
                            "grades_pass": 45.2,
                            "grades_run": 60,
                            "grades_run_block": 60,
                            "penalties": 1,
                            "season": 2023,
                            "season_id": 2023,
                            "snap_counts_pass": 35,
                            "snap_counts_pass_block": 0,
                            "snap_counts_pass_route": 0,
                            "snap_counts_run": 1,
                            "snap_counts_run_block": 16,
                            "snap_counts_total": 52,
                            "snap_counts_total_pass": 35,
                            "snap_counts_total_run": 17
                          }
                        ],
                        "subject": {
                          "eligible": "offense",
                          "grade_keys": [
                            "offense",
                            "offense_penalty",
                            "hands_fumble",
                            "screen_block",
                            "run",
                            "pass_block",
                            "run_block",
                            "pass_route",
                            "pass",
                            "snap"
                          ],
                          "league_id": 1,
                          "player_id": 28022,
                          "roster": "offense",
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        }
                      }
                    }
                  },
                  "default": {
                    "summary": "Joe Burrow (QB), 2022 season, week 1",
                    "description": "`GET /v1/player/offense/summary?league=nfl&season=2022&week=1&player_id=28022`, complete.",
                    "value": {
                      "offense_summary": {
                        "subject": {
                          "eligible": "offense",
                          "grade_keys": [
                            "offense",
                            "offense_penalty",
                            "hands_fumble",
                            "screen_block",
                            "run",
                            "pass_block",
                            "run_block",
                            "pass_route",
                            "pass",
                            "snap"
                          ],
                          "league_id": 1,
                          "player_id": 28022,
                          "roster": "offense",
                          "season": 2022,
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        },
                        "week_totals": [
                          {
                            "declined_penalties": 0,
                            "franchise_id": 7,
                            "grades_hands_fumble": 43.8,
                            "grades_offense": 54.8,
                            "grades_offense_penalty": 80.6,
                            "grades_pass": 52.6,
                            "grades_run": 66.3,
                            "grades_run_block": 60,
                            "league_id": 1,
                            "penalties": 0,
                            "player_game_count": 1,
                            "season": 2022,
                            "season_id": 2022,
                            "snap_counts_pass": 71,
                            "snap_counts_pass_block": 0,
                            "snap_counts_pass_route": 0,
                            "snap_counts_run": 1,
                            "snap_counts_run_block": 28,
                            "snap_counts_total": 100,
                            "snap_counts_total_pass": 71,
                            "snap_counts_total_run": 29,
                            "team_name": "CIN"
                          }
                        ],
                        "weeks": [
                          {
                            "away_franchise_id": 25,
                            "away_team_name": "PIT",
                            "declined_penalties": 0,
                            "game": {
                              "away_franchise_id": 25,
                              "away_team_name": "PIT",
                              "game_id": 23108,
                              "home_franchise_id": 7,
                              "home_team_name": "CIN",
                              "player_franchise_id": 7,
                              "position": "QB",
                              "status": "S",
                              "week": 1
                            },
                            "game_id": 23108,
                            "grades_hands_fumble": 43.8,
                            "grades_offense": 54.8,
                            "grades_offense_penalty": 80.6,
                            "grades_pass": 52.6,
                            "grades_run": 66.3,
                            "grades_run_block": 60,
                            "home_franchise_id": 7,
                            "home_team_name": "CIN",
                            "jersey_number": "09",
                            "penalties": 0,
                            "player_franchise_id": 7,
                            "player_id": 28022,
                            "position": "QB",
                            "snap_counts_pass": 71,
                            "snap_counts_pass_block": 0,
                            "snap_counts_pass_route": 0,
                            "snap_counts_run": 1,
                            "snap_counts_run_block": 28,
                            "snap_counts_total": 100,
                            "snap_counts_total_pass": 71,
                            "snap_counts_total_run": 29,
                            "status": "S",
                            "week": 1
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/player/offense/blocking": {
      "get": {
        "operationId": "player-offense-blocking",
        "summary": "Blocking report for one player",
        "description": "A player's blocking snaps and grades, run and pass together, week by week. `league` and `player` are\nrequired, and restish takes them as positional arguments in that order — `restish pff <command> nfl\n4924 --season 2025` (player ids come from `ref-players`). Add `--season` for one season, week by\nweek, or `--career true` for career and per-season totals; leaving both out is refused with `400\ninvalid_parameter`. `--week` narrows to one week. Grades are on PFF's 0-100 scale and every other\ncolumn is a raw total or rate.",
        "tags": [
          "player"
        ],
        "x-requires-one-of": {
          "message": "Give season for one season, or career=true for career totals",
          "alternatives": [
            [
              "season"
            ],
            [
              "career"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/player_id"
          },
          {
            "$ref": "#/components/parameters/career"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerOffenseBlockingResponse"
                },
                "examples": {
                  "career": {
                    "summary": "Ted Karras (C), career totals",
                    "description": "`GET /v1/player/offense/blocking?league=nfl&week=1&player_id=10855&career=true`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "blocking_summary": {
                        "career": {
                          "block_percent": 100,
                          "declined_penalties": 1,
                          "hits_allowed": 1,
                          "hurries_allowed": 6,
                          "non_spike_pass_block": 266,
                          "non_spike_pass_block_percentage": 100,
                          "non_spike_passing": 266,
                          "pass_block_percent": 100,
                          "pbe": 98.7,
                          "penalties": 2,
                          "player_id": 10855,
                          "pressures_allowed": 7,
                          "sacks_allowed": 0,
                          "snap_counts_block": 448,
                          "snap_counts_ce": 391,
                          "snap_counts_lg": 0,
                          "snap_counts_lt": 0,
                          "snap_counts_offense": 448,
                          "snap_counts_pass_block": 287,
                          "snap_counts_pass_play": 287,
                          "snap_counts_rg": 57,
                          "snap_counts_rt": 0,
                          "snap_counts_run_block": 161,
                          "snap_counts_te": 0
                        },
                        "seasons": [
                          {
                            "block_percent": 100,
                            "declined_penalties": 0,
                            "franchise_id": [
                              7
                            ],
                            "grades_offense": 60.9,
                            "grades_pass_block": 65.4,
                            "grades_run_block": 58.8,
                            "hits_allowed": 0,
                            "hurries_allowed": 0,
                            "non_spike_pass_block": 29,
                            "non_spike_pass_block_percentage": 100,
                            "non_spike_passing": 29,
                            "pass_block_percent": 100,
                            "pbe": 100,
                            "penalties": 0,
                            "pressures_allowed": 0,
                            "sacks_allowed": 0,
                            "season": 2025,
                            "season_id": 2025,
                            "snap_counts_block": 52,
                            "snap_counts_ce": 52,
                            "snap_counts_lg": 0,
                            "snap_counts_lt": 0,
                            "snap_counts_offense": 52,
                            "snap_counts_pass_block": 30,
                            "snap_counts_pass_play": 30,
                            "snap_counts_rg": 0,
                            "snap_counts_rt": 0,
                            "snap_counts_run_block": 22,
                            "snap_counts_te": 0
                          },
                          {
                            "block_percent": 100,
                            "declined_penalties": 1,
                            "franchise_id": [
                              7
                            ],
                            "grades_offense": 56.3,
                            "grades_pass_block": 78.4,
                            "grades_run_block": 55.1,
                            "hits_allowed": 0,
                            "hurries_allowed": 0,
                            "non_spike_pass_block": 35,
                            "non_spike_pass_block_percentage": 100,
                            "non_spike_passing": 35,
                            "pass_block_percent": 100,
                            "pbe": 100,
                            "penalties": 1,
                            "pressures_allowed": 0,
                            "sacks_allowed": 0,
                            "season": 2024,
                            "season_id": 2024,
                            "snap_counts_block": 51,
                            "snap_counts_ce": 51,
                            "snap_counts_lg": 0,
                            "snap_counts_lt": 0,
                            "snap_counts_offense": 51,
                            "snap_counts_pass_block": 38,
                            "snap_counts_pass_play": 38,
                            "snap_counts_rg": 0,
                            "snap_counts_rt": 0,
                            "snap_counts_run_block": 13,
                            "snap_counts_te": 0
                          },
                          {
                            "block_percent": 100,
                            "declined_penalties": 0,
                            "franchise_id": [
                              7
                            ],
                            "grades_offense": 63,
                            "grades_pass_block": 37.3,
                            "grades_run_block": 70.7,
                            "hits_allowed": 1,
                            "hurries_allowed": 1,
                            "non_spike_pass_block": 34,
                            "non_spike_pass_block_percentage": 100,
                            "non_spike_passing": 34,
                            "pass_block_percent": 100,
                            "pbe": 97.1,
                            "penalties": 0,
                            "pressures_allowed": 2,
                            "sacks_allowed": 0,
                            "season": 2023,
                            "season_id": 2023,
                            "snap_counts_block": 56,
                            "snap_counts_ce": 56,
                            "snap_counts_lg": 0,
                            "snap_counts_lt": 0,
                            "snap_counts_offense": 56,
                            "snap_counts_pass_block": 36,
                            "snap_counts_pass_play": 36,
                            "snap_counts_rg": 0,
                            "snap_counts_rt": 0,
                            "snap_counts_run_block": 20,
                            "snap_counts_te": 0
                          }
                        ],
                        "subject": {
                          "eligible": "offense",
                          "grade_keys": [
                            "offense",
                            "pass_block",
                            "run_block"
                          ],
                          "league_id": 1,
                          "player_id": 10855,
                          "roster": "offense",
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        }
                      }
                    }
                  },
                  "default": {
                    "summary": "Ted Karras (C), 2022 season, week 1",
                    "description": "`GET /v1/player/offense/blocking?league=nfl&season=2022&week=1&player_id=10855`, complete.",
                    "value": {
                      "blocking_summary": {
                        "subject": {
                          "eligible": "offense",
                          "grade_keys": [
                            "offense",
                            "pass_block",
                            "run_block"
                          ],
                          "league_id": 1,
                          "player_id": 10855,
                          "roster": "offense",
                          "season": 2022,
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        },
                        "week_totals": [
                          {
                            "block_percent": 100,
                            "declined_penalties": 0,
                            "franchise_id": 7,
                            "grades_offense": 68,
                            "grades_pass_block": 76.5,
                            "grades_run_block": 63,
                            "hits_allowed": 0,
                            "hurries_allowed": 0,
                            "league_id": 1,
                            "non_spike_pass_block": 65,
                            "non_spike_pass_block_percentage": 100,
                            "non_spike_passing": 65,
                            "pass_block_percent": 100,
                            "pbe": 100,
                            "penalties": 0,
                            "player_game_count": 1,
                            "pressures_allowed": 0,
                            "sacks_allowed": 0,
                            "season": 2022,
                            "season_id": 2022,
                            "snap_counts_block": 100,
                            "snap_counts_ce": 100,
                            "snap_counts_lg": 0,
                            "snap_counts_lt": 0,
                            "snap_counts_offense": 100,
                            "snap_counts_pass_block": 71,
                            "snap_counts_pass_play": 71,
                            "snap_counts_rg": 0,
                            "snap_counts_rt": 0,
                            "snap_counts_run_block": 29,
                            "snap_counts_te": 0,
                            "team_name": "CIN"
                          }
                        ],
                        "weeks": [
                          {
                            "game": {
                              "away_franchise_id": 25,
                              "away_team_name": "PIT",
                              "game_id": 23108,
                              "home_franchise_id": 7,
                              "home_team_name": "CIN",
                              "player_franchise_id": 7,
                              "position": "C",
                              "status": "S",
                              "week": 1
                            },
                            "grades_pass_block": 76.5,
                            "grades_offense": 68,
                            "game_id": 23108,
                            "pbe": 100,
                            "non_spike_pass_block_percentage": 100,
                            "week": 1,
                            "snap_counts_rg": 0,
                            "status": "S",
                            "jersey_number": "64",
                            "snap_counts_ce": 100,
                            "hits_allowed": 0,
                            "block_percent": 100,
                            "snap_counts_offense": 100,
                            "away_team_name": "PIT",
                            "snap_counts_block": 100,
                            "hurries_allowed": 0,
                            "player_franchise_id": 7,
                            "grades_run_block": 63,
                            "snap_counts_run_block": 29,
                            "pressures_allowed": 0,
                            "snap_counts_pass_play": 71,
                            "penalties": 0,
                            "sacks_allowed": 0,
                            "declined_penalties": 0,
                            "snap_counts_te": 0,
                            "snap_counts_rt": 0,
                            "position": "C",
                            "away_franchise_id": 25,
                            "non_spike_pass_block": 65,
                            "snap_counts_lt": 0,
                            "snap_counts_pass_block": 71,
                            "pass_block_percent": 100,
                            "home_franchise_id": 7,
                            "home_team_name": "CIN",
                            "snap_counts_lg": 0,
                            "non_spike_passing": 65,
                            "player_id": 10855
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/player/offense/pass_blocking": {
      "get": {
        "operationId": "player-offense-pass-blocking",
        "summary": "Pass-blocking report for one player",
        "description": "A player's pass-blocking snaps, pressures allowed and grades, week by week. `league` and `player`\nare required, and restish takes them as positional arguments in that order — `restish pff <command>\nnfl 4924 --season 2025` (player ids come from `ref-players`). Add `--season` for one season, week by\nweek, or `--career true` for career and per-season totals; leaving both out is refused with `400\ninvalid_parameter`. `--week` narrows to one week. Grades are on PFF's 0-100 scale and every other\ncolumn is a raw total or rate.",
        "tags": [
          "player"
        ],
        "x-requires-one-of": {
          "message": "Give season for one season, or career=true for career totals",
          "alternatives": [
            [
              "season"
            ],
            [
              "career"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/player_id"
          },
          {
            "$ref": "#/components/parameters/career"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerOffensePassBlockingResponse"
                },
                "examples": {
                  "career": {
                    "summary": "Ted Karras (C), career totals",
                    "description": "`GET /v1/player/offense/pass_blocking?league=nfl&week=1&player_id=10855&career=true`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "pass_blocking": {
                        "career": {
                          "declined_penalties": 1,
                          "hits_allowed": 1,
                          "hurries_allowed": 6,
                          "non_spike_pass_block": 266,
                          "non_spike_pass_block_percentage": 100,
                          "non_spike_passing": 266,
                          "pass_block_percent": 100,
                          "pbe": 98.7,
                          "penalties": 2,
                          "player_id": 10855,
                          "pressures_allowed": 7,
                          "sacks_allowed": 0,
                          "snap_counts_pass_block": 287,
                          "snap_counts_pass_play": 287,
                          "true_pass_set_hits_allowed": 0,
                          "true_pass_set_hurries_allowed": 4,
                          "true_pass_set_non_spike_pass_block": 125,
                          "true_pass_set_non_spike_pass_block_percentage": 100,
                          "true_pass_set_non_spike_passing": 125,
                          "true_pass_set_pass_block_percent": 100,
                          "true_pass_set_pbe": 98.4,
                          "true_pass_set_pressures_allowed": 4,
                          "true_pass_set_sacks_allowed": 0,
                          "true_pass_set_snap_counts_pass_block": 136,
                          "true_pass_set_snap_counts_pass_play": 136
                        },
                        "seasons": [
                          {
                            "declined_penalties": 0,
                            "franchise_id": [
                              7
                            ],
                            "grades_pass_block": 65.4,
                            "hits_allowed": 0,
                            "hurries_allowed": 0,
                            "non_spike_pass_block": 29,
                            "non_spike_pass_block_percentage": 100,
                            "non_spike_passing": 29,
                            "pass_block_percent": 100,
                            "pbe": 100,
                            "penalties": 0,
                            "pressures_allowed": 0,
                            "sacks_allowed": 0,
                            "season": 2025,
                            "season_id": 2025,
                            "snap_counts_pass_block": 30,
                            "snap_counts_pass_play": 30,
                            "true_pass_set_hits_allowed": 0,
                            "true_pass_set_hurries_allowed": 0,
                            "true_pass_set_non_spike_pass_block": 18,
                            "true_pass_set_non_spike_pass_block_percentage": 100,
                            "true_pass_set_non_spike_passing": 18,
                            "true_pass_set_pass_block_percent": 100,
                            "true_pass_set_pbe": 100,
                            "true_pass_set_pressures_allowed": 0,
                            "true_pass_set_sacks_allowed": 0,
                            "true_pass_set_snap_counts_pass_block": 19,
                            "true_pass_set_snap_counts_pass_play": 19
                          },
                          {
                            "declined_penalties": 1,
                            "franchise_id": [
                              7
                            ],
                            "grades_pass_block": 78.4,
                            "hits_allowed": 0,
                            "hurries_allowed": 0,
                            "non_spike_pass_block": 35,
                            "non_spike_pass_block_percentage": 100,
                            "non_spike_passing": 35,
                            "pass_block_percent": 100,
                            "pbe": 100,
                            "penalties": 1,
                            "pressures_allowed": 0,
                            "sacks_allowed": 0,
                            "season": 2024,
                            "season_id": 2024,
                            "snap_counts_pass_block": 38,
                            "snap_counts_pass_play": 38,
                            "true_pass_set_hits_allowed": 0,
                            "true_pass_set_hurries_allowed": 0,
                            "true_pass_set_non_spike_pass_block": 15,
                            "true_pass_set_non_spike_pass_block_percentage": 100,
                            "true_pass_set_non_spike_passing": 15,
                            "true_pass_set_pass_block_percent": 100,
                            "true_pass_set_pbe": 100,
                            "true_pass_set_pressures_allowed": 0,
                            "true_pass_set_sacks_allowed": 0,
                            "true_pass_set_snap_counts_pass_block": 16,
                            "true_pass_set_snap_counts_pass_play": 16
                          },
                          {
                            "declined_penalties": 0,
                            "franchise_id": [
                              7
                            ],
                            "grades_pass_block": 37.3,
                            "hits_allowed": 1,
                            "hurries_allowed": 1,
                            "non_spike_pass_block": 34,
                            "non_spike_pass_block_percentage": 100,
                            "non_spike_passing": 34,
                            "pass_block_percent": 100,
                            "pbe": 97.1,
                            "penalties": 0,
                            "pressures_allowed": 2,
                            "sacks_allowed": 0,
                            "season": 2023,
                            "season_id": 2023,
                            "snap_counts_pass_block": 36,
                            "snap_counts_pass_play": 36,
                            "true_pass_set_hits_allowed": 0,
                            "true_pass_set_hurries_allowed": 1,
                            "true_pass_set_non_spike_pass_block": 15,
                            "true_pass_set_non_spike_pass_block_percentage": 100,
                            "true_pass_set_non_spike_passing": 15,
                            "true_pass_set_pass_block_percent": 100,
                            "true_pass_set_pbe": 96.7,
                            "true_pass_set_pressures_allowed": 1,
                            "true_pass_set_sacks_allowed": 0,
                            "true_pass_set_snap_counts_pass_block": 16,
                            "true_pass_set_snap_counts_pass_play": 16
                          }
                        ],
                        "subject": {
                          "eligible": "offense",
                          "grade_keys": [
                            "pass_block"
                          ],
                          "league_id": 1,
                          "player_id": 10855,
                          "roster": "offense",
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        }
                      }
                    }
                  },
                  "default": {
                    "summary": "Ted Karras (C), 2022 season, week 1",
                    "description": "`GET /v1/player/offense/pass_blocking?league=nfl&season=2022&week=1&player_id=10855`, complete.",
                    "value": {
                      "pass_blocking": {
                        "subject": {
                          "eligible": "offense",
                          "grade_keys": [
                            "pass_block"
                          ],
                          "league_id": 1,
                          "player_id": 10855,
                          "roster": "offense",
                          "season": 2022,
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        },
                        "week_totals": [
                          {
                            "declined_penalties": 0,
                            "franchise_id": 7,
                            "grades_pass_block": 76.5,
                            "hits_allowed": 0,
                            "hurries_allowed": 0,
                            "league_id": 1,
                            "non_spike_pass_block": 65,
                            "non_spike_pass_block_percentage": 100,
                            "non_spike_passing": 65,
                            "pass_block_percent": 100,
                            "pbe": 100,
                            "penalties": 0,
                            "player_game_count": 1,
                            "pressures_allowed": 0,
                            "sacks_allowed": 0,
                            "season": 2022,
                            "season_id": 2022,
                            "snap_counts_pass_block": 71,
                            "snap_counts_pass_play": 71,
                            "team_name": "CIN",
                            "true_pass_set_hits_allowed": 0,
                            "true_pass_set_hurries_allowed": 0,
                            "true_pass_set_non_spike_pass_block": 39,
                            "true_pass_set_non_spike_pass_block_percentage": 100,
                            "true_pass_set_non_spike_passing": 39,
                            "true_pass_set_pass_block_percent": 100,
                            "true_pass_set_pbe": 100,
                            "true_pass_set_pressures_allowed": 0,
                            "true_pass_set_sacks_allowed": 0,
                            "true_pass_set_snap_counts_pass_block": 44,
                            "true_pass_set_snap_counts_pass_play": 44
                          }
                        ],
                        "weeks": [
                          {
                            "true_pass_set_non_spike_pass_block_percentage": 100,
                            "game": {
                              "away_franchise_id": 25,
                              "away_team_name": "PIT",
                              "game_id": 23108,
                              "home_franchise_id": 7,
                              "home_team_name": "CIN",
                              "player_franchise_id": 7,
                              "position": "C",
                              "status": "S",
                              "week": 1
                            },
                            "true_pass_set_pressures_allowed": 0,
                            "grades_pass_block": 76.5,
                            "true_pass_set_pass_block_percent": 100,
                            "game_id": 23108,
                            "pbe": 100,
                            "non_spike_pass_block_percentage": 100,
                            "week": 1,
                            "status": "S",
                            "jersey_number": "64",
                            "true_pass_set_non_spike_passing": 39,
                            "hits_allowed": 0,
                            "true_pass_set_non_spike_pass_block": 39,
                            "away_team_name": "PIT",
                            "hurries_allowed": 0,
                            "true_pass_set_hurries_allowed": 0,
                            "player_franchise_id": 7,
                            "true_pass_set_snap_counts_pass_play": 44,
                            "true_pass_set_hits_allowed": 0,
                            "pressures_allowed": 0,
                            "true_pass_set_pbe": 100,
                            "snap_counts_pass_play": 71,
                            "penalties": 0,
                            "sacks_allowed": 0,
                            "declined_penalties": 0,
                            "position": "C",
                            "away_franchise_id": 25,
                            "non_spike_pass_block": 65,
                            "true_pass_set_snap_counts_pass_block": 44,
                            "true_pass_set_sacks_allowed": 0,
                            "snap_counts_pass_block": 71,
                            "pass_block_percent": 100,
                            "home_franchise_id": 7,
                            "home_team_name": "CIN",
                            "non_spike_passing": 65,
                            "player_id": 10855
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/player/offense/run_blocking": {
      "get": {
        "operationId": "player-offense-run-blocking",
        "summary": "Run-blocking report for one player",
        "description": "A player's run-blocking snaps and grades, week by week. `league` and `player` are required, and\nrestish takes them as positional arguments in that order — `restish pff <command> nfl 4924 --season\n2025` (player ids come from `ref-players`). Add `--season` for one season, week by week, or\n`--career true` for career and per-season totals; leaving both out is refused with `400\ninvalid_parameter`. `--week` narrows to one week. Grades are on PFF's 0-100 scale and every other\ncolumn is a raw total or rate.",
        "tags": [
          "player"
        ],
        "x-requires-one-of": {
          "message": "Give season for one season, or career=true for career totals",
          "alternatives": [
            [
              "season"
            ],
            [
              "career"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/player_id"
          },
          {
            "$ref": "#/components/parameters/career"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerOffenseRunBlockingResponse"
                },
                "examples": {
                  "career": {
                    "summary": "Ted Karras (C), career totals",
                    "description": "`GET /v1/player/offense/run_blocking?league=nfl&week=1&player_id=10855&career=true`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "run_blocking": {
                        "career": {
                          "declined_penalties": 1,
                          "gap_run_block_percent": 100,
                          "gap_snap_counts_run_block": 73,
                          "gap_snap_counts_run_block_percent": 45.3,
                          "gap_snap_counts_run_play": 73,
                          "penalties": 2,
                          "player_id": 10855,
                          "run_block_percent": 100,
                          "snap_counts_run_block": 161,
                          "snap_counts_run_play": 161,
                          "zone_run_block_percent": 100,
                          "zone_snap_counts_run_block": 62,
                          "zone_snap_counts_run_block_percent": 38.5,
                          "zone_snap_counts_run_play": 62
                        },
                        "seasons": [
                          {
                            "declined_penalties": 0,
                            "franchise_id": [
                              7
                            ],
                            "gap_run_block_percent": 100,
                            "gap_snap_counts_run_block": 13,
                            "gap_snap_counts_run_block_percent": 59.1,
                            "gap_snap_counts_run_play": 13,
                            "grades_run_block": 58.8,
                            "penalties": 0,
                            "run_block_percent": 100,
                            "season": 2025,
                            "season_id": 2025,
                            "snap_counts_run_block": 22,
                            "snap_counts_run_play": 22,
                            "zone_run_block_percent": 100,
                            "zone_snap_counts_run_block": 5,
                            "zone_snap_counts_run_block_percent": 22.7,
                            "zone_snap_counts_run_play": 5
                          },
                          {
                            "declined_penalties": 1,
                            "franchise_id": [
                              7
                            ],
                            "gap_run_block_percent": 100,
                            "gap_snap_counts_run_block": 8,
                            "gap_snap_counts_run_block_percent": 61.5,
                            "gap_snap_counts_run_play": 8,
                            "grades_run_block": 55.1,
                            "penalties": 1,
                            "run_block_percent": 100,
                            "season": 2024,
                            "season_id": 2024,
                            "snap_counts_run_block": 13,
                            "snap_counts_run_play": 13,
                            "zone_run_block_percent": 100,
                            "zone_snap_counts_run_block": 4,
                            "zone_snap_counts_run_block_percent": 30.8,
                            "zone_snap_counts_run_play": 4
                          },
                          {
                            "declined_penalties": 0,
                            "franchise_id": [
                              7
                            ],
                            "gap_run_block_percent": 100,
                            "gap_snap_counts_run_block": 9,
                            "gap_snap_counts_run_block_percent": 45,
                            "gap_snap_counts_run_play": 9,
                            "grades_run_block": 70.7,
                            "penalties": 0,
                            "run_block_percent": 100,
                            "season": 2023,
                            "season_id": 2023,
                            "snap_counts_run_block": 20,
                            "snap_counts_run_play": 20,
                            "zone_run_block_percent": 100,
                            "zone_snap_counts_run_block": 9,
                            "zone_snap_counts_run_block_percent": 45,
                            "zone_snap_counts_run_play": 9
                          }
                        ],
                        "subject": {
                          "eligible": "offense",
                          "grade_keys": [
                            "run_block"
                          ],
                          "league_id": 1,
                          "player_id": 10855,
                          "roster": "offense",
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        }
                      }
                    }
                  },
                  "default": {
                    "summary": "Ted Karras (C), 2022 season, week 1",
                    "description": "`GET /v1/player/offense/run_blocking?league=nfl&season=2022&week=1&player_id=10855`, complete.",
                    "value": {
                      "run_blocking": {
                        "subject": {
                          "eligible": "offense",
                          "grade_keys": [
                            "run_block"
                          ],
                          "league_id": 1,
                          "player_id": 10855,
                          "roster": "offense",
                          "season": 2022,
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        },
                        "week_totals": [
                          {
                            "declined_penalties": 0,
                            "franchise_id": 7,
                            "gap_run_block_percent": 100,
                            "gap_snap_counts_run_block": 12,
                            "gap_snap_counts_run_block_percent": 41.4,
                            "gap_snap_counts_run_play": 12,
                            "grades_run_block": 63,
                            "league_id": 1,
                            "penalties": 0,
                            "player_game_count": 1,
                            "run_block_percent": 100,
                            "season": 2022,
                            "season_id": 2022,
                            "snap_counts_run_block": 29,
                            "snap_counts_run_play": 29,
                            "team_name": "CIN",
                            "zone_run_block_percent": 100,
                            "zone_snap_counts_run_block": 14,
                            "zone_snap_counts_run_block_percent": 48.3,
                            "zone_snap_counts_run_play": 14
                          }
                        ],
                        "weeks": [
                          {
                            "away_franchise_id": 25,
                            "away_team_name": "PIT",
                            "declined_penalties": 0,
                            "game": {
                              "away_franchise_id": 25,
                              "away_team_name": "PIT",
                              "game_id": 23108,
                              "home_franchise_id": 7,
                              "home_team_name": "CIN",
                              "player_franchise_id": 7,
                              "position": "C",
                              "status": "S",
                              "week": 1
                            },
                            "game_id": 23108,
                            "gap_run_block_percent": 100,
                            "gap_snap_counts_run_block": 12,
                            "gap_snap_counts_run_block_percent": 41.4,
                            "gap_snap_counts_run_play": 12,
                            "grades_run_block": 63,
                            "home_franchise_id": 7,
                            "home_team_name": "CIN",
                            "jersey_number": "64",
                            "penalties": 0,
                            "player_franchise_id": 7,
                            "player_id": 10855,
                            "position": "C",
                            "run_block_percent": 100,
                            "snap_counts_run_block": 29,
                            "snap_counts_run_play": 29,
                            "status": "S",
                            "week": 1,
                            "zone_run_block_percent": 100,
                            "zone_snap_counts_run_block": 14,
                            "zone_snap_counts_run_block_percent": 48.3,
                            "zone_snap_counts_run_play": 14
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/player/passing/summary": {
      "get": {
        "operationId": "player-passing-summary",
        "summary": "Passing summary for one player",
        "description": "A passer's attempts, completions, yards, touchdowns, interceptions and grades, week by week.\n`league` and `player` are required, and restish takes them as positional arguments in that order —\n`restish pff <command> nfl 4924 --season 2025` (player ids come from `ref-players`). Add `--season`\nfor one season, week by week, or `--career true` for career and per-season totals; leaving both out\nis refused with `400 invalid_parameter`. `--week` narrows to one week. Grades are on PFF's 0-100\nscale and every other column is a raw total or rate.",
        "tags": [
          "player"
        ],
        "x-requires-one-of": {
          "message": "Give season for one season, or career=true for career totals",
          "alternatives": [
            [
              "season"
            ],
            [
              "career"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/player_id"
          },
          {
            "$ref": "#/components/parameters/career"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerPassingSummaryResponse"
                },
                "examples": {
                  "career": {
                    "summary": "Joe Burrow (QB), career totals",
                    "description": "`GET /v1/player/passing/summary?league=nfl&week=1&player_id=28022&career=true`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "passing_summary": {
                        "career": {
                          "twp_rate": 2.8,
                          "btt_rate": 1.4,
                          "spikes": 2,
                          "dropbacks": 238,
                          "all_attempts": 210,
                          "thrown_aways": 3,
                          "all_dropbacks": 252,
                          "ttt_total_time": 612.5001220703125,
                          "hit_as_threw": 5,
                          "first_downs": 67,
                          "sack_percent": 9.7,
                          "bats": 2,
                          "sacks": 23,
                          "completions": 125,
                          "yards": 1151,
                          "accuracy_percent": 71.7,
                          "scrambles": 14,
                          "interceptions": 5,
                          "positive_epa_plays": 99,
                          "drop_rate": 6.7,
                          "qb_rating": 76.4,
                          "completion_percent": 62.8,
                          "plays_with_epa": 238,
                          "penalties": 3,
                          "attempts": 199,
                          "declined_penalties": 0,
                          "passing_snaps": 252,
                          "pressure_to_sack_rate": 28.8,
                          "ypa": 5.8,
                          "drops": 9,
                          "avg_time_to_throw": 2.57,
                          "big_time_throws": 3,
                          "positive_epa_percent": 41.6,
                          "avg_depth_of_target": 8,
                          "turnover_worthy_plays": 7,
                          "epa": -0.2,
                          "aimed_passes": 187,
                          "player_id": 28022,
                          "touchdowns": 5,
                          "def_gen_pressures": 80
                        },
                        "seasons": [
                          {
                            "grades_offense": 75.6,
                            "twp_rate": 0,
                            "btt_rate": 0,
                            "spikes": 0,
                            "dropbacks": 29,
                            "all_attempts": 24,
                            "season": 2025,
                            "thrown_aways": 0,
                            "all_dropbacks": 30,
                            "grades_pass": 78.7,
                            "ttt_total_time": 84.79999542236328,
                            "hit_as_threw": 1,
                            "first_downs": 7,
                            "sack_percent": 10.3,
                            "bats": 0,
                            "sacks": 3,
                            "completions": 14,
                            "yards": 113,
                            "accuracy_percent": 72.7,
                            "scrambles": 2,
                            "interceptions": 0,
                            "positive_epa_plays": 12,
                            "drop_rate": 12.5,
                            "grades_run": 48.1,
                            "qb_rating": 87.8,
                            "completion_percent": 60.9,
                            "plays_with_epa": 29,
                            "penalties": 1,
                            "attempts": 23,
                            "declined_penalties": 0,
                            "passing_snaps": 30,
                            "pressure_to_sack_rate": 25,
                            "ypa": 4.9,
                            "drops": 2,
                            "season_id": 2025,
                            "grades_hands_fumble": 77.4,
                            "avg_time_to_throw": 2.92,
                            "big_time_throws": 0,
                            "positive_epa_percent": 41.4,
                            "franchise_id": [
                              7
                            ],
                            "avg_depth_of_target": 8.3,
                            "turnover_worthy_plays": 0,
                            "epa": -0.09,
                            "aimed_passes": 22,
                            "touchdowns": 1,
                            "def_gen_pressures": 12
                          },
                          {
                            "grades_offense": 62.9,
                            "twp_rate": 2.6,
                            "btt_rate": 3.3,
                            "spikes": 0,
                            "dropbacks": 35,
                            "all_attempts": 30,
                            "season": 2024,
                            "thrown_aways": 0,
                            "all_dropbacks": 38,
                            "grades_pass": 67.2,
                            "ttt_total_time": 92.4000015258789,
                            "hit_as_threw": 1,
                            "first_downs": 7,
                            "sack_percent": 8.6,
                            "bats": 0,
                            "sacks": 3,
                            "completions": 21,
                            "yards": 164,
                            "accuracy_percent": 82.1,
                            "scrambles": 3,
                            "interceptions": 0,
                            "positive_epa_plays": 13,
                            "drop_rate": 8.7,
                            "grades_run": 49.4,
                            "qb_rating": 86,
                            "completion_percent": 72.4,
                            "plays_with_epa": 35,
                            "penalties": 0,
                            "attempts": 29,
                            "declined_penalties": 0,
                            "passing_snaps": 38,
                            "pressure_to_sack_rate": 37.5,
                            "ypa": 5.7,
                            "drops": 2,
                            "season_id": 2024,
                            "grades_hands_fumble": 28.1,
                            "avg_time_to_throw": 2.64,
                            "big_time_throws": 1,
                            "positive_epa_percent": 37.1,
                            "franchise_id": [
                              7
                            ],
                            "avg_depth_of_target": 5.9,
                            "turnover_worthy_plays": 1,
                            "epa": -0.35,
                            "aimed_passes": 28,
                            "touchdowns": 0,
                            "def_gen_pressures": 8
                          },
                          {
                            "grades_offense": 43,
                            "twp_rate": 0,
                            "btt_rate": 0,
                            "spikes": 0,
                            "dropbacks": 33,
                            "all_attempts": 33,
                            "season": 2023,
                            "thrown_aways": 1,
                            "all_dropbacks": 35,
                            "grades_pass": 45.2,
                            "ttt_total_time": 76.69999694824219,
                            "hit_as_threw": 2,
                            "first_downs": 3,
                            "sack_percent": 6.1,
                            "bats": 0,
                            "sacks": 2,
                            "completions": 14,
                            "yards": 82,
                            "accuracy_percent": 60.7,
                            "scrambles": 0,
                            "interceptions": 0,
                            "positive_epa_plays": 8,
                            "drop_rate": 17.6,
                            "grades_run": 60,
                            "qb_rating": 52.2,
                            "completion_percent": 45.2,
                            "plays_with_epa": 33,
                            "penalties": 1,
                            "attempts": 31,
                            "declined_penalties": 0,
                            "passing_snaps": 35,
                            "pressure_to_sack_rate": 16.7,
                            "ypa": 2.6,
                            "drops": 3,
                            "season_id": 2023,
                            "grades_hands_fumble": 78.5,
                            "avg_time_to_throw": 2.32,
                            "big_time_throws": 0,
                            "positive_epa_percent": 24.2,
                            "franchise_id": [
                              7
                            ],
                            "avg_depth_of_target": 8.3,
                            "turnover_worthy_plays": 0,
                            "epa": -0.63,
                            "aimed_passes": 28,
                            "touchdowns": 0,
                            "def_gen_pressures": 12
                          }
                        ],
                        "subject": {
                          "eligible": "offense",
                          "grade_keys": [
                            "offense",
                            "pass",
                            "run",
                            "hands_fumble"
                          ],
                          "league_id": 1,
                          "player_id": 28022,
                          "roster": "offense",
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        }
                      }
                    }
                  },
                  "default": {
                    "summary": "Joe Burrow (QB), 2022 season, week 1",
                    "description": "`GET /v1/player/passing/summary?league=nfl&season=2022&week=1&player_id=28022`, complete.",
                    "value": {
                      "passing_summary": {
                        "subject": {
                          "eligible": "offense",
                          "grade_keys": [
                            "offense",
                            "pass",
                            "run",
                            "hands_fumble"
                          ],
                          "league_id": 1,
                          "player_id": 28022,
                          "roster": "offense",
                          "season": 2022,
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        },
                        "week_totals": [
                          {
                            "grades_offense": 54.8,
                            "twp_rate": 5.6,
                            "btt_rate": 0,
                            "spikes": 0,
                            "dropbacks": 65,
                            "all_attempts": 58,
                            "season": 2022,
                            "thrown_aways": 1,
                            "league_id": 1,
                            "team_name": "CIN",
                            "all_dropbacks": 71,
                            "grades_pass": 52.6,
                            "ttt_total_time": 171.59999084472656,
                            "hit_as_threw": 1,
                            "first_downs": 24,
                            "sack_percent": 10.8,
                            "bats": 2,
                            "sacks": 7,
                            "player_game_count": 1,
                            "completions": 33,
                            "yards": 338,
                            "accuracy_percent": 71.4,
                            "scrambles": 5,
                            "interceptions": 4,
                            "positive_epa_plays": 30,
                            "drop_rate": 5.7,
                            "grades_run": 66.3,
                            "qb_rating": 61.7,
                            "completion_percent": 62.3,
                            "plays_with_epa": 65,
                            "penalties": 0,
                            "attempts": 53,
                            "declined_penalties": 0,
                            "passing_snaps": 71,
                            "pressure_to_sack_rate": 35,
                            "ypa": 6.4,
                            "drops": 2,
                            "season_id": 2022,
                            "grades_hands_fumble": 43.8,
                            "avg_time_to_throw": 2.64,
                            "big_time_throws": 0,
                            "positive_epa_percent": 46.2,
                            "franchise_id": 7,
                            "avg_depth_of_target": 7.9,
                            "turnover_worthy_plays": 4,
                            "epa": -0.2,
                            "aimed_passes": 49,
                            "touchdowns": 2,
                            "def_gen_pressures": 20
                          }
                        ],
                        "weeks": [
                          {
                            "game": {
                              "away_franchise_id": 25,
                              "away_team_name": "PIT",
                              "game_id": 23108,
                              "home_franchise_id": 7,
                              "home_team_name": "CIN",
                              "player_franchise_id": 7,
                              "position": "QB",
                              "status": "S",
                              "week": 1
                            },
                            "grades_offense": 54.8,
                            "twp_rate": 5.6,
                            "game_id": 23108,
                            "btt_rate": 0,
                            "spikes": 0,
                            "dropbacks": 65,
                            "all_attempts": 58,
                            "thrown_aways": 1,
                            "week": 1,
                            "status": "S",
                            "all_dropbacks": 71,
                            "grades_pass": 52.6,
                            "ttt_total_time": 171.59999084472656,
                            "hit_as_threw": 1,
                            "first_downs": 24,
                            "jersey_number": "09",
                            "sack_percent": 10.8,
                            "bats": 2,
                            "away_team_name": "PIT",
                            "sacks": 7,
                            "completions": 33,
                            "yards": 338,
                            "player_franchise_id": 7,
                            "accuracy_percent": 71.4,
                            "scrambles": 5,
                            "interceptions": 4,
                            "positive_epa_plays": 30,
                            "drop_rate": 5.7,
                            "grades_run": 66.3,
                            "qb_rating": 61.7,
                            "completion_percent": 62.3,
                            "plays_with_epa": 65,
                            "penalties": 0,
                            "attempts": 53,
                            "declined_penalties": 0,
                            "passing_snaps": 71,
                            "pressure_to_sack_rate": 35,
                            "ypa": 6.4,
                            "drops": 2,
                            "position": "QB",
                            "grades_hands_fumble": 43.8,
                            "avg_time_to_throw": 2.64,
                            "away_franchise_id": 25,
                            "big_time_throws": 0,
                            "positive_epa_percent": 46.2,
                            "home_franchise_id": 7,
                            "home_team_name": "CIN",
                            "avg_depth_of_target": 7.9,
                            "turnover_worthy_plays": 4,
                            "epa": -0.2,
                            "aimed_passes": 49,
                            "player_id": 28022,
                            "touchdowns": 2,
                            "def_gen_pressures": 20
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/player/passing/concept": {
      "get": {
        "operationId": "player-passing-concept",
        "summary": "Passing by play concept for one player",
        "description": "A passer's production split by play concept — play action against straight drop-back, and so on.\n`league`, `season` and `player` are required, and restish takes them as positional arguments in that\norder — `restish pff <command> nfl 2025 4924` (player ids come from `ref-players`). Leave one out\nand restish refuses to send the request at all; send one blank and it comes back `400\ninvalid_parameter` naming it. `--career true` is accepted but changes nothing on this report —\n`season` stays required. `--week` narrows to one week. Grades are on PFF's 0-100 scale and every\nother column is a raw total or rate.",
        "tags": [
          "player"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season_required"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/player_id"
          },
          {
            "$ref": "#/components/parameters/career"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerPassingConceptResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Joe Burrow (QB), 2022 season, week 1",
                    "description": "`GET /v1/player/passing/concept?league=nfl&season=2022&week=1&player_id=28022`, complete.",
                    "value": {
                      "passing_concept": [
                        {
                          "comp_pct_diff": 10.56,
                          "pa_grades_pass": 71.3,
                          "grades_offense": 54.8,
                          "no_screen_grades_offense": 54.5,
                          "pa_qb_rating": 92.6,
                          "no_screen_qb_rating": 60.3,
                          "pa_completions": 5,
                          "no_screen_positive_epa_plays": 29,
                          "twp_rate": 5.6,
                          "pa_thrown_aways": 0,
                          "pa_dropbacks_percent": 12.3,
                          "ypa_diff": 1.21,
                          "no_screen_drops": 2,
                          "screen_completion_percent": 75,
                          "npa_bats": 0,
                          "screen_all_attempts": 4,
                          "btt_rate": 0,
                          "no_screen_thrown_aways": 1,
                          "pa_grades_run": null,
                          "screen_plays_with_epa": 4,
                          "screen_pressure_to_sack_rate": null,
                          "pa_drop_rate": 0,
                          "spikes": 0,
                          "npa_ttt_total_time": 152.6999969482422,
                          "screen_grades_offense": 61.1,
                          "dropbacks": 65,
                          "npa_thrown_aways": 1,
                          "all_attempts": 58,
                          "no_screen_def_gen_pressures": 20,
                          "screen_grades_hands_fumble": 66.9,
                          "pa_touchdowns": 0,
                          "npa_ypa": 6.2,
                          "thrown_aways": 1,
                          "screen_avg_time_to_throw": 1.7,
                          "screen_thrown_aways": 0,
                          "npa_sacks": 6,
                          "npa_aimed_passes": 44,
                          "npa_all_attempts": 51,
                          "no_screen_completions": 30,
                          "no_screen_positive_epa_percent": 47.5,
                          "screen_spikes": 0,
                          "pa_first_downs": 3,
                          "pa_big_time_throws": 0,
                          "team_name": "CIN",
                          "pa_spikes": 0,
                          "pa_sack_percent": 12.5,
                          "screen_dropbacks_percent": 6.2,
                          "all_dropbacks": 71,
                          "no_screen_epa": -0.19,
                          "grades_pass": 52.6,
                          "npa_avg_time_to_throw": 2.68,
                          "ttt_total_time": 171.60000610351562,
                          "hit_as_threw": 1,
                          "screen_bats": 1,
                          "first_downs": 24,
                          "pa_all_dropbacks": 8,
                          "screen_grades_run_block": null,
                          "no_screen_bats": 1,
                          "sack_percent": 10.8,
                          "pa_ttt_total_time": 18.899999618530273,
                          "npa_grades_offense": 51.8,
                          "screen_def_gen_pressures": 0,
                          "pa_pressure_to_sack_rate": 50,
                          "screen_sack_percent": 0,
                          "bats": 2,
                          "no_screen_btt_rate": 0,
                          "npa_btt_rate": 0,
                          "screen_interceptions": 0,
                          "no_screen_passing_snaps": 67,
                          "no_screen_grades_hands_fumble": 41.8,
                          "npa_plays_with_epa": 57,
                          "screen_scrambles": 0,
                          "screen_grades_pass": 60.9,
                          "sacks": 7,
                          "npa_qb_rating": 57,
                          "no_screen_grades_pass": 52.2,
                          "pa_avg_time_to_throw": 2.36,
                          "no_screen_plays_with_epa": 61,
                          "screen_twp_rate": 0,
                          "pa_positive_epa_plays": 3,
                          "npa_accuracy_percent": 68.2,
                          "npa_drops": 2,
                          "completions": 33,
                          "screen_yards": 13,
                          "no_screen_drop_rate": 6.3,
                          "no_screen_grades_offense_penalty": 80.5,
                          "npa_passing_snaps": 63,
                          "screen_drop_rate": 0,
                          "screen_epa": -0.29,
                          "yards": 338,
                          "screen_grades_offense_penalty": 69.2,
                          "npa_spikes": 0,
                          "screen_hit_as_threw": 0,
                          "no_screen_aimed_passes": 46,
                          "screen_drops": 0,
                          "accuracy_percent": 71.4,
                          "screen_ypa": 3.3,
                          "npa_twp_rate": 6.3,
                          "screen_accuracy_percent": 100,
                          "npa_hit_as_threw": 1,
                          "scrambles": 5,
                          "pa_accuracy_percent": 100,
                          "pa_def_gen_pressures": 2,
                          "interceptions": 4,
                          "screen_avg_depth_of_target": -1.7,
                          "pa_sacks": 1,
                          "screen_passing_snaps": 4,
                          "positive_epa_plays": 30,
                          "drop_rate": 5.7,
                          "no_screen_grades_run": 66.3,
                          "no_screen_first_downs": 23,
                          "pa_ypa": 7.4,
                          "npa_scrambles": 5,
                          "grades_run": 66.3,
                          "npa_pressure_to_sack_rate": 33.3,
                          "pa_twp_rate": 0,
                          "no_screen_twp_rate": 6,
                          "npa_grades_hands_fumble": 39.6,
                          "qb_rating": 61.7,
                          "screen_positive_epa_plays": 1,
                          "completion_percent": 62.3,
                          "screen_completions": 3,
                          "no_screen_all_attempts": 54,
                          "screen_btt_rate": 0,
                          "npa_grades_run": 66.3,
                          "no_screen_interceptions": 4,
                          "plays_with_epa": 65,
                          "npa_grades_run_block": 60,
                          "no_screen_sacks": 7,
                          "attempts": 53,
                          "no_screen_big_time_throws": 0,
                          "npa_drop_rate": 6.7,
                          "npa_attempts": 46,
                          "screen_qb_rating": 78.1,
                          "npa_grades_offense_penalty": 80.3,
                          "pa_bats": 2,
                          "pa_attempts": 7,
                          "npa_def_gen_pressures": 18,
                          "no_screen_avg_time_to_throw": 2.7,
                          "pa_yards": 52,
                          "npa_positive_epa_percent": 47.4,
                          "no_screen_scrambles": 5,
                          "pa_turnover_worthy_plays": 0,
                          "pa_aimed_passes": 5,
                          "pa_grades_offense": 72.4,
                          "screen_positive_epa_percent": 25,
                          "no_screen_dropbacks": 61,
                          "pa_plays_with_epa": 8,
                          "no_screen_dropbacks_percent": 93.8,
                          "npa_sack_percent": 10.5,
                          "pa_positive_epa_percent": 37.5,
                          "passing_snaps": 71,
                          "pa_grades_run_block": null,
                          "pressure_to_sack_rate": 35,
                          "ypa": 6.4,
                          "drops": 2,
                          "no_screen_turnover_worthy_plays": 4,
                          "grades_hands_fumble": 43.8,
                          "npa_epa": -0.19,
                          "no_screen_avg_depth_of_target": 8.5,
                          "pa_grades_hands_fumble": 70.3,
                          "no_screen_completion_percent": 61.2,
                          "pa_hit_as_threw": 0,
                          "avg_time_to_throw": 2.64,
                          "pa_grades_offense_penalty": 71.5,
                          "npa_dropbacks_percent": 87.7,
                          "npa_grades_pass": 49.4,
                          "big_time_throws": 0,
                          "screen_grades_run": null,
                          "screen_first_downs": 1,
                          "npa_completion_percent": 60.9,
                          "screen_ttt_total_time": 6.800000190734863,
                          "screen_all_dropbacks": 4,
                          "no_screen_grades_run_block": 60,
                          "no_screen_hit_as_threw": 1,
                          "screen_turnover_worthy_plays": 0,
                          "npa_avg_depth_of_target": 8.1,
                          "npa_dropbacks": 57,
                          "npa_all_dropbacks": 63,
                          "pa_drops": 0,
                          "pa_btt_rate": 0,
                          "positive_epa_percent": 46.2,
                          "franchise_id": 7,
                          "screen_big_time_throws": 0,
                          "screen_aimed_passes": 3,
                          "npa_touchdowns": 2,
                          "npa_positive_epa_plays": 27,
                          "screen_attempts": 4,
                          "screen_dropbacks": 4,
                          "no_screen_yards": 325,
                          "pa_scrambles": 0,
                          "pa_completion_percent": 71.4,
                          "pa_avg_depth_of_target": 5.8,
                          "pa_interceptions": 0,
                          "no_screen_accuracy_percent": 69.6,
                          "no_screen_spikes": 0,
                          "pa_dropbacks": 8,
                          "npa_big_time_throws": 0,
                          "no_screen_sack_percent": 11.5,
                          "avg_depth_of_target": 7.9,
                          "turnover_worthy_plays": 4,
                          "epa": -0.2,
                          "pa_epa": -0.27,
                          "no_screen_attempts": 49,
                          "pa_passing_snaps": 8,
                          "aimed_passes": 49,
                          "npa_completions": 28,
                          "screen_touchdowns": 0,
                          "pa_all_attempts": 7,
                          "no_screen_ttt_total_time": 164.79998779296875,
                          "npa_first_downs": 21,
                          "no_screen_touchdowns": 2,
                          "player_id": 28022,
                          "npa_yards": 286,
                          "no_screen_ypa": 6.6,
                          "npa_turnover_worthy_plays": 4,
                          "npa_interceptions": 4,
                          "touchdowns": 2,
                          "no_screen_pressure_to_sack_rate": 35,
                          "no_screen_all_dropbacks": 67,
                          "screen_sacks": 0,
                          "def_gen_pressures": 20
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/player/passing/depth": {
      "get": {
        "operationId": "player-passing-depth",
        "summary": "Passing by target depth for one player",
        "description": "A passer's production split by how far downfield the throw travelled. `league`, `season` and\n`player` are required, and restish takes them as positional arguments in that order — `restish pff\n<command> nfl 2025 4924` (player ids come from `ref-players`). Leave one out and restish refuses to\nsend the request at all; send one blank and it comes back `400 invalid_parameter` naming it.\n`--career true` is accepted but changes nothing on this report — `season` stays required. `--week`\nnarrows to one week. Grades are on PFF's 0-100 scale and every other column is a raw total or rate.",
        "tags": [
          "player"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season_required"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/player_id"
          },
          {
            "$ref": "#/components/parameters/career"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerPassingDepthResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Joe Burrow (QB), 2022 season, week 1",
                    "description": "`GET /v1/player/passing/depth?league=nfl&season=2022&week=1&player_id=28022`, complete.",
                    "value": {
                      "passing_depth": [
                        {
                          "left_behind_los_accuracy_percent": 100,
                          "left_short_scrambles": 0,
                          "center_short_first_downs": 7,
                          "right_short_bats": 0,
                          "center_short_all_dropbacks": 15,
                          "right_behind_los_positive_epa_percent": 100,
                          "left_behind_los_completions": 1,
                          "left_medium_dropbacks": 3,
                          "right_medium_grades_pass": 26.2,
                          "right_medium_hit_as_threw": 0,
                          "behind_los_attempts_percent": 9.4,
                          "grades_offense": 54.8,
                          "left_short_all_dropbacks": 6,
                          "right_short_turnover_worthy_plays": 0,
                          "right_medium_qb_rating": 40.6,
                          "deep_twp_rate": 16.7,
                          "center_medium_sacks": 0,
                          "medium_interceptions": 2,
                          "left_deep_completions": 0,
                          "center_behind_los_ttt_total_time": 4.300000190734863,
                          "twp_rate": 5.6,
                          "behind_los_spikes": 0,
                          "medium_aimed_passes": 13,
                          "center_behind_los_drops": 0,
                          "right_behind_los_all_dropbacks": 2,
                          "center_behind_los_interceptions": 0,
                          "behind_los_dropbacks": 5,
                          "left_behind_los_interceptions": 0,
                          "left_deep_first_downs": 0,
                          "deep_passing_snaps": 6,
                          "btt_rate": 0,
                          "center_short_btt_rate": 0,
                          "center_medium_thrown_aways": 0,
                          "center_deep_avg_depth_of_target": 25,
                          "center_short_drops": 1,
                          "center_deep_first_downs": 1,
                          "left_medium_completion_percent": 33.3,
                          "center_deep_attempts": 2,
                          "center_behind_los_attempts": 2,
                          "right_short_positive_epa_percent": 71.4,
                          "center_deep_aimed_passes": 2,
                          "right_deep_grades_pass": 60.7,
                          "right_medium_big_time_throws": 0,
                          "deep_sack_percent": 0,
                          "center_medium_pressure_to_sack_rate": 0,
                          "deep_sacks": 0,
                          "right_medium_ypa": 8.8,
                          "spikes": 0,
                          "left_deep_drop_rate": null,
                          "right_medium_attempts_percent": 7.5,
                          "right_deep_btt_rate": 0,
                          "center_short_attempts_percent": 28.3,
                          "deep_drops": 0,
                          "center_behind_los_big_time_throws": 0,
                          "center_behind_los_touchdowns": 0,
                          "dropbacks": 65,
                          "right_behind_los_twp_rate": 0,
                          "left_deep_all_attempts": 1,
                          "center_deep_completions": 1,
                          "center_short_attempts": 15,
                          "left_behind_los_sack_percent": 0,
                          "right_short_ttt_total_time": 14,
                          "center_short_pressure_to_sack_rate": 0,
                          "deep_touchdowns": 0,
                          "all_attempts": 58,
                          "center_behind_los_accuracy_percent": 100,
                          "center_deep_drop_rate": 0,
                          "left_behind_los_positive_epa_plays": 1,
                          "right_short_first_downs": 4,
                          "right_behind_los_first_downs": 1,
                          "short_interceptions": 1,
                          "center_medium_scrambles": 0,
                          "left_behind_los_sacks": 0,
                          "behind_los_positive_epa_plays": 4,
                          "left_short_ypa": 4,
                          "left_short_qb_rating": 60.4,
                          "thrown_aways": 1,
                          "right_behind_los_qb_rating": 110.4,
                          "right_behind_los_dropbacks": 2,
                          "center_behind_los_all_dropbacks": 2,
                          "behind_los_def_gen_pressures": 1,
                          "right_short_thrown_aways": 0,
                          "deep_def_gen_pressures": 1,
                          "right_short_btt_rate": 0,
                          "center_behind_los_positive_epa_percent": 50,
                          "left_behind_los_grades_pass": 60.1,
                          "deep_grades_pass": 50.3,
                          "center_short_turnover_worthy_plays": 0,
                          "center_behind_los_scrambles": 0,
                          "right_short_aimed_passes": 7,
                          "left_medium_ttt_total_time": 7.000000476837158,
                          "center_short_dropbacks": 15,
                          "medium_epa": -0.15,
                          "right_short_ypa": 4.4,
                          "center_medium_ypa": 10.5,
                          "medium_attempts": 13,
                          "right_deep_accuracy_percent": 0,
                          "behind_los_scrambles": 0,
                          "center_behind_los_completion_percent": 100,
                          "left_behind_los_btt_rate": 0,
                          "right_behind_los_btt_rate": 0,
                          "team_name": "CIN",
                          "short_touchdowns": 2,
                          "medium_ttt_total_time": 36,
                          "center_medium_drops": 1,
                          "left_behind_los_aimed_passes": 1,
                          "deep_attempts": 5,
                          "right_behind_los_sack_percent": 0,
                          "center_short_positive_epa_percent": 60,
                          "deep_avg_depth_of_target": 23.4,
                          "left_deep_btt_rate": 0,
                          "medium_scrambles": 0,
                          "right_short_all_attempts": 7,
                          "center_behind_los_avg_depth_of_target": -2.5,
                          "short_attempts_percent": 49.1,
                          "right_behind_los_sacks": 0,
                          "center_medium_avg_time_to_throw": 2.53,
                          "all_dropbacks": 71,
                          "left_short_ttt_total_time": 10.399999618530273,
                          "left_short_pressure_to_sack_rate": null,
                          "center_deep_sack_percent": 0,
                          "center_deep_ypa": 11,
                          "left_behind_los_hit_as_threw": 0,
                          "medium_big_time_throws": 0,
                          "grades_pass": 52.6,
                          "deep_thrown_aways": 0,
                          "right_short_accuracy_percent": 85.7,
                          "left_deep_turnover_worthy_plays": 0,
                          "center_medium_bats": 0,
                          "right_short_grades_pass": 80.4,
                          "ttt_total_time": 171.60000610351562,
                          "hit_as_threw": 1,
                          "right_deep_spikes": 0,
                          "left_deep_passing_snaps": 1,
                          "deep_all_dropbacks": 6,
                          "center_medium_twp_rate": 14.3,
                          "right_behind_los_passing_snaps": 2,
                          "left_deep_qb_rating": 39.6,
                          "right_deep_drop_rate": null,
                          "right_medium_positive_epa_plays": 2,
                          "first_downs": 24,
                          "center_medium_all_dropbacks": 7,
                          "left_behind_los_drop_rate": 0,
                          "left_medium_drop_rate": 0,
                          "right_deep_attempts": 2,
                          "left_deep_spikes": 0,
                          "left_deep_all_dropbacks": 1,
                          "center_behind_los_dropbacks": 2,
                          "right_deep_big_time_throws": 0,
                          "medium_hit_as_threw": 0,
                          "right_short_dropbacks": 7,
                          "medium_def_gen_pressures": 3,
                          "left_short_positive_epa_percent": 50,
                          "left_deep_ttt_total_time": 1.899999976158142,
                          "left_short_attempts": 4,
                          "center_deep_twp_rate": 50,
                          "right_medium_avg_time_to_throw": 3.45,
                          "left_behind_los_qb_rating": 112.5,
                          "left_behind_los_dropbacks": 1,
                          "left_behind_los_ttt_total_time": 2.299999952316284,
                          "deep_dropbacks": 5,
                          "right_behind_los_scrambles": 0,
                          "sack_percent": 10.8,
                          "behind_los_interceptions": 0,
                          "right_deep_drops": 0,
                          "right_deep_yards": 0,
                          "right_short_hit_as_threw": 0,
                          "center_behind_los_positive_epa_plays": 1,
                          "right_short_avg_depth_of_target": 3.7,
                          "short_bats": 0,
                          "right_deep_twp_rate": 0,
                          "right_behind_los_pressure_to_sack_rate": 0,
                          "deep_spikes": 0,
                          "center_medium_spikes": 0,
                          "behind_los_aimed_passes": 5,
                          "right_behind_los_touchdowns": 0,
                          "bats": 2,
                          "right_medium_pressure_to_sack_rate": 0,
                          "center_medium_plays_with_epa": 6,
                          "medium_thrown_aways": 0,
                          "short_sacks": 0,
                          "behind_los_all_attempts": 5,
                          "center_behind_los_twp_rate": 0,
                          "left_behind_los_attempts": 1,
                          "short_aimed_passes": 26,
                          "short_completions": 21,
                          "right_short_pressure_to_sack_rate": 0,
                          "medium_avg_depth_of_target": 13.7,
                          "left_behind_los_positive_epa_percent": 100,
                          "center_medium_attempts_percent": 11.3,
                          "left_medium_touchdowns": 0,
                          "center_short_bats": 0,
                          "left_deep_avg_time_to_throw": 1.9,
                          "center_behind_los_passing_snaps": 2,
                          "center_short_yards": 120,
                          "right_medium_btt_rate": 0,
                          "right_medium_scrambles": 0,
                          "medium_btt_rate": 0,
                          "left_short_positive_epa_plays": 2,
                          "right_behind_los_positive_epa_plays": 2,
                          "center_behind_los_btt_rate": 0,
                          "left_medium_all_attempts": 3,
                          "center_short_avg_depth_of_target": 3.4,
                          "left_medium_sacks": 0,
                          "right_short_yards": 31,
                          "left_medium_first_downs": 1,
                          "behind_los_ttt_total_time": 10.100000381469727,
                          "right_medium_positive_epa_percent": 50,
                          "left_short_big_time_throws": 0,
                          "deep_turnover_worthy_plays": 1,
                          "left_deep_bats": 0,
                          "left_medium_turnover_worthy_plays": 0,
                          "center_short_ttt_total_time": 37.20000076293945,
                          "center_deep_drops": 0,
                          "center_medium_avg_depth_of_target": 12.5,
                          "sacks": 7,
                          "center_behind_los_ypa": 3.5,
                          "right_short_attempts": 7,
                          "center_short_plays_with_epa": 15,
                          "center_medium_completion_percent": 50,
                          "right_short_sack_percent": 0,
                          "left_behind_los_avg_depth_of_target": -3,
                          "center_medium_epa": 0.13,
                          "center_behind_los_sack_percent": 0,
                          "medium_completions": 6,
                          "medium_sack_percent": 0,
                          "left_short_grades_pass": 57.4,
                          "deep_btt_rate": 0,
                          "left_short_accuracy_percent": 50,
                          "short_twp_rate": 0,
                          "short_passing_snaps": 28,
                          "left_deep_sacks": 0,
                          "short_scrambles": 0,
                          "center_medium_turnover_worthy_plays": 1,
                          "behind_los_drop_rate": 0,
                          "right_behind_los_epa": 0.65,
                          "right_medium_aimed_passes": 4,
                          "short_accuracy_percent": 84.6,
                          "short_btt_rate": 0,
                          "right_short_touchdowns": 2,
                          "center_short_completions": 13,
                          "right_short_spikes": 0,
                          "behind_los_first_downs": 2,
                          "right_medium_def_gen_pressures": 1,
                          "deep_pressure_to_sack_rate": 0,
                          "right_deep_all_attempts": 3,
                          "medium_qb_rating": 36.2,
                          "short_completion_percent": 80.8,
                          "right_deep_attempts_percent": 3.8,
                          "short_big_time_throws": 0,
                          "behind_los_attempts": 5,
                          "center_behind_los_yards": 7,
                          "center_behind_los_bats": 0,
                          "center_behind_los_qb_rating": 81.3,
                          "right_deep_pressure_to_sack_rate": null,
                          "center_short_accuracy_percent": 93.3,
                          "left_behind_los_bats": 0,
                          "left_behind_los_all_attempts": 1,
                          "center_deep_passing_snaps": 2,
                          "right_behind_los_hit_as_threw": 0,
                          "medium_bats": 0,
                          "right_medium_first_downs": 2,
                          "completions": 33,
                          "medium_spikes": 0,
                          "left_deep_thrown_aways": 0,
                          "right_deep_epa": -0.46,
                          "left_deep_plays_with_epa": 1,
                          "center_medium_hit_as_threw": 0,
                          "left_behind_los_completion_percent": 100,
                          "center_short_ypa": 8,
                          "right_short_drop_rate": 0,
                          "right_behind_los_accuracy_percent": 100,
                          "left_short_yards": 16,
                          "deep_accuracy_percent": 20,
                          "right_behind_los_avg_depth_of_target": -1.5,
                          "center_behind_los_thrown_aways": 0,
                          "center_behind_los_attempts_percent": 3.8,
                          "right_deep_first_downs": 0,
                          "left_short_completions": 2,
                          "deep_completion_percent": 20,
                          "left_deep_positive_epa_percent": 0,
                          "yards": 338,
                          "right_deep_sack_percent": 0,
                          "behind_los_pressure_to_sack_rate": 0,
                          "right_deep_touchdowns": 0,
                          "left_behind_los_def_gen_pressures": 0,
                          "left_behind_los_drops": 0,
                          "deep_epa": -0.51,
                          "left_deep_ypa": 0,
                          "medium_touchdowns": 0,
                          "left_medium_grades_pass": 60.6,
                          "accuracy_percent": 71.4,
                          "right_behind_los_spikes": 0,
                          "medium_grades_pass": 39.2,
                          "behind_los_passing_snaps": 5,
                          "left_short_first_downs": 2,
                          "center_short_passing_snaps": 15,
                          "center_deep_accuracy_percent": 50,
                          "right_deep_positive_epa_percent": 0,
                          "right_medium_sack_percent": 0,
                          "right_deep_qb_rating": 39.6,
                          "right_short_completion_percent": 85.7,
                          "right_behind_los_interceptions": 0,
                          "behind_los_yards": 39,
                          "center_behind_los_grades_pass": 62.1,
                          "left_deep_dropbacks": 1,
                          "center_behind_los_spikes": 0,
                          "scrambles": 5,
                          "center_medium_positive_epa_plays": 3,
                          "right_behind_los_aimed_passes": 2,
                          "left_short_interceptions": 0,
                          "right_medium_interceptions": 1,
                          "left_behind_los_yards": 11,
                          "center_deep_btt_rate": 0,
                          "medium_first_downs": 6,
                          "left_short_avg_depth_of_target": 6.5,
                          "left_behind_los_ypa": 11,
                          "short_attempts": 26,
                          "right_medium_bats": 0,
                          "left_behind_los_touchdowns": 0,
                          "right_medium_dropbacks": 4,
                          "interceptions": 4,
                          "short_turnover_worthy_plays": 0,
                          "positive_epa_plays": 30,
                          "right_deep_thrown_aways": 0,
                          "drop_rate": 5.7,
                          "right_behind_los_drop_rate": 0,
                          "right_short_qb_rating": 85.1,
                          "medium_sacks": 0,
                          "center_deep_attempts_percent": 3.8,
                          "left_short_dropbacks": 4,
                          "behind_los_drops": 0,
                          "short_sack_percent": 0,
                          "left_medium_spikes": 0,
                          "left_medium_accuracy_percent": 33.3,
                          "behind_los_completions": 5,
                          "grades_run": 66.3,
                          "behind_los_sack_percent": 0,
                          "left_deep_yards": 0,
                          "left_short_aimed_passes": 4,
                          "center_behind_los_completions": 2,
                          "center_deep_plays_with_epa": 2,
                          "left_short_thrown_aways": 0,
                          "left_short_sack_percent": 0,
                          "left_short_plays_with_epa": 4,
                          "center_short_thrown_aways": 0,
                          "center_short_interceptions": 0,
                          "short_avg_depth_of_target": 4,
                          "short_plays_with_epa": 26,
                          "left_deep_touchdowns": 0,
                          "deep_yards": 22,
                          "center_behind_los_turnover_worthy_plays": 0,
                          "medium_ypa": 8.5,
                          "left_medium_epa": 0.33,
                          "left_deep_avg_depth_of_target": 22,
                          "deep_first_downs": 1,
                          "short_all_attempts": 28,
                          "short_drop_rate": 4.5,
                          "behind_los_all_dropbacks": 5,
                          "left_medium_bats": 0,
                          "center_deep_spikes": 0,
                          "center_short_hit_as_threw": 0,
                          "left_medium_positive_epa_percent": 33.3,
                          "center_deep_touchdowns": 0,
                          "right_deep_ypa": 0,
                          "right_short_big_time_throws": 0,
                          "center_short_big_time_throws": 0,
                          "short_positive_epa_percent": 61.5,
                          "left_behind_los_avg_time_to_throw": 2.3,
                          "right_deep_passing_snaps": 3,
                          "right_short_twp_rate": 0,
                          "center_medium_attempts": 6,
                          "right_deep_avg_time_to_throw": 2.3,
                          "center_deep_def_gen_pressures": 0,
                          "behind_los_epa": 0.34,
                          "right_medium_twp_rate": 25,
                          "right_deep_aimed_passes": 2,
                          "right_deep_scrambles": 0,
                          "deep_big_time_throws": 0,
                          "deep_positive_epa_plays": 1,
                          "left_short_turnover_worthy_plays": 0,
                          "qb_rating": 61.7,
                          "center_short_touchdowns": 0,
                          "right_medium_drops": 0,
                          "left_deep_epa": -0.25,
                          "short_ypa": 6.4,
                          "medium_pressure_to_sack_rate": 0,
                          "left_medium_thrown_aways": 0,
                          "right_behind_los_avg_time_to_throw": 1.75,
                          "completion_percent": 62.3,
                          "behind_los_btt_rate": 0,
                          "right_behind_los_all_attempts": 2,
                          "medium_avg_time_to_throw": 2.77,
                          "plays_with_epa": 65,
                          "center_deep_positive_epa_plays": 1,
                          "center_deep_completion_percent": 50,
                          "behind_los_avg_time_to_throw": 2.02,
                          "right_medium_touchdowns": 0,
                          "center_deep_ttt_total_time": 6.399999618530273,
                          "center_short_avg_time_to_throw": 2.48,
                          "left_deep_aimed_passes": 1,
                          "left_medium_plays_with_epa": 3,
                          "left_medium_yards": 12,
                          "medium_all_dropbacks": 14,
                          "center_medium_touchdowns": 0,
                          "center_short_drop_rate": 7.1,
                          "left_short_twp_rate": 0,
                          "right_behind_los_attempts_percent": 3.8,
                          "attempts": 53,
                          "right_deep_avg_depth_of_target": 22.5,
                          "behind_los_sacks": 0,
                          "center_deep_yards": 22,
                          "short_dropbacks": 26,
                          "left_deep_sack_percent": 0,
                          "center_behind_los_avg_time_to_throw": 2.15,
                          "behind_los_avg_depth_of_target": -2.2,
                          "left_behind_los_epa": 0.58,
                          "medium_twp_rate": 14.3,
                          "left_short_def_gen_pressures": 0,
                          "short_positive_epa_plays": 16,
                          "right_medium_all_dropbacks": 4,
                          "medium_turnover_worthy_plays": 2,
                          "deep_plays_with_epa": 5,
                          "behind_los_twp_rate": 0,
                          "left_behind_los_thrown_aways": 0,
                          "right_medium_ttt_total_time": 13.799999237060547,
                          "left_short_bats": 0,
                          "center_medium_drop_rate": 25,
                          "right_deep_bats": 0,
                          "medium_yards": 110,
                          "center_deep_grades_pass": 52.5,
                          "center_medium_passing_snaps": 7,
                          "center_behind_los_first_downs": 0,
                          "center_medium_interceptions": 1,
                          "center_short_positive_epa_plays": 9,
                          "behind_los_grades_pass": 64.9,
                          "short_all_dropbacks": 28,
                          "center_behind_los_all_attempts": 2,
                          "right_short_plays_with_epa": 7,
                          "left_short_hit_as_threw": 0,
                          "deep_qb_rating": 5.8,
                          "center_deep_all_attempts": 2,
                          "center_deep_bats": 0,
                          "behind_los_ypa": 7.8,
                          "right_short_interceptions": 1,
                          "left_deep_interceptions": 0,
                          "right_medium_sacks": 0,
                          "right_behind_los_turnover_worthy_plays": 0,
                          "right_medium_spikes": 0,
                          "behind_los_hit_as_threw": 0,
                          "left_medium_pressure_to_sack_rate": null,
                          "medium_dropbacks": 13,
                          "deep_hit_as_threw": 0,
                          "right_medium_completion_percent": 50,
                          "short_epa": 0.18,
                          "deep_drop_rate": 0,
                          "deep_scrambles": 0,
                          "left_deep_completion_percent": 0,
                          "right_short_epa": 0.37,
                          "medium_attempts_percent": 24.5,
                          "right_behind_los_completion_percent": 100,
                          "left_medium_hit_as_threw": 0,
                          "left_behind_los_pressure_to_sack_rate": null,
                          "right_behind_los_ttt_total_time": 3.5,
                          "right_short_def_gen_pressures": 1,
                          "right_short_attempts_percent": 13.2,
                          "center_short_aimed_passes": 15,
                          "short_hit_as_threw": 0,
                          "right_medium_turnover_worthy_plays": 1,
                          "left_short_epa": -0.74,
                          "center_behind_los_pressure_to_sack_rate": null,
                          "right_behind_los_ypa": 10.5,
                          "deep_interceptions": 1,
                          "left_medium_twp_rate": 0,
                          "passing_snaps": 71,
                          "pressure_to_sack_rate": 35,
                          "ypa": 6.4,
                          "right_behind_los_big_time_throws": 0,
                          "center_medium_sack_percent": 0,
                          "drops": 2,
                          "center_deep_thrown_aways": 0,
                          "short_thrown_aways": 0,
                          "left_short_btt_rate": 0,
                          "medium_positive_epa_plays": 6,
                          "right_medium_accuracy_percent": 50,
                          "short_def_gen_pressures": 4,
                          "center_deep_dropbacks": 2,
                          "center_medium_accuracy_percent": 66.7,
                          "left_deep_positive_epa_plays": 0,
                          "right_behind_los_yards": 21,
                          "right_medium_attempts": 4,
                          "grades_hands_fumble": 43.8,
                          "left_medium_attempts": 3,
                          "medium_accuracy_percent": 53.8,
                          "left_medium_drops": 0,
                          "left_short_avg_time_to_throw": 2.6,
                          "medium_passing_snaps": 14,
                          "center_short_epa": 0.34,
                          "left_behind_los_passing_snaps": 1,
                          "left_deep_pressure_to_sack_rate": 0,
                          "avg_time_to_throw": 2.64,
                          "center_medium_all_attempts": 7,
                          "deep_bats": 0,
                          "right_medium_plays_with_epa": 4,
                          "left_medium_passing_snaps": 3,
                          "left_medium_scrambles": 0,
                          "right_deep_completion_percent": 0,
                          "big_time_throws": 0,
                          "right_deep_ttt_total_time": 4.599999904632568,
                          "left_short_drops": 0,
                          "left_deep_accuracy_percent": 0,
                          "medium_positive_epa_percent": 46.2,
                          "behind_los_turnover_worthy_plays": 0,
                          "right_medium_epa": -0.94,
                          "right_deep_dropbacks": 2,
                          "deep_ypa": 4.4,
                          "center_medium_completions": 3,
                          "center_medium_ttt_total_time": 15.200000762939453,
                          "left_medium_avg_time_to_throw": 2.33,
                          "left_short_sacks": 0,
                          "left_behind_los_spikes": 0,
                          "left_deep_def_gen_pressures": 1,
                          "center_short_qb_rating": 100,
                          "center_short_all_attempts": 15,
                          "center_deep_interceptions": 1,
                          "right_deep_completions": 0,
                          "center_behind_los_sacks": 0,
                          "deep_completions": 1,
                          "left_medium_attempts_percent": 5.7,
                          "short_yards": 167,
                          "behind_los_qb_rating": 99.2,
                          "medium_all_attempts": 14,
                          "right_short_sacks": 0,
                          "right_behind_los_thrown_aways": 0,
                          "center_short_spikes": 0,
                          "center_behind_los_hit_as_threw": 0,
                          "center_deep_turnover_worthy_plays": 1,
                          "left_medium_sack_percent": 0,
                          "behind_los_completion_percent": 100,
                          "left_deep_attempts_percent": 1.9,
                          "left_short_all_attempts": 6,
                          "center_deep_big_time_throws": 0,
                          "deep_all_attempts": 6,
                          "left_medium_avg_depth_of_target": 12.7,
                          "behind_los_thrown_aways": 0,
                          "center_medium_def_gen_pressures": 2,
                          "short_avg_time_to_throw": 2.37,
                          "left_deep_twp_rate": 0,
                          "center_behind_los_epa": -0.08,
                          "short_ttt_total_time": 61.60000228881836,
                          "left_behind_los_big_time_throws": 0,
                          "right_behind_los_plays_with_epa": 2,
                          "right_medium_yards": 35,
                          "right_short_all_dropbacks": 7,
                          "positive_epa_percent": 46.2,
                          "right_medium_drop_rate": 0,
                          "center_medium_big_time_throws": 0,
                          "franchise_id": 7,
                          "medium_plays_with_epa": 13,
                          "left_short_completion_percent": 50,
                          "left_short_drop_rate": 0,
                          "left_behind_los_scrambles": 0,
                          "left_medium_btt_rate": 0,
                          "right_deep_hit_as_threw": 0,
                          "behind_los_bats": 0,
                          "short_first_downs": 13,
                          "left_deep_attempts": 1,
                          "right_behind_los_attempts": 2,
                          "right_deep_sacks": 0,
                          "left_behind_los_attempts_percent": 1.9,
                          "behind_los_big_time_throws": 0,
                          "center_deep_pressure_to_sack_rate": null,
                          "left_medium_big_time_throws": 0,
                          "right_behind_los_bats": 0,
                          "left_medium_def_gen_pressures": 0,
                          "right_deep_turnover_worthy_plays": 0,
                          "left_short_spikes": 0,
                          "left_medium_aimed_passes": 3,
                          "left_behind_los_twp_rate": 0,
                          "short_grades_pass": 81.4,
                          "right_short_drops": 0,
                          "right_short_avg_time_to_throw": 2,
                          "right_medium_thrown_aways": 0,
                          "center_short_sack_percent": 0,
                          "right_short_passing_snaps": 7,
                          "center_short_def_gen_pressures": 3,
                          "center_medium_positive_epa_percent": 50,
                          "medium_drops": 1,
                          "center_medium_aimed_passes": 6,
                          "center_short_sacks": 0,
                          "deep_attempts_percent": 9.4,
                          "center_behind_los_def_gen_pressures": 0,
                          "left_short_passing_snaps": 6,
                          "center_medium_grades_pass": 57.1,
                          "center_deep_avg_time_to_throw": 3.2,
                          "behind_los_positive_epa_percent": 80,
                          "center_short_completion_percent": 86.7,
                          "left_deep_hit_as_threw": 0,
                          "center_short_grades_pass": 83.6,
                          "left_short_attempts_percent": 7.5,
                          "behind_los_plays_with_epa": 5,
                          "left_deep_scrambles": 0,
                          "right_short_completions": 6,
                          "left_behind_los_plays_with_epa": 1,
                          "center_behind_los_aimed_passes": 2,
                          "right_short_scrambles": 0,
                          "deep_ttt_total_time": 12.899999618530273,
                          "center_medium_qb_rating": 47.9,
                          "deep_avg_time_to_throw": 2.58,
                          "avg_depth_of_target": 7.9,
                          "left_medium_positive_epa_plays": 1,
                          "turnover_worthy_plays": 4,
                          "epa": -0.2,
                          "left_deep_drops": 0,
                          "right_behind_los_def_gen_pressures": 1,
                          "center_deep_positive_epa_percent": 50,
                          "center_deep_hit_as_threw": 0,
                          "aimed_passes": 49,
                          "short_spikes": 0,
                          "right_behind_los_completions": 2,
                          "center_behind_los_drop_rate": 0,
                          "short_drops": 1,
                          "deep_aimed_passes": 5,
                          "center_behind_los_plays_with_epa": 2,
                          "right_medium_avg_depth_of_target": 16.3,
                          "short_pressure_to_sack_rate": 0,
                          "center_deep_qb_rating": 50,
                          "left_medium_completions": 1,
                          "center_deep_sacks": 0,
                          "left_deep_big_time_throws": 0,
                          "center_medium_first_downs": 3,
                          "center_medium_dropbacks": 6,
                          "right_deep_positive_epa_plays": 0,
                          "right_deep_all_dropbacks": 3,
                          "right_deep_def_gen_pressures": 0,
                          "left_short_touchdowns": 0,
                          "medium_drop_rate": 14.3,
                          "player_id": 28022,
                          "right_short_positive_epa_plays": 5,
                          "left_medium_ypa": 4,
                          "right_medium_passing_snaps": 4,
                          "center_short_scrambles": 0,
                          "left_behind_los_turnover_worthy_plays": 0,
                          "center_medium_yards": 63,
                          "center_deep_epa": -0.68,
                          "left_medium_all_dropbacks": 3,
                          "left_behind_los_all_dropbacks": 1,
                          "left_medium_interceptions": 0,
                          "right_deep_interceptions": 0,
                          "touchdowns": 2,
                          "medium_completion_percent": 46.2,
                          "right_behind_los_grades_pass": 62.1,
                          "deep_positive_epa_percent": 20,
                          "behind_los_accuracy_percent": 100,
                          "right_deep_plays_with_epa": 2,
                          "right_medium_all_attempts": 4,
                          "center_deep_scrambles": 0,
                          "center_short_twp_rate": 0,
                          "behind_los_touchdowns": 0,
                          "left_medium_qb_rating": 46.5,
                          "def_gen_pressures": 20,
                          "right_medium_completions": 2,
                          "right_behind_los_drops": 0,
                          "left_behind_los_first_downs": 1,
                          "short_qb_rating": 103,
                          "center_medium_btt_rate": 0,
                          "center_deep_all_dropbacks": 2,
                          "left_deep_grades_pass": 49.2
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/player/passing/pressure": {
      "get": {
        "operationId": "player-passing-pressure",
        "summary": "Passing under pressure for one player",
        "description": "A passer's production split by whether the pocket held. `league`, `season` and `player` are\nrequired, and restish takes them as positional arguments in that order — `restish pff <command> nfl\n2025 4924` (player ids come from `ref-players`). Leave one out and restish refuses to send the\nrequest at all; send one blank and it comes back `400 invalid_parameter` naming it. `--career true`\nis accepted but changes nothing on this report — `season` stays required. `--week` narrows to one\nweek. Grades are on PFF's 0-100 scale and every other column is a raw total or rate.",
        "tags": [
          "player"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season_required"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/player_id"
          },
          {
            "$ref": "#/components/parameters/career"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerPassingPressureResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Joe Burrow (QB), 2022 season, week 1",
                    "description": "`GET /v1/player/passing/pressure?league=nfl&season=2022&week=1&player_id=28022`, complete.",
                    "value": {
                      "passing_pressure": [
                        {
                          "no_blitz_completion_percent": 62.2,
                          "grades_offense": 54.8,
                          "pressure_plays_with_epa": 20,
                          "no_pressure_scrambles": 3,
                          "twp_rate": 5.6,
                          "blitz_touchdowns": 1,
                          "pressure_yards": 56,
                          "no_pressure_spikes": 0,
                          "blitz_ypa": 7.6,
                          "no_blitz_grades_run": 62.9,
                          "btt_rate": 0,
                          "blitz_qb_rating": 125.5,
                          "no_pressure_thrown_aways": 0,
                          "no_blitz_bats": 2,
                          "no_blitz_drops": 0,
                          "no_pressure_completion_percent": 66.7,
                          "blitz_aimed_passes": 7,
                          "no_pressure_plays_with_epa": 45,
                          "spikes": 0,
                          "dropbacks": 65,
                          "pressure_grades_run": 64.1,
                          "no_blitz_sack_percent": 6,
                          "all_attempts": 58,
                          "no_pressure_ttt_total_time": 114.40001678466797,
                          "no_pressure_bats": 2,
                          "pressure_completions": 5,
                          "blitz_big_time_throws": 0,
                          "no_blitz_drop_rate": 0,
                          "blitz_spikes": 0,
                          "no_pressure_completions": 28,
                          "thrown_aways": 1,
                          "no_pressure_passing_snaps": 49,
                          "no_blitz_first_downs": 18,
                          "blitz_avg_time_to_throw": 2.85,
                          "no_pressure_grades_hands_fumble": 80.3,
                          "pressure_aimed_passes": 9,
                          "blitz_sacks": 4,
                          "blitz_all_dropbacks": 15,
                          "no_pressure_interceptions": 3,
                          "team_name": "CIN",
                          "pressure_epa": -0.95,
                          "pressure_all_dropbacks": 22,
                          "blitz_completions": 5,
                          "blitz_attempts": 8,
                          "all_dropbacks": 71,
                          "pressure_twp_rate": 9.1,
                          "pressure_sacks": 7,
                          "no_blitz_pressure_to_sack_rate": 27.3,
                          "no_pressure_ypa": 6.7,
                          "pressure_passing_snaps": 22,
                          "grades_pass": 52.6,
                          "ttt_total_time": 171.59999084472656,
                          "hit_as_threw": 1,
                          "first_downs": 24,
                          "pressure_bats": 0,
                          "blitz_thrown_aways": 1,
                          "no_pressure_drops": 1,
                          "pressure_grades_offense_penalty": 75,
                          "pressure_scrambles": 2,
                          "blitz_drop_rate": 28.6,
                          "sack_percent": 10.8,
                          "blitz_completion_percent": 62.5,
                          "bats": 2,
                          "no_blitz_ttt_total_time": 128.89999389648438,
                          "no_pressure_first_downs": 21,
                          "blitz_grades_offense_penalty": 73.7,
                          "no_blitz_epa": -0.21,
                          "blitz_interceptions": 0,
                          "no_blitz_dropbacks": 50,
                          "no_blitz_grades_pass": 49.3,
                          "no_blitz_scrambles": 2,
                          "pressure_drop_rate": 16.7,
                          "no_blitz_yards": 277,
                          "sacks": 7,
                          "pressure_pressure_to_sack_rate": 35,
                          "no_blitz_grades_hands_fumble": 81.1,
                          "no_pressure_grades_offense": 67,
                          "no_pressure_avg_time_to_throw": 2.54,
                          "pressure_dropbacks": 20,
                          "no_blitz_grades_offense_penalty": 78.4,
                          "no_pressure_grades_run": 67.3,
                          "blitz_turnover_worthy_plays": 1,
                          "no_blitz_touchdowns": 1,
                          "no_blitz_avg_depth_of_target": 7.8,
                          "no_pressure_dropbacks_percent": 69.2,
                          "blitz_grades_pass": 66.4,
                          "blitz_avg_depth_of_target": 8.7,
                          "no_blitz_spikes": 0,
                          "blitz_ttt_total_time": 42.70000076293945,
                          "no_pressure_dropbacks": 45,
                          "completions": 33,
                          "blitz_positive_epa_plays": 7,
                          "no_blitz_positive_epa_plays": 23,
                          "blitz_btt_rate": 0,
                          "blitz_positive_epa_percent": 46.7,
                          "no_pressure_btt_rate": 0,
                          "no_pressure_drop_rate": 3.4,
                          "no_blitz_turnover_worthy_plays": 3,
                          "yards": 338,
                          "pressure_positive_epa_percent": 30,
                          "pressure_all_attempts": 12,
                          "accuracy_percent": 71.4,
                          "no_blitz_all_attempts": 50,
                          "blitz_first_downs": 6,
                          "no_blitz_dropbacks_percent": 76.9,
                          "scrambles": 5,
                          "pressure_turnover_worthy_plays": 2,
                          "no_pressure_epa": 0.14,
                          "no_blitz_avg_time_to_throw": 2.58,
                          "interceptions": 4,
                          "positive_epa_plays": 30,
                          "drop_rate": 5.7,
                          "no_blitz_positive_epa_percent": 46,
                          "pressure_btt_rate": 0,
                          "no_pressure_aimed_passes": 40,
                          "pressure_dropbacks_percent": 30.8,
                          "grades_run": 66.3,
                          "no_pressure_def_gen_pressures": 0,
                          "no_blitz_plays_with_epa": 50,
                          "pressure_grades_offense": 30.7,
                          "pressure_completion_percent": 45.5,
                          "pressure_avg_depth_of_target": 7.8,
                          "blitz_epa": -0.17,
                          "pressure_drops": 1,
                          "no_blitz_def_gen_pressures": 11,
                          "pressure_attempts": 11,
                          "blitz_all_attempts": 8,
                          "qb_rating": 61.7,
                          "pressure_big_time_throws": 0,
                          "no_blitz_thrown_aways": 0,
                          "completion_percent": 62.3,
                          "blitz_drops": 2,
                          "no_pressure_touchdowns": 1,
                          "no_pressure_positive_epa_plays": 24,
                          "plays_with_epa": 65,
                          "no_pressure_sacks": 0,
                          "blitz_sack_percent": 26.7,
                          "pressure_sack_percent": 35,
                          "no_pressure_attempts": 42,
                          "no_blitz_grades_offense": 49.5,
                          "attempts": 53,
                          "blitz_scrambles": 3,
                          "blitz_dropbacks_percent": 23.1,
                          "no_pressure_qb_rating": 63.8,
                          "no_blitz_passing_snaps": 56,
                          "no_blitz_aimed_passes": 42,
                          "blitz_yards": 61,
                          "no_blitz_attempts": 45,
                          "pressure_accuracy_percent": 66.7,
                          "no_blitz_hit_as_threw": 1,
                          "pressure_hit_as_threw": 1,
                          "blitz_pressure_to_sack_rate": 44.4,
                          "no_blitz_btt_rate": 0,
                          "no_pressure_all_dropbacks": 49,
                          "no_blitz_ypa": 6.2,
                          "blitz_grades_run": 68.5,
                          "pressure_interceptions": 1,
                          "blitz_grades_hands_fumble": 20.7,
                          "passing_snaps": 71,
                          "pressure_to_sack_rate": 35,
                          "ypa": 6.4,
                          "drops": 2,
                          "no_pressure_grades_offense_penalty": 77.9,
                          "blitz_grades_offense": 71,
                          "grades_hands_fumble": 43.8,
                          "avg_time_to_throw": 2.64,
                          "pressure_def_gen_pressures": 20,
                          "pressure_grades_pass": 29.3,
                          "big_time_throws": 0,
                          "no_blitz_qb_rating": 50,
                          "blitz_hit_as_threw": 0,
                          "pressure_ypa": 5.1,
                          "pressure_avg_time_to_throw": 2.86,
                          "no_blitz_completions": 28,
                          "no_pressure_sack_percent": 0,
                          "no_blitz_accuracy_percent": 66.7,
                          "no_pressure_pressure_to_sack_rate": null,
                          "no_pressure_turnover_worthy_plays": 2,
                          "pressure_first_downs": 3,
                          "positive_epa_percent": 46.2,
                          "blitz_passing_snaps": 15,
                          "franchise_id": 7,
                          "no_pressure_all_attempts": 46,
                          "no_pressure_twp_rate": 4.1,
                          "no_blitz_sacks": 3,
                          "pressure_positive_epa_plays": 6,
                          "no_blitz_all_dropbacks": 56,
                          "blitz_plays_with_epa": 15,
                          "pressure_ttt_total_time": 57.20000076293945,
                          "no_pressure_accuracy_percent": 72.5,
                          "no_blitz_twp_rate": 5.4,
                          "no_pressure_hit_as_threw": 0,
                          "no_pressure_grades_pass": 64.9,
                          "avg_depth_of_target": 7.9,
                          "no_pressure_positive_epa_percent": 53.3,
                          "turnover_worthy_plays": 4,
                          "epa": -0.2,
                          "pressure_spikes": 0,
                          "pressure_grades_hands_fumble": 23.4,
                          "pressure_qb_rating": 53.6,
                          "aimed_passes": 49,
                          "blitz_bats": 0,
                          "pressure_touchdowns": 1,
                          "pressure_thrown_aways": 1,
                          "no_blitz_interceptions": 4,
                          "blitz_dropbacks": 15,
                          "blitz_def_gen_pressures": 9,
                          "player_id": 28022,
                          "no_blitz_big_time_throws": 0,
                          "no_pressure_avg_depth_of_target": 7.9,
                          "touchdowns": 2,
                          "no_pressure_yards": 282,
                          "def_gen_pressures": 20,
                          "blitz_twp_rate": 6.7,
                          "blitz_accuracy_percent": 100,
                          "no_pressure_big_time_throws": 0
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/player/rushing/direction": {
      "get": {
        "operationId": "player-rushing-direction",
        "summary": "Rushing by direction for one player",
        "description": "A runner's carries and yards split by the gap the run went through. `league`, `season` and `player`\nare required, and restish takes them as positional arguments in that order — `restish pff <command>\nnfl 2025 4924` (player ids come from `ref-players`). Leave one out and restish refuses to send the\nrequest at all; send one blank and it comes back `400 invalid_parameter` naming it. `--career true`\nis accepted but changes nothing on this report — `season` stays required. `--week` narrows to one\nweek. Grades are on PFF's 0-100 scale and every other column is a raw total or rate.",
        "tags": [
          "player"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season_required"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/player_id"
          },
          {
            "$ref": "#/components/parameters/career"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerRushingDirectionResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Joe Mixon (HB), 2022 season, week 1",
                    "description": "`GET /v1/player/rushing/direction?league=nfl&season=2022&week=1&player_id=11803`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "rushing_direction_stats": {
                        "directions": [
                          {
                            "attempts": 3,
                            "direction": "LG",
                            "explosive": 0,
                            "first_downs": 0,
                            "franchise_id": 7,
                            "fumbles": 0,
                            "long": 5,
                            "missed_tackles": 0,
                            "player_id": 11803,
                            "team_name": "CIN",
                            "touchdowns": 0,
                            "yards": 5,
                            "yards_after_contact": 4,
                            "yco_attempt": 1.33,
                            "ypa": 1.7
                          },
                          {
                            "attempts": 4,
                            "direction": "LT",
                            "explosive": 0,
                            "first_downs": 0,
                            "franchise_id": 7,
                            "fumbles": 0,
                            "long": 3,
                            "missed_tackles": 1,
                            "player_id": 11803,
                            "team_name": "CIN",
                            "touchdowns": 0,
                            "yards": 8,
                            "yards_after_contact": 7,
                            "yco_attempt": 1.75,
                            "ypa": 2
                          },
                          {
                            "attempts": 2,
                            "direction": "ML",
                            "explosive": 0,
                            "first_downs": 0,
                            "franchise_id": 7,
                            "fumbles": 0,
                            "long": 0,
                            "missed_tackles": 0,
                            "player_id": 11803,
                            "team_name": "CIN",
                            "touchdowns": 0,
                            "yards": -2,
                            "yards_after_contact": 1,
                            "yco_attempt": 0.5,
                            "ypa": -1
                          }
                        ],
                        "player_id": 11803
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/player/rushing/summary": {
      "get": {
        "operationId": "player-rushing-summary",
        "summary": "Rushing summary for one player",
        "description": "A runner's attempts, yards, touchdowns, contact metrics and grades, week by week. `league` and\n`player` are required, and restish takes them as positional arguments in that order — `restish pff\n<command> nfl 4924 --season 2025` (player ids come from `ref-players`). Add `--season` for one\nseason, week by week, or `--career true` for career and per-season totals; leaving both out is\nrefused with `400 invalid_parameter`. `--week` narrows to one week. Grades are on PFF's 0-100 scale\nand every other column is a raw total or rate.",
        "tags": [
          "player"
        ],
        "x-requires-one-of": {
          "message": "Give season for one season, or career=true for career totals",
          "alternatives": [
            [
              "season"
            ],
            [
              "career"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/player_id"
          },
          {
            "$ref": "#/components/parameters/career"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerRushingSummaryResponse"
                },
                "examples": {
                  "career": {
                    "summary": "Joe Mixon (HB), career totals",
                    "description": "`GET /v1/player/rushing/summary?league=nfl&week=1&player_id=11803&career=true`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "rushing_summary": {
                        "career": {
                          "targets": 32,
                          "yards_after_contact": 398,
                          "explosive": 13,
                          "elu_rush_mtf": 21,
                          "breakaway_attempts": 4,
                          "designed_yards": 607,
                          "yprr": 1.26,
                          "breakaway_percent": 16.3,
                          "fumbles": 1,
                          "first_downs": 26,
                          "elusive_rating": 36.2,
                          "breakaway_yards": 99,
                          "total_touches": 177,
                          "scramble_yards": 0,
                          "yco_attempt": 2.67,
                          "yards": 607,
                          "receptions": 28,
                          "zone_attempts": 96,
                          "scrambles": 0,
                          "penalties": 0,
                          "attempts": 149,
                          "elu_yco": 398,
                          "elu_recv_mtf": 3,
                          "declined_penalties": 0,
                          "ypa": 4.1,
                          "drops": 2,
                          "longest": 31,
                          "count_of_yards": 149,
                          "routes": 159,
                          "rec_yards": 200,
                          "gap_attempts": 52,
                          "run_plays": 163,
                          "avoided_tackles": 21,
                          "player_id": 11803,
                          "touchdowns": 3
                        },
                        "seasons": [
                          {
                            "targets": 3,
                            "grades_offense": 70.1,
                            "yards_after_contact": 101,
                            "explosive": 4,
                            "season": 2024,
                            "elu_rush_mtf": 4,
                            "breakaway_attempts": 0,
                            "designed_yards": 159,
                            "yprr": 1.06,
                            "breakaway_percent": 0,
                            "fumbles": 0,
                            "first_downs": 9,
                            "elusive_rating": 51,
                            "breakaway_yards": 0,
                            "total_touches": 33,
                            "scramble_yards": 0,
                            "yco_attempt": 3.37,
                            "yards": 159,
                            "grades_run_block": 59,
                            "receptions": 3,
                            "zone_attempts": 26,
                            "scrambles": 0,
                            "grades_run": 69.5,
                            "penalties": 0,
                            "attempts": 30,
                            "elu_yco": 101,
                            "elu_recv_mtf": 1,
                            "declined_penalties": 0,
                            "ypa": 5.3,
                            "drops": 0,
                            "season_id": 2024,
                            "grades_hands_fumble": 80,
                            "longest": 13,
                            "count_of_yards": 30,
                            "routes": 18,
                            "franchise_id": [
                              13
                            ],
                            "rec_yards": 19,
                            "gap_attempts": 4,
                            "run_plays": 34,
                            "avoided_tackles": 4,
                            "grades_offense_penalty": 76.2,
                            "touchdowns": 1
                          },
                          {
                            "targets": 4,
                            "grades_offense": 61.6,
                            "yards_after_contact": 57,
                            "explosive": 2,
                            "season": 2023,
                            "elu_rush_mtf": 3,
                            "breakaway_attempts": 1,
                            "designed_yards": 56,
                            "yprr": 1.06,
                            "breakaway_percent": 39.3,
                            "fumbles": 0,
                            "first_downs": 2,
                            "elusive_rating": 82.2,
                            "breakaway_yards": 22,
                            "total_touches": 16,
                            "scramble_yards": 0,
                            "yco_attempt": 4.38,
                            "yards": 56,
                            "grades_run_block": 60,
                            "receptions": 3,
                            "zone_attempts": 7,
                            "scrambles": 0,
                            "grades_run": 67.6,
                            "penalties": 0,
                            "attempts": 13,
                            "elu_yco": 57,
                            "elu_recv_mtf": 0,
                            "declined_penalties": 0,
                            "ypa": 4.3,
                            "drops": 1,
                            "season_id": 2023,
                            "grades_hands_fumble": 75.4,
                            "longest": 22,
                            "count_of_yards": 13,
                            "routes": 16,
                            "franchise_id": [
                              7
                            ],
                            "rec_yards": 17,
                            "gap_attempts": 6,
                            "run_plays": 15,
                            "avoided_tackles": 3,
                            "grades_offense_penalty": 76.1,
                            "touchdowns": 0
                          },
                          {
                            "targets": 8,
                            "grades_offense": 63.7,
                            "yards_after_contact": 48,
                            "explosive": 1,
                            "season": 2022,
                            "elu_rush_mtf": 3,
                            "breakaway_attempts": 1,
                            "designed_yards": 82,
                            "yprr": 1.66,
                            "breakaway_percent": 37.8,
                            "fumbles": 0,
                            "first_downs": 2,
                            "elusive_rating": 20.9,
                            "breakaway_yards": 31,
                            "total_touches": 34,
                            "scramble_yards": 0,
                            "yco_attempt": 1.78,
                            "yards": 82,
                            "grades_run_block": 60,
                            "receptions": 7,
                            "zone_attempts": 14,
                            "scrambles": 0,
                            "grades_run": 58.8,
                            "penalties": 0,
                            "attempts": 27,
                            "elu_yco": 48,
                            "elu_recv_mtf": 1,
                            "declined_penalties": 0,
                            "ypa": 3,
                            "drops": 0,
                            "season_id": 2022,
                            "grades_hands_fumble": 79.7,
                            "longest": 31,
                            "count_of_yards": 27,
                            "routes": 38,
                            "franchise_id": [
                              7
                            ],
                            "rec_yards": 63,
                            "gap_attempts": 12,
                            "run_plays": 28,
                            "avoided_tackles": 3,
                            "grades_offense_penalty": 79.6,
                            "touchdowns": 0
                          }
                        ],
                        "subject": {
                          "eligible": "offense",
                          "grade_keys": [
                            "run_block",
                            "run",
                            "offense",
                            "offense_penalty",
                            "hands_fumble"
                          ],
                          "league_id": 1,
                          "player_id": 11803,
                          "roster": "offense",
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        }
                      }
                    }
                  },
                  "default": {
                    "summary": "Joe Mixon (HB), 2022 season, week 1",
                    "description": "`GET /v1/player/rushing/summary?league=nfl&season=2022&week=1&player_id=11803`, complete.",
                    "value": {
                      "rushing_summary": {
                        "subject": {
                          "eligible": "offense",
                          "grade_keys": [
                            "run_block",
                            "run",
                            "offense",
                            "offense_penalty",
                            "hands_fumble"
                          ],
                          "league_id": 1,
                          "player_id": 11803,
                          "roster": "offense",
                          "season": 2022,
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        },
                        "week_totals": [
                          {
                            "targets": 8,
                            "grades_offense": 63.7,
                            "yards_after_contact": 48,
                            "explosive": 1,
                            "season": 2022,
                            "league_id": 1,
                            "elu_rush_mtf": 3,
                            "breakaway_attempts": 1,
                            "designed_yards": 82,
                            "team_name": "CIN",
                            "yprr": 1.66,
                            "breakaway_percent": 37.8,
                            "fumbles": 0,
                            "first_downs": 2,
                            "elusive_rating": 20.9,
                            "breakaway_yards": 31,
                            "player_game_count": 1,
                            "total_touches": 34,
                            "scramble_yards": 0,
                            "yco_attempt": 1.78,
                            "yards": 82,
                            "grades_run_block": 60,
                            "receptions": 7,
                            "zone_attempts": 14,
                            "scrambles": 0,
                            "grades_run": 58.8,
                            "penalties": 0,
                            "attempts": 27,
                            "elu_yco": 48,
                            "elu_recv_mtf": 1,
                            "declined_penalties": 0,
                            "ypa": 3,
                            "drops": 0,
                            "season_id": 2022,
                            "grades_hands_fumble": 79.7,
                            "longest": 31,
                            "count_of_yards": 27,
                            "routes": 38,
                            "franchise_id": 7,
                            "rec_yards": 63,
                            "gap_attempts": 12,
                            "run_plays": 28,
                            "avoided_tackles": 3,
                            "grades_offense_penalty": 79.6,
                            "touchdowns": 0
                          }
                        ],
                        "weeks": [
                          {
                            "game": {
                              "away_franchise_id": 25,
                              "away_team_name": "PIT",
                              "game_id": 23108,
                              "home_franchise_id": 7,
                              "home_team_name": "CIN",
                              "player_franchise_id": 7,
                              "position": "HB",
                              "status": "S",
                              "week": 1
                            },
                            "targets": 8,
                            "grades_offense": 63.7,
                            "game_id": 23108,
                            "yards_after_contact": 48,
                            "explosive": 1,
                            "week": 1,
                            "elu_rush_mtf": 3,
                            "breakaway_attempts": 1,
                            "status": "S",
                            "designed_yards": 82,
                            "yprr": 1.66,
                            "breakaway_percent": 37.8,
                            "fumbles": 0,
                            "first_downs": 2,
                            "elusive_rating": 20.9,
                            "jersey_number": "28",
                            "breakaway_yards": 31,
                            "away_team_name": "PIT",
                            "total_touches": 34,
                            "scramble_yards": 0,
                            "yco_attempt": 1.78,
                            "yards": 82,
                            "player_franchise_id": 7,
                            "grades_run_block": 60,
                            "receptions": 7,
                            "zone_attempts": 14,
                            "scrambles": 0,
                            "grades_run": 58.8,
                            "penalties": 0,
                            "attempts": 27,
                            "elu_yco": 48,
                            "elu_recv_mtf": 1,
                            "declined_penalties": 0,
                            "ypa": 3,
                            "drops": 0,
                            "position": "HB",
                            "grades_hands_fumble": 79.7,
                            "longest": 31,
                            "away_franchise_id": 25,
                            "count_of_yards": 27,
                            "routes": 38,
                            "rec_yards": 63,
                            "home_franchise_id": 7,
                            "gap_attempts": 12,
                            "run_plays": 28,
                            "home_team_name": "CIN",
                            "avoided_tackles": 3,
                            "grades_offense_penalty": 79.6,
                            "player_id": 11803,
                            "touchdowns": 0
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/player/receiving/depth": {
      "get": {
        "operationId": "player-receiving-depth",
        "summary": "Receiving by target depth for one player",
        "description": "A receiver's production split by how far downfield the target travelled. `league`, `season` and\n`player` are required, and restish takes them as positional arguments in that order — `restish pff\n<command> nfl 2025 4924` (player ids come from `ref-players`). Leave one out and restish refuses to\nsend the request at all; send one blank and it comes back `400 invalid_parameter` naming it.\n`--career true` is accepted but changes nothing on this report — `season` stays required. `--week`\nnarrows to one week. Grades are on PFF's 0-100 scale and every other column is a raw total or rate.",
        "tags": [
          "player"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season_required"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/player_id"
          },
          {
            "$ref": "#/components/parameters/career"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerReceivingDepthResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Ja'Marr Chase (WR), 2022 season, week 1",
                    "description": "`GET /v1/player/receiving/depth?league=nfl&season=2022&week=1&player_id=84270`, complete.",
                    "value": {
                      "receiving_depth": [
                        {
                          "left_deep_route_rate": 100,
                          "center_short_first_downs": 2,
                          "center_short_routes": 15,
                          "right_behind_los_positive_epa_percent": 100,
                          "left_behind_los_yards_after_catch": 0,
                          "center_behind_los_contested_targets": 0,
                          "right_short_routes": 7,
                          "targets": 15,
                          "grades_offense": 74.6,
                          "right_deep_pass_block_rate": 0,
                          "medium_interceptions": 0,
                          "right_short_targets_percent": 42.9,
                          "left_deep_contested_catch_rate": null,
                          "right_medium_grades_hands_drop": 64.7,
                          "left_short_targeted_qb_rating": 39.6,
                          "right_medium_contested_catch_rate": null,
                          "short_targets": 8,
                          "deep_contested_catch_rate": null,
                          "center_behind_los_drops": 0,
                          "center_behind_los_interceptions": 0,
                          "left_behind_los_interceptions": 0,
                          "left_deep_first_downs": 0,
                          "left_behind_los_contested_targets": 0,
                          "center_deep_avg_depth_of_target": null,
                          "center_short_drops": 1,
                          "right_behind_los_targets": 1,
                          "right_behind_los_yards_after_catch_per_reception": 13,
                          "center_deep_first_downs": 0,
                          "behind_los_yards_after_catch_per_reception": 13,
                          "right_deep_grades_pass_route": 59.3,
                          "left_short_fumbles": 0,
                          "right_short_positive_epa_percent": 71.4,
                          "center_deep_pass_block_rate": 0,
                          "left_behind_los_avoided_tackles": 0,
                          "center_short_longest": 14,
                          "left_deep_drop_rate": null,
                          "center_short_contested_receptions": 0,
                          "yards_after_catch_per_reception": 4.8,
                          "left_deep_routes": 1,
                          "deep_drops": 0,
                          "deep_contested_receptions": 0,
                          "center_behind_los_touchdowns": 0,
                          "center_medium_targeted_qb_rating": 118.8,
                          "left_short_yards_per_reception": null,
                          "deep_touchdowns": 0,
                          "left_short_yprr": 0,
                          "center_deep_drop_rate": null,
                          "center_behind_los_pass_plays": 2,
                          "grades_pass_route": 76,
                          "left_behind_los_positive_epa_plays": 1,
                          "right_short_first_downs": 3,
                          "right_behind_los_first_downs": 1,
                          "right_behind_los_grades_pass_route": 78.5,
                          "short_interceptions": 0,
                          "behind_los_routes": 1,
                          "right_behind_los_contested_targets": 0,
                          "behind_los_positive_epa_plays": 1,
                          "left_medium_grades_pass_route": 76.4,
                          "right_short_contested_catch_rate": null,
                          "center_short_grades_hands_drop": 29.9,
                          "deep_receptions": 0,
                          "center_deep_pass_blocks": 0,
                          "left_short_yards_after_catch_per_reception": null,
                          "center_medium_avoided_tackles": 2,
                          "center_medium_grades_pass_route": 95.2,
                          "center_behind_los_positive_epa_percent": 50,
                          "medium_yards_after_catch_per_reception": 4.5,
                          "medium_receptions": 4,
                          "deep_pass_blocks": 0,
                          "right_deep_yards_per_reception": null,
                          "center_medium_longest": 24,
                          "center_deep_contested_catch_rate": null,
                          "medium_epa": 1.19,
                          "left_short_route_rate": 66.7,
                          "right_deep_grades_hands_drop": null,
                          "center_deep_targets": 0,
                          "short_contested_receptions": 0,
                          "center_deep_pass_plays": 2,
                          "left_medium_routes": 3,
                          "deep_yards_after_catch_per_reception": null,
                          "center_deep_contested_receptions": 0,
                          "center_short_pass_blocks": 0,
                          "team_name": "CIN",
                          "deep_pass_block_rate": 0,
                          "short_touchdowns": 1,
                          "yprr": 1.98,
                          "center_medium_drops": 0,
                          "left_short_pass_blocks": 0,
                          "right_short_grades_pass_route": 84.9,
                          "center_short_positive_epa_percent": 60,
                          "deep_avg_depth_of_target": 20,
                          "deep_grades_hands_drop": null,
                          "center_behind_los_avg_depth_of_target": null,
                          "left_deep_caught_percent": null,
                          "right_behind_los_contested_catch_rate": null,
                          "wide_snaps": 53,
                          "center_medium_route_rate": 85.7,
                          "short_grades_pass_route": 81.8,
                          "center_behind_los_contested_receptions": 0,
                          "center_short_receptions": 2,
                          "center_short_yprr": 1.67,
                          "medium_pass_blocks": 0,
                          "medium_yards_per_reception": 18,
                          "fumbles": 0,
                          "center_deep_yprr": 0,
                          "right_deep_drop_rate": null,
                          "right_medium_positive_epa_plays": 2,
                          "first_downs": 10,
                          "center_short_targets": 3,
                          "center_medium_pass_block_rate": 0,
                          "left_behind_los_drop_rate": null,
                          "right_behind_los_targets_percent": 50,
                          "short_contested_catch_rate": null,
                          "behind_los_fumbles": 0,
                          "left_medium_drop_rate": 0,
                          "left_medium_longest": 12,
                          "medium_yprr": 14.4,
                          "left_short_positive_epa_percent": 50,
                          "center_behind_los_pass_block_rate": 0,
                          "inline_snaps": 0,
                          "right_short_fumbles": 0,
                          "right_deep_route_rate": 66.7,
                          "right_short_pass_blocks": 0,
                          "left_short_longest": 0,
                          "medium_contested_targets": 1,
                          "behind_los_interceptions": 0,
                          "right_medium_targeted_qb_rating": 118.8,
                          "right_deep_drops": 0,
                          "right_short_route_rate": 100,
                          "medium_grades_pass_route": 95.4,
                          "right_deep_yards": 0,
                          "right_medium_contested_targets": 0,
                          "center_medium_targets": 2,
                          "center_behind_los_positive_epa_plays": 1,
                          "right_short_avg_depth_of_target": 5.7,
                          "center_deep_longest": 0,
                          "right_behind_los_yards_per_reception": 12,
                          "left_medium_pass_block_rate": 0,
                          "right_deep_yards_after_catch": 0,
                          "right_medium_receptions": 1,
                          "right_short_targeted_qb_rating": 134,
                          "left_deep_targets_percent": 0,
                          "behind_los_pass_blocks": 0,
                          "right_behind_los_touchdowns": 0,
                          "center_medium_plays_with_epa": 6,
                          "right_medium_targets": 1,
                          "deep_routes": 1,
                          "left_medium_yprr": 4,
                          "deep_yards_per_reception": null,
                          "center_behind_los_avoided_tackles": 0,
                          "left_deep_contested_targets": 0,
                          "medium_avg_depth_of_target": 13,
                          "short_route_rate": 100,
                          "left_behind_los_positive_epa_percent": 100,
                          "left_medium_touchdowns": 0,
                          "deep_targets_percent": 6.7,
                          "behind_los_targets": 1,
                          "center_short_yards": 25,
                          "center_medium_routes": 6,
                          "center_behind_los_grades_pass_route": null,
                          "right_deep_yprr": 0,
                          "center_deep_targeted_qb_rating": 0,
                          "left_deep_targeted_qb_rating": 0,
                          "deep_pass_plays": 1,
                          "left_short_positive_epa_plays": 2,
                          "right_behind_los_positive_epa_plays": 2,
                          "center_short_avg_depth_of_target": 6.7,
                          "right_short_yards": 20,
                          "left_medium_first_downs": 1,
                          "right_medium_positive_epa_percent": 50,
                          "left_medium_targeted_qb_rating": 68.8,
                          "right_short_contested_receptions": 0,
                          "right_deep_avoided_tackles": 0,
                          "right_medium_fumbles": 0,
                          "right_behind_los_fumbles": 0,
                          "center_deep_drops": 0,
                          "center_medium_avg_depth_of_target": 13.5,
                          "right_behind_los_pass_block_rate": 0,
                          "contested_targets": 1,
                          "center_short_plays_with_epa": 15,
                          "left_short_yards_after_catch": 0,
                          "right_behind_los_pass_blocks": 0,
                          "left_behind_los_avg_depth_of_target": null,
                          "center_medium_epa": 0.13,
                          "left_medium_targets_percent": 66.7,
                          "left_behind_los_grades_pass_route": null,
                          "center_behind_los_yards_per_reception": null,
                          "left_deep_targets": 0,
                          "short_contested_targets": 0,
                          "left_medium_contested_catch_rate": 0,
                          "left_deep_yprr": 0,
                          "right_medium_yards_after_catch_per_reception": 0,
                          "right_medium_longest": 15,
                          "behind_los_drop_rate": 0,
                          "right_behind_los_epa": 0.65,
                          "left_short_pass_plays": 6,
                          "right_short_touchdowns": 1,
                          "behind_los_first_downs": 1,
                          "right_deep_receptions": 0,
                          "left_medium_pass_plays": 3,
                          "inline_rate": 0,
                          "center_behind_los_yards": 0,
                          "contested_catch_rate": 0,
                          "right_medium_pass_blocks": 0,
                          "left_short_grades_pass_route": 57,
                          "left_behind_los_targets_percent": 0,
                          "behind_los_longest": 12,
                          "right_medium_first_downs": 1,
                          "center_deep_yards_after_catch_per_reception": null,
                          "deep_contested_targets": 0,
                          "behind_los_avoided_tackles": 0,
                          "left_behind_los_receptions": 0,
                          "right_short_yards_after_catch": 4,
                          "right_behind_los_yards_after_catch": 13,
                          "right_short_pass_plays": 7,
                          "right_deep_epa": -0.46,
                          "left_deep_plays_with_epa": 1,
                          "left_short_caught_percent": 0,
                          "center_behind_los_contested_catch_rate": null,
                          "right_short_yards_after_catch_per_reception": 1.3,
                          "right_short_drop_rate": 0,
                          "left_short_yards": 0,
                          "right_behind_los_avg_depth_of_target": -1,
                          "right_deep_first_downs": 0,
                          "left_deep_positive_epa_percent": 0,
                          "short_yards_after_catch": 17,
                          "center_medium_yprr": 7.5,
                          "short_pass_blocks": 0,
                          "left_short_contested_receptions": 0,
                          "short_fumbles": 0,
                          "left_short_pass_block_rate": 0,
                          "center_deep_routes": 2,
                          "left_medium_avoided_tackles": 0,
                          "left_behind_los_pass_plays": 1,
                          "yards": 129,
                          "right_deep_touchdowns": 0,
                          "center_medium_receptions": 2,
                          "left_behind_los_drops": 0,
                          "center_short_targets_percent": 20,
                          "deep_epa": -0.25,
                          "medium_touchdowns": 0,
                          "receptions": 10,
                          "left_medium_route_rate": 100,
                          "left_behind_los_grades_hands_drop": null,
                          "left_deep_fumbles": 0,
                          "medium_avoided_tackles": 2,
                          "center_medium_contested_catch_rate": null,
                          "right_behind_los_routes": 2,
                          "short_targets_percent": 53.3,
                          "left_behind_los_yprr": 0,
                          "medium_route_rate": 100,
                          "left_short_first_downs": 0,
                          "short_longest": 14,
                          "right_behind_los_grades_hands_drop": 64.7,
                          "behind_los_contested_targets": 0,
                          "right_behind_los_avoided_tackles": 0,
                          "right_deep_longest": 0,
                          "right_deep_contested_targets": 0,
                          "right_deep_positive_epa_percent": 0,
                          "right_behind_los_pass_plays": 2,
                          "medium_contested_receptions": 0,
                          "short_targeted_qb_rating": 117.2,
                          "right_behind_los_interceptions": 0,
                          "behind_los_targets_percent": 6.7,
                          "center_deep_yards_after_catch": 0,
                          "behind_los_yards": 12,
                          "right_deep_targets_percent": 50,
                          "targeted_qb_rating": 115.7,
                          "left_medium_fumbles": 0,
                          "short_receptions": 5,
                          "center_medium_positive_epa_plays": 3,
                          "left_short_interceptions": 0,
                          "right_medium_interceptions": 0,
                          "left_behind_los_yards": 0,
                          "medium_first_downs": 4,
                          "left_short_avg_depth_of_target": 8,
                          "right_medium_pass_block_rate": 0,
                          "right_medium_targets_percent": 25,
                          "left_behind_los_touchdowns": 0,
                          "interceptions": 0,
                          "caught_percent": 66.7,
                          "positive_epa_plays": 30,
                          "drop_rate": 9.1,
                          "grades_hands_drop": 58.5,
                          "right_behind_los_drop_rate": 0,
                          "right_deep_fumbles": 0,
                          "left_deep_contested_receptions": 0,
                          "behind_los_drops": 0,
                          "short_yards_after_catch_per_reception": 3.4,
                          "medium_pass_plays": 5,
                          "behind_los_pass_plays": 1,
                          "left_deep_yards": 0,
                          "center_behind_los_longest": 0,
                          "center_medium_grades_hands_drop": 68.3,
                          "left_behind_los_longest": 0,
                          "center_deep_plays_with_epa": 2,
                          "left_short_plays_with_epa": 4,
                          "center_short_interceptions": 0,
                          "short_avg_depth_of_target": 6.6,
                          "deep_yprr": 0,
                          "short_plays_with_epa": 8,
                          "left_deep_touchdowns": 0,
                          "deep_yards": 0,
                          "center_medium_yards_after_catch": 18,
                          "left_medium_epa": 0.33,
                          "left_deep_avg_depth_of_target": null,
                          "deep_first_downs": 0,
                          "short_drop_rate": 16.7,
                          "left_medium_positive_epa_percent": 33.3,
                          "center_deep_touchdowns": 0,
                          "right_behind_los_yprr": 6,
                          "center_medium_pass_blocks": 0,
                          "short_positive_epa_percent": 62.5,
                          "medium_fumbles": 0,
                          "center_medium_yards_after_catch_per_reception": 9,
                          "left_short_routes": 4,
                          "behind_los_route_rate": 100,
                          "behind_los_epa": 0.79,
                          "right_behind_los_contested_receptions": 0,
                          "right_medium_yards_after_catch": 0,
                          "deep_positive_epa_plays": 0,
                          "center_short_touchdowns": 0,
                          "right_medium_drops": 0,
                          "left_behind_los_routes": 1,
                          "left_deep_epa": -0.25,
                          "left_short_targets": 2,
                          "left_deep_pass_block_rate": 0,
                          "slot_rate": 23.9,
                          "right_deep_caught_percent": 0,
                          "center_short_grades_pass_route": 72,
                          "plays_with_epa": 65,
                          "slot_snaps": 17,
                          "left_behind_los_fumbles": 0,
                          "center_deep_positive_epa_plays": 1,
                          "right_medium_touchdowns": 0,
                          "center_short_fumbles": 0,
                          "center_behind_los_routes": 2,
                          "behind_los_receptions": 1,
                          "medium_targets_percent": 33.3,
                          "left_medium_plays_with_epa": 3,
                          "left_medium_yards": 12,
                          "center_medium_touchdowns": 0,
                          "medium_targeted_qb_rating": 118.8,
                          "center_short_drop_rate": 33.3,
                          "short_pass_block_rate": 0,
                          "right_deep_avg_depth_of_target": 20,
                          "center_deep_yards": 0,
                          "center_short_yards_after_catch_per_reception": 6.5,
                          "right_short_targets": 3,
                          "behind_los_avg_depth_of_target": -1,
                          "left_behind_los_contested_catch_rate": null,
                          "center_short_targeted_qb_rating": 92.4,
                          "left_behind_los_epa": 0.58,
                          "deep_route_rate": 100,
                          "short_yprr": 5.63,
                          "short_positive_epa_plays": 5,
                          "deep_plays_with_epa": 1,
                          "deep_caught_percent": 0,
                          "center_medium_drop_rate": 0,
                          "center_behind_los_yards_after_catch": 0,
                          "medium_yards": 72,
                          "wide_rate": 74.6,
                          "center_deep_avoided_tackles": 0,
                          "left_short_contested_targets": 0,
                          "center_behind_los_first_downs": 0,
                          "center_medium_interceptions": 0,
                          "center_short_positive_epa_plays": 9,
                          "center_deep_yards_per_reception": null,
                          "center_deep_contested_targets": 0,
                          "left_short_targets_percent": 50,
                          "short_grades_hands_drop": 45.8,
                          "right_short_plays_with_epa": 7,
                          "pass_block_rate": 0,
                          "right_deep_yards_after_catch_per_reception": null,
                          "left_medium_contested_receptions": 0,
                          "center_short_yards_per_reception": 12.5,
                          "center_deep_grades_hands_drop": null,
                          "deep_longest": 0,
                          "left_medium_yards_after_catch_per_reception": 0,
                          "right_short_interceptions": 0,
                          "center_short_caught_percent": 66.7,
                          "left_deep_interceptions": 0,
                          "short_yards_per_reception": 9,
                          "center_short_avoided_tackles": 0,
                          "behind_los_yards_per_reception": 12,
                          "short_epa": 0.29,
                          "deep_drop_rate": null,
                          "left_deep_yards_per_reception": null,
                          "right_short_yprr": 2.86,
                          "medium_longest": 24,
                          "left_short_contested_catch_rate": null,
                          "right_medium_routes": 4,
                          "left_short_receptions": 0,
                          "left_deep_yards_after_catch_per_reception": null,
                          "deep_targets": 1,
                          "left_short_grades_hands_drop": null,
                          "right_short_epa": 0.37,
                          "left_behind_los_contested_receptions": 0,
                          "medium_targets": 5,
                          "behind_los_targeted_qb_rating": 116.7,
                          "center_short_contested_targets": 0,
                          "center_short_route_rate": 100,
                          "right_medium_route_rate": 100,
                          "left_short_epa": -0.74,
                          "left_deep_avoided_tackles": 0,
                          "center_behind_los_pass_blocks": 0,
                          "deep_interceptions": 0,
                          "right_short_caught_percent": 100,
                          "route_rate": 91.5,
                          "center_deep_caught_percent": null,
                          "center_medium_fumbles": 0,
                          "behind_los_grades_hands_drop": 64.7,
                          "left_behind_los_targets": 0,
                          "drops": 1,
                          "right_medium_yprr": 3.75,
                          "right_short_receptions": 3,
                          "medium_positive_epa_plays": 4,
                          "right_short_contested_targets": 0,
                          "center_medium_yards_per_reception": 22.5,
                          "left_deep_positive_epa_plays": 0,
                          "right_behind_los_yards": 12,
                          "center_behind_los_grades_hands_drop": null,
                          "grades_hands_fumble": 71.1,
                          "right_behind_los_receptions": 1,
                          "left_medium_caught_percent": 50,
                          "longest": 24,
                          "left_medium_drops": 0,
                          "short_avoided_tackles": 0,
                          "center_short_epa": 0.34,
                          "right_medium_plays_with_epa": 4,
                          "pass_blocks": 0,
                          "center_behind_los_targets": 0,
                          "left_deep_pass_blocks": 0,
                          "left_short_drops": 0,
                          "medium_positive_epa_percent": 80,
                          "center_deep_receptions": 0,
                          "right_medium_epa": -0.94,
                          "right_short_pass_block_rate": 0,
                          "center_deep_route_rate": 100,
                          "center_short_pass_plays": 15,
                          "routes": 65,
                          "center_deep_interceptions": 0,
                          "left_medium_yards_after_catch": 0,
                          "left_behind_los_pass_blocks": 0,
                          "pass_plays": 71,
                          "right_behind_los_longest": 12,
                          "short_yards": 45,
                          "yards_per_reception": 12.9,
                          "left_deep_receptions": 0,
                          "deep_grades_pass_route": 59.3,
                          "left_medium_targets": 2,
                          "behind_los_grades_pass_route": 78.5,
                          "right_deep_targeted_qb_rating": 39.6,
                          "targets_percent": 23.1,
                          "behind_los_pass_block_rate": 0,
                          "left_medium_pass_blocks": 0,
                          "left_medium_avg_depth_of_target": 11.5,
                          "deep_avoided_tackles": 0,
                          "center_behind_los_yprr": 0,
                          "center_behind_los_epa": -0.08,
                          "right_behind_los_route_rate": 100,
                          "center_deep_fumbles": 0,
                          "right_behind_los_plays_with_epa": 2,
                          "left_medium_grades_hands_drop": 64.7,
                          "right_medium_yards": 15,
                          "left_deep_yards_after_catch": 0,
                          "left_deep_pass_plays": 1,
                          "positive_epa_percent": 46.2,
                          "center_short_yards_after_catch": 13,
                          "center_behind_los_route_rate": 100,
                          "right_medium_drop_rate": 0,
                          "medium_grades_hands_drop": 72.1,
                          "right_deep_pass_blocks": 0,
                          "medium_contested_catch_rate": 0,
                          "franchise_id": 7,
                          "center_behind_los_caught_percent": null,
                          "medium_plays_with_epa": 5,
                          "right_behind_los_caught_percent": 100,
                          "short_pass_plays": 8,
                          "center_behind_los_targeted_qb_rating": 0,
                          "deep_targeted_qb_rating": 39.6,
                          "center_short_pass_block_rate": 0,
                          "right_short_avoided_tackles": 0,
                          "left_short_drop_rate": null,
                          "left_medium_yards_per_reception": 12,
                          "left_medium_receptions": 1,
                          "right_medium_pass_plays": 4,
                          "center_medium_contested_targets": 0,
                          "contested_receptions": 0,
                          "short_first_downs": 5,
                          "yards_after_catch": 48,
                          "center_medium_targets_percent": 33.3,
                          "right_short_longest": 10,
                          "left_deep_longest": 0,
                          "right_short_drops": 0,
                          "right_medium_contested_receptions": 0,
                          "right_deep_contested_catch_rate": null,
                          "center_behind_los_receptions": 0,
                          "right_medium_caught_percent": 100,
                          "right_deep_targets": 1,
                          "center_medium_positive_epa_percent": 50,
                          "medium_drops": 0,
                          "left_deep_grades_hands_drop": null,
                          "behind_los_positive_epa_percent": 100,
                          "left_short_avoided_tackles": 0,
                          "right_medium_grades_pass_route": 78.1,
                          "right_short_grades_hands_drop": 70.5,
                          "left_behind_los_yards_per_reception": null,
                          "medium_yards_after_catch": 18,
                          "behind_los_plays_with_epa": 1,
                          "left_behind_los_plays_with_epa": 1,
                          "center_medium_pass_plays": 7,
                          "left_behind_los_caught_percent": null,
                          "left_medium_contested_targets": 1,
                          "center_medium_contested_receptions": 0,
                          "avg_depth_of_target": 9.1,
                          "left_medium_positive_epa_plays": 1,
                          "behind_los_contested_catch_rate": null,
                          "epa": -0.2,
                          "behind_los_yards_after_catch": 13,
                          "left_deep_drops": 0,
                          "center_deep_positive_epa_percent": 50,
                          "left_behind_los_yards_after_catch_per_reception": null,
                          "right_deep_routes": 2,
                          "avoided_tackles": 2,
                          "center_deep_grades_pass_route": null,
                          "deep_yards_after_catch": 0,
                          "center_behind_los_drop_rate": null,
                          "short_drops": 1,
                          "right_deep_contested_receptions": 0,
                          "center_behind_los_plays_with_epa": 2,
                          "left_behind_los_targeted_qb_rating": 0,
                          "right_medium_avg_depth_of_target": 15,
                          "right_medium_avoided_tackles": 0,
                          "center_medium_caught_percent": 100,
                          "center_behind_los_fumbles": 0,
                          "center_medium_first_downs": 2,
                          "behind_los_caught_percent": 100,
                          "right_deep_positive_epa_plays": 0,
                          "short_routes": 8,
                          "left_deep_grades_pass_route": null,
                          "medium_routes": 5,
                          "medium_caught_percent": 80,
                          "behind_los_contested_receptions": 0,
                          "behind_los_yprr": 12,
                          "left_short_touchdowns": 0,
                          "medium_drop_rate": 0,
                          "player_id": 84270,
                          "right_short_positive_epa_plays": 5,
                          "left_behind_los_pass_block_rate": 0,
                          "right_deep_pass_plays": 3,
                          "short_caught_percent": 62.5,
                          "right_medium_yards_per_reception": 15,
                          "center_medium_yards": 45,
                          "center_deep_epa": -0.68,
                          "left_medium_interceptions": 0,
                          "right_deep_interceptions": 0,
                          "touchdowns": 1,
                          "deep_positive_epa_percent": 0,
                          "deep_fumbles": 0,
                          "center_short_contested_catch_rate": null,
                          "right_deep_plays_with_epa": 2,
                          "center_behind_los_targets_percent": 0,
                          "right_short_yards_per_reception": 6.7,
                          "center_deep_targets_percent": 0,
                          "center_behind_los_yards_after_catch_per_reception": null,
                          "behind_los_touchdowns": 0,
                          "medium_pass_block_rate": 0,
                          "left_behind_los_route_rate": 100,
                          "right_behind_los_targeted_qb_rating": 116.7,
                          "right_behind_los_drops": 0,
                          "left_behind_los_first_downs": 0
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/player/receiving/summary": {
      "get": {
        "operationId": "player-receiving-summary",
        "summary": "Receiving summary for one player",
        "description": "A receiver's targets, catches, yards, touchdowns, drops and grades, week by week. `league` and\n`player` are required, and restish takes them as positional arguments in that order — `restish pff\n<command> nfl 4924 --season 2025` (player ids come from `ref-players`). Add `--season` for one\nseason, week by week, or `--career true` for career and per-season totals; leaving both out is\nrefused with `400 invalid_parameter`. `--week` narrows to one week. Grades are on PFF's 0-100 scale\nand every other column is a raw total or rate.",
        "tags": [
          "player"
        ],
        "x-requires-one-of": {
          "message": "Give season for one season, or career=true for career totals",
          "alternatives": [
            [
              "season"
            ],
            [
              "career"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/player_id"
          },
          {
            "$ref": "#/components/parameters/career"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerReceivingSummaryResponse"
                },
                "examples": {
                  "career": {
                    "summary": "Ja'Marr Chase (WR), career totals",
                    "description": "`GET /v1/player/receiving/summary?league=nfl&week=1&player_id=84270&career=true`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "receiving_summary": {
                        "career": {
                          "targets": 42,
                          "yards_after_catch_per_reception": 5.1,
                          "yprr": 1.91,
                          "wide_snaps": 148,
                          "fumbles": 0,
                          "first_downs": 20,
                          "inline_snaps": 0,
                          "contested_targets": 4,
                          "inline_rate": 0,
                          "contested_catch_rate": 0,
                          "yards": 357,
                          "receptions": 28,
                          "targeted_qb_rating": 108.9,
                          "interceptions": 0,
                          "caught_percent": 66.7,
                          "positive_epa_plays": 76,
                          "drop_rate": 3.4,
                          "slot_rate": 25,
                          "plays_with_epa": 187,
                          "slot_snaps": 50,
                          "penalties": 1,
                          "wide_rate": 74,
                          "pass_block_rate": 0,
                          "declined_penalties": 0,
                          "route_rate": 93.5,
                          "drops": 1,
                          "longest": 50,
                          "pass_blocks": 0,
                          "routes": 187,
                          "pass_plays": 200,
                          "yards_per_reception": 12.8,
                          "targets_percent": 22.5,
                          "positive_epa_percent": 40.6,
                          "contested_receptions": 0,
                          "yards_after_catch": 143,
                          "avg_depth_of_target": 11.1,
                          "epa": -0.25,
                          "avoided_tackles": 6,
                          "player_id": 84270,
                          "touchdowns": 2
                        },
                        "seasons": [
                          {
                            "targets": 5,
                            "grades_offense": 63.5,
                            "yards_after_catch_per_reception": 6.5,
                            "grades_pass_route": 62.7,
                            "season": 2025,
                            "yprr": 0.96,
                            "wide_snaps": 19,
                            "fumbles": 0,
                            "first_downs": 1,
                            "inline_snaps": 0,
                            "contested_targets": 2,
                            "inline_rate": 0,
                            "contested_catch_rate": 0,
                            "yards": 26,
                            "receptions": 2,
                            "targeted_qb_rating": 57.1,
                            "interceptions": 0,
                            "caught_percent": 40,
                            "positive_epa_plays": 11,
                            "drop_rate": 0,
                            "grades_hands_drop": 68.3,
                            "slot_rate": 28.6,
                            "plays_with_epa": 27,
                            "slot_snaps": 8,
                            "penalties": 0,
                            "wide_rate": 67.9,
                            "pass_block_rate": 0,
                            "declined_penalties": 0,
                            "route_rate": 96.4,
                            "drops": 0,
                            "season_id": 2025,
                            "grades_hands_fumble": 64,
                            "longest": 20,
                            "pass_blocks": 0,
                            "routes": 27,
                            "pass_plays": 28,
                            "yards_per_reception": 13,
                            "targets_percent": 18.5,
                            "positive_epa_percent": 40.7,
                            "franchise_id": [
                              7
                            ],
                            "contested_receptions": 0,
                            "yards_after_catch": 13,
                            "avg_depth_of_target": 17.4,
                            "epa": -0.14,
                            "avoided_tackles": 1,
                            "touchdowns": 0
                          },
                          {
                            "targets": 6,
                            "grades_offense": 73.9,
                            "yards_after_catch_per_reception": 4,
                            "grades_pass_route": 70.7,
                            "season": 2024,
                            "yprr": 2,
                            "wide_snaps": 21,
                            "fumbles": 0,
                            "first_downs": 3,
                            "inline_snaps": 0,
                            "contested_targets": 0,
                            "inline_rate": 0,
                            "contested_catch_rate": null,
                            "yards": 62,
                            "receptions": 6,
                            "targeted_qb_rating": 109.7,
                            "interceptions": 0,
                            "caught_percent": 100,
                            "positive_epa_plays": 11,
                            "drop_rate": 0,
                            "grades_hands_drop": 74.6,
                            "slot_rate": 38.2,
                            "plays_with_epa": 31,
                            "slot_snaps": 13,
                            "penalties": 0,
                            "wide_rate": 61.8,
                            "pass_block_rate": 0,
                            "declined_penalties": 0,
                            "route_rate": 91.2,
                            "drops": 0,
                            "season_id": 2024,
                            "grades_hands_fumble": 68.8,
                            "longest": 28,
                            "pass_blocks": 0,
                            "routes": 31,
                            "pass_plays": 34,
                            "yards_per_reception": 10.3,
                            "targets_percent": 19.4,
                            "positive_epa_percent": 35.5,
                            "franchise_id": [
                              7
                            ],
                            "contested_receptions": 0,
                            "yards_after_catch": 24,
                            "avg_depth_of_target": 6.3,
                            "epa": -0.41,
                            "avoided_tackles": 0,
                            "touchdowns": 0
                          },
                          {
                            "targets": 9,
                            "grades_offense": 69.8,
                            "yards_after_catch_per_reception": 4.2,
                            "grades_pass_route": 70.5,
                            "season": 2023,
                            "yprr": 1.15,
                            "wide_snaps": 27,
                            "fumbles": 0,
                            "first_downs": 3,
                            "inline_snaps": 0,
                            "contested_targets": 1,
                            "inline_rate": 0,
                            "contested_catch_rate": 0,
                            "yards": 39,
                            "receptions": 5,
                            "targeted_qb_rating": 66.4,
                            "interceptions": 0,
                            "caught_percent": 55.6,
                            "positive_epa_plays": 8,
                            "drop_rate": 0,
                            "grades_hands_drop": 74.6,
                            "slot_rate": 25,
                            "plays_with_epa": 34,
                            "slot_snaps": 9,
                            "penalties": 0,
                            "wide_rate": 75,
                            "pass_block_rate": 0,
                            "declined_penalties": 0,
                            "route_rate": 94.4,
                            "drops": 0,
                            "season_id": 2023,
                            "grades_hands_fumble": 69.8,
                            "longest": 12,
                            "pass_blocks": 0,
                            "routes": 34,
                            "pass_plays": 36,
                            "yards_per_reception": 7.8,
                            "targets_percent": 26.5,
                            "positive_epa_percent": 23.5,
                            "franchise_id": [
                              7
                            ],
                            "contested_receptions": 0,
                            "yards_after_catch": 21,
                            "avg_depth_of_target": 9.9,
                            "epa": -0.66,
                            "avoided_tackles": 1,
                            "touchdowns": 0
                          }
                        ],
                        "subject": {
                          "eligible": "offense",
                          "grade_keys": [
                            "offense",
                            "pass_route",
                            "pass_block",
                            "hands_drop",
                            "hands_fumble"
                          ],
                          "league_id": 1,
                          "player_id": 84270,
                          "roster": "offense",
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        }
                      }
                    }
                  },
                  "default": {
                    "summary": "Ja'Marr Chase (WR), 2022 season, week 1",
                    "description": "`GET /v1/player/receiving/summary?league=nfl&season=2022&week=1&player_id=84270`, complete.",
                    "value": {
                      "receiving_summary": {
                        "subject": {
                          "eligible": "offense",
                          "grade_keys": [
                            "offense",
                            "pass_route",
                            "pass_block",
                            "hands_drop",
                            "hands_fumble"
                          ],
                          "league_id": 1,
                          "player_id": 84270,
                          "roster": "offense",
                          "season": 2022,
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        },
                        "week_totals": [
                          {
                            "targets": 15,
                            "grades_offense": 74.6,
                            "yards_after_catch_per_reception": 4.8,
                            "grades_pass_route": 76,
                            "season": 2022,
                            "league_id": 1,
                            "team_name": "CIN",
                            "yprr": 1.98,
                            "wide_snaps": 53,
                            "fumbles": 0,
                            "first_downs": 10,
                            "inline_snaps": 0,
                            "contested_targets": 1,
                            "player_game_count": 1,
                            "inline_rate": 0,
                            "contested_catch_rate": 0,
                            "yards": 129,
                            "receptions": 10,
                            "targeted_qb_rating": 115.7,
                            "interceptions": 0,
                            "caught_percent": 66.7,
                            "positive_epa_plays": 30,
                            "drop_rate": 9.1,
                            "grades_hands_drop": 58.5,
                            "slot_rate": 23.9,
                            "plays_with_epa": 65,
                            "slot_snaps": 17,
                            "penalties": 1,
                            "wide_rate": 74.6,
                            "pass_block_rate": 0,
                            "declined_penalties": 0,
                            "route_rate": 91.5,
                            "drops": 1,
                            "season_id": 2022,
                            "grades_hands_fumble": 71.1,
                            "longest": 24,
                            "pass_blocks": 0,
                            "routes": 65,
                            "pass_plays": 71,
                            "yards_per_reception": 12.9,
                            "targets_percent": 23.1,
                            "positive_epa_percent": 46.2,
                            "franchise_id": 7,
                            "contested_receptions": 0,
                            "yards_after_catch": 48,
                            "avg_depth_of_target": 9.1,
                            "epa": -0.2,
                            "avoided_tackles": 2,
                            "touchdowns": 1
                          }
                        ],
                        "weeks": [
                          {
                            "game": {
                              "away_franchise_id": 25,
                              "away_team_name": "PIT",
                              "game_id": 23108,
                              "home_franchise_id": 7,
                              "home_team_name": "CIN",
                              "player_franchise_id": 7,
                              "position": "LWR",
                              "status": "S",
                              "week": 1
                            },
                            "targets": 15,
                            "grades_offense": 74.6,
                            "game_id": 23108,
                            "yards_after_catch_per_reception": 4.8,
                            "grades_pass_route": 76,
                            "week": 1,
                            "status": "S",
                            "yprr": 1.98,
                            "wide_snaps": 53,
                            "fumbles": 0,
                            "first_downs": 10,
                            "jersey_number": "01",
                            "inline_snaps": 0,
                            "away_team_name": "PIT",
                            "contested_targets": 1,
                            "inline_rate": 0,
                            "contested_catch_rate": 0,
                            "yards": 129,
                            "player_franchise_id": 7,
                            "receptions": 10,
                            "targeted_qb_rating": 115.7,
                            "interceptions": 0,
                            "caught_percent": 66.7,
                            "positive_epa_plays": 30,
                            "drop_rate": 9.1,
                            "grades_hands_drop": 58.5,
                            "slot_rate": 23.9,
                            "plays_with_epa": 65,
                            "slot_snaps": 17,
                            "penalties": 1,
                            "wide_rate": 74.6,
                            "pass_block_rate": 0,
                            "declined_penalties": 0,
                            "route_rate": 91.5,
                            "drops": 1,
                            "position": "LWR",
                            "grades_hands_fumble": 71.1,
                            "longest": 24,
                            "pass_blocks": 0,
                            "away_franchise_id": 25,
                            "routes": 65,
                            "pass_plays": 71,
                            "yards_per_reception": 12.9,
                            "targets_percent": 23.1,
                            "positive_epa_percent": 46.2,
                            "contested_receptions": 0,
                            "yards_after_catch": 48,
                            "home_franchise_id": 7,
                            "home_team_name": "CIN",
                            "avg_depth_of_target": 9.1,
                            "epa": -0.2,
                            "avoided_tackles": 2,
                            "player_id": 84270,
                            "touchdowns": 1
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/player/defense/summary": {
      "get": {
        "operationId": "player-defense-summary",
        "summary": "Defense summary for one player",
        "description": "A defender's snaps, tackles, stops, pressures, coverage work and grades, week by week. `league` and\n`player` are required, and restish takes them as positional arguments in that order — `restish pff\n<command> nfl 4924 --season 2025` (player ids come from `ref-players`). Add `--season` for one\nseason, week by week, or `--career true` for career and per-season totals; leaving both out is\nrefused with `400 invalid_parameter`. `--week` narrows to one week. Grades are on PFF's 0-100 scale\nand every other column is a raw total or rate.",
        "tags": [
          "player"
        ],
        "x-requires-one-of": {
          "message": "Give season for one season, or career=true for career totals",
          "alternatives": [
            [
              "season"
            ],
            [
              "career"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/player_id"
          },
          {
            "$ref": "#/components/parameters/career"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerDefenseSummaryResponse"
                },
                "examples": {
                  "career": {
                    "summary": "Trey Hendrickson (ED), career totals",
                    "description": "`GET /v1/player/defense/summary?league=nfl&week=1&player_id=11858&career=true`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "defense_summary": {
                        "career": {
                          "targets": 2,
                          "interception_touchdowns": 0,
                          "forced_fumbles": 0,
                          "missed_tackles": 3,
                          "catch_rate": 50,
                          "tackles": 13,
                          "snap_counts_offball": 3,
                          "snap_counts_box": 2,
                          "sacks": 5,
                          "snap_counts_pass_rush": 229,
                          "snap_counts_dl": 360,
                          "yards": 9,
                          "receptions": 1,
                          "hurries": 19,
                          "interceptions": 0,
                          "snap_counts_coverage": 17,
                          "snap_counts_dl_over_t": 16,
                          "snap_counts_dl_a_gap": 0,
                          "fumble_recoveries": 0,
                          "snap_counts_corner": 0,
                          "hits": 8,
                          "penalties": 2,
                          "batted_passes": 0,
                          "stops": 16,
                          "declined_penalties": 0,
                          "total_pressures": 32,
                          "fumble_recovery_touchdowns": 0,
                          "longest": 9,
                          "snap_counts_slot": 1,
                          "missed_tackle_rate": 17.6,
                          "yards_per_reception": 9,
                          "safeties": 0,
                          "snap_counts_defense": 363,
                          "yards_after_catch": 1,
                          "snap_counts_dl_b_gap": 10,
                          "pass_break_ups": 0,
                          "qb_rating_against": 62.5,
                          "snap_counts_run_defense": 117,
                          "tackles_for_loss": 0,
                          "assists": 1,
                          "player_id": 11858,
                          "snap_counts_fs": 0,
                          "touchdowns": 0,
                          "snap_counts_dl_outside_t": 334
                        },
                        "seasons": [
                          {
                            "targets": 0,
                            "season": 2025,
                            "interception_touchdowns": 0,
                            "forced_fumbles": 0,
                            "missed_tackles": 0,
                            "catch_rate": null,
                            "tackles": 2,
                            "snap_counts_offball": 0,
                            "snap_counts_box": 0,
                            "sacks": 1,
                            "snap_counts_pass_rush": 39,
                            "snap_counts_dl": 57,
                            "grades_tackle": 72.7,
                            "yards": 0,
                            "receptions": 0,
                            "grades_coverage_defense": 62,
                            "hurries": 5,
                            "interceptions": 0,
                            "snap_counts_coverage": 3,
                            "snap_counts_dl_over_t": 0,
                            "snap_counts_dl_a_gap": 0,
                            "fumble_recoveries": 0,
                            "grades_run_defense": 65.2,
                            "snap_counts_corner": 0,
                            "hits": 2,
                            "penalties": 1,
                            "batted_passes": 0,
                            "stops": 2,
                            "declined_penalties": 0,
                            "total_pressures": 8,
                            "season_id": 2025,
                            "fumble_recovery_touchdowns": 0,
                            "longest": null,
                            "snap_counts_slot": 0,
                            "missed_tackle_rate": 0,
                            "grades_defense": 88.1,
                            "yards_per_reception": null,
                            "grades_defense_penalty": 8.5,
                            "safeties": 0,
                            "franchise_id": [
                              7
                            ],
                            "snap_counts_defense": 57,
                            "yards_after_catch": 0,
                            "snap_counts_dl_b_gap": 0,
                            "pass_break_ups": 0,
                            "qb_rating_against": 0,
                            "snap_counts_run_defense": 15,
                            "tackles_for_loss": 0,
                            "assists": 0,
                            "grades_pass_rush_defense": 90.2,
                            "snap_counts_fs": 0,
                            "touchdowns": 0,
                            "snap_counts_dl_outside_t": 57
                          },
                          {
                            "targets": 1,
                            "season": 2024,
                            "interception_touchdowns": 0,
                            "forced_fumbles": 0,
                            "missed_tackles": 1,
                            "catch_rate": 100,
                            "tackles": 2,
                            "snap_counts_offball": 0,
                            "snap_counts_box": 0,
                            "sacks": 0,
                            "snap_counts_pass_rush": 23,
                            "snap_counts_dl": 48,
                            "grades_tackle": 30.1,
                            "yards": 9,
                            "receptions": 1,
                            "grades_coverage_defense": 51.9,
                            "hurries": 4,
                            "interceptions": 0,
                            "snap_counts_coverage": 2,
                            "snap_counts_dl_over_t": 1,
                            "snap_counts_dl_a_gap": 0,
                            "fumble_recoveries": 0,
                            "grades_run_defense": 59.2,
                            "snap_counts_corner": 0,
                            "hits": 2,
                            "penalties": 0,
                            "batted_passes": 0,
                            "stops": 2,
                            "declined_penalties": 0,
                            "total_pressures": 6,
                            "season_id": 2024,
                            "fumble_recovery_touchdowns": 0,
                            "longest": 9,
                            "snap_counts_slot": 0,
                            "missed_tackle_rate": 33.3,
                            "grades_defense": 65,
                            "yards_per_reception": 9,
                            "grades_defense_penalty": 80.4,
                            "safeties": 0,
                            "franchise_id": [
                              7
                            ],
                            "snap_counts_defense": 48,
                            "yards_after_catch": 1,
                            "snap_counts_dl_b_gap": 1,
                            "pass_break_ups": 0,
                            "qb_rating_against": 104.2,
                            "snap_counts_run_defense": 23,
                            "tackles_for_loss": 0,
                            "assists": 0,
                            "grades_pass_rush_defense": 74.8,
                            "snap_counts_fs": 0,
                            "touchdowns": 0,
                            "snap_counts_dl_outside_t": 46
                          },
                          {
                            "targets": 0,
                            "season": 2023,
                            "interception_touchdowns": 0,
                            "forced_fumbles": 0,
                            "missed_tackles": 1,
                            "catch_rate": null,
                            "tackles": 1,
                            "snap_counts_offball": 0,
                            "snap_counts_box": 0,
                            "sacks": 1,
                            "snap_counts_pass_rush": 20,
                            "snap_counts_dl": 44,
                            "grades_tackle": 28.9,
                            "yards": 0,
                            "receptions": 0,
                            "grades_coverage_defense": 60.5,
                            "hurries": 2,
                            "interceptions": 0,
                            "snap_counts_coverage": 3,
                            "snap_counts_dl_over_t": 2,
                            "snap_counts_dl_a_gap": 0,
                            "fumble_recoveries": 0,
                            "grades_run_defense": 40.1,
                            "snap_counts_corner": 0,
                            "hits": 1,
                            "penalties": 0,
                            "batted_passes": 0,
                            "stops": 2,
                            "declined_penalties": 0,
                            "total_pressures": 4,
                            "season_id": 2023,
                            "fumble_recovery_touchdowns": 0,
                            "longest": null,
                            "snap_counts_slot": 0,
                            "missed_tackle_rate": 33.3,
                            "grades_defense": 54.6,
                            "yards_per_reception": null,
                            "grades_defense_penalty": 78.5,
                            "safeties": 0,
                            "franchise_id": [
                              7
                            ],
                            "snap_counts_defense": 44,
                            "yards_after_catch": 0,
                            "snap_counts_dl_b_gap": 0,
                            "pass_break_ups": 0,
                            "qb_rating_against": 0,
                            "snap_counts_run_defense": 21,
                            "tackles_for_loss": 0,
                            "assists": 1,
                            "grades_pass_rush_defense": 71.4,
                            "snap_counts_fs": 0,
                            "touchdowns": 0,
                            "snap_counts_dl_outside_t": 42
                          }
                        ],
                        "subject": {
                          "eligible": "defense",
                          "grade_keys": [
                            "defense",
                            "defense_penalty",
                            "run_defense",
                            "pass_rush_defense",
                            "coverage_defense",
                            "tackle"
                          ],
                          "league_id": 1,
                          "player_id": 11858,
                          "roster": "defense",
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        }
                      }
                    }
                  },
                  "default": {
                    "summary": "Trey Hendrickson (ED), 2022 season, week 1",
                    "description": "`GET /v1/player/defense/summary?league=nfl&season=2022&week=1&player_id=11858`, complete.",
                    "value": {
                      "defense_summary": {
                        "subject": {
                          "eligible": "defense",
                          "grade_keys": [
                            "defense",
                            "defense_penalty",
                            "run_defense",
                            "pass_rush_defense",
                            "coverage_defense",
                            "tackle"
                          ],
                          "league_id": 1,
                          "player_id": 11858,
                          "roster": "defense",
                          "season": 2022,
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        },
                        "week_totals": [
                          {
                            "targets": 0,
                            "season": 2022,
                            "interception_touchdowns": 0,
                            "league_id": 1,
                            "forced_fumbles": 0,
                            "missed_tackles": 0,
                            "catch_rate": null,
                            "team_name": "CIN",
                            "tackles": 4,
                            "snap_counts_offball": 0,
                            "snap_counts_box": 0,
                            "sacks": 0,
                            "snap_counts_pass_rush": 38,
                            "player_game_count": 1,
                            "snap_counts_dl": 59,
                            "grades_tackle": 74.7,
                            "yards": 0,
                            "receptions": 0,
                            "grades_coverage_defense": 74.1,
                            "hurries": 1,
                            "interceptions": 0,
                            "snap_counts_coverage": 3,
                            "snap_counts_dl_over_t": 2,
                            "snap_counts_dl_a_gap": 0,
                            "fumble_recoveries": 0,
                            "grades_run_defense": 78.4,
                            "snap_counts_corner": 0,
                            "hits": 1,
                            "penalties": 0,
                            "batted_passes": 0,
                            "stops": 3,
                            "declined_penalties": 0,
                            "total_pressures": 2,
                            "season_id": 2022,
                            "fumble_recovery_touchdowns": 0,
                            "longest": null,
                            "snap_counts_slot": 0,
                            "missed_tackle_rate": 0,
                            "grades_defense": 82.7,
                            "yards_per_reception": null,
                            "grades_defense_penalty": 80.3,
                            "safeties": 0,
                            "franchise_id": 7,
                            "snap_counts_defense": 59,
                            "yards_after_catch": 0,
                            "snap_counts_dl_b_gap": 2,
                            "pass_break_ups": 0,
                            "qb_rating_against": 0,
                            "snap_counts_run_defense": 18,
                            "tackles_for_loss": 0,
                            "assists": 0,
                            "grades_pass_rush_defense": 65.9,
                            "snap_counts_fs": 0,
                            "touchdowns": 0,
                            "snap_counts_dl_outside_t": 55
                          }
                        ],
                        "weeks": [
                          {
                            "game": {
                              "away_franchise_id": 25,
                              "away_team_name": "PIT",
                              "game_id": 23108,
                              "home_franchise_id": 7,
                              "home_team_name": "CIN",
                              "player_franchise_id": 7,
                              "position": "DRE",
                              "status": "S",
                              "week": 1
                            },
                            "targets": 0,
                            "game_id": 23108,
                            "interception_touchdowns": 0,
                            "week": 1,
                            "forced_fumbles": 0,
                            "missed_tackles": 0,
                            "status": "S",
                            "catch_rate": null,
                            "tackles": 4,
                            "jersey_number": "91",
                            "away_team_name": "PIT",
                            "snap_counts_offball": 0,
                            "snap_counts_box": 0,
                            "sacks": 0,
                            "snap_counts_pass_rush": 38,
                            "snap_counts_dl": 59,
                            "grades_tackle": 74.7,
                            "yards": 0,
                            "player_franchise_id": 7,
                            "receptions": 0,
                            "grades_coverage_defense": 74.1,
                            "hurries": 1,
                            "interceptions": 0,
                            "snap_counts_coverage": 3,
                            "snap_counts_dl_over_t": 2,
                            "snap_counts_dl_a_gap": 0,
                            "fumble_recoveries": 0,
                            "grades_run_defense": 78.4,
                            "snap_counts_corner": 0,
                            "hits": 1,
                            "penalties": 0,
                            "batted_passes": 0,
                            "stops": 3,
                            "declined_penalties": 0,
                            "total_pressures": 2,
                            "position": "DRE",
                            "fumble_recovery_touchdowns": 0,
                            "longest": null,
                            "away_franchise_id": 25,
                            "snap_counts_slot": 0,
                            "missed_tackle_rate": 0,
                            "grades_defense": 82.7,
                            "yards_per_reception": null,
                            "grades_defense_penalty": 80.3,
                            "safeties": 0,
                            "snap_counts_defense": 59,
                            "yards_after_catch": 0,
                            "home_franchise_id": 7,
                            "snap_counts_dl_b_gap": 2,
                            "home_team_name": "CIN",
                            "pass_break_ups": 0,
                            "qb_rating_against": 0,
                            "snap_counts_run_defense": 18,
                            "tackles_for_loss": 0,
                            "assists": 0,
                            "grades_pass_rush_defense": 65.9,
                            "player_id": 11858,
                            "snap_counts_fs": 0,
                            "touchdowns": 0,
                            "snap_counts_dl_outside_t": 55
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/player/field_goal/summary": {
      "get": {
        "operationId": "player-field-goal-summary",
        "summary": "Field-goal kicking for one player",
        "description": "A kicker's field-goal and extra-point attempts, makes and grades, week by week. `league` and\n`player` are required, and restish takes them as positional arguments in that order — `restish pff\n<command> nfl 4924 --season 2025` (player ids come from `ref-players`). Add `--season` for one\nseason, week by week, or `--career true` for career and per-season totals; leaving both out is\nrefused with `400 invalid_parameter`. `--week` narrows to one week. Grades are on PFF's 0-100 scale\nand every other column is a raw total or rate.",
        "tags": [
          "player"
        ],
        "x-requires-one-of": {
          "message": "Give season for one season, or career=true for career totals",
          "alternatives": [
            [
              "season"
            ],
            [
              "career"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/player_id"
          },
          {
            "$ref": "#/components/parameters/career"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerFieldGoalSummaryResponse"
                },
                "examples": {
                  "career": {
                    "summary": "Evan McPherson (K), career totals",
                    "description": "`GET /v1/player/field_goal/summary?league=nfl&week=1&player_id=82583&career=true`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "field_goal_summary": {
                        "career": {
                          "fifty_attempts": 4,
                          "fifty_made": 3,
                          "fifty_percent": 75,
                          "forty_attempts": 1,
                          "forty_made": 1,
                          "forty_percent": 100,
                          "one_attempts": 0,
                          "one_made": 0,
                          "one_percent": null,
                          "pat_attempts": 7,
                          "pat_made": 6,
                          "pat_percent": 85.7,
                          "player_id": 82583,
                          "thirty_attempts": 2,
                          "thirty_made": 2,
                          "thirty_percent": 100,
                          "total_attempts": 9,
                          "total_made": 7,
                          "total_percent": 77.8,
                          "twenty_attempts": 2,
                          "twenty_made": 1,
                          "twenty_percent": 50
                        },
                        "seasons": [
                          {
                            "fifty_attempts": 0,
                            "fifty_made": 0,
                            "fifty_percent": null,
                            "forty_attempts": 0,
                            "forty_made": 0,
                            "forty_percent": null,
                            "franchise_id": [
                              7
                            ],
                            "grades_fgep_kicker": 63.7,
                            "one_attempts": 0,
                            "one_made": 0,
                            "one_percent": null,
                            "pat_attempts": 2,
                            "pat_made": 2,
                            "pat_percent": 100,
                            "season": 2025,
                            "season_id": 2025,
                            "thirty_attempts": 1,
                            "thirty_made": 1,
                            "thirty_percent": 100,
                            "total_attempts": 1,
                            "total_made": 1,
                            "total_percent": 100,
                            "twenty_attempts": 0,
                            "twenty_made": 0,
                            "twenty_percent": null
                          },
                          {
                            "fifty_attempts": 1,
                            "fifty_made": 1,
                            "fifty_percent": 100,
                            "forty_attempts": 0,
                            "forty_made": 0,
                            "forty_percent": null,
                            "franchise_id": [
                              7
                            ],
                            "grades_fgep_kicker": 66.9,
                            "one_attempts": 0,
                            "one_made": 0,
                            "one_percent": null,
                            "pat_attempts": 1,
                            "pat_made": 1,
                            "pat_percent": 100,
                            "season": 2024,
                            "season_id": 2024,
                            "thirty_attempts": 0,
                            "thirty_made": 0,
                            "thirty_percent": null,
                            "total_attempts": 1,
                            "total_made": 1,
                            "total_percent": 100,
                            "twenty_attempts": 0,
                            "twenty_made": 0,
                            "twenty_percent": null
                          },
                          {
                            "fifty_attempts": 1,
                            "fifty_made": 0,
                            "fifty_percent": 0,
                            "forty_attempts": 1,
                            "forty_made": 1,
                            "forty_percent": 100,
                            "franchise_id": [
                              7
                            ],
                            "grades_fgep_kicker": 50.6,
                            "one_attempts": 0,
                            "one_made": 0,
                            "one_percent": null,
                            "pat_attempts": 0,
                            "pat_made": 0,
                            "pat_percent": null,
                            "season": 2023,
                            "season_id": 2023,
                            "thirty_attempts": 0,
                            "thirty_made": 0,
                            "thirty_percent": null,
                            "total_attempts": 2,
                            "total_made": 1,
                            "total_percent": 50,
                            "twenty_attempts": 0,
                            "twenty_made": 0,
                            "twenty_percent": null
                          }
                        ],
                        "subject": {
                          "eligible": "field_goals",
                          "grade_keys": [
                            "fgep_kicker"
                          ],
                          "league_id": 1,
                          "player_id": 82583,
                          "roster": "special",
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        }
                      }
                    }
                  },
                  "default": {
                    "summary": "Evan McPherson (K), 2022 season, week 1",
                    "description": "`GET /v1/player/field_goal/summary?league=nfl&season=2022&week=1&player_id=82583`, complete.",
                    "value": {
                      "field_goal_summary": {
                        "subject": {
                          "eligible": "field_goals",
                          "grade_keys": [
                            "fgep_kicker"
                          ],
                          "league_id": 1,
                          "player_id": 82583,
                          "roster": "special",
                          "season": 2022,
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        },
                        "week_totals": [
                          {
                            "fifty_attempts": 1,
                            "fifty_made": 1,
                            "fifty_percent": 100,
                            "forty_attempts": 0,
                            "forty_made": 0,
                            "forty_percent": null,
                            "franchise_id": 7,
                            "grades_fgep_kicker": 53.2,
                            "league_id": 1,
                            "one_attempts": 0,
                            "one_made": 0,
                            "one_percent": null,
                            "pat_attempts": 1,
                            "pat_made": 0,
                            "pat_percent": 0,
                            "player_game_count": 1,
                            "season": 2022,
                            "season_id": 2022,
                            "team_name": "CIN",
                            "thirty_attempts": 0,
                            "thirty_made": 0,
                            "thirty_percent": null,
                            "total_attempts": 3,
                            "total_made": 2,
                            "total_percent": 66.7,
                            "twenty_attempts": 2,
                            "twenty_made": 1,
                            "twenty_percent": 50
                          }
                        ],
                        "weeks": [
                          {
                            "game": {
                              "away_franchise_id": 25,
                              "away_team_name": "PIT",
                              "game_id": 23108,
                              "home_franchise_id": 7,
                              "home_team_name": "CIN",
                              "player_franchise_id": 7,
                              "position": "K",
                              "status": "P",
                              "week": 1
                            },
                            "twenty_attempts": 2,
                            "game_id": 23108,
                            "pat_percent": 0,
                            "week": 1,
                            "status": "P",
                            "forty_made": 0,
                            "fifty_percent": 100,
                            "total_made": 2,
                            "jersey_number": "02",
                            "away_team_name": "PIT",
                            "one_made": 0,
                            "fifty_attempts": 1,
                            "forty_attempts": 0,
                            "thirty_percent": null,
                            "total_attempts": 3,
                            "pat_attempts": 1,
                            "player_franchise_id": 7,
                            "twenty_made": 1,
                            "one_attempts": 0,
                            "grades_fgep_kicker": 53.2,
                            "thirty_attempts": 0,
                            "pat_made": 0,
                            "one_percent": null,
                            "total_percent": 66.7,
                            "position": "K",
                            "twenty_percent": 50,
                            "away_franchise_id": 25,
                            "forty_percent": null,
                            "fifty_made": 1,
                            "thirty_made": 0,
                            "home_franchise_id": 7,
                            "home_team_name": "CIN",
                            "player_id": 82583
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/player/kickoff/summary": {
      "get": {
        "operationId": "player-kickoff-summary",
        "summary": "Kickoffs for one player",
        "description": "A kicker's kickoffs, touchbacks, hang time and grades, week by week. `league` and `player` are\nrequired, and restish takes them as positional arguments in that order — `restish pff <command> nfl\n4924 --season 2025` (player ids come from `ref-players`). Add `--season` for one season, week by\nweek, or `--career true` for career and per-season totals; leaving both out is refused with `400\ninvalid_parameter`. `--week` narrows to one week. Grades are on PFF's 0-100 scale and every other\ncolumn is a raw total or rate.",
        "tags": [
          "player"
        ],
        "x-requires-one-of": {
          "message": "Give season for one season, or career=true for career totals",
          "alternatives": [
            [
              "season"
            ],
            [
              "career"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/player_id"
          },
          {
            "$ref": "#/components/parameters/career"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerKickoffSummaryResponse"
                },
                "examples": {
                  "career": {
                    "summary": "Evan McPherson (K), career totals",
                    "description": "`GET /v1/player/kickoff/summary?league=nfl&week=1&player_id=82583&career=true`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "kicking_summary": {
                        "career": {
                          "attempts": 20,
                          "attempts_with_hangtime": 19,
                          "average_distance": 69.9,
                          "average_hangtime": 3.96,
                          "average_starting_field_position": 25.7,
                          "average_yards_per_return": 22,
                          "fair_catches": 0,
                          "kicked_yards": 1398,
                          "kicks_returned": 7,
                          "onside_kicks": 0,
                          "percent_returned": 35,
                          "player_id": 82583,
                          "return_yards": 154,
                          "total_hangtime": 75.3,
                          "touchbacks": 13
                        },
                        "seasons": [
                          {
                            "attempts": 4,
                            "attempts_with_hangtime": 4,
                            "average_distance": 63.5,
                            "average_hangtime": 3.58,
                            "average_starting_field_position": 27.8,
                            "average_yards_per_return": 26.3,
                            "fair_catches": 0,
                            "franchise_id": [
                              7
                            ],
                            "grades_kickoff_kicker": 60,
                            "kicked_yards": 254,
                            "kicks_returned": 4,
                            "onside_kicks": 0,
                            "percent_returned": 100,
                            "return_yards": 105,
                            "season": 2025,
                            "season_id": 2025,
                            "total_hangtime": 14.3,
                            "touchbacks": 0
                          },
                          {
                            "attempts": 3,
                            "attempts_with_hangtime": 3,
                            "average_distance": 69.7,
                            "average_hangtime": 4.25,
                            "average_starting_field_position": 30,
                            "average_yards_per_return": 27,
                            "fair_catches": 0,
                            "franchise_id": [
                              7
                            ],
                            "grades_kickoff_kicker": 60,
                            "kicked_yards": 209,
                            "kicks_returned": 1,
                            "onside_kicks": 0,
                            "percent_returned": 33.3,
                            "return_yards": 27,
                            "season": 2024,
                            "season_id": 2024,
                            "total_hangtime": 12.75,
                            "touchbacks": 2
                          },
                          {
                            "attempts": 2,
                            "attempts_with_hangtime": 2,
                            "average_distance": 73.5,
                            "average_hangtime": 4.16,
                            "average_starting_field_position": 25,
                            "average_yards_per_return": null,
                            "fair_catches": 0,
                            "franchise_id": [
                              7
                            ],
                            "grades_kickoff_kicker": 60,
                            "kicked_yards": 147,
                            "kicks_returned": 0,
                            "onside_kicks": 0,
                            "percent_returned": 0,
                            "return_yards": 0,
                            "season": 2023,
                            "season_id": 2023,
                            "total_hangtime": 8.31,
                            "touchbacks": 2
                          }
                        ],
                        "subject": {
                          "eligible": "kickoffs",
                          "grade_keys": [
                            "kickoff_kicker"
                          ],
                          "league_id": 1,
                          "player_id": 82583,
                          "roster": "special",
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        }
                      }
                    }
                  },
                  "default": {
                    "summary": "Evan McPherson (K), 2022 season, week 1",
                    "description": "`GET /v1/player/kickoff/summary?league=nfl&season=2022&week=1&player_id=82583`, complete.",
                    "value": {
                      "kicking_summary": {
                        "subject": {
                          "eligible": "kickoffs",
                          "grade_keys": [
                            "kickoff_kicker"
                          ],
                          "league_id": 1,
                          "player_id": 82583,
                          "roster": "special",
                          "season": 2022,
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        },
                        "week_totals": [
                          {
                            "attempts": 6,
                            "attempts_with_hangtime": 5,
                            "average_distance": 69.7,
                            "average_hangtime": 4.1,
                            "average_starting_field_position": 24.3,
                            "average_yards_per_return": 1,
                            "fair_catches": 0,
                            "franchise_id": 7,
                            "grades_kickoff_kicker": 60,
                            "kicked_yards": 418,
                            "kicks_returned": 1,
                            "league_id": 1,
                            "onside_kicks": 0,
                            "percent_returned": 16.7,
                            "player_game_count": 1,
                            "return_yards": 1,
                            "season": 2022,
                            "season_id": 2022,
                            "team_name": "CIN",
                            "total_hangtime": 20.48,
                            "touchbacks": 5
                          }
                        ],
                        "weeks": [
                          {
                            "attempts": 6,
                            "attempts_with_hangtime": 5,
                            "average_distance": 69.7,
                            "average_hangtime": 4.1,
                            "average_starting_field_position": 24.3,
                            "average_yards_per_return": 1,
                            "away_franchise_id": 25,
                            "away_team_name": "PIT",
                            "fair_catches": 0,
                            "game": {
                              "away_franchise_id": 25,
                              "away_team_name": "PIT",
                              "game_id": 23108,
                              "home_franchise_id": 7,
                              "home_team_name": "CIN",
                              "player_franchise_id": 7,
                              "position": "K",
                              "status": "P",
                              "week": 1
                            },
                            "game_id": 23108,
                            "grades_kickoff_kicker": 60,
                            "home_franchise_id": 7,
                            "home_team_name": "CIN",
                            "jersey_number": "02",
                            "kicked_yards": 418,
                            "kicks_returned": 1,
                            "onside_kicks": 0,
                            "percent_returned": 16.7,
                            "player_franchise_id": 7,
                            "player_id": 82583,
                            "position": "K",
                            "return_yards": 1,
                            "status": "P",
                            "total_hangtime": 20.48,
                            "touchbacks": 5,
                            "week": 1
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/player/punting/summary": {
      "get": {
        "operationId": "player-punting-summary",
        "summary": "Punting for one player",
        "description": "A punter's punts, yards, hang time, inside-the-20 work and grades, week by week. `league` and\n`player` are required, and restish takes them as positional arguments in that order — `restish pff\n<command> nfl 4924 --season 2025` (player ids come from `ref-players`). Add `--season` for one\nseason, week by week, or `--career true` for career and per-season totals; leaving both out is\nrefused with `400 invalid_parameter`. `--week` narrows to one week. Grades are on PFF's 0-100 scale\nand every other column is a raw total or rate.",
        "tags": [
          "player"
        ],
        "x-requires-one-of": {
          "message": "Give season for one season, or career=true for career totals",
          "alternatives": [
            [
              "season"
            ],
            [
              "career"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/player_id"
          },
          {
            "$ref": "#/components/parameters/career"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerPuntingSummaryResponse"
                },
                "examples": {
                  "career": {
                    "summary": "Kevin Huber (P), career totals",
                    "description": "`GET /v1/player/punting/summary?league=nfl&week=1&player_id=5066&career=true`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "punting_summary": {
                        "career": {
                          "attempts": 55,
                          "attempts_with_hangtime": 55,
                          "average_hangtime": 4.34,
                          "average_net_yards": 41.09,
                          "average_yards_per_attempt": 45.78,
                          "average_yards_per_return": 6,
                          "blocks": 0,
                          "downeds": 5,
                          "fair_catches": 13,
                          "inside_twenties": 21,
                          "long": 70,
                          "out_of_bounds": 8,
                          "percent_returned": 41.8,
                          "player_id": 5066,
                          "return_yards": 138,
                          "returns": 23,
                          "snaps": 55,
                          "total_hangtime": 238.64,
                          "total_net_yards": 2260,
                          "touchbacks": 6,
                          "yards": 2518
                        },
                        "seasons": [
                          {
                            "attempts": 3,
                            "attempts_with_hangtime": 3,
                            "average_hangtime": 4.48,
                            "average_net_yards": 39.33,
                            "average_yards_per_attempt": 52.67,
                            "average_yards_per_return": 20,
                            "blocks": 0,
                            "downeds": 0,
                            "fair_catches": 1,
                            "franchise_id": [
                              7
                            ],
                            "grades_punter": 63,
                            "inside_twenties": 1,
                            "long": 58,
                            "out_of_bounds": 0,
                            "percent_returned": 33.3,
                            "return_yards": 20,
                            "returns": 1,
                            "season": 2022,
                            "season_id": 2022,
                            "snaps": 3,
                            "total_hangtime": 13.44,
                            "total_net_yards": 118,
                            "touchbacks": 1,
                            "yards": 158
                          },
                          {
                            "attempts": 7,
                            "attempts_with_hangtime": 7,
                            "average_hangtime": 4.29,
                            "average_net_yards": 42.86,
                            "average_yards_per_attempt": 47.43,
                            "average_yards_per_return": 12,
                            "blocks": 0,
                            "downeds": 1,
                            "fair_catches": 3,
                            "franchise_id": [
                              7
                            ],
                            "grades_punter": 66.4,
                            "inside_twenties": 3,
                            "long": 61,
                            "out_of_bounds": 1,
                            "percent_returned": 14.3,
                            "return_yards": 12,
                            "returns": 1,
                            "season": 2021,
                            "season_id": 2021,
                            "snaps": 7,
                            "total_hangtime": 30,
                            "total_net_yards": 300,
                            "touchbacks": 1,
                            "yards": 332
                          },
                          {
                            "attempts": 6,
                            "attempts_with_hangtime": 6,
                            "average_hangtime": 4.58,
                            "average_net_yards": 43.83,
                            "average_yards_per_attempt": 55,
                            "average_yards_per_return": 3.5,
                            "blocks": 0,
                            "downeds": 0,
                            "fair_catches": 1,
                            "franchise_id": [
                              7
                            ],
                            "grades_punter": 75.2,
                            "inside_twenties": 3,
                            "long": 70,
                            "out_of_bounds": 0,
                            "percent_returned": 33.3,
                            "return_yards": 7,
                            "returns": 2,
                            "season": 2020,
                            "season_id": 2020,
                            "snaps": 6,
                            "total_hangtime": 27.48,
                            "total_net_yards": 263,
                            "touchbacks": 3,
                            "yards": 330
                          }
                        ],
                        "subject": {
                          "eligible": "punts",
                          "grade_keys": [
                            "punter"
                          ],
                          "league_id": 1,
                          "player_id": 5066,
                          "roster": "special",
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        }
                      }
                    }
                  },
                  "default": {
                    "summary": "Kevin Huber (P), 2022 season, week 1",
                    "description": "`GET /v1/player/punting/summary?league=nfl&season=2022&week=1&player_id=5066`, complete.",
                    "value": {
                      "punting_summary": {
                        "subject": {
                          "eligible": "punts",
                          "grade_keys": [
                            "punter"
                          ],
                          "league_id": 1,
                          "player_id": 5066,
                          "roster": "special",
                          "season": 2022,
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        },
                        "week_totals": [
                          {
                            "attempts": 3,
                            "attempts_with_hangtime": 3,
                            "average_hangtime": 4.48,
                            "average_net_yards": 39.33,
                            "average_yards_per_attempt": 52.67,
                            "average_yards_per_return": 20,
                            "blocks": 0,
                            "downeds": 0,
                            "fair_catches": 1,
                            "franchise_id": 7,
                            "grades_punter": 63,
                            "inside_twenties": 1,
                            "league_id": 1,
                            "long": 58,
                            "out_of_bounds": 0,
                            "percent_returned": 33.3,
                            "player_game_count": 1,
                            "return_yards": 20,
                            "returns": 1,
                            "season": 2022,
                            "season_id": 2022,
                            "snaps": 3,
                            "team_name": "CIN",
                            "total_hangtime": 13.44,
                            "total_net_yards": 118,
                            "touchbacks": 1,
                            "yards": 158
                          }
                        ],
                        "weeks": [
                          {
                            "game": {
                              "away_franchise_id": 25,
                              "away_team_name": "PIT",
                              "game_id": 23108,
                              "home_franchise_id": 7,
                              "home_team_name": "CIN",
                              "player_franchise_id": 7,
                              "position": "P",
                              "status": "P",
                              "week": 1
                            },
                            "game_id": 23108,
                            "touchbacks": 1,
                            "attempts_with_hangtime": 3,
                            "percent_returned": 33.3,
                            "week": 1,
                            "status": "P",
                            "fair_catches": 1,
                            "jersey_number": "10",
                            "away_team_name": "PIT",
                            "average_net_yards": 39.33,
                            "yards": 158,
                            "player_franchise_id": 7,
                            "average_hangtime": 4.48,
                            "total_net_yards": 118,
                            "attempts": 3,
                            "inside_twenties": 1,
                            "out_of_bounds": 0,
                            "average_yards_per_return": 20,
                            "total_hangtime": 13.44,
                            "returns": 1,
                            "position": "P",
                            "long": 58,
                            "away_franchise_id": 25,
                            "blocks": 0,
                            "average_yards_per_attempt": 52.67,
                            "grades_punter": 63,
                            "home_franchise_id": 7,
                            "home_team_name": "CIN",
                            "return_yards": 20,
                            "downeds": 0,
                            "player_id": 5066,
                            "snaps": 3
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/player/return/summary": {
      "get": {
        "operationId": "player-return-summary",
        "summary": "Kick and punt returns for one player",
        "description": "A returner's returns, yards, touchdowns and grades, week by week. `league` and `player` are\nrequired, and restish takes them as positional arguments in that order — `restish pff <command> nfl\n4924 --season 2025` (player ids come from `ref-players`). Add `--season` for one season, week by\nweek, or `--career true` for career and per-season totals; leaving both out is refused with `400\ninvalid_parameter`. `--week` narrows to one week. Grades are on PFF's 0-100 scale and every other\ncolumn is a raw total or rate.",
        "tags": [
          "player"
        ],
        "x-requires-one-of": {
          "message": "Give season for one season, or career=true for career totals",
          "alternatives": [
            [
              "season"
            ],
            [
              "career"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/player_id"
          },
          {
            "$ref": "#/components/parameters/career"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerReturnSummaryResponse"
                },
                "examples": {
                  "career": {
                    "summary": "Trent Taylor (WR, punt returner), career totals",
                    "description": "`GET /v1/player/return/summary?league=nfl&week=1&player_id=11932&career=true`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "return_summary": {
                        "career": {
                          "kickoff_attempts": 0,
                          "kickoff_count_of_yards": 0,
                          "kickoff_fair_catches": 0,
                          "kickoff_long": 0,
                          "kickoff_muffed_returns": 0,
                          "kickoff_touchdowns": 0,
                          "kickoff_yards": 0,
                          "kickoff_ypa": null,
                          "player_id": 11932,
                          "punt_attempts": 10,
                          "punt_count_of_yards": 10,
                          "punt_fair_catches": 3,
                          "punt_long": 12,
                          "punt_muffed_returns": 0,
                          "punt_touchdowns": 0,
                          "punt_yards": 77,
                          "punt_ypa": 7.7,
                          "total_attempts": 10
                        },
                        "seasons": [
                          {
                            "franchise_id": [
                              6
                            ],
                            "grades_punt_return": 61.7,
                            "grades_return": 61.3,
                            "kickoff_attempts": 0,
                            "kickoff_count_of_yards": 0,
                            "kickoff_fair_catches": 0,
                            "kickoff_long": 0,
                            "kickoff_muffed_returns": 0,
                            "kickoff_touchdowns": 0,
                            "kickoff_yards": 0,
                            "kickoff_ypa": null,
                            "punt_attempts": 2,
                            "punt_count_of_yards": 2,
                            "punt_fair_catches": 1,
                            "punt_long": 8,
                            "punt_muffed_returns": 0,
                            "punt_touchdowns": 0,
                            "punt_yards": 16,
                            "punt_ypa": 8,
                            "season": 2023,
                            "season_id": 2023,
                            "total_attempts": 2
                          },
                          {
                            "franchise_id": [
                              7
                            ],
                            "grades_punt_return": 62.7,
                            "grades_return": 62,
                            "kickoff_attempts": 0,
                            "kickoff_count_of_yards": 0,
                            "kickoff_fair_catches": 0,
                            "kickoff_long": 0,
                            "kickoff_muffed_returns": 0,
                            "kickoff_touchdowns": 0,
                            "kickoff_yards": 0,
                            "kickoff_ypa": null,
                            "punt_attempts": 5,
                            "punt_count_of_yards": 5,
                            "punt_fair_catches": 1,
                            "punt_long": 10,
                            "punt_muffed_returns": 0,
                            "punt_touchdowns": 0,
                            "punt_yards": 31,
                            "punt_ypa": 6.2,
                            "season": 2022,
                            "season_id": 2022,
                            "total_attempts": 5
                          },
                          {
                            "franchise_id": [
                              28
                            ],
                            "grades_punt_return": 61.1,
                            "grades_return": 60.9,
                            "kickoff_attempts": 0,
                            "kickoff_count_of_yards": 0,
                            "kickoff_fair_catches": 0,
                            "kickoff_long": 0,
                            "kickoff_muffed_returns": 0,
                            "kickoff_touchdowns": 0,
                            "kickoff_yards": 0,
                            "kickoff_ypa": null,
                            "punt_attempts": 2,
                            "punt_count_of_yards": 2,
                            "punt_fair_catches": 0,
                            "punt_long": 12,
                            "punt_muffed_returns": 0,
                            "punt_touchdowns": 0,
                            "punt_yards": 21,
                            "punt_ypa": 10.5,
                            "season": 2020,
                            "season_id": 2020,
                            "total_attempts": 2
                          }
                        ],
                        "subject": {
                          "eligible": "punt_and_kickoffs",
                          "grade_keys": [
                            "return",
                            "kick_return",
                            "punt_return"
                          ],
                          "league_id": 1,
                          "player_id": 11932,
                          "roster": "special",
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        }
                      }
                    }
                  },
                  "default": {
                    "summary": "Trent Taylor (WR, punt returner), 2022 season, week 1",
                    "description": "`GET /v1/player/return/summary?league=nfl&season=2022&week=1&player_id=11932`, complete.",
                    "value": {
                      "return_summary": {
                        "subject": {
                          "eligible": "punt_and_kickoffs",
                          "grade_keys": [
                            "return",
                            "kick_return",
                            "punt_return"
                          ],
                          "league_id": 1,
                          "player_id": 11932,
                          "roster": "special",
                          "season": 2022,
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        },
                        "week_totals": [
                          {
                            "franchise_id": 7,
                            "grades_punt_return": 62.7,
                            "grades_return": 62,
                            "kickoff_attempts": 0,
                            "kickoff_count_of_yards": 0,
                            "kickoff_fair_catches": 0,
                            "kickoff_long": 0,
                            "kickoff_muffed_returns": 0,
                            "kickoff_touchdowns": 0,
                            "kickoff_yards": 0,
                            "kickoff_ypa": null,
                            "league_id": 1,
                            "player_game_count": 1,
                            "punt_attempts": 5,
                            "punt_count_of_yards": 5,
                            "punt_fair_catches": 1,
                            "punt_long": 10,
                            "punt_muffed_returns": 0,
                            "punt_touchdowns": 0,
                            "punt_yards": 31,
                            "punt_ypa": 6.2,
                            "season": 2022,
                            "season_id": 2022,
                            "team_name": "CIN",
                            "total_attempts": 5
                          }
                        ],
                        "weeks": [
                          {
                            "away_franchise_id": 25,
                            "away_team_name": "PIT",
                            "game": {
                              "away_franchise_id": 25,
                              "away_team_name": "PIT",
                              "game_id": 23108,
                              "home_franchise_id": 7,
                              "home_team_name": "CIN",
                              "player_franchise_id": 7,
                              "position": "ST",
                              "status": "P",
                              "week": 1
                            },
                            "game_id": 23108,
                            "grades_punt_return": 62.7,
                            "grades_return": 62,
                            "home_franchise_id": 7,
                            "home_team_name": "CIN",
                            "jersey_number": "11",
                            "kickoff_attempts": 0,
                            "kickoff_count_of_yards": 0,
                            "kickoff_fair_catches": 0,
                            "kickoff_long": 0,
                            "kickoff_muffed_returns": 0,
                            "kickoff_touchdowns": 0,
                            "kickoff_yards": 0,
                            "kickoff_ypa": null,
                            "player_franchise_id": 7,
                            "player_id": 11932,
                            "position": "ST",
                            "punt_attempts": 5,
                            "punt_count_of_yards": 5,
                            "punt_fair_catches": 1,
                            "punt_long": 10,
                            "punt_muffed_returns": 0,
                            "punt_touchdowns": 0,
                            "punt_yards": 31,
                            "punt_ypa": 6.2,
                            "status": "P",
                            "total_attempts": 5,
                            "week": 1
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/player/special/summary": {
      "get": {
        "operationId": "player-special-summary",
        "summary": "Special-teams summary for one player",
        "description": "A player's special-teams snaps across every unit, with grades, week by week. `league` and `player`\nare required, and restish takes them as positional arguments in that order — `restish pff <command>\nnfl 4924 --season 2025` (player ids come from `ref-players`). Add `--season` for one season, week by\nweek, or `--career true` for career and per-season totals; leaving both out is refused with `400\ninvalid_parameter`. `--week` narrows to one week. Grades are on PFF's 0-100 scale and every other\ncolumn is a raw total or rate.",
        "tags": [
          "player"
        ],
        "x-requires-one-of": {
          "message": "Give season for one season, or career=true for career totals",
          "alternatives": [
            [
              "season"
            ],
            [
              "career"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/player_id"
          },
          {
            "$ref": "#/components/parameters/career"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerSpecialSummaryResponse"
                },
                "examples": {
                  "career": {
                    "summary": "Michael Thomas (S, core special teamer), career totals",
                    "description": "`GET /v1/player/special/summary?league=nfl&week=1&player_id=7279&career=true`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "special_teams_summary": {
                        "career": {
                          "assists": 0,
                          "declined_penalties": 0,
                          "missed_tackles": 0,
                          "penalties": 1,
                          "player_id": 7279,
                          "pu_def_rush": 4,
                          "snap_counts_field_goal": 0,
                          "snap_counts_field_goal_blocking": 19,
                          "snap_counts_kickoff": 34,
                          "snap_counts_kickoff_return": 31,
                          "snap_counts_punt_coverage": 28,
                          "snap_counts_punt_return": 34,
                          "tackles": 2
                        },
                        "seasons": [
                          {
                            "assists": 0,
                            "declined_penalties": 0,
                            "franchise_id": [
                              7
                            ],
                            "grades_misc_st": 65.5,
                            "grades_special_teams_penalty": 67,
                            "missed_tackles": 0,
                            "penalties": 0,
                            "pu_def_rush": 1,
                            "season": 2022,
                            "season_id": 2022,
                            "snap_counts_field_goal": 0,
                            "snap_counts_field_goal_blocking": 0,
                            "snap_counts_kickoff": 6,
                            "snap_counts_kickoff_return": 5,
                            "snap_counts_punt_coverage": 3,
                            "snap_counts_punt_return": 7,
                            "tackles": 0
                          },
                          {
                            "assists": 0,
                            "declined_penalties": 0,
                            "franchise_id": [
                              13
                            ],
                            "grades_misc_st": 59.1,
                            "grades_special_teams_penalty": 66.2,
                            "missed_tackles": 0,
                            "penalties": 0,
                            "pu_def_rush": 0,
                            "season": 2020,
                            "season_id": 2020,
                            "snap_counts_field_goal": 0,
                            "snap_counts_field_goal_blocking": 0,
                            "snap_counts_kickoff": 4,
                            "snap_counts_kickoff_return": 6,
                            "snap_counts_punt_coverage": 3,
                            "snap_counts_punt_return": 3,
                            "tackles": 0
                          },
                          {
                            "assists": 0,
                            "declined_penalties": 0,
                            "franchise_id": [
                              21
                            ],
                            "grades_fgep_defense": 59.6,
                            "grades_misc_st": 50.5,
                            "grades_special_teams_penalty": 68.1,
                            "missed_tackles": 0,
                            "penalties": 1,
                            "pu_def_rush": 0,
                            "season": 2019,
                            "season_id": 2019,
                            "snap_counts_field_goal": 0,
                            "snap_counts_field_goal_blocking": 5,
                            "snap_counts_kickoff": 4,
                            "snap_counts_kickoff_return": 6,
                            "snap_counts_punt_coverage": 4,
                            "snap_counts_punt_return": 4,
                            "tackles": 0
                          }
                        ],
                        "subject": {
                          "eligible": "special",
                          "grade_keys": [
                            "kickoff_kicker",
                            "kickoff_coverage",
                            "fgep_offense",
                            "long_snap",
                            "punt_coverage",
                            "punt_return_blocking",
                            "misc_st",
                            "fgep_defense",
                            "special_teams_penalty",
                            "fgep_kicker"
                          ],
                          "league_id": 1,
                          "player_id": 7279,
                          "roster": "special",
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        }
                      }
                    }
                  },
                  "default": {
                    "summary": "Michael Thomas (S, core special teamer), 2022 season, week 1",
                    "description": "`GET /v1/player/special/summary?league=nfl&season=2022&week=1&player_id=7279`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "special_teams_summary": {
                        "subject": {
                          "eligible": "special",
                          "grade_keys": [
                            "kickoff_kicker",
                            "kickoff_coverage",
                            "fgep_offense",
                            "long_snap",
                            "punt_coverage",
                            "punt_return_blocking",
                            "misc_st",
                            "fgep_defense",
                            "special_teams_penalty",
                            "fgep_kicker"
                          ],
                          "league_id": 1,
                          "player_id": 7279,
                          "roster": "special",
                          "season": 2022,
                          "secondary": false,
                          "week": [
                            "1"
                          ]
                        },
                        "week_totals": [
                          {
                            "assists": 0,
                            "declined_penalties": 0,
                            "franchise_id": 7,
                            "grades_misc_st": 65.5,
                            "grades_special_teams_penalty": 67,
                            "league_id": 1,
                            "missed_tackles": 0,
                            "penalties": 0,
                            "player_game_count": 1,
                            "pu_def_rush": 1,
                            "season": 2022,
                            "season_id": 2022,
                            "snap_counts_field_goal": 0,
                            "snap_counts_field_goal_blocking": 0,
                            "snap_counts_kickoff": 6,
                            "snap_counts_kickoff_return": 5,
                            "snap_counts_punt_coverage": 3,
                            "snap_counts_punt_return": 7,
                            "tackles": 0,
                            "team_name": "CIN"
                          }
                        ],
                        "weeks": [
                          {
                            "assists": 0,
                            "away_franchise_id": 25,
                            "away_team_name": "PIT",
                            "declined_penalties": 0,
                            "game": {
                              "away_franchise_id": 25,
                              "away_team_name": "PIT",
                              "game_id": 23108,
                              "home_franchise_id": 7,
                              "home_team_name": "CIN",
                              "player_franchise_id": 7,
                              "position": "ST",
                              "status": "P",
                              "week": 1
                            },
                            "game_id": 23108,
                            "grades_misc_st": 65.5,
                            "grades_special_teams_penalty": 67,
                            "home_franchise_id": 7,
                            "home_team_name": "CIN",
                            "jersey_number": "31",
                            "missed_tackles": 0,
                            "penalties": 0,
                            "player_franchise_id": 7,
                            "player_id": 7279,
                            "position": "ST",
                            "pu_def_rush": 1,
                            "snap_counts_field_goal": 0,
                            "snap_counts_field_goal_blocking": 0,
                            "snap_counts_kickoff": 6,
                            "snap_counts_kickoff_return": 5,
                            "snap_counts_punt_coverage": 3,
                            "snap_counts_punt_return": 7,
                            "status": "P",
                            "tackles": 0,
                            "week": 1
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/offense/summary": {
      "get": {
        "operationId": "facet-offense-summary",
        "summary": "League-wide offense summary leaderboard",
        "description": "Every qualifying player in the league, with their offensive snaps, production and grades. Two\ncomplete requests exist: `--league` with `--season` (a year, or a comma-separated list such as\n`2023,2024`), or `--game` alone (an id from `ref-games`) — anything less is refused with `400\ninvalid_parameter`. Narrow with `--week` and `--franchise`. `--division` fans the request out across\nNCAA divisions and is ignored for every other league. Grades are on PFF's 0-100 scale and every\nother column is a raw total or rate; which columns come back depends on the report, the position and\nthe caller's entitlement. Add `--export true` for the raw CSV instead of JSON.\n\nThis export has no header row and one blank line per record, so the export is one blank line per row\nwith no header row.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `download.csv` instead of JSON.",
        "tags": [
          "facet"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `download.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"download.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetOffenseSummaryResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/offense/summary?league=nfl&season=2022&week=1&franchise_id=7`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "offense_summary": [
                        {
                          "declined_penalties": 0,
                          "draft_season": 2015,
                          "eligible_season": 2015,
                          "franchise_id": 7,
                          "grades_offense": 58.6,
                          "grades_offense_penalty": 77.2,
                          "grades_pass_block": 57.7,
                          "grades_run_block": 55.7,
                          "jersey_number": "71",
                          "penalties": 0,
                          "player": "La'el Collins",
                          "player_game_count": 1,
                          "player_id": 9719,
                          "position": "T",
                          "snap_counts_pass": 0,
                          "snap_counts_pass_block": 71,
                          "snap_counts_pass_route": 0,
                          "snap_counts_run": 0,
                          "snap_counts_run_block": 29,
                          "snap_counts_total": 100,
                          "snap_counts_total_pass": 71,
                          "snap_counts_total_run": 29,
                          "team": "CIN",
                          "team_name": "CIN"
                        },
                        {
                          "declined_penalties": 0,
                          "draft_season": 2016,
                          "eligible_season": 2016,
                          "franchise_id": 7,
                          "grades_hands_fumble": 67,
                          "grades_offense": 58.1,
                          "grades_offense_penalty": 79,
                          "grades_pass_route": 58.8,
                          "grades_run_block": 47.5,
                          "jersey_number": "83",
                          "penalties": 0,
                          "player": "Tyler Boyd",
                          "player_game_count": 1,
                          "player_id": 10689,
                          "position": "WR",
                          "snap_counts_pass": 0,
                          "snap_counts_pass_block": 0,
                          "snap_counts_pass_route": 58,
                          "snap_counts_run": 0,
                          "snap_counts_run_block": 22,
                          "snap_counts_total": 80,
                          "snap_counts_total_pass": 58,
                          "snap_counts_total_run": 22,
                          "team": "CIN",
                          "team_name": "CIN"
                        },
                        {
                          "declined_penalties": 0,
                          "draft_season": 2016,
                          "eligible_season": 2016,
                          "franchise_id": 7,
                          "grades_hands_fumble": 64,
                          "grades_offense": 49.5,
                          "grades_offense_penalty": 79.9,
                          "grades_pass_route": 49.8,
                          "grades_run_block": 56,
                          "jersey_number": "80",
                          "penalties": 0,
                          "player": "Mike Thomas",
                          "player_game_count": 1,
                          "player_id": 10840,
                          "position": "WR",
                          "snap_counts_pass": 0,
                          "snap_counts_pass_block": 0,
                          "snap_counts_pass_route": 51,
                          "snap_counts_run": 0,
                          "snap_counts_run_block": 18,
                          "snap_counts_total": 69,
                          "snap_counts_total_pass": 51,
                          "snap_counts_total_run": 18,
                          "team": "CIN",
                          "team_name": "CIN"
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBodyHeaderless"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/offense/summary?league=nfl&season=2022&week=1&franchise_id=7&export=true`, cut to the header and the first 3 lines.",
                    "value": "\r\n\r\n\r\n\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/offense/blocking": {
      "get": {
        "operationId": "facet-offense-blocking",
        "summary": "League-wide blocking leaderboard",
        "description": "Every qualifying blocker in the league, run and pass blocking together. Two complete requests exist:\n`--league` with `--season` (a year, or a comma-separated list such as `2023,2024`), or `--game`\nalone (an id from `ref-games`) — anything less is refused with `400 invalid_parameter`. Narrow with\n`--week` and `--franchise`. `--division` fans the request out across NCAA divisions and is ignored\nfor every other league. Grades are on PFF's 0-100 scale and every other column is a raw total or\nrate; which columns come back depends on the report, the position and the caller's entitlement. Add\n`--export true` for the raw CSV instead of JSON.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `offense_blocking.csv` instead\nof JSON.",
        "tags": [
          "facet"
        ],
        "x-cli-aliases": [
          "blocking"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `offense_blocking.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"offense_blocking.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetOffenseBlockingResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/offense/blocking?league=nfl&season=2022&week=1&franchise_id=7`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "blocking_summary": [
                        {
                          "grades_pass_block": 57.7,
                          "grades_offense": 58.6,
                          "pbe": 99.2,
                          "non_spike_pass_block_percentage": 100,
                          "draft_season": 2015,
                          "snap_counts_rg": 0,
                          "team_name": "CIN",
                          "jersey_number": "71",
                          "snap_counts_ce": 0,
                          "hits_allowed": 0,
                          "block_percent": 100,
                          "snap_counts_offense": 100,
                          "player_game_count": 1,
                          "eligible_season": 2015,
                          "snap_counts_block": 100,
                          "hurries_allowed": 1,
                          "grades_run_block": 55.7,
                          "snap_counts_run_block": 29,
                          "pressures_allowed": 1,
                          "snap_counts_pass_play": 71,
                          "penalties": 0,
                          "sacks_allowed": 0,
                          "team": "CIN",
                          "declined_penalties": 0,
                          "snap_counts_te": 0,
                          "snap_counts_rt": 100,
                          "position": "T",
                          "non_spike_pass_block": 65,
                          "snap_counts_lt": 0,
                          "player": "La'el Collins",
                          "franchise_id": 7,
                          "snap_counts_pass_block": 71,
                          "pass_block_percent": 100,
                          "snap_counts_lg": 0,
                          "player_id": 9719
                        },
                        {
                          "grades_pass_block": 76.5,
                          "grades_offense": 68,
                          "pbe": 100,
                          "non_spike_pass_block_percentage": 100,
                          "draft_season": 2016,
                          "snap_counts_rg": 0,
                          "team_name": "CIN",
                          "jersey_number": "64",
                          "snap_counts_ce": 100,
                          "hits_allowed": 0,
                          "block_percent": 100,
                          "snap_counts_offense": 100,
                          "player_game_count": 1,
                          "eligible_season": 2016,
                          "snap_counts_block": 100,
                          "hurries_allowed": 0,
                          "grades_run_block": 63,
                          "snap_counts_run_block": 29,
                          "pressures_allowed": 0,
                          "snap_counts_pass_play": 71,
                          "penalties": 0,
                          "sacks_allowed": 0,
                          "team": "CIN",
                          "declined_penalties": 0,
                          "snap_counts_te": 0,
                          "snap_counts_rt": 0,
                          "position": "C",
                          "non_spike_pass_block": 65,
                          "snap_counts_lt": 0,
                          "player": "Ted Karras",
                          "franchise_id": 7,
                          "snap_counts_pass_block": 71,
                          "pass_block_percent": 100,
                          "snap_counts_lg": 0,
                          "player_id": 10855
                        },
                        {
                          "grades_pass_block": 44.3,
                          "grades_offense": 54.2,
                          "pbe": 92.3,
                          "non_spike_pass_block_percentage": 100,
                          "draft_season": 2022,
                          "snap_counts_rg": 0,
                          "team_name": "CIN",
                          "jersey_number": "67",
                          "snap_counts_ce": 0,
                          "hits_allowed": 2,
                          "block_percent": 100,
                          "snap_counts_offense": 100,
                          "player_game_count": 1,
                          "eligible_season": 2022,
                          "snap_counts_block": 100,
                          "hurries_allowed": 4,
                          "grades_run_block": 64.7,
                          "snap_counts_run_block": 29,
                          "pressures_allowed": 8,
                          "snap_counts_pass_play": 71,
                          "penalties": 1,
                          "sacks_allowed": 2,
                          "team": "CIN",
                          "declined_penalties": 0,
                          "snap_counts_te": 0,
                          "snap_counts_rt": 0,
                          "position": "G",
                          "non_spike_pass_block": 65,
                          "snap_counts_lt": 0,
                          "player": "Cordell Volson",
                          "franchise_id": 7,
                          "snap_counts_pass_block": 71,
                          "pass_block_percent": 100,
                          "snap_counts_lg": 100,
                          "player_id": 30614
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/offense/blocking?league=nfl&season=2022&week=1&franchise_id=7&export=true`, cut to the header and the first 3 lines.",
                    "value": "player,player_id,position,team_name,player_game_count,block_percent,declined_penalties,franchise_id,grades_offense,grades_pass_block,grades_run_block,hits_allowed,hurries_allowed,non_spike_pass_block,non_spike_pass_block_percentage,pass_block_percent,pbe,penalties,pressures_allowed,sacks_allowed,snap_counts_block,snap_counts_ce,snap_counts_lg,snap_counts_lt,snap_counts_offense,snap_counts_pass_block,snap_counts_pass_play,snap_counts_rg,snap_counts_rt,snap_counts_run_block,snap_counts_te\r\nLa'el Collins,9719,T,CIN,1,100.0,0,7,58.6,57.7,55.7,0,1,65,100.0,100.0,99.2,0,1,0,100,0,0,0,100,71,71,0,100,29,0\r\nTed Karras,10855,C,CIN,1,100.0,0,7,68.0,76.5,63.0,0,0,65,100.0,100.0,100.0,0,0,0,100,100,0,0,100,71,71,0,0,29,0\r\nCordell Volson,30614,G,CIN,1,100.0,0,7,54.2,44.3,64.7,2,4,65,100.0,100.0,92.3,1,8,2,100,0,100,0,100,71,71,0,0,29,0\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/offense/pass_blocking": {
      "get": {
        "operationId": "facet-offense-pass-blocking",
        "summary": "League-wide pass-blocking leaderboard",
        "description": "Every qualifying blocker in the league, with pressures allowed and pass-blocking grades. Two\ncomplete requests exist: `--league` with `--season` (a year, or a comma-separated list such as\n`2023,2024`), or `--game` alone (an id from `ref-games`) — anything less is refused with `400\ninvalid_parameter`. Narrow with `--week` and `--franchise`. `--division` fans the request out across\nNCAA divisions and is ignored for every other league. Grades are on PFF's 0-100 scale and every\nother column is a raw total or rate; which columns come back depends on the report, the position and\nthe caller's entitlement. Add `--export true` for the raw CSV instead of JSON.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `offense_pass_blocking.csv`\ninstead of JSON.",
        "tags": [
          "facet"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `offense_pass_blocking.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"offense_pass_blocking.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetOffensePassBlockingResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/offense/pass_blocking?league=nfl&season=2022&week=1&franchise_id=7`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "pass_blocking": [
                        {
                          "true_pass_set_non_spike_pass_block_percentage": 100,
                          "true_pass_set_pressures_allowed": 2,
                          "grades_pass_block": 72.7,
                          "true_pass_set_pass_block_percent": 100,
                          "pbe": 97.7,
                          "non_spike_pass_block_percentage": 100,
                          "draft_season": 2018,
                          "team_name": "CIN",
                          "jersey_number": "65",
                          "hits_allowed": 1,
                          "true_pass_set_non_spike_pass_block": 39,
                          "player_game_count": 1,
                          "eligible_season": 2018,
                          "hurries_allowed": 2,
                          "true_pass_set_hurries_allowed": 1,
                          "true_pass_set_snap_counts_pass_play": 44,
                          "true_pass_set_hits_allowed": 1,
                          "pressures_allowed": 3,
                          "true_pass_set_pbe": 97.4,
                          "snap_counts_pass_play": 71,
                          "penalties": 0,
                          "sacks_allowed": 0,
                          "team": "CIN",
                          "declined_penalties": 0,
                          "position": "G",
                          "true_pass_set_grades_pass_block": 78,
                          "non_spike_pass_block": 65,
                          "true_pass_set_snap_counts_pass_block": 44,
                          "player": "Alex Cappa",
                          "true_pass_set_sacks_allowed": 0,
                          "franchise_id": 7,
                          "snap_counts_pass_block": 71,
                          "pass_block_percent": 100,
                          "player_id": 66578
                        },
                        {
                          "true_pass_set_non_spike_pass_block_percentage": 100,
                          "true_pass_set_pressures_allowed": 0,
                          "grades_pass_block": 76.5,
                          "true_pass_set_pass_block_percent": 100,
                          "pbe": 100,
                          "non_spike_pass_block_percentage": 100,
                          "draft_season": 2016,
                          "team_name": "CIN",
                          "jersey_number": "64",
                          "hits_allowed": 0,
                          "true_pass_set_non_spike_pass_block": 39,
                          "player_game_count": 1,
                          "eligible_season": 2016,
                          "hurries_allowed": 0,
                          "true_pass_set_hurries_allowed": 0,
                          "true_pass_set_snap_counts_pass_play": 44,
                          "true_pass_set_hits_allowed": 0,
                          "pressures_allowed": 0,
                          "true_pass_set_pbe": 100,
                          "snap_counts_pass_play": 71,
                          "penalties": 0,
                          "sacks_allowed": 0,
                          "team": "CIN",
                          "declined_penalties": 0,
                          "position": "C",
                          "true_pass_set_grades_pass_block": 84.4,
                          "non_spike_pass_block": 65,
                          "true_pass_set_snap_counts_pass_block": 44,
                          "player": "Ted Karras",
                          "true_pass_set_sacks_allowed": 0,
                          "franchise_id": 7,
                          "snap_counts_pass_block": 71,
                          "pass_block_percent": 100,
                          "player_id": 10855
                        },
                        {
                          "true_pass_set_non_spike_pass_block_percentage": 100,
                          "true_pass_set_pressures_allowed": 3,
                          "grades_pass_block": 44.3,
                          "true_pass_set_pass_block_percent": 100,
                          "pbe": 92.3,
                          "non_spike_pass_block_percentage": 100,
                          "draft_season": 2022,
                          "team_name": "CIN",
                          "jersey_number": "67",
                          "hits_allowed": 2,
                          "true_pass_set_non_spike_pass_block": 39,
                          "player_game_count": 1,
                          "eligible_season": 2022,
                          "hurries_allowed": 4,
                          "true_pass_set_hurries_allowed": 2,
                          "true_pass_set_snap_counts_pass_play": 44,
                          "true_pass_set_hits_allowed": 1,
                          "pressures_allowed": 8,
                          "true_pass_set_pbe": 96.2,
                          "snap_counts_pass_play": 71,
                          "penalties": 0,
                          "sacks_allowed": 2,
                          "team": "CIN",
                          "declined_penalties": 0,
                          "position": "G",
                          "true_pass_set_grades_pass_block": 74.2,
                          "non_spike_pass_block": 65,
                          "true_pass_set_snap_counts_pass_block": 44,
                          "player": "Cordell Volson",
                          "true_pass_set_sacks_allowed": 0,
                          "franchise_id": 7,
                          "snap_counts_pass_block": 71,
                          "pass_block_percent": 100,
                          "player_id": 30614
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/offense/pass_blocking?league=nfl&season=2022&week=1&franchise_id=7&export=true`, cut to the header and the first 3 lines.",
                    "value": "player,player_id,position,team_name,player_game_count,declined_penalties,franchise_id,grades_pass_block,hits_allowed,hurries_allowed,non_spike_pass_block,non_spike_pass_block_percentage,pass_block_percent,pbe,penalties,pressures_allowed,sacks_allowed,snap_counts_pass_block,snap_counts_pass_play,true_pass_set_grades_pass_block,true_pass_set_hits_allowed,true_pass_set_hurries_allowed,true_pass_set_non_spike_pass_block,true_pass_set_non_spike_pass_block_percentage,true_pass_set_pass_block_percent,true_pass_set_pbe,true_pass_set_pressures_allowed,true_pass_set_sacks_allowed,true_pass_set_snap_counts_pass_block,true_pass_set_snap_counts_pass_play\r\nAlex Cappa,66578,G,CIN,1,0,7,72.7,1,2,65,100.0,100.0,97.7,0,3,0,71,71,78.0,1,1,39,100.0,100.0,97.4,2,0,44,44\r\nTed Karras,10855,C,CIN,1,0,7,76.5,0,0,65,100.0,100.0,100.0,0,0,0,71,71,84.4,0,0,39,100.0,100.0,100.0,0,0,44,44\r\nCordell Volson,30614,G,CIN,1,0,7,44.3,2,4,65,100.0,100.0,92.3,0,8,2,71,71,74.2,1,2,39,100.0,100.0,96.2,3,0,44,44\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/offense/run_blocking": {
      "get": {
        "operationId": "facet-offense-run-blocking",
        "summary": "League-wide run-blocking leaderboard",
        "description": "Every qualifying blocker in the league, with run-blocking snaps and grades. Two complete requests\nexist: `--league` with `--season` (a year, or a comma-separated list such as `2023,2024`), or\n`--game` alone (an id from `ref-games`) — anything less is refused with `400 invalid_parameter`.\nNarrow with `--week` and `--franchise`. `--division` fans the request out across NCAA divisions and\nis ignored for every other league. Grades are on PFF's 0-100 scale and every other column is a raw\ntotal or rate; which columns come back depends on the report, the position and the caller's\nentitlement. Add `--export true` for the raw CSV instead of JSON.\n\nThe attachment name for this export really is misspelled — `offense_run_blockng.csv`, not\n`run_blocking`.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `offense_run_blockng.csv`\ninstead of JSON.",
        "tags": [
          "facet"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `offense_run_blockng.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"offense_run_blockng.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetOffenseRunBlockingResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/offense/run_blocking?league=nfl&season=2022&week=1&franchise_id=7`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "run_blocking": [
                        {
                          "declined_penalties": 0,
                          "draft_season": 2021,
                          "eligible_season": 2021,
                          "franchise_id": 7,
                          "gap_grades_run_block": 54.3,
                          "gap_run_block_percent": 100,
                          "gap_snap_counts_run_block": 12,
                          "gap_snap_counts_run_block_percent": 41.4,
                          "gap_snap_counts_run_play": 12,
                          "grades_run_block": 55.2,
                          "jersey_number": "01",
                          "penalties": 0,
                          "player": "Ja'Marr Chase",
                          "player_game_count": 1,
                          "player_id": 84270,
                          "position": "WR",
                          "run_block_percent": 100,
                          "snap_counts_run_block": 29,
                          "snap_counts_run_play": 29,
                          "team": "CIN",
                          "team_name": "CIN",
                          "zone_grades_run_block": 58,
                          "zone_run_block_percent": 100,
                          "zone_snap_counts_run_block": 14,
                          "zone_snap_counts_run_block_percent": 48.3,
                          "zone_snap_counts_run_play": 14
                        },
                        {
                          "declined_penalties": 0,
                          "draft_season": 2016,
                          "eligible_season": 2016,
                          "franchise_id": 7,
                          "gap_grades_run_block": 65,
                          "gap_run_block_percent": 100,
                          "gap_snap_counts_run_block": 12,
                          "gap_snap_counts_run_block_percent": 41.4,
                          "gap_snap_counts_run_play": 12,
                          "grades_run_block": 63,
                          "jersey_number": "64",
                          "penalties": 0,
                          "player": "Ted Karras",
                          "player_game_count": 1,
                          "player_id": 10855,
                          "position": "C",
                          "run_block_percent": 100,
                          "snap_counts_run_block": 29,
                          "snap_counts_run_play": 29,
                          "team": "CIN",
                          "team_name": "CIN",
                          "zone_grades_run_block": 65.8,
                          "zone_run_block_percent": 100,
                          "zone_snap_counts_run_block": 14,
                          "zone_snap_counts_run_block_percent": 48.3,
                          "zone_snap_counts_run_play": 14
                        },
                        {
                          "declined_penalties": 0,
                          "draft_season": 2022,
                          "eligible_season": 2022,
                          "franchise_id": 7,
                          "gap_grades_run_block": 47.3,
                          "gap_run_block_percent": 100,
                          "gap_snap_counts_run_block": 12,
                          "gap_snap_counts_run_block_percent": 41.4,
                          "gap_snap_counts_run_play": 12,
                          "grades_run_block": 64.7,
                          "jersey_number": "67",
                          "penalties": 0,
                          "player": "Cordell Volson",
                          "player_game_count": 1,
                          "player_id": 30614,
                          "position": "G",
                          "run_block_percent": 100,
                          "snap_counts_run_block": 29,
                          "snap_counts_run_play": 29,
                          "team": "CIN",
                          "team_name": "CIN",
                          "zone_grades_run_block": 77.8,
                          "zone_run_block_percent": 100,
                          "zone_snap_counts_run_block": 14,
                          "zone_snap_counts_run_block_percent": 48.3,
                          "zone_snap_counts_run_play": 14
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/offense/run_blocking?league=nfl&season=2022&week=1&franchise_id=7&export=true`, cut to the header and the first 3 lines.",
                    "value": "player,player_id,position,team_name,player_game_count,declined_penalties,franchise_id,gap_grades_run_block,gap_run_block_percent,gap_snap_counts_run_block,gap_snap_counts_run_block_percent,gap_snap_counts_run_play,grades_run_block,penalties,run_block_percent,snap_counts_run_block,snap_counts_run_play,zone_grades_run_block,zone_run_block_percent,zone_snap_counts_run_block,zone_snap_counts_run_block_percent,zone_snap_counts_run_play\r\nJa'Marr Chase,84270,WR,CIN,1,0,7,54.3,100.0,12,41.4,12,55.2,0,100.0,29,29,58.0,100.0,14,48.3,14\r\nTed Karras,10855,C,CIN,1,0,7,65.0,100.0,12,41.4,12,63.0,0,100.0,29,29,65.8,100.0,14,48.3,14\r\nCordell Volson,30614,G,CIN,1,0,7,47.3,100.0,12,41.4,12,64.7,0,100.0,29,29,77.8,100.0,14,48.3,14\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/passing/allowed_pressure": {
      "get": {
        "operationId": "facet-passing-allowed-pressure",
        "summary": "League-wide pressure-allowed leaderboard",
        "description": "Every qualifying blocker in the league, ranked by the pressure they gave up. Two complete requests\nexist: `--league` with `--season` (a year, or a comma-separated list such as `2023,2024`), or\n`--game` alone (an id from `ref-games`) — anything less is refused with `400 invalid_parameter`.\nNarrow with `--week` and `--franchise`. `--division` fans the request out across NCAA divisions and\nis ignored for every other league. Grades are on PFF's 0-100 scale and every other column is a raw\ntotal or rate; which columns come back depends on the report, the position and the caller's\nentitlement. Add `--export true` for the raw CSV instead of JSON.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `passing_allowed_pressure.csv`\ninstead of JSON.",
        "tags": [
          "facet"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `passing_allowed_pressure.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"passing_allowed_pressure.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetPassingAllowedPressureResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/passing/allowed_pressure?league=nfl&season=2022&week=1&franchise_id=7`, complete.",
                    "value": {
                      "passing_allowed_pressure": [
                        {
                          "te_percent": 0,
                          "draft_season": 2020,
                          "pressures_lt": 7,
                          "pressures_rg": 3,
                          "team_name": "CIN",
                          "lt_percent": 41.2,
                          "jersey_number": "09",
                          "hits_allowed": 0,
                          "pressures_lg": 8,
                          "player_game_count": 1,
                          "eligible_season": 2020,
                          "hurries_allowed": 0,
                          "self_percent": 5.9,
                          "pressures_rt": 1,
                          "pressures_allowed": 1,
                          "pressures_ol_te": 16,
                          "pressures_ce": 0,
                          "penalties": 0,
                          "sacks_allowed": 1,
                          "ol_te_percent": 94.1,
                          "allowed_pressure_dropbacks": 17,
                          "pressures_other": 0,
                          "team": "CIN",
                          "declined_penalties": 0,
                          "ce_percent": 0,
                          "position": "QB",
                          "pressures_te": 0,
                          "pressures_self": 1,
                          "lg_percent": 47.1,
                          "player": "Joe Burrow",
                          "rt_percent": 5.9,
                          "franchise_id": 7,
                          "other_percent": 0,
                          "pressures_off": 17,
                          "rg_percent": 17.6,
                          "player_id": 28022
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/passing/allowed_pressure?league=nfl&season=2022&week=1&franchise_id=7&export=true`, complete.",
                    "value": "player,player_id,position,team_name,player_game_count,allowed_pressure_dropbacks,ce_percent,declined_penalties,franchise_id,hits_allowed,hurries_allowed,lg_percent,lt_percent,ol_te_percent,other_percent,penalties,pressures_allowed,pressures_ce,pressures_lg,pressures_lt,pressures_off,pressures_ol_te,pressures_other,pressures_rg,pressures_rt,pressures_self,pressures_te,rg_percent,rt_percent,sacks_allowed,self_percent,te_percent\r\nJoe Burrow,28022,QB,CIN,1,17,0.0,0,7,0,0,47.1,41.2,94.1,0.0,0,1,0,8,7,17,16,0,3,1,1,0,17.6,5.9,1,5.9,0.0\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/passing/concept": {
      "get": {
        "operationId": "facet-passing-concept",
        "summary": "League-wide passing-by-concept leaderboard",
        "description": "Every qualifying passer in the league, split by play concept. Two complete requests exist:\n`--league` with `--season` (a year, or a comma-separated list such as `2023,2024`), or `--game`\nalone (an id from `ref-games`) — anything less is refused with `400 invalid_parameter`. Narrow with\n`--week` and `--franchise`. `--division` fans the request out across NCAA divisions and is ignored\nfor every other league. Grades are on PFF's 0-100 scale and every other column is a raw total or\nrate; which columns come back depends on the report, the position and the caller's entitlement. Add\n`--export true` for the raw CSV instead of JSON.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `passing_concept.csv` instead\nof JSON.",
        "tags": [
          "facet"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `passing_concept.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"passing_concept.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetPassingConceptResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/passing/concept?league=nfl&season=2022&week=1&franchise_id=7`, complete.",
                    "value": {
                      "passing_concept": [
                        {
                          "comp_pct_diff": 10.56,
                          "pa_grades_pass": 71.3,
                          "no_screen_grades_offense": 54.5,
                          "pa_qb_rating": 92.6,
                          "no_screen_qb_rating": 60.3,
                          "pa_completions": 5,
                          "pa_thrown_aways": 0,
                          "pa_dropbacks_percent": 12.3,
                          "ypa_diff": 1.21,
                          "no_screen_drops": 2,
                          "screen_completion_percent": 75,
                          "npa_bats": 0,
                          "no_screen_thrown_aways": 1,
                          "pa_grades_run": null,
                          "screen_pressure_to_sack_rate": null,
                          "pa_drop_rate": 0,
                          "screen_grades_offense": 61.1,
                          "dropbacks": 65,
                          "npa_thrown_aways": 1,
                          "no_screen_def_gen_pressures": 20,
                          "screen_grades_hands_fumble": 66.9,
                          "pa_touchdowns": 0,
                          "npa_ypa": 6.2,
                          "draft_season": 2020,
                          "screen_avg_time_to_throw": 1.7,
                          "screen_thrown_aways": 0,
                          "npa_sacks": 6,
                          "npa_aimed_passes": 44,
                          "no_screen_completions": 30,
                          "no_screen_positive_epa_percent": 47.5,
                          "screen_spikes": 0,
                          "pa_first_downs": 3,
                          "pa_big_time_throws": 0,
                          "team_name": "CIN",
                          "pa_spikes": 0,
                          "pa_sack_percent": 12.5,
                          "screen_dropbacks_percent": 6.2,
                          "no_screen_epa": -0.19,
                          "npa_avg_time_to_throw": 2.68,
                          "screen_bats": 1,
                          "screen_grades_run_block": null,
                          "jersey_number": "09",
                          "no_screen_bats": 1,
                          "npa_grades_offense": 51.8,
                          "screen_def_gen_pressures": 0,
                          "pa_pressure_to_sack_rate": 50,
                          "screen_sack_percent": 0,
                          "no_screen_btt_rate": 0,
                          "npa_btt_rate": 0,
                          "screen_interceptions": 0,
                          "no_screen_passing_snaps": 67,
                          "no_screen_grades_hands_fumble": 41.8,
                          "screen_scrambles": 0,
                          "screen_grades_pass": 60.9,
                          "npa_qb_rating": 57,
                          "no_screen_grades_pass": 52.2,
                          "pa_avg_time_to_throw": 2.36,
                          "screen_twp_rate": 0,
                          "player_game_count": 1,
                          "npa_accuracy_percent": 68.2,
                          "eligible_season": 2020,
                          "npa_drops": 2,
                          "screen_yards": 13,
                          "no_screen_drop_rate": 6.3,
                          "no_screen_grades_offense_penalty": 80.5,
                          "npa_passing_snaps": 63,
                          "screen_drop_rate": 0,
                          "screen_epa": -0.29,
                          "screen_grades_offense_penalty": 69.2,
                          "npa_spikes": 0,
                          "screen_hit_as_threw": 0,
                          "no_screen_aimed_passes": 46,
                          "screen_drops": 0,
                          "screen_ypa": 3.3,
                          "npa_twp_rate": 6.3,
                          "screen_accuracy_percent": 100,
                          "npa_hit_as_threw": 1,
                          "pa_accuracy_percent": 100,
                          "pa_def_gen_pressures": 2,
                          "screen_avg_depth_of_target": -1.7,
                          "pa_sacks": 1,
                          "screen_passing_snaps": 4,
                          "no_screen_grades_run": 66.3,
                          "no_screen_first_downs": 23,
                          "pa_ypa": 7.4,
                          "npa_scrambles": 5,
                          "npa_pressure_to_sack_rate": 33.3,
                          "pa_twp_rate": 0,
                          "no_screen_twp_rate": 6,
                          "npa_grades_hands_fumble": 39.6,
                          "screen_completions": 3,
                          "screen_btt_rate": 0,
                          "npa_grades_run": 66.3,
                          "no_screen_interceptions": 4,
                          "npa_grades_run_block": 60,
                          "no_screen_sacks": 7,
                          "penalties": 0,
                          "no_screen_big_time_throws": 0,
                          "npa_drop_rate": 6.7,
                          "npa_attempts": 46,
                          "screen_qb_rating": 78.1,
                          "npa_grades_offense_penalty": 80.3,
                          "pa_bats": 2,
                          "pa_attempts": 7,
                          "npa_def_gen_pressures": 18,
                          "no_screen_avg_time_to_throw": 2.7,
                          "pa_yards": 52,
                          "npa_positive_epa_percent": 47.4,
                          "team": "CIN",
                          "no_screen_scrambles": 5,
                          "pa_turnover_worthy_plays": 0,
                          "pa_aimed_passes": 5,
                          "declined_penalties": 0,
                          "pa_grades_offense": 72.4,
                          "screen_positive_epa_percent": 25,
                          "no_screen_dropbacks": 61,
                          "no_screen_dropbacks_percent": 93.8,
                          "npa_sack_percent": 10.5,
                          "pa_positive_epa_percent": 37.5,
                          "pa_grades_run_block": null,
                          "no_screen_turnover_worthy_plays": 4,
                          "position": "QB",
                          "npa_epa": -0.19,
                          "no_screen_avg_depth_of_target": 8.5,
                          "pa_grades_hands_fumble": 70.3,
                          "no_screen_completion_percent": 61.2,
                          "pa_hit_as_threw": 0,
                          "pa_grades_offense_penalty": 71.5,
                          "npa_dropbacks_percent": 87.7,
                          "npa_grades_pass": 49.4,
                          "screen_grades_run": null,
                          "screen_first_downs": 1,
                          "npa_completion_percent": 60.9,
                          "no_screen_grades_run_block": 60,
                          "no_screen_hit_as_threw": 1,
                          "screen_turnover_worthy_plays": 0,
                          "npa_avg_depth_of_target": 8.1,
                          "npa_dropbacks": 57,
                          "player": "Joe Burrow",
                          "pa_drops": 0,
                          "pa_btt_rate": 0,
                          "franchise_id": 7,
                          "screen_big_time_throws": 0,
                          "screen_aimed_passes": 3,
                          "npa_touchdowns": 2,
                          "screen_attempts": 4,
                          "screen_dropbacks": 4,
                          "no_screen_yards": 325,
                          "pa_scrambles": 0,
                          "pa_completion_percent": 71.4,
                          "pa_avg_depth_of_target": 5.8,
                          "pa_interceptions": 0,
                          "no_screen_accuracy_percent": 69.6,
                          "no_screen_spikes": 0,
                          "pa_dropbacks": 8,
                          "npa_big_time_throws": 0,
                          "no_screen_sack_percent": 11.5,
                          "pa_epa": -0.27,
                          "no_screen_attempts": 49,
                          "pa_passing_snaps": 8,
                          "npa_completions": 28,
                          "screen_touchdowns": 0,
                          "npa_first_downs": 21,
                          "no_screen_touchdowns": 2,
                          "player_id": 28022,
                          "npa_yards": 286,
                          "no_screen_ypa": 6.6,
                          "npa_turnover_worthy_plays": 4,
                          "npa_interceptions": 4,
                          "no_screen_pressure_to_sack_rate": 35,
                          "screen_sacks": 0
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/passing/concept?league=nfl&season=2022&week=1&franchise_id=7&export=true`, complete.",
                    "value": "player,player_id,position,team_name,player_game_count,comp_pct_diff,declined_penalties,dropbacks,franchise_id,no_screen_accuracy_percent,no_screen_aimed_passes,no_screen_attempts,no_screen_avg_depth_of_target,no_screen_avg_time_to_throw,no_screen_bats,no_screen_big_time_throws,no_screen_btt_rate,no_screen_completion_percent,no_screen_completions,no_screen_def_gen_pressures,no_screen_drop_rate,no_screen_dropbacks,no_screen_dropbacks_percent,no_screen_drops,no_screen_epa,no_screen_first_downs,no_screen_grades_hands_fumble,no_screen_grades_offense,no_screen_grades_offense_penalty,no_screen_grades_pass,no_screen_grades_run,no_screen_hit_as_threw,no_screen_interceptions,no_screen_passing_snaps,no_screen_positive_epa_percent,no_screen_pressure_to_sack_rate,no_screen_qb_rating,no_screen_sack_percent,no_screen_sacks,no_screen_scrambles,no_screen_spikes,no_screen_thrown_aways,no_screen_touchdowns,no_screen_turnover_worthy_plays,no_screen_twp_rate,no_screen_yards,no_screen_ypa,npa_accuracy_percent,npa_aimed_passes,npa_attempts,npa_avg_depth_of_target,npa_avg_time_to_throw,npa_bats,npa_big_time_throws,npa_btt_rate,npa_completion_percent,npa_completions,npa_def_gen_pressures,npa_drop_rate,npa_dropbacks,npa_dropbacks_percent,npa_drops,npa_epa,npa_first_downs,npa_grades_hands_fumble,npa_grades_offense,npa_grades_offense_penalty,npa_grades_pass,npa_grades_run,npa_hit_as_threw,npa_interceptions,npa_passing_snaps,npa_positive_epa_percent,npa_pressure_to_sack_rate,npa_qb_rating,npa_sack_percent,npa_sacks,npa_scrambles,npa_spikes,npa_thrown_aways,npa_touchdowns,npa_turnover_worthy_plays,npa_twp_rate,npa_yards,npa_ypa,pa_accuracy_percent,pa_aimed_passes,pa_attempts,pa_avg_depth_of_target,pa_avg_time_to_throw,pa_bats,pa_big_time_throws,pa_btt_rate,pa_completion_percent,pa_completions,pa_def_gen_pressures,pa_drop_rate,pa_dropbacks,pa_dropbacks_percent,pa_drops,pa_epa,pa_first_downs,pa_grades_hands_fumble,pa_grades_offense,pa_grades_offense_penalty,pa_grades_pass,pa_grades_run,pa_hit_as_threw,pa_interceptions,pa_passing_snaps,pa_positive_epa_percent,pa_pressure_to_sack_rate,pa_qb_rating,pa_sack_percent,pa_sacks,pa_scrambles,pa_spikes,pa_thrown_aways,pa_touchdowns,pa_turnover_worthy_plays,pa_twp_rate,pa_yards,pa_ypa,penalties,screen_accuracy_percent,screen_aimed_passes,screen_attempts,screen_avg_depth_of_target,screen_avg_time_to_throw,screen_bats,screen_big_time_throws,screen_btt_rate,screen_completion_percent,screen_completions,screen_def_gen_pressures,screen_drop_rate,screen_dropbacks,screen_dropbacks_percent,screen_drops,screen_epa,screen_first_downs,screen_grades_hands_fumble,screen_grades_offense,screen_grades_offense_penalty,screen_grades_pass,screen_grades_run,screen_hit_as_threw,screen_interceptions,screen_passing_snaps,screen_positive_epa_percent,screen_pressure_to_sack_rate,screen_qb_rating,screen_sack_percent,screen_sacks,screen_scrambles,screen_spikes,screen_thrown_aways,screen_touchdowns,screen_turnover_worthy_plays,screen_twp_rate,screen_yards,screen_ypa,ypa_diff\r\nJoe Burrow,28022,QB,CIN,1,10.56,0,65,7,69.6,46,49,8.5,2.7,1,0,0.0,61.2,30,20,6.3,61,93.8,2,-0.19,23,41.8,54.5,80.5,52.2,66.3,1,4,67,47.5,35.0,60.3,11.5,7,5,0,1,2,4,6.0,325,6.6,68.2,44,46,8.1,2.68,0,0,0.0,60.9,28,18,6.7,57,87.7,2,-0.19,21,39.6,51.8,80.3,49.4,66.3,1,4,63,47.4,33.3,57.0,10.5,6,5,0,1,2,4,6.3,286,6.2,100.0,5,7,5.8,2.36,2,0,0.0,71.4,5,2,0.0,8,12.3,0,-0.27,3,70.3,72.4,71.5,71.3,,0,0,8,37.5,50.0,92.6,12.5,1,0,0,0,0,0,0.0,52,7.4,0,100.0,3,4,-1.7,1.7,1,0,0.0,75.0,3,0,0.0,4,6.2,0,-0.29,1,66.9,61.1,69.2,60.9,,0,0,4,25.0,,78.1,0.0,0,0,0,0,0,0,0.0,13,3.3,1.21\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/passing/depth": {
      "get": {
        "operationId": "facet-passing-depth",
        "summary": "League-wide passing-by-depth leaderboard",
        "description": "Every qualifying passer in the league, split by how far downfield the throw travelled. Two complete\nrequests exist: `--league` with `--season` (a year, or a comma-separated list such as `2023,2024`),\nor `--game` alone (an id from `ref-games`) — anything less is refused with `400 invalid_parameter`.\nNarrow with `--week` and `--franchise`. `--division` fans the request out across NCAA divisions and\nis ignored for every other league. Grades are on PFF's 0-100 scale and every other column is a raw\ntotal or rate; which columns come back depends on the report, the position and the caller's\nentitlement. Add `--export true` for the raw CSV instead of JSON.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `passing_depth.csv` instead of\nJSON.",
        "tags": [
          "facet"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `passing_depth.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"passing_depth.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetPassingDepthResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/passing/depth?league=nfl&season=2022&week=1&franchise_id=7`, complete.",
                    "value": {
                      "passing_depth": [
                        {
                          "left_behind_los_accuracy_percent": 100,
                          "left_short_scrambles": 0,
                          "center_short_first_downs": 7,
                          "right_short_bats": 0,
                          "right_behind_los_positive_epa_percent": 100,
                          "left_behind_los_completions": 1,
                          "left_medium_dropbacks": 3,
                          "right_medium_grades_pass": 26.2,
                          "right_medium_hit_as_threw": 0,
                          "behind_los_attempts_percent": 9.4,
                          "right_short_turnover_worthy_plays": 0,
                          "right_medium_qb_rating": 40.6,
                          "deep_twp_rate": 16.7,
                          "center_medium_sacks": 0,
                          "medium_interceptions": 2,
                          "left_deep_completions": 0,
                          "behind_los_spikes": 0,
                          "medium_aimed_passes": 13,
                          "center_behind_los_drops": 0,
                          "center_behind_los_interceptions": 0,
                          "behind_los_dropbacks": 5,
                          "left_behind_los_interceptions": 0,
                          "left_deep_first_downs": 0,
                          "deep_passing_snaps": 6,
                          "center_short_btt_rate": 0,
                          "center_medium_thrown_aways": 0,
                          "center_deep_avg_depth_of_target": 25,
                          "center_short_drops": 1,
                          "center_deep_first_downs": 1,
                          "left_medium_completion_percent": 33.3,
                          "center_deep_attempts": 2,
                          "center_behind_los_attempts": 2,
                          "right_short_positive_epa_percent": 71.4,
                          "center_deep_aimed_passes": 2,
                          "right_deep_grades_pass": 60.7,
                          "right_medium_big_time_throws": 0,
                          "deep_sack_percent": 0,
                          "center_medium_pressure_to_sack_rate": 0,
                          "deep_sacks": 0,
                          "right_medium_ypa": 8.8,
                          "left_deep_drop_rate": null,
                          "right_medium_attempts_percent": 7.5,
                          "right_deep_btt_rate": 0,
                          "center_short_attempts_percent": 28.3,
                          "deep_drops": 0,
                          "center_behind_los_big_time_throws": 0,
                          "center_behind_los_touchdowns": 0,
                          "right_behind_los_twp_rate": 0,
                          "center_deep_completions": 1,
                          "center_short_attempts": 15,
                          "left_behind_los_sack_percent": 0,
                          "center_short_pressure_to_sack_rate": 0,
                          "deep_touchdowns": 0,
                          "center_behind_los_accuracy_percent": 100,
                          "center_deep_drop_rate": 0,
                          "right_short_first_downs": 4,
                          "right_behind_los_first_downs": 1,
                          "short_interceptions": 1,
                          "center_medium_scrambles": 0,
                          "left_behind_los_sacks": 0,
                          "left_short_ypa": 4,
                          "left_short_qb_rating": 60.4,
                          "right_behind_los_qb_rating": 110.4,
                          "draft_season": 2020,
                          "right_behind_los_dropbacks": 2,
                          "behind_los_def_gen_pressures": 1,
                          "right_short_thrown_aways": 0,
                          "deep_def_gen_pressures": 1,
                          "right_short_btt_rate": 0,
                          "center_behind_los_positive_epa_percent": 50,
                          "left_behind_los_grades_pass": 60.1,
                          "deep_grades_pass": 50.3,
                          "center_short_turnover_worthy_plays": 0,
                          "center_behind_los_scrambles": 0,
                          "right_short_aimed_passes": 7,
                          "center_short_dropbacks": 15,
                          "medium_epa": -0.15,
                          "right_short_ypa": 4.4,
                          "center_medium_ypa": 10.5,
                          "medium_attempts": 13,
                          "right_deep_accuracy_percent": 0,
                          "behind_los_scrambles": 0,
                          "center_behind_los_completion_percent": 100,
                          "left_behind_los_btt_rate": 0,
                          "right_behind_los_btt_rate": 0,
                          "team_name": "CIN",
                          "short_touchdowns": 2,
                          "center_medium_drops": 1,
                          "left_behind_los_aimed_passes": 1,
                          "deep_attempts": 5,
                          "right_behind_los_sack_percent": 0,
                          "center_short_positive_epa_percent": 60,
                          "deep_avg_depth_of_target": 23.4,
                          "left_deep_btt_rate": 0,
                          "medium_scrambles": 0,
                          "center_behind_los_avg_depth_of_target": -2.5,
                          "short_attempts_percent": 49.1,
                          "right_behind_los_sacks": 0,
                          "center_medium_avg_time_to_throw": 2.53,
                          "left_short_pressure_to_sack_rate": null,
                          "center_deep_sack_percent": 0,
                          "center_deep_ypa": 11,
                          "left_behind_los_hit_as_threw": 0,
                          "medium_big_time_throws": 0,
                          "deep_thrown_aways": 0,
                          "right_short_accuracy_percent": 85.7,
                          "left_deep_turnover_worthy_plays": 0,
                          "center_medium_bats": 0,
                          "right_short_grades_pass": 80.4,
                          "right_deep_spikes": 0,
                          "left_deep_passing_snaps": 1,
                          "center_medium_twp_rate": 14.3,
                          "right_behind_los_passing_snaps": 2,
                          "left_deep_qb_rating": 39.6,
                          "right_deep_drop_rate": null,
                          "left_behind_los_drop_rate": 0,
                          "left_medium_drop_rate": 0,
                          "right_deep_attempts": 2,
                          "left_deep_spikes": 0,
                          "center_behind_los_dropbacks": 2,
                          "right_deep_big_time_throws": 0,
                          "medium_hit_as_threw": 0,
                          "right_short_dropbacks": 7,
                          "medium_def_gen_pressures": 3,
                          "jersey_number": "09",
                          "left_short_positive_epa_percent": 50,
                          "left_short_attempts": 4,
                          "center_deep_twp_rate": 50,
                          "right_medium_avg_time_to_throw": 3.45,
                          "left_behind_los_qb_rating": 112.5,
                          "left_behind_los_dropbacks": 1,
                          "deep_dropbacks": 5,
                          "right_behind_los_scrambles": 0,
                          "behind_los_interceptions": 0,
                          "right_deep_drops": 0,
                          "right_deep_yards": 0,
                          "right_short_hit_as_threw": 0,
                          "right_short_avg_depth_of_target": 3.7,
                          "short_bats": 0,
                          "right_deep_twp_rate": 0,
                          "right_behind_los_pressure_to_sack_rate": 0,
                          "deep_spikes": 0,
                          "center_medium_spikes": 0,
                          "behind_los_aimed_passes": 5,
                          "right_behind_los_touchdowns": 0,
                          "right_medium_pressure_to_sack_rate": 0,
                          "medium_thrown_aways": 0,
                          "short_sacks": 0,
                          "center_behind_los_twp_rate": 0,
                          "left_behind_los_attempts": 1,
                          "short_aimed_passes": 26,
                          "short_completions": 21,
                          "right_short_pressure_to_sack_rate": 0,
                          "medium_avg_depth_of_target": 13.7,
                          "left_behind_los_positive_epa_percent": 100,
                          "center_medium_attempts_percent": 11.3,
                          "left_medium_touchdowns": 0,
                          "center_short_bats": 0,
                          "left_deep_avg_time_to_throw": 1.9,
                          "center_behind_los_passing_snaps": 2,
                          "center_short_yards": 120,
                          "right_medium_btt_rate": 0,
                          "right_medium_scrambles": 0,
                          "medium_btt_rate": 0,
                          "center_behind_los_btt_rate": 0,
                          "center_short_avg_depth_of_target": 3.4,
                          "left_medium_sacks": 0,
                          "right_short_yards": 31,
                          "left_medium_first_downs": 1,
                          "right_medium_positive_epa_percent": 50,
                          "left_short_big_time_throws": 0,
                          "deep_turnover_worthy_plays": 1,
                          "left_deep_bats": 0,
                          "left_medium_turnover_worthy_plays": 0,
                          "base_dropbacks": 65,
                          "center_deep_drops": 0,
                          "center_medium_avg_depth_of_target": 12.5,
                          "center_behind_los_ypa": 3.5,
                          "right_short_attempts": 7,
                          "center_medium_completion_percent": 50,
                          "right_short_sack_percent": 0,
                          "left_behind_los_avg_depth_of_target": -3,
                          "center_medium_epa": 0.13,
                          "center_behind_los_sack_percent": 0,
                          "medium_completions": 6,
                          "medium_sack_percent": 0,
                          "left_short_grades_pass": 57.4,
                          "deep_btt_rate": 0,
                          "left_short_accuracy_percent": 50,
                          "short_twp_rate": 0,
                          "short_passing_snaps": 28,
                          "left_deep_sacks": 0,
                          "short_scrambles": 0,
                          "center_medium_turnover_worthy_plays": 1,
                          "behind_los_drop_rate": 0,
                          "right_behind_los_epa": 0.65,
                          "right_medium_aimed_passes": 4,
                          "short_accuracy_percent": 84.6,
                          "player_game_count": 1,
                          "short_btt_rate": 0,
                          "right_short_touchdowns": 2,
                          "center_short_completions": 13,
                          "right_short_spikes": 0,
                          "behind_los_first_downs": 2,
                          "right_medium_def_gen_pressures": 1,
                          "deep_pressure_to_sack_rate": 0,
                          "medium_qb_rating": 36.2,
                          "short_completion_percent": 80.8,
                          "right_deep_attempts_percent": 3.8,
                          "eligible_season": 2020,
                          "short_big_time_throws": 0,
                          "behind_los_attempts": 5,
                          "center_behind_los_yards": 7,
                          "center_behind_los_bats": 0,
                          "center_behind_los_qb_rating": 81.3,
                          "right_deep_pressure_to_sack_rate": null,
                          "center_short_accuracy_percent": 93.3,
                          "left_behind_los_bats": 0,
                          "center_deep_passing_snaps": 2,
                          "right_behind_los_hit_as_threw": 0,
                          "medium_bats": 0,
                          "right_medium_first_downs": 2,
                          "medium_spikes": 0,
                          "left_deep_thrown_aways": 0,
                          "right_deep_epa": -0.46,
                          "center_medium_hit_as_threw": 0,
                          "left_behind_los_completion_percent": 100,
                          "center_short_ypa": 8,
                          "right_short_drop_rate": 0,
                          "right_behind_los_accuracy_percent": 100,
                          "left_short_yards": 16,
                          "deep_accuracy_percent": 20,
                          "right_behind_los_avg_depth_of_target": -1.5,
                          "center_behind_los_thrown_aways": 0,
                          "center_behind_los_attempts_percent": 3.8,
                          "right_deep_first_downs": 0,
                          "left_short_completions": 2,
                          "deep_completion_percent": 20,
                          "left_deep_positive_epa_percent": 0,
                          "right_deep_sack_percent": 0,
                          "behind_los_pressure_to_sack_rate": 0,
                          "right_deep_touchdowns": 0,
                          "left_behind_los_def_gen_pressures": 0,
                          "left_behind_los_drops": 0,
                          "deep_epa": -0.51,
                          "left_deep_ypa": 0,
                          "medium_touchdowns": 0,
                          "left_medium_grades_pass": 60.6,
                          "right_behind_los_spikes": 0,
                          "medium_grades_pass": 39.2,
                          "behind_los_passing_snaps": 5,
                          "left_short_first_downs": 2,
                          "center_short_passing_snaps": 15,
                          "center_deep_accuracy_percent": 50,
                          "right_deep_positive_epa_percent": 0,
                          "right_medium_sack_percent": 0,
                          "right_deep_qb_rating": 39.6,
                          "right_short_completion_percent": 85.7,
                          "right_behind_los_interceptions": 0,
                          "behind_los_yards": 39,
                          "center_behind_los_grades_pass": 62.1,
                          "left_deep_dropbacks": 1,
                          "center_behind_los_spikes": 0,
                          "right_behind_los_aimed_passes": 2,
                          "left_short_interceptions": 0,
                          "right_medium_interceptions": 1,
                          "left_behind_los_yards": 11,
                          "center_deep_btt_rate": 0,
                          "medium_first_downs": 6,
                          "left_short_avg_depth_of_target": 6.5,
                          "left_behind_los_ypa": 11,
                          "short_attempts": 26,
                          "right_medium_bats": 0,
                          "left_behind_los_touchdowns": 0,
                          "right_medium_dropbacks": 4,
                          "short_turnover_worthy_plays": 0,
                          "right_deep_thrown_aways": 0,
                          "right_behind_los_drop_rate": 0,
                          "right_short_qb_rating": 85.1,
                          "medium_sacks": 0,
                          "center_deep_attempts_percent": 3.8,
                          "left_short_dropbacks": 4,
                          "behind_los_drops": 0,
                          "short_sack_percent": 0,
                          "left_medium_spikes": 0,
                          "left_medium_accuracy_percent": 33.3,
                          "behind_los_completions": 5,
                          "behind_los_sack_percent": 0,
                          "left_deep_yards": 0,
                          "left_short_aimed_passes": 4,
                          "center_behind_los_completions": 2,
                          "left_short_thrown_aways": 0,
                          "left_short_sack_percent": 0,
                          "center_short_thrown_aways": 0,
                          "center_short_interceptions": 0,
                          "short_avg_depth_of_target": 4,
                          "left_deep_touchdowns": 0,
                          "deep_yards": 22,
                          "center_behind_los_turnover_worthy_plays": 0,
                          "medium_ypa": 8.5,
                          "left_medium_epa": 0.33,
                          "left_deep_avg_depth_of_target": 22,
                          "deep_first_downs": 1,
                          "short_drop_rate": 4.5,
                          "left_medium_bats": 0,
                          "center_deep_spikes": 0,
                          "center_short_hit_as_threw": 0,
                          "left_medium_positive_epa_percent": 33.3,
                          "center_deep_touchdowns": 0,
                          "right_deep_ypa": 0,
                          "right_short_big_time_throws": 0,
                          "center_short_big_time_throws": 0,
                          "short_positive_epa_percent": 61.5,
                          "left_behind_los_avg_time_to_throw": 2.3,
                          "right_deep_passing_snaps": 3,
                          "right_short_twp_rate": 0,
                          "center_medium_attempts": 6,
                          "right_deep_avg_time_to_throw": 2.3,
                          "center_deep_def_gen_pressures": 0,
                          "behind_los_epa": 0.34,
                          "right_medium_twp_rate": 25,
                          "right_deep_aimed_passes": 2,
                          "right_deep_scrambles": 0,
                          "deep_big_time_throws": 0,
                          "left_short_turnover_worthy_plays": 0,
                          "center_short_touchdowns": 0,
                          "right_medium_drops": 0,
                          "left_deep_epa": -0.25,
                          "short_ypa": 6.4,
                          "medium_pressure_to_sack_rate": 0,
                          "left_medium_thrown_aways": 0,
                          "right_behind_los_avg_time_to_throw": 1.75,
                          "behind_los_btt_rate": 0,
                          "medium_avg_time_to_throw": 2.77,
                          "center_deep_completion_percent": 50,
                          "behind_los_avg_time_to_throw": 2.02,
                          "right_medium_touchdowns": 0,
                          "center_short_avg_time_to_throw": 2.48,
                          "left_deep_aimed_passes": 1,
                          "left_medium_yards": 12,
                          "center_medium_touchdowns": 0,
                          "center_short_drop_rate": 7.1,
                          "left_short_twp_rate": 0,
                          "penalties": 0,
                          "right_behind_los_attempts_percent": 3.8,
                          "right_deep_avg_depth_of_target": 22.5,
                          "behind_los_sacks": 0,
                          "center_deep_yards": 22,
                          "short_dropbacks": 26,
                          "left_deep_sack_percent": 0,
                          "center_behind_los_avg_time_to_throw": 2.15,
                          "behind_los_avg_depth_of_target": -2.2,
                          "left_behind_los_epa": 0.58,
                          "medium_twp_rate": 14.3,
                          "left_short_def_gen_pressures": 0,
                          "medium_turnover_worthy_plays": 2,
                          "behind_los_twp_rate": 0,
                          "left_behind_los_thrown_aways": 0,
                          "left_short_bats": 0,
                          "center_medium_drop_rate": 25,
                          "right_deep_bats": 0,
                          "medium_yards": 110,
                          "center_deep_grades_pass": 52.5,
                          "center_medium_passing_snaps": 7,
                          "center_behind_los_first_downs": 0,
                          "center_medium_interceptions": 1,
                          "behind_los_grades_pass": 64.9,
                          "left_short_hit_as_threw": 0,
                          "deep_qb_rating": 5.8,
                          "center_deep_bats": 0,
                          "behind_los_ypa": 7.8,
                          "right_short_interceptions": 1,
                          "left_deep_interceptions": 0,
                          "right_medium_sacks": 0,
                          "right_behind_los_turnover_worthy_plays": 0,
                          "team": "CIN",
                          "right_medium_spikes": 0,
                          "behind_los_hit_as_threw": 0,
                          "left_medium_pressure_to_sack_rate": null,
                          "medium_dropbacks": 13,
                          "deep_hit_as_threw": 0,
                          "right_medium_completion_percent": 50,
                          "short_epa": 0.18,
                          "deep_drop_rate": 0,
                          "declined_penalties": 0,
                          "deep_scrambles": 0,
                          "left_deep_completion_percent": 0,
                          "right_short_epa": 0.37,
                          "medium_attempts_percent": 24.5,
                          "right_behind_los_completion_percent": 100,
                          "left_medium_hit_as_threw": 0,
                          "left_behind_los_pressure_to_sack_rate": null,
                          "right_short_def_gen_pressures": 1,
                          "right_short_attempts_percent": 13.2,
                          "center_short_aimed_passes": 15,
                          "short_hit_as_threw": 0,
                          "right_medium_turnover_worthy_plays": 1,
                          "left_short_epa": -0.74,
                          "center_behind_los_pressure_to_sack_rate": null,
                          "right_behind_los_ypa": 10.5,
                          "deep_interceptions": 1,
                          "left_medium_twp_rate": 0,
                          "right_behind_los_big_time_throws": 0,
                          "center_medium_sack_percent": 0,
                          "center_deep_thrown_aways": 0,
                          "short_thrown_aways": 0,
                          "left_short_btt_rate": 0,
                          "right_medium_accuracy_percent": 50,
                          "position": "QB",
                          "short_def_gen_pressures": 4,
                          "center_deep_dropbacks": 2,
                          "center_medium_accuracy_percent": 66.7,
                          "right_behind_los_yards": 21,
                          "right_medium_attempts": 4,
                          "left_medium_attempts": 3,
                          "medium_accuracy_percent": 53.8,
                          "left_medium_drops": 0,
                          "left_short_avg_time_to_throw": 2.6,
                          "medium_passing_snaps": 14,
                          "center_short_epa": 0.34,
                          "left_behind_los_passing_snaps": 1,
                          "left_deep_pressure_to_sack_rate": 0,
                          "deep_bats": 0,
                          "left_medium_passing_snaps": 3,
                          "left_medium_scrambles": 0,
                          "right_deep_completion_percent": 0,
                          "left_short_drops": 0,
                          "left_deep_accuracy_percent": 0,
                          "medium_positive_epa_percent": 46.2,
                          "behind_los_turnover_worthy_plays": 0,
                          "right_medium_epa": -0.94,
                          "right_deep_dropbacks": 2,
                          "deep_ypa": 4.4,
                          "center_medium_completions": 3,
                          "left_medium_avg_time_to_throw": 2.33,
                          "left_short_sacks": 0,
                          "left_behind_los_spikes": 0,
                          "left_deep_def_gen_pressures": 1,
                          "center_short_qb_rating": 100,
                          "center_deep_interceptions": 1,
                          "right_deep_completions": 0,
                          "center_behind_los_sacks": 0,
                          "deep_completions": 1,
                          "left_medium_attempts_percent": 5.7,
                          "short_yards": 167,
                          "behind_los_qb_rating": 99.2,
                          "right_short_sacks": 0,
                          "right_behind_los_thrown_aways": 0,
                          "base_attempts": 53,
                          "center_short_spikes": 0,
                          "center_behind_los_hit_as_threw": 0,
                          "center_deep_turnover_worthy_plays": 1,
                          "left_medium_sack_percent": 0,
                          "behind_los_completion_percent": 100,
                          "left_deep_attempts_percent": 1.9,
                          "center_deep_big_time_throws": 0,
                          "player": "Joe Burrow",
                          "left_medium_avg_depth_of_target": 12.7,
                          "behind_los_thrown_aways": 0,
                          "center_medium_def_gen_pressures": 2,
                          "short_avg_time_to_throw": 2.37,
                          "left_deep_twp_rate": 0,
                          "center_behind_los_epa": -0.08,
                          "left_behind_los_big_time_throws": 0,
                          "right_medium_yards": 35,
                          "right_medium_drop_rate": 0,
                          "center_medium_big_time_throws": 0,
                          "franchise_id": 7,
                          "left_short_completion_percent": 50,
                          "left_short_drop_rate": 0,
                          "left_behind_los_scrambles": 0,
                          "left_medium_btt_rate": 0,
                          "right_deep_hit_as_threw": 0,
                          "behind_los_bats": 0,
                          "short_first_downs": 13,
                          "left_deep_attempts": 1,
                          "right_behind_los_attempts": 2,
                          "right_deep_sacks": 0,
                          "left_behind_los_attempts_percent": 1.9,
                          "behind_los_big_time_throws": 0,
                          "center_deep_pressure_to_sack_rate": null,
                          "left_medium_big_time_throws": 0,
                          "right_behind_los_bats": 0,
                          "left_medium_def_gen_pressures": 0,
                          "right_deep_turnover_worthy_plays": 0,
                          "left_short_spikes": 0,
                          "left_medium_aimed_passes": 3,
                          "left_behind_los_twp_rate": 0,
                          "short_grades_pass": 81.4,
                          "right_short_drops": 0,
                          "right_short_avg_time_to_throw": 2,
                          "right_medium_thrown_aways": 0,
                          "center_short_sack_percent": 0,
                          "right_short_passing_snaps": 7,
                          "center_short_def_gen_pressures": 3,
                          "center_medium_positive_epa_percent": 50,
                          "medium_drops": 1,
                          "center_medium_aimed_passes": 6,
                          "center_short_sacks": 0,
                          "deep_attempts_percent": 9.4,
                          "center_behind_los_def_gen_pressures": 0,
                          "left_short_passing_snaps": 6,
                          "center_medium_grades_pass": 57.1,
                          "center_deep_avg_time_to_throw": 3.2,
                          "behind_los_positive_epa_percent": 80,
                          "center_short_completion_percent": 86.7,
                          "left_deep_hit_as_threw": 0,
                          "center_short_grades_pass": 83.6,
                          "left_short_attempts_percent": 7.5,
                          "left_deep_scrambles": 0,
                          "right_short_completions": 6,
                          "center_behind_los_aimed_passes": 2,
                          "right_short_scrambles": 0,
                          "center_medium_qb_rating": 47.9,
                          "deep_avg_time_to_throw": 2.58,
                          "left_deep_drops": 0,
                          "right_behind_los_def_gen_pressures": 1,
                          "center_deep_positive_epa_percent": 50,
                          "center_deep_hit_as_threw": 0,
                          "short_spikes": 0,
                          "right_behind_los_completions": 2,
                          "center_behind_los_drop_rate": 0,
                          "short_drops": 1,
                          "deep_aimed_passes": 5,
                          "right_medium_avg_depth_of_target": 16.3,
                          "short_pressure_to_sack_rate": 0,
                          "center_deep_qb_rating": 50,
                          "left_medium_completions": 1,
                          "center_deep_sacks": 0,
                          "left_deep_big_time_throws": 0,
                          "center_medium_first_downs": 3,
                          "center_medium_dropbacks": 6,
                          "right_deep_def_gen_pressures": 0,
                          "left_short_touchdowns": 0,
                          "medium_drop_rate": 14.3,
                          "player_id": 28022,
                          "left_medium_ypa": 4,
                          "right_medium_passing_snaps": 4,
                          "center_short_scrambles": 0,
                          "left_behind_los_turnover_worthy_plays": 0,
                          "center_medium_yards": 63,
                          "center_deep_epa": -0.68,
                          "left_medium_interceptions": 0,
                          "right_deep_interceptions": 0,
                          "medium_completion_percent": 46.2,
                          "right_behind_los_grades_pass": 62.1,
                          "deep_positive_epa_percent": 20,
                          "behind_los_accuracy_percent": 100,
                          "center_deep_scrambles": 0,
                          "center_short_twp_rate": 0,
                          "behind_los_touchdowns": 0,
                          "left_medium_qb_rating": 46.5,
                          "right_medium_completions": 2,
                          "right_behind_los_drops": 0,
                          "left_behind_los_first_downs": 1,
                          "short_qb_rating": 103,
                          "center_medium_btt_rate": 0,
                          "left_deep_grades_pass": 49.2
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/passing/depth?league=nfl&season=2022&week=1&franchise_id=7&export=true`, complete.",
                    "value": "player,player_id,position,team_name,player_game_count,base_attempts,base_dropbacks,behind_los_accuracy_percent,behind_los_aimed_passes,behind_los_attempts,behind_los_attempts_percent,behind_los_avg_depth_of_target,behind_los_avg_time_to_throw,behind_los_bats,behind_los_big_time_throws,behind_los_btt_rate,behind_los_completion_percent,behind_los_completions,behind_los_def_gen_pressures,behind_los_drop_rate,behind_los_dropbacks,behind_los_drops,behind_los_epa,behind_los_first_downs,behind_los_grades_pass,behind_los_hit_as_threw,behind_los_interceptions,behind_los_passing_snaps,behind_los_positive_epa_percent,behind_los_pressure_to_sack_rate,behind_los_qb_rating,behind_los_sack_percent,behind_los_sacks,behind_los_scrambles,behind_los_spikes,behind_los_thrown_aways,behind_los_touchdowns,behind_los_turnover_worthy_plays,behind_los_twp_rate,behind_los_yards,behind_los_ypa,center_behind_los_accuracy_percent,center_behind_los_aimed_passes,center_behind_los_attempts,center_behind_los_attempts_percent,center_behind_los_avg_depth_of_target,center_behind_los_avg_time_to_throw,center_behind_los_bats,center_behind_los_big_time_throws,center_behind_los_btt_rate,center_behind_los_completion_percent,center_behind_los_completions,center_behind_los_def_gen_pressures,center_behind_los_drop_rate,center_behind_los_dropbacks,center_behind_los_drops,center_behind_los_epa,center_behind_los_first_downs,center_behind_los_grades_pass,center_behind_los_hit_as_threw,center_behind_los_interceptions,center_behind_los_passing_snaps,center_behind_los_positive_epa_percent,center_behind_los_pressure_to_sack_rate,center_behind_los_qb_rating,center_behind_los_sack_percent,center_behind_los_sacks,center_behind_los_scrambles,center_behind_los_spikes,center_behind_los_thrown_aways,center_behind_los_touchdowns,center_behind_los_turnover_worthy_plays,center_behind_los_twp_rate,center_behind_los_yards,center_behind_los_ypa,center_deep_accuracy_percent,center_deep_aimed_passes,center_deep_attempts,center_deep_attempts_percent,center_deep_avg_depth_of_target,center_deep_avg_time_to_throw,center_deep_bats,center_deep_big_time_throws,center_deep_btt_rate,center_deep_completion_percent,center_deep_completions,center_deep_def_gen_pressures,center_deep_drop_rate,center_deep_dropbacks,center_deep_drops,center_deep_epa,center_deep_first_downs,center_deep_grades_pass,center_deep_hit_as_threw,center_deep_interceptions,center_deep_passing_snaps,center_deep_positive_epa_percent,center_deep_pressure_to_sack_rate,center_deep_qb_rating,center_deep_sack_percent,center_deep_sacks,center_deep_scrambles,center_deep_spikes,center_deep_thrown_aways,center_deep_touchdowns,center_deep_turnover_worthy_plays,center_deep_twp_rate,center_deep_yards,center_deep_ypa,center_medium_accuracy_percent,center_medium_aimed_passes,center_medium_attempts,center_medium_attempts_percent,center_medium_avg_depth_of_target,center_medium_avg_time_to_throw,center_medium_bats,center_medium_big_time_throws,center_medium_btt_rate,center_medium_completion_percent,center_medium_completions,center_medium_def_gen_pressures,center_medium_drop_rate,center_medium_dropbacks,center_medium_drops,center_medium_epa,center_medium_first_downs,center_medium_grades_pass,center_medium_hit_as_threw,center_medium_interceptions,center_medium_passing_snaps,center_medium_positive_epa_percent,center_medium_pressure_to_sack_rate,center_medium_qb_rating,center_medium_sack_percent,center_medium_sacks,center_medium_scrambles,center_medium_spikes,center_medium_thrown_aways,center_medium_touchdowns,center_medium_turnover_worthy_plays,center_medium_twp_rate,center_medium_yards,center_medium_ypa,center_short_accuracy_percent,center_short_aimed_passes,center_short_attempts,center_short_attempts_percent,center_short_avg_depth_of_target,center_short_avg_time_to_throw,center_short_bats,center_short_big_time_throws,center_short_btt_rate,center_short_completion_percent,center_short_completions,center_short_def_gen_pressures,center_short_drop_rate,center_short_dropbacks,center_short_drops,center_short_epa,center_short_first_downs,center_short_grades_pass,center_short_hit_as_threw,center_short_interceptions,center_short_passing_snaps,center_short_positive_epa_percent,center_short_pressure_to_sack_rate,center_short_qb_rating,center_short_sack_percent,center_short_sacks,center_short_scrambles,center_short_spikes,center_short_thrown_aways,center_short_touchdowns,center_short_turnover_worthy_plays,center_short_twp_rate,center_short_yards,center_short_ypa,declined_penalties,deep_accuracy_percent,deep_aimed_passes,deep_attempts,deep_attempts_percent,deep_avg_depth_of_target,deep_avg_time_to_throw,deep_bats,deep_big_time_throws,deep_btt_rate,deep_completion_percent,deep_completions,deep_def_gen_pressures,deep_drop_rate,deep_dropbacks,deep_drops,deep_epa,deep_first_downs,deep_grades_pass,deep_hit_as_threw,deep_interceptions,deep_passing_snaps,deep_positive_epa_percent,deep_pressure_to_sack_rate,deep_qb_rating,deep_sack_percent,deep_sacks,deep_scrambles,deep_spikes,deep_thrown_aways,deep_touchdowns,deep_turnover_worthy_plays,deep_twp_rate,deep_yards,deep_ypa,franchise_id,left_behind_los_accuracy_percent,left_behind_los_aimed_passes,left_behind_los_attempts,left_behind_los_attempts_percent,left_behind_los_avg_depth_of_target,left_behind_los_avg_time_to_throw,left_behind_los_bats,left_behind_los_big_time_throws,left_behind_los_btt_rate,left_behind_los_completion_percent,left_behind_los_completions,left_behind_los_def_gen_pressures,left_behind_los_drop_rate,left_behind_los_dropbacks,left_behind_los_drops,left_behind_los_epa,left_behind_los_first_downs,left_behind_los_grades_pass,left_behind_los_hit_as_threw,left_behind_los_interceptions,left_behind_los_passing_snaps,left_behind_los_positive_epa_percent,left_behind_los_pressure_to_sack_rate,left_behind_los_qb_rating,left_behind_los_sack_percent,left_behind_los_sacks,left_behind_los_scrambles,left_behind_los_spikes,left_behind_los_thrown_aways,left_behind_los_touchdowns,left_behind_los_turnover_worthy_plays,left_behind_los_twp_rate,left_behind_los_yards,left_behind_los_ypa,left_deep_accuracy_percent,left_deep_aimed_passes,left_deep_attempts,left_deep_attempts_percent,left_deep_avg_depth_of_target,left_deep_avg_time_to_throw,left_deep_bats,left_deep_big_time_throws,left_deep_btt_rate,left_deep_completion_percent,left_deep_completions,left_deep_def_gen_pressures,left_deep_drop_rate,left_deep_dropbacks,left_deep_drops,left_deep_epa,left_deep_first_downs,left_deep_grades_pass,left_deep_hit_as_threw,left_deep_interceptions,left_deep_passing_snaps,left_deep_positive_epa_percent,left_deep_pressure_to_sack_rate,left_deep_qb_rating,left_deep_sack_percent,left_deep_sacks,left_deep_scrambles,left_deep_spikes,left_deep_thrown_aways,left_deep_touchdowns,left_deep_turnover_worthy_plays,left_deep_twp_rate,left_deep_yards,left_deep_ypa,left_medium_accuracy_percent,left_medium_aimed_passes,left_medium_attempts,left_medium_attempts_percent,left_medium_avg_depth_of_target,left_medium_avg_time_to_throw,left_medium_bats,left_medium_big_time_throws,left_medium_btt_rate,left_medium_completion_percent,left_medium_completions,left_medium_def_gen_pressures,left_medium_drop_rate,left_medium_dropbacks,left_medium_drops,left_medium_epa,left_medium_first_downs,left_medium_grades_pass,left_medium_hit_as_threw,left_medium_interceptions,left_medium_passing_snaps,left_medium_positive_epa_percent,left_medium_pressure_to_sack_rate,left_medium_qb_rating,left_medium_sack_percent,left_medium_sacks,left_medium_scrambles,left_medium_spikes,left_medium_thrown_aways,left_medium_touchdowns,left_medium_turnover_worthy_plays,left_medium_twp_rate,left_medium_yards,left_medium_ypa,left_short_accuracy_percent,left_short_aimed_passes,left_short_attempts,left_short_attempts_percent,left_short_avg_depth_of_target,left_short_avg_time_to_throw,left_short_bats,left_short_big_time_throws,left_short_btt_rate,left_short_completion_percent,left_short_completions,left_short_def_gen_pressures,left_short_drop_rate,left_short_dropbacks,left_short_drops,left_short_epa,left_short_first_downs,left_short_grades_pass,left_short_hit_as_threw,left_short_interceptions,left_short_passing_snaps,left_short_positive_epa_percent,left_short_pressure_to_sack_rate,left_short_qb_rating,left_short_sack_percent,left_short_sacks,left_short_scrambles,left_short_spikes,left_short_thrown_aways,left_short_touchdowns,left_short_turnover_worthy_plays,left_short_twp_rate,left_short_yards,left_short_ypa,medium_accuracy_percent,medium_aimed_passes,medium_attempts,medium_attempts_percent,medium_avg_depth_of_target,medium_avg_time_to_throw,medium_bats,medium_big_time_throws,medium_btt_rate,medium_completion_percent,medium_completions,medium_def_gen_pressures,medium_drop_rate,medium_dropbacks,medium_drops,medium_epa,medium_first_downs,medium_grades_pass,medium_hit_as_threw,medium_interceptions,medium_passing_snaps,medium_positive_epa_percent,medium_pressure_to_sack_rate,medium_qb_rating,medium_sack_percent,medium_sacks,medium_scrambles,medium_spikes,medium_thrown_aways,medium_touchdowns,medium_turnover_worthy_plays,medium_twp_rate,medium_yards,medium_ypa,penalties,right_behind_los_accuracy_percent,right_behind_los_aimed_passes,right_behind_los_attempts,right_behind_los_attempts_percent,right_behind_los_avg_depth_of_target,right_behind_los_avg_time_to_throw,right_behind_los_bats,right_behind_los_big_time_throws,right_behind_los_btt_rate,right_behind_los_completion_percent,right_behind_los_completions,right_behind_los_def_gen_pressures,right_behind_los_drop_rate,right_behind_los_dropbacks,right_behind_los_drops,right_behind_los_epa,right_behind_los_first_downs,right_behind_los_grades_pass,right_behind_los_hit_as_threw,right_behind_los_interceptions,right_behind_los_passing_snaps,right_behind_los_positive_epa_percent,right_behind_los_pressure_to_sack_rate,right_behind_los_qb_rating,right_behind_los_sack_percent,right_behind_los_sacks,right_behind_los_scrambles,right_behind_los_spikes,right_behind_los_thrown_aways,right_behind_los_touchdowns,right_behind_los_turnover_worthy_plays,right_behind_los_twp_rate,right_behind_los_yards,right_behind_los_ypa,right_deep_accuracy_percent,right_deep_aimed_passes,right_deep_attempts,right_deep_attempts_percent,right_deep_avg_depth_of_target,right_deep_avg_time_to_throw,right_deep_bats,right_deep_big_time_throws,right_deep_btt_rate,right_deep_completion_percent,right_deep_completions,right_deep_def_gen_pressures,right_deep_drop_rate,right_deep_dropbacks,right_deep_drops,right_deep_epa,right_deep_first_downs,right_deep_grades_pass,right_deep_hit_as_threw,right_deep_interceptions,right_deep_passing_snaps,right_deep_positive_epa_percent,right_deep_pressure_to_sack_rate,right_deep_qb_rating,right_deep_sack_percent,right_deep_sacks,right_deep_scrambles,right_deep_spikes,right_deep_thrown_aways,right_deep_touchdowns,right_deep_turnover_worthy_plays,right_deep_twp_rate,right_deep_yards,right_deep_ypa,right_medium_accuracy_percent,right_medium_aimed_passes,right_medium_attempts,right_medium_attempts_percent,right_medium_avg_depth_of_target,right_medium_avg_time_to_throw,right_medium_bats,right_medium_big_time_throws,right_medium_btt_rate,right_medium_completion_percent,right_medium_completions,right_medium_def_gen_pressures,right_medium_drop_rate,right_medium_dropbacks,right_medium_drops,right_medium_epa,right_medium_first_downs,right_medium_grades_pass,right_medium_hit_as_threw,right_medium_interceptions,right_medium_passing_snaps,right_medium_positive_epa_percent,right_medium_pressure_to_sack_rate,right_medium_qb_rating,right_medium_sack_percent,right_medium_sacks,right_medium_scrambles,right_medium_spikes,right_medium_thrown_aways,right_medium_touchdowns,right_medium_turnover_worthy_plays,right_medium_twp_rate,right_medium_yards,right_medium_ypa,right_short_accuracy_percent,right_short_aimed_passes,right_short_attempts,right_short_attempts_percent,right_short_avg_depth_of_target,right_short_avg_time_to_throw,right_short_bats,right_short_big_time_throws,right_short_btt_rate,right_short_completion_percent,right_short_completions,right_short_def_gen_pressures,right_short_drop_rate,right_short_dropbacks,right_short_drops,right_short_epa,right_short_first_downs,right_short_grades_pass,right_short_hit_as_threw,right_short_interceptions,right_short_passing_snaps,right_short_positive_epa_percent,right_short_pressure_to_sack_rate,right_short_qb_rating,right_short_sack_percent,right_short_sacks,right_short_scrambles,right_short_spikes,right_short_thrown_aways,right_short_touchdowns,right_short_turnover_worthy_plays,right_short_twp_rate,right_short_yards,right_short_ypa,short_accuracy_percent,short_aimed_passes,short_attempts,short_attempts_percent,short_avg_depth_of_target,short_avg_time_to_throw,short_bats,short_big_time_throws,short_btt_rate,short_completion_percent,short_completions,short_def_gen_pressures,short_drop_rate,short_dropbacks,short_drops,short_epa,short_first_downs,short_grades_pass,short_hit_as_threw,short_interceptions,short_passing_snaps,short_positive_epa_percent,short_pressure_to_sack_rate,short_qb_rating,short_sack_percent,short_sacks,short_scrambles,short_spikes,short_thrown_aways,short_touchdowns,short_turnover_worthy_plays,short_twp_rate,short_yards,short_ypa\r\nJoe Burrow,28022,QB,CIN,1,53,65,100.0,5,5,9.4,-2.2,2.02,0,0,0.0,100.0,5,1,0.0,5,0,0.34,2,64.9,0,0,5,80.0,0.0,99.2,0.0,0,0,0,0,0,0,0.0,39,7.8,100.0,2,2,3.8,-2.5,2.15,0,0,0.0,100.0,2,0,0.0,2,0,-0.08,0,62.1,0,0,2,50.0,,81.3,0.0,0,0,0,0,0,0,0.0,7,3.5,50.0,2,2,3.8,25.0,3.2,0,0,0.0,50.0,1,0,0.0,2,0,-0.68,1,52.5,0,1,2,50.0,,50.0,0.0,0,0,0,0,0,1,50.0,22,11.0,66.7,6,6,11.3,12.5,2.53,0,0,0.0,50.0,3,2,25.0,6,1,0.13,3,57.1,0,1,7,50.0,0.0,47.9,0.0,0,0,0,0,0,1,14.3,63,10.5,93.3,15,15,28.3,3.4,2.48,0,0,0.0,86.7,13,3,7.1,15,1,0.34,7,83.6,0,0,15,60.0,0.0,100.0,0.0,0,0,0,0,0,0,0.0,120,8.0,0,20.0,5,5,9.4,23.4,2.58,0,0,0.0,20.0,1,1,0.0,5,0,-0.51,1,50.3,0,1,6,20.0,0.0,5.8,0.0,0,0,0,0,0,1,16.7,22,4.4,7,100.0,1,1,1.9,-3.0,2.3,0,0,0.0,100.0,1,0,0.0,1,0,0.58,1,60.1,0,0,1,100.0,,112.5,0.0,0,0,0,0,0,0,0.0,11,11.0,0.0,1,1,1.9,22.0,1.9,0,0,0.0,0.0,0,1,,1,0,-0.25,0,49.2,0,0,1,0.0,0.0,39.6,0.0,0,0,0,0,0,0,0.0,0,0.0,33.3,3,3,5.7,12.7,2.33,0,0,0.0,33.3,1,0,0.0,3,0,0.33,1,60.6,0,0,3,33.3,,46.5,0.0,0,0,0,0,0,0,0.0,12,4.0,50.0,4,4,7.5,6.5,2.6,0,0,0.0,50.0,2,0,0.0,4,0,-0.74,2,57.4,0,0,6,50.0,,60.4,0.0,0,0,0,0,0,0,0.0,16,4.0,53.8,13,13,24.5,13.7,2.77,0,0,0.0,46.2,6,3,14.3,13,1,-0.15,6,39.2,0,2,14,46.2,0.0,36.2,0.0,0,0,0,0,0,2,14.3,110,8.5,0,100.0,2,2,3.8,-1.5,1.75,0,0,0.0,100.0,2,1,0.0,2,0,0.65,1,62.1,0,0,2,100.0,0.0,110.4,0.0,0,0,0,0,0,0,0.0,21,10.5,0.0,2,2,3.8,22.5,2.3,0,0,0.0,0.0,0,0,,2,0,-0.46,0,60.7,0,0,3,0.0,,39.6,0.0,0,0,0,0,0,0,0.0,0,0.0,50.0,4,4,7.5,16.3,3.45,0,0,0.0,50.0,2,1,0.0,4,0,-0.94,2,26.2,0,1,4,50.0,0.0,40.6,0.0,0,0,0,0,0,1,25.0,35,8.8,85.7,7,7,13.2,3.7,2.0,0,0,0.0,85.7,6,1,0.0,7,0,0.37,4,80.4,0,1,7,71.4,0.0,85.1,0.0,0,0,0,0,2,0,0.0,31,4.4,84.6,26,26,49.1,4.0,2.37,0,0,0.0,80.8,21,4,4.5,26,1,0.18,13,81.4,0,1,28,61.5,0.0,103.0,0.0,0,0,0,0,2,0,0.0,167,6.4\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/passing/detail": {
      "get": {
        "operationId": "facet-passing-detail",
        "summary": "League-wide passing detail leaderboard",
        "description": "Every qualifying passer in the league, with the long-form passing column set. Two complete requests\nexist: `--league` with `--season` (a year, or a comma-separated list such as `2023,2024`), or\n`--game` alone (an id from `ref-games`) — anything less is refused with `400 invalid_parameter`.\nNarrow with `--week` and `--franchise`. `--division` fans the request out across NCAA divisions and\nis ignored for every other league. Grades are on PFF's 0-100 scale and every other column is a raw\ntotal or rate; which columns come back depends on the report, the position and the caller's\nentitlement. Add `--export true` for the raw CSV instead of JSON.\n\nThis export has no header row and one blank line per record.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `download.csv` instead of JSON.",
        "tags": [
          "facet"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `download.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"download.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetPassingDetailResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/passing/detail?league=nfl&season=2022&week=1&franchise_id=7`, complete.",
                    "value": {
                      "passing_detail_stats": [
                        {
                          "left_behind_los_accuracy_percent": 100,
                          "left_short_scrambles": 0,
                          "center_short_first_downs": 7,
                          "no_blitz_completion_percent": 62.2,
                          "right_short_bats": 0,
                          "right_behind_los_positive_epa_percent": 100,
                          "left_behind_los_completions": 1,
                          "comp_pct_diff": 10.56,
                          "pa_grades_pass": 71.3,
                          "left_medium_dropbacks": 3,
                          "right_medium_grades_pass": 26.2,
                          "right_medium_hit_as_threw": 0,
                          "behind_los_attempts_percent": 9.4,
                          "grades_offense": 54.8,
                          "no_screen_grades_offense": 54.5,
                          "pa_qb_rating": 92.6,
                          "right_short_turnover_worthy_plays": 0,
                          "no_screen_qb_rating": 60.3,
                          "pa_completions": 5,
                          "right_medium_qb_rating": 40.6,
                          "deep_twp_rate": 16.7,
                          "center_medium_sacks": 0,
                          "medium_interceptions": 2,
                          "left_deep_completions": 0,
                          "no_pressure_scrambles": 3,
                          "twp_rate": 5.6,
                          "behind_los_spikes": 0,
                          "medium_aimed_passes": 13,
                          "pa_thrown_aways": 0,
                          "pa_dropbacks_percent": 12.3,
                          "ypa_diff": 1.21,
                          "blitz_touchdowns": 1,
                          "center_behind_los_drops": 0,
                          "pressure_yards": 56,
                          "no_pressure_spikes": 0,
                          "blitz_ypa": 7.6,
                          "center_behind_los_interceptions": 0,
                          "no_screen_drops": 2,
                          "behind_los_dropbacks": 5,
                          "no_blitz_grades_run": 62.9,
                          "screen_completion_percent": 75,
                          "npa_bats": 0,
                          "left_behind_los_interceptions": 0,
                          "left_deep_first_downs": 0,
                          "deep_passing_snaps": 6,
                          "btt_rate": 0,
                          "center_short_btt_rate": 0,
                          "center_medium_thrown_aways": 0,
                          "center_deep_avg_depth_of_target": 25,
                          "blitz_qb_rating": 125.5,
                          "center_short_drops": 1,
                          "no_pressure_thrown_aways": 0,
                          "no_screen_thrown_aways": 1,
                          "no_blitz_bats": 2,
                          "center_deep_first_downs": 1,
                          "left_medium_completion_percent": 33.3,
                          "center_deep_attempts": 2,
                          "pa_grades_run": null,
                          "center_behind_los_attempts": 2,
                          "right_short_positive_epa_percent": 71.4,
                          "no_blitz_drops": 0,
                          "center_deep_aimed_passes": 2,
                          "right_deep_grades_pass": 60.7,
                          "right_medium_big_time_throws": 0,
                          "deep_sack_percent": 0,
                          "no_pressure_completion_percent": 66.7,
                          "blitz_aimed_passes": 7,
                          "screen_pressure_to_sack_rate": null,
                          "pa_drop_rate": 0,
                          "center_medium_pressure_to_sack_rate": 0,
                          "deep_sacks": 0,
                          "right_medium_ypa": 8.8,
                          "spikes": 0,
                          "left_deep_drop_rate": null,
                          "screen_grades_offense": 61.1,
                          "right_medium_attempts_percent": 7.5,
                          "right_deep_btt_rate": 0,
                          "center_short_attempts_percent": 28.3,
                          "deep_drops": 0,
                          "center_behind_los_big_time_throws": 0,
                          "center_behind_los_touchdowns": 0,
                          "dropbacks": 65,
                          "right_behind_los_twp_rate": 0,
                          "center_deep_completions": 1,
                          "npa_thrown_aways": 1,
                          "center_short_attempts": 15,
                          "pressure_grades_run": 64.1,
                          "left_behind_los_sack_percent": 0,
                          "center_short_pressure_to_sack_rate": 0,
                          "deep_touchdowns": 0,
                          "no_blitz_sack_percent": 6,
                          "no_pressure_bats": 2,
                          "center_behind_los_accuracy_percent": 100,
                          "pressure_completions": 5,
                          "blitz_big_time_throws": 0,
                          "center_deep_drop_rate": 0,
                          "right_short_first_downs": 4,
                          "no_screen_def_gen_pressures": 20,
                          "right_behind_los_first_downs": 1,
                          "screen_grades_hands_fumble": 66.9,
                          "pa_touchdowns": 0,
                          "short_interceptions": 1,
                          "center_medium_scrambles": 0,
                          "left_behind_los_sacks": 0,
                          "npa_ypa": 6.2,
                          "no_blitz_drop_rate": 0,
                          "blitz_spikes": 0,
                          "left_short_ypa": 4,
                          "no_pressure_completions": 28,
                          "left_short_qb_rating": 60.4,
                          "thrown_aways": 1,
                          "right_behind_los_qb_rating": 110.4,
                          "draft_season": 2020,
                          "screen_avg_time_to_throw": 1.7,
                          "right_behind_los_dropbacks": 2,
                          "screen_thrown_aways": 0,
                          "behind_los_def_gen_pressures": 1,
                          "npa_sacks": 6,
                          "no_pressure_passing_snaps": 49,
                          "npa_aimed_passes": 44,
                          "no_blitz_first_downs": 18,
                          "right_short_thrown_aways": 0,
                          "deep_def_gen_pressures": 1,
                          "right_short_btt_rate": 0,
                          "center_behind_los_positive_epa_percent": 50,
                          "blitz_avg_time_to_throw": 2.85,
                          "left_behind_los_grades_pass": 60.1,
                          "deep_grades_pass": 50.3,
                          "no_pressure_grades_hands_fumble": 80.3,
                          "center_short_turnover_worthy_plays": 0,
                          "center_behind_los_scrambles": 0,
                          "pressure_aimed_passes": 9,
                          "no_screen_completions": 30,
                          "right_short_aimed_passes": 7,
                          "no_screen_positive_epa_percent": 47.5,
                          "center_short_dropbacks": 15,
                          "medium_epa": -0.15,
                          "right_short_ypa": 4.4,
                          "blitz_sacks": 4,
                          "center_medium_ypa": 10.5,
                          "screen_spikes": 0,
                          "pa_first_downs": 3,
                          "medium_attempts": 13,
                          "no_pressure_interceptions": 3,
                          "right_deep_accuracy_percent": 0,
                          "behind_los_scrambles": 0,
                          "center_behind_los_completion_percent": 100,
                          "left_behind_los_btt_rate": 0,
                          "right_behind_los_btt_rate": 0,
                          "pa_big_time_throws": 0,
                          "team_name": "CIN",
                          "short_touchdowns": 2,
                          "pa_spikes": 0,
                          "center_medium_drops": 1,
                          "left_behind_los_aimed_passes": 1,
                          "pa_sack_percent": 12.5,
                          "deep_attempts": 5,
                          "right_behind_los_sack_percent": 0,
                          "pressure_epa": -0.95,
                          "center_short_positive_epa_percent": 60,
                          "deep_avg_depth_of_target": 23.4,
                          "left_deep_btt_rate": 0,
                          "medium_scrambles": 0,
                          "blitz_completions": 5,
                          "center_behind_los_avg_depth_of_target": -2.5,
                          "blitz_attempts": 8,
                          "short_attempts_percent": 49.1,
                          "right_behind_los_sacks": 0,
                          "screen_dropbacks_percent": 6.2,
                          "center_medium_avg_time_to_throw": 2.53,
                          "pressure_twp_rate": 9.1,
                          "pressure_sacks": 7,
                          "left_short_pressure_to_sack_rate": null,
                          "no_blitz_pressure_to_sack_rate": 27.3,
                          "no_pressure_ypa": 6.7,
                          "no_screen_epa": -0.19,
                          "center_deep_sack_percent": 0,
                          "center_deep_ypa": 11,
                          "left_behind_los_hit_as_threw": 0,
                          "pressure_passing_snaps": 22,
                          "medium_big_time_throws": 0,
                          "grades_pass": 52.6,
                          "npa_avg_time_to_throw": 2.68,
                          "deep_thrown_aways": 0,
                          "right_short_accuracy_percent": 85.7,
                          "left_deep_turnover_worthy_plays": 0,
                          "center_medium_bats": 0,
                          "right_short_grades_pass": 80.4,
                          "hit_as_threw": 1,
                          "right_deep_spikes": 0,
                          "left_deep_passing_snaps": 1,
                          "center_medium_twp_rate": 14.3,
                          "right_behind_los_passing_snaps": 2,
                          "left_deep_qb_rating": 39.6,
                          "screen_bats": 1,
                          "right_deep_drop_rate": null,
                          "first_downs": 24,
                          "screen_grades_run_block": null,
                          "left_behind_los_drop_rate": 0,
                          "pressure_bats": 0,
                          "left_medium_drop_rate": 0,
                          "right_deep_attempts": 2,
                          "left_deep_spikes": 0,
                          "center_behind_los_dropbacks": 2,
                          "blitz_thrown_aways": 1,
                          "right_deep_big_time_throws": 0,
                          "medium_hit_as_threw": 0,
                          "right_short_dropbacks": 7,
                          "no_pressure_drops": 1,
                          "medium_def_gen_pressures": 3,
                          "jersey_number": "09",
                          "left_short_positive_epa_percent": 50,
                          "left_short_attempts": 4,
                          "pressure_grades_offense_penalty": 75,
                          "center_deep_twp_rate": 50,
                          "right_medium_avg_time_to_throw": 3.45,
                          "left_behind_los_qb_rating": 112.5,
                          "no_screen_bats": 1,
                          "left_behind_los_dropbacks": 1,
                          "pressure_scrambles": 2,
                          "blitz_drop_rate": 28.6,
                          "deep_dropbacks": 5,
                          "right_behind_los_scrambles": 0,
                          "sack_percent": 10.8,
                          "behind_los_interceptions": 0,
                          "right_deep_drops": 0,
                          "right_deep_yards": 0,
                          "right_short_hit_as_threw": 0,
                          "npa_grades_offense": 51.8,
                          "right_short_avg_depth_of_target": 3.7,
                          "short_bats": 0,
                          "right_deep_twp_rate": 0,
                          "right_behind_los_pressure_to_sack_rate": 0,
                          "screen_def_gen_pressures": 0,
                          "deep_spikes": 0,
                          "pa_pressure_to_sack_rate": 50,
                          "center_medium_spikes": 0,
                          "screen_sack_percent": 0,
                          "blitz_completion_percent": 62.5,
                          "behind_los_aimed_passes": 5,
                          "right_behind_los_touchdowns": 0,
                          "bats": 2,
                          "right_medium_pressure_to_sack_rate": 0,
                          "no_screen_btt_rate": 0,
                          "medium_thrown_aways": 0,
                          "short_sacks": 0,
                          "center_behind_los_twp_rate": 0,
                          "left_behind_los_attempts": 1,
                          "short_aimed_passes": 26,
                          "short_completions": 21,
                          "right_short_pressure_to_sack_rate": 0,
                          "npa_btt_rate": 0,
                          "medium_avg_depth_of_target": 13.7,
                          "left_behind_los_positive_epa_percent": 100,
                          "screen_interceptions": 0,
                          "center_medium_attempts_percent": 11.3,
                          "left_medium_touchdowns": 0,
                          "center_short_bats": 0,
                          "left_deep_avg_time_to_throw": 1.9,
                          "no_screen_passing_snaps": 67,
                          "no_pressure_first_downs": 21,
                          "center_behind_los_passing_snaps": 2,
                          "center_short_yards": 120,
                          "blitz_grades_offense_penalty": 73.7,
                          "right_medium_btt_rate": 0,
                          "right_medium_scrambles": 0,
                          "no_screen_grades_hands_fumble": 41.8,
                          "medium_btt_rate": 0,
                          "no_blitz_epa": -0.21,
                          "center_behind_los_btt_rate": 0,
                          "blitz_interceptions": 0,
                          "no_blitz_dropbacks": 50,
                          "center_short_avg_depth_of_target": 3.4,
                          "left_medium_sacks": 0,
                          "right_short_yards": 31,
                          "left_medium_first_downs": 1,
                          "no_blitz_grades_pass": 49.3,
                          "right_medium_positive_epa_percent": 50,
                          "screen_scrambles": 0,
                          "left_short_big_time_throws": 0,
                          "deep_turnover_worthy_plays": 1,
                          "no_blitz_scrambles": 2,
                          "pressure_drop_rate": 16.7,
                          "left_deep_bats": 0,
                          "no_blitz_yards": 277,
                          "left_medium_turnover_worthy_plays": 0,
                          "screen_grades_pass": 60.9,
                          "center_deep_drops": 0,
                          "center_medium_avg_depth_of_target": 12.5,
                          "sacks": 7,
                          "pressure_pressure_to_sack_rate": 35,
                          "center_behind_los_ypa": 3.5,
                          "right_short_attempts": 7,
                          "center_medium_completion_percent": 50,
                          "no_blitz_grades_hands_fumble": 81.1,
                          "right_short_sack_percent": 0,
                          "left_behind_los_avg_depth_of_target": -3,
                          "center_medium_epa": 0.13,
                          "center_behind_los_sack_percent": 0,
                          "npa_qb_rating": 57,
                          "no_pressure_grades_offense": 67,
                          "medium_completions": 6,
                          "no_screen_grades_pass": 52.2,
                          "medium_sack_percent": 0,
                          "left_short_grades_pass": 57.4,
                          "deep_btt_rate": 0,
                          "pa_avg_time_to_throw": 2.36,
                          "left_short_accuracy_percent": 50,
                          "no_pressure_avg_time_to_throw": 2.54,
                          "screen_twp_rate": 0,
                          "pressure_dropbacks": 20,
                          "short_twp_rate": 0,
                          "short_passing_snaps": 28,
                          "left_deep_sacks": 0,
                          "short_scrambles": 0,
                          "center_medium_turnover_worthy_plays": 1,
                          "no_blitz_grades_offense_penalty": 78.4,
                          "behind_los_drop_rate": 0,
                          "right_behind_los_epa": 0.65,
                          "right_medium_aimed_passes": 4,
                          "no_pressure_grades_run": 67.3,
                          "short_accuracy_percent": 84.6,
                          "player_game_count": 1,
                          "short_btt_rate": 0,
                          "right_short_touchdowns": 2,
                          "center_short_completions": 13,
                          "right_short_spikes": 0,
                          "behind_los_first_downs": 2,
                          "right_medium_def_gen_pressures": 1,
                          "blitz_turnover_worthy_plays": 1,
                          "deep_pressure_to_sack_rate": 0,
                          "npa_accuracy_percent": 68.2,
                          "no_blitz_touchdowns": 1,
                          "no_blitz_avg_depth_of_target": 7.8,
                          "medium_qb_rating": 36.2,
                          "short_completion_percent": 80.8,
                          "right_deep_attempts_percent": 3.8,
                          "no_pressure_dropbacks_percent": 69.2,
                          "blitz_grades_pass": 66.4,
                          "eligible_season": 2020,
                          "short_big_time_throws": 0,
                          "behind_los_attempts": 5,
                          "blitz_avg_depth_of_target": 8.7,
                          "no_blitz_spikes": 0,
                          "center_behind_los_yards": 7,
                          "npa_drops": 2,
                          "center_behind_los_bats": 0,
                          "center_behind_los_qb_rating": 81.3,
                          "right_deep_pressure_to_sack_rate": null,
                          "center_short_accuracy_percent": 93.3,
                          "left_behind_los_bats": 0,
                          "no_pressure_dropbacks": 45,
                          "center_deep_passing_snaps": 2,
                          "right_behind_los_hit_as_threw": 0,
                          "medium_bats": 0,
                          "right_medium_first_downs": 2,
                          "completions": 33,
                          "medium_spikes": 0,
                          "left_deep_thrown_aways": 0,
                          "screen_yards": 13,
                          "right_deep_epa": -0.46,
                          "center_medium_hit_as_threw": 0,
                          "left_behind_los_completion_percent": 100,
                          "blitz_btt_rate": 0,
                          "no_screen_drop_rate": 6.3,
                          "center_short_ypa": 8,
                          "right_short_drop_rate": 0,
                          "right_behind_los_accuracy_percent": 100,
                          "blitz_positive_epa_percent": 46.7,
                          "no_pressure_btt_rate": 0,
                          "left_short_yards": 16,
                          "deep_accuracy_percent": 20,
                          "right_behind_los_avg_depth_of_target": -1.5,
                          "center_behind_los_thrown_aways": 0,
                          "center_behind_los_attempts_percent": 3.8,
                          "no_screen_grades_offense_penalty": 80.5,
                          "right_deep_first_downs": 0,
                          "left_short_completions": 2,
                          "deep_completion_percent": 20,
                          "left_deep_positive_epa_percent": 0,
                          "npa_passing_snaps": 63,
                          "screen_drop_rate": 0,
                          "screen_epa": -0.29,
                          "no_pressure_drop_rate": 3.4,
                          "no_blitz_turnover_worthy_plays": 3,
                          "yards": 338,
                          "right_deep_sack_percent": 0,
                          "behind_los_pressure_to_sack_rate": 0,
                          "screen_grades_offense_penalty": 69.2,
                          "right_deep_touchdowns": 0,
                          "npa_spikes": 0,
                          "pressure_positive_epa_percent": 30,
                          "screen_hit_as_threw": 0,
                          "left_behind_los_def_gen_pressures": 0,
                          "left_behind_los_drops": 0,
                          "deep_epa": -0.51,
                          "left_deep_ypa": 0,
                          "medium_touchdowns": 0,
                          "no_screen_aimed_passes": 46,
                          "screen_drops": 0,
                          "left_medium_grades_pass": 60.6,
                          "accuracy_percent": 71.4,
                          "right_behind_los_spikes": 0,
                          "screen_ypa": 3.3,
                          "medium_grades_pass": 39.2,
                          "blitz_first_downs": 6,
                          "npa_twp_rate": 6.3,
                          "behind_los_passing_snaps": 5,
                          "left_short_first_downs": 2,
                          "center_short_passing_snaps": 15,
                          "center_deep_accuracy_percent": 50,
                          "right_deep_positive_epa_percent": 0,
                          "right_medium_sack_percent": 0,
                          "right_deep_qb_rating": 39.6,
                          "no_blitz_dropbacks_percent": 76.9,
                          "right_short_completion_percent": 85.7,
                          "screen_accuracy_percent": 100,
                          "right_behind_los_interceptions": 0,
                          "behind_los_yards": 39,
                          "center_behind_los_grades_pass": 62.1,
                          "left_deep_dropbacks": 1,
                          "npa_hit_as_threw": 1,
                          "center_behind_los_spikes": 0,
                          "scrambles": 5,
                          "right_behind_los_aimed_passes": 2,
                          "left_short_interceptions": 0,
                          "right_medium_interceptions": 1,
                          "left_behind_los_yards": 11,
                          "pa_accuracy_percent": 100,
                          "center_deep_btt_rate": 0,
                          "pressure_turnover_worthy_plays": 2,
                          "medium_first_downs": 6,
                          "no_pressure_epa": 0.14,
                          "left_short_avg_depth_of_target": 6.5,
                          "left_behind_los_ypa": 11,
                          "short_attempts": 26,
                          "right_medium_bats": 0,
                          "no_blitz_avg_time_to_throw": 2.58,
                          "left_behind_los_touchdowns": 0,
                          "pa_def_gen_pressures": 2,
                          "right_medium_dropbacks": 4,
                          "interceptions": 4,
                          "screen_avg_depth_of_target": -1.7,
                          "pa_sacks": 1,
                          "short_turnover_worthy_plays": 0,
                          "screen_passing_snaps": 4,
                          "right_deep_thrown_aways": 0,
                          "drop_rate": 5.7,
                          "right_behind_los_drop_rate": 0,
                          "no_screen_grades_run": 66.3,
                          "right_short_qb_rating": 85.1,
                          "medium_sacks": 0,
                          "center_deep_attempts_percent": 3.8,
                          "left_short_dropbacks": 4,
                          "behind_los_drops": 0,
                          "short_sack_percent": 0,
                          "no_screen_first_downs": 23,
                          "no_blitz_positive_epa_percent": 46,
                          "left_medium_spikes": 0,
                          "left_medium_accuracy_percent": 33.3,
                          "pressure_btt_rate": 0,
                          "pa_ypa": 7.4,
                          "behind_los_completions": 5,
                          "npa_scrambles": 5,
                          "no_pressure_aimed_passes": 40,
                          "pressure_dropbacks_percent": 30.8,
                          "grades_run": 66.3,
                          "behind_los_sack_percent": 0,
                          "left_deep_yards": 0,
                          "left_short_aimed_passes": 4,
                          "npa_pressure_to_sack_rate": 33.3,
                          "center_behind_los_completions": 2,
                          "pa_twp_rate": 0,
                          "no_pressure_def_gen_pressures": 0,
                          "left_short_thrown_aways": 0,
                          "pressure_grades_offense": 30.7,
                          "left_short_sack_percent": 0,
                          "center_short_thrown_aways": 0,
                          "center_short_interceptions": 0,
                          "short_avg_depth_of_target": 4,
                          "pressure_completion_percent": 45.5,
                          "left_deep_touchdowns": 0,
                          "deep_yards": 22,
                          "center_behind_los_turnover_worthy_plays": 0,
                          "medium_ypa": 8.5,
                          "left_medium_epa": 0.33,
                          "left_deep_avg_depth_of_target": 22,
                          "deep_first_downs": 1,
                          "pressure_avg_depth_of_target": 7.8,
                          "short_drop_rate": 4.5,
                          "left_medium_bats": 0,
                          "blitz_epa": -0.17,
                          "center_deep_spikes": 0,
                          "center_short_hit_as_threw": 0,
                          "left_medium_positive_epa_percent": 33.3,
                          "center_deep_touchdowns": 0,
                          "right_deep_ypa": 0,
                          "right_short_big_time_throws": 0,
                          "center_short_big_time_throws": 0,
                          "short_positive_epa_percent": 61.5,
                          "no_screen_twp_rate": 6,
                          "left_behind_los_avg_time_to_throw": 2.3,
                          "right_deep_passing_snaps": 3,
                          "pressure_drops": 1,
                          "right_short_twp_rate": 0,
                          "center_medium_attempts": 6,
                          "right_deep_avg_time_to_throw": 2.3,
                          "no_blitz_def_gen_pressures": 11,
                          "center_deep_def_gen_pressures": 0,
                          "pressure_attempts": 11,
                          "npa_grades_hands_fumble": 39.6,
                          "behind_los_epa": 0.34,
                          "right_medium_twp_rate": 25,
                          "right_deep_aimed_passes": 2,
                          "right_deep_scrambles": 0,
                          "deep_big_time_throws": 0,
                          "left_short_turnover_worthy_plays": 0,
                          "qb_rating": 61.7,
                          "center_short_touchdowns": 0,
                          "right_medium_drops": 0,
                          "left_deep_epa": -0.25,
                          "pressure_big_time_throws": 0,
                          "no_blitz_thrown_aways": 0,
                          "short_ypa": 6.4,
                          "medium_pressure_to_sack_rate": 0,
                          "left_medium_thrown_aways": 0,
                          "right_behind_los_avg_time_to_throw": 1.75,
                          "completion_percent": 62.3,
                          "blitz_drops": 2,
                          "behind_los_btt_rate": 0,
                          "screen_completions": 3,
                          "screen_btt_rate": 0,
                          "npa_grades_run": 66.3,
                          "no_pressure_touchdowns": 1,
                          "no_screen_interceptions": 4,
                          "medium_avg_time_to_throw": 2.77,
                          "center_deep_completion_percent": 50,
                          "behind_los_avg_time_to_throw": 2.02,
                          "right_medium_touchdowns": 0,
                          "no_pressure_sacks": 0,
                          "center_short_avg_time_to_throw": 2.48,
                          "npa_grades_run_block": 60,
                          "left_deep_aimed_passes": 1,
                          "left_medium_yards": 12,
                          "center_medium_touchdowns": 0,
                          "blitz_sack_percent": 26.7,
                          "no_screen_sacks": 7,
                          "center_short_drop_rate": 7.1,
                          "left_short_twp_rate": 0,
                          "pressure_sack_percent": 35,
                          "no_pressure_attempts": 42,
                          "right_behind_los_attempts_percent": 3.8,
                          "no_blitz_grades_offense": 49.5,
                          "attempts": 53,
                          "blitz_scrambles": 3,
                          "right_deep_avg_depth_of_target": 22.5,
                          "behind_los_sacks": 0,
                          "center_deep_yards": 22,
                          "short_dropbacks": 26,
                          "no_screen_big_time_throws": 0,
                          "left_deep_sack_percent": 0,
                          "center_behind_los_avg_time_to_throw": 2.15,
                          "blitz_dropbacks_percent": 23.1,
                          "behind_los_avg_depth_of_target": -2.2,
                          "left_behind_los_epa": 0.58,
                          "medium_twp_rate": 14.3,
                          "left_short_def_gen_pressures": 0,
                          "npa_drop_rate": 6.7,
                          "medium_turnover_worthy_plays": 2,
                          "behind_los_twp_rate": 0,
                          "left_behind_los_thrown_aways": 0,
                          "left_short_bats": 0,
                          "center_medium_drop_rate": 25,
                          "npa_attempts": 46,
                          "right_deep_bats": 0,
                          "screen_qb_rating": 78.1,
                          "medium_yards": 110,
                          "center_deep_grades_pass": 52.5,
                          "center_medium_passing_snaps": 7,
                          "center_behind_los_first_downs": 0,
                          "npa_grades_offense_penalty": 80.3,
                          "no_pressure_qb_rating": 63.8,
                          "center_medium_interceptions": 1,
                          "pa_bats": 2,
                          "pa_attempts": 7,
                          "behind_los_grades_pass": 64.9,
                          "no_blitz_passing_snaps": 56,
                          "npa_def_gen_pressures": 18,
                          "left_short_hit_as_threw": 0,
                          "deep_qb_rating": 5.8,
                          "no_blitz_aimed_passes": 42,
                          "blitz_yards": 61,
                          "no_screen_avg_time_to_throw": 2.7,
                          "center_deep_bats": 0,
                          "behind_los_ypa": 7.8,
                          "pa_yards": 52,
                          "right_short_interceptions": 1,
                          "left_deep_interceptions": 0,
                          "right_medium_sacks": 0,
                          "npa_positive_epa_percent": 47.4,
                          "right_behind_los_turnover_worthy_plays": 0,
                          "team": "CIN",
                          "no_screen_scrambles": 5,
                          "pa_turnover_worthy_plays": 0,
                          "right_medium_spikes": 0,
                          "behind_los_hit_as_threw": 0,
                          "no_blitz_attempts": 45,
                          "pressure_accuracy_percent": 66.7,
                          "left_medium_pressure_to_sack_rate": null,
                          "medium_dropbacks": 13,
                          "deep_hit_as_threw": 0,
                          "no_blitz_hit_as_threw": 1,
                          "right_medium_completion_percent": 50,
                          "pressure_hit_as_threw": 1,
                          "short_epa": 0.18,
                          "deep_drop_rate": 0,
                          "blitz_pressure_to_sack_rate": 44.4,
                          "pa_aimed_passes": 5,
                          "deep_scrambles": 0,
                          "pa_grades_offense": 72.4,
                          "screen_positive_epa_percent": 25,
                          "left_deep_completion_percent": 0,
                          "no_screen_dropbacks": 61,
                          "right_short_epa": 0.37,
                          "no_screen_dropbacks_percent": 93.8,
                          "no_blitz_btt_rate": 0,
                          "medium_attempts_percent": 24.5,
                          "right_behind_los_completion_percent": 100,
                          "left_medium_hit_as_threw": 0,
                          "left_behind_los_pressure_to_sack_rate": null,
                          "right_short_def_gen_pressures": 1,
                          "no_blitz_ypa": 6.2,
                          "right_short_attempts_percent": 13.2,
                          "center_short_aimed_passes": 15,
                          "npa_sack_percent": 10.5,
                          "short_hit_as_threw": 0,
                          "blitz_grades_run": 68.5,
                          "right_medium_turnover_worthy_plays": 1,
                          "left_short_epa": -0.74,
                          "center_behind_los_pressure_to_sack_rate": null,
                          "pa_positive_epa_percent": 37.5,
                          "pressure_interceptions": 1,
                          "right_behind_los_ypa": 10.5,
                          "deep_interceptions": 1,
                          "left_medium_twp_rate": 0,
                          "blitz_grades_hands_fumble": 20.7,
                          "passing_snaps": 71,
                          "pa_grades_run_block": null,
                          "pressure_to_sack_rate": 35,
                          "ypa": 6.4,
                          "right_behind_los_big_time_throws": 0,
                          "center_medium_sack_percent": 0,
                          "drops": 2,
                          "center_deep_thrown_aways": 0,
                          "short_thrown_aways": 0,
                          "left_short_btt_rate": 0,
                          "no_screen_turnover_worthy_plays": 4,
                          "no_pressure_grades_offense_penalty": 77.9,
                          "right_medium_accuracy_percent": 50,
                          "position": "QB",
                          "short_def_gen_pressures": 4,
                          "center_deep_dropbacks": 2,
                          "center_medium_accuracy_percent": 66.7,
                          "blitz_grades_offense": 71,
                          "right_behind_los_yards": 21,
                          "right_medium_attempts": 4,
                          "grades_hands_fumble": 43.8,
                          "left_medium_attempts": 3,
                          "npa_epa": -0.19,
                          "no_screen_avg_depth_of_target": 8.5,
                          "medium_accuracy_percent": 53.8,
                          "left_medium_drops": 0,
                          "pa_grades_hands_fumble": 70.3,
                          "no_screen_completion_percent": 61.2,
                          "left_short_avg_time_to_throw": 2.6,
                          "pa_hit_as_threw": 0,
                          "medium_passing_snaps": 14,
                          "center_short_epa": 0.34,
                          "left_behind_los_passing_snaps": 1,
                          "left_deep_pressure_to_sack_rate": 0,
                          "avg_time_to_throw": 2.64,
                          "pa_grades_offense_penalty": 71.5,
                          "deep_bats": 0,
                          "npa_dropbacks_percent": 87.7,
                          "left_medium_passing_snaps": 3,
                          "pressure_def_gen_pressures": 20,
                          "left_medium_scrambles": 0,
                          "npa_grades_pass": 49.4,
                          "pressure_grades_pass": 29.3,
                          "right_deep_completion_percent": 0,
                          "big_time_throws": 0,
                          "screen_grades_run": null,
                          "left_short_drops": 0,
                          "screen_first_downs": 1,
                          "npa_completion_percent": 60.9,
                          "left_deep_accuracy_percent": 0,
                          "medium_positive_epa_percent": 46.2,
                          "no_blitz_qb_rating": 50,
                          "blitz_hit_as_threw": 0,
                          "behind_los_turnover_worthy_plays": 0,
                          "right_medium_epa": -0.94,
                          "right_deep_dropbacks": 2,
                          "deep_ypa": 4.4,
                          "center_medium_completions": 3,
                          "left_medium_avg_time_to_throw": 2.33,
                          "left_short_sacks": 0,
                          "left_behind_los_spikes": 0,
                          "no_screen_grades_run_block": 60,
                          "pressure_ypa": 5.1,
                          "left_deep_def_gen_pressures": 1,
                          "no_screen_hit_as_threw": 1,
                          "center_short_qb_rating": 100,
                          "center_deep_interceptions": 1,
                          "right_deep_completions": 0,
                          "center_behind_los_sacks": 0,
                          "screen_turnover_worthy_plays": 0,
                          "deep_completions": 1,
                          "left_medium_attempts_percent": 5.7,
                          "pressure_avg_time_to_throw": 2.86,
                          "short_yards": 167,
                          "behind_los_qb_rating": 99.2,
                          "right_short_sacks": 0,
                          "right_behind_los_thrown_aways": 0,
                          "center_short_spikes": 0,
                          "center_behind_los_hit_as_threw": 0,
                          "no_blitz_completions": 28,
                          "center_deep_turnover_worthy_plays": 1,
                          "left_medium_sack_percent": 0,
                          "behind_los_completion_percent": 100,
                          "left_deep_attempts_percent": 1.9,
                          "no_pressure_sack_percent": 0,
                          "center_deep_big_time_throws": 0,
                          "npa_avg_depth_of_target": 8.1,
                          "npa_dropbacks": 57,
                          "player": "Joe Burrow",
                          "left_medium_avg_depth_of_target": 12.7,
                          "no_blitz_accuracy_percent": 66.7,
                          "behind_los_thrown_aways": 0,
                          "center_medium_def_gen_pressures": 2,
                          "short_avg_time_to_throw": 2.37,
                          "left_deep_twp_rate": 0,
                          "center_behind_los_epa": -0.08,
                          "left_behind_los_big_time_throws": 0,
                          "pa_drops": 0,
                          "no_pressure_pressure_to_sack_rate": null,
                          "right_medium_yards": 35,
                          "pa_btt_rate": 0,
                          "no_pressure_turnover_worthy_plays": 2,
                          "pressure_first_downs": 3,
                          "positive_epa_percent": 46.2,
                          "right_medium_drop_rate": 0,
                          "blitz_passing_snaps": 15,
                          "center_medium_big_time_throws": 0,
                          "franchise_id": 7,
                          "left_short_completion_percent": 50,
                          "screen_big_time_throws": 0,
                          "left_short_drop_rate": 0,
                          "left_behind_los_scrambles": 0,
                          "left_medium_btt_rate": 0,
                          "screen_aimed_passes": 3,
                          "right_deep_hit_as_threw": 0,
                          "behind_los_bats": 0,
                          "no_pressure_twp_rate": 4.1,
                          "npa_touchdowns": 2,
                          "no_blitz_sacks": 3,
                          "short_first_downs": 13,
                          "left_deep_attempts": 1,
                          "right_behind_los_attempts": 2,
                          "screen_attempts": 4,
                          "screen_dropbacks": 4,
                          "right_deep_sacks": 0,
                          "left_behind_los_attempts_percent": 1.9,
                          "behind_los_big_time_throws": 0,
                          "center_deep_pressure_to_sack_rate": null,
                          "left_medium_big_time_throws": 0,
                          "right_behind_los_bats": 0,
                          "left_medium_def_gen_pressures": 0,
                          "no_screen_yards": 325,
                          "right_deep_turnover_worthy_plays": 0,
                          "left_short_spikes": 0,
                          "left_medium_aimed_passes": 3,
                          "left_behind_los_twp_rate": 0,
                          "short_grades_pass": 81.4,
                          "right_short_drops": 0,
                          "right_short_avg_time_to_throw": 2,
                          "pa_scrambles": 0,
                          "right_medium_thrown_aways": 0,
                          "no_pressure_accuracy_percent": 72.5,
                          "center_short_sack_percent": 0,
                          "right_short_passing_snaps": 7,
                          "center_short_def_gen_pressures": 3,
                          "center_medium_positive_epa_percent": 50,
                          "medium_drops": 1,
                          "center_medium_aimed_passes": 6,
                          "center_short_sacks": 0,
                          "pa_completion_percent": 71.4,
                          "deep_attempts_percent": 9.4,
                          "center_behind_los_def_gen_pressures": 0,
                          "left_short_passing_snaps": 6,
                          "center_medium_grades_pass": 57.1,
                          "center_deep_avg_time_to_throw": 3.2,
                          "pa_avg_depth_of_target": 5.8,
                          "pa_interceptions": 0,
                          "no_screen_accuracy_percent": 69.6,
                          "behind_los_positive_epa_percent": 80,
                          "no_screen_spikes": 0,
                          "center_short_completion_percent": 86.7,
                          "pa_dropbacks": 8,
                          "left_deep_hit_as_threw": 0,
                          "center_short_grades_pass": 83.6,
                          "left_short_attempts_percent": 7.5,
                          "left_deep_scrambles": 0,
                          "no_blitz_twp_rate": 5.4,
                          "no_pressure_hit_as_threw": 0,
                          "right_short_completions": 6,
                          "center_behind_los_aimed_passes": 2,
                          "right_short_scrambles": 0,
                          "center_medium_qb_rating": 47.9,
                          "no_pressure_grades_pass": 64.9,
                          "npa_big_time_throws": 0,
                          "deep_avg_time_to_throw": 2.58,
                          "no_screen_sack_percent": 11.5,
                          "avg_depth_of_target": 7.9,
                          "no_pressure_positive_epa_percent": 53.3,
                          "turnover_worthy_plays": 4,
                          "epa": -0.2,
                          "pressure_spikes": 0,
                          "pressure_grades_hands_fumble": 23.4,
                          "left_deep_drops": 0,
                          "right_behind_los_def_gen_pressures": 1,
                          "pa_epa": -0.27,
                          "pressure_qb_rating": 53.6,
                          "center_deep_positive_epa_percent": 50,
                          "center_deep_hit_as_threw": 0,
                          "no_screen_attempts": 49,
                          "pa_passing_snaps": 8,
                          "aimed_passes": 49,
                          "blitz_bats": 0,
                          "pressure_touchdowns": 1,
                          "npa_completions": 28,
                          "short_spikes": 0,
                          "pressure_thrown_aways": 1,
                          "right_behind_los_completions": 2,
                          "no_blitz_interceptions": 4,
                          "center_behind_los_drop_rate": 0,
                          "short_drops": 1,
                          "deep_aimed_passes": 5,
                          "right_medium_avg_depth_of_target": 16.3,
                          "short_pressure_to_sack_rate": 0,
                          "screen_touchdowns": 0,
                          "center_deep_qb_rating": 50,
                          "left_medium_completions": 1,
                          "center_deep_sacks": 0,
                          "left_deep_big_time_throws": 0,
                          "blitz_dropbacks": 15,
                          "center_medium_first_downs": 3,
                          "center_medium_dropbacks": 6,
                          "blitz_def_gen_pressures": 9,
                          "npa_first_downs": 21,
                          "no_screen_touchdowns": 2,
                          "right_deep_def_gen_pressures": 0,
                          "left_short_touchdowns": 0,
                          "medium_drop_rate": 14.3,
                          "player_id": 28022,
                          "npa_yards": 286,
                          "left_medium_ypa": 4,
                          "right_medium_passing_snaps": 4,
                          "no_screen_ypa": 6.6,
                          "no_blitz_big_time_throws": 0,
                          "center_short_scrambles": 0,
                          "npa_turnover_worthy_plays": 4,
                          "left_behind_los_turnover_worthy_plays": 0,
                          "center_medium_yards": 63,
                          "center_deep_epa": -0.68,
                          "npa_interceptions": 4,
                          "left_medium_interceptions": 0,
                          "right_deep_interceptions": 0,
                          "no_pressure_avg_depth_of_target": 7.9,
                          "touchdowns": 2,
                          "medium_completion_percent": 46.2,
                          "right_behind_los_grades_pass": 62.1,
                          "deep_positive_epa_percent": 20,
                          "no_screen_pressure_to_sack_rate": 35,
                          "behind_los_accuracy_percent": 100,
                          "center_deep_scrambles": 0,
                          "center_short_twp_rate": 0,
                          "behind_los_touchdowns": 0,
                          "left_medium_qb_rating": 46.5,
                          "no_pressure_yards": 282,
                          "screen_sacks": 0,
                          "def_gen_pressures": 20,
                          "right_medium_completions": 2,
                          "right_behind_los_drops": 0,
                          "left_behind_los_first_downs": 1,
                          "blitz_twp_rate": 6.7,
                          "short_qb_rating": 103,
                          "blitz_accuracy_percent": 100,
                          "center_medium_btt_rate": 0,
                          "no_pressure_big_time_throws": 0,
                          "left_deep_grades_pass": 49.2
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBodyHeaderless"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/passing/detail?league=nfl&season=2022&week=1&franchise_id=7&export=true`, complete.",
                    "value": "\r\n\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/passing/pressure": {
      "get": {
        "operationId": "facet-passing-pressure",
        "summary": "League-wide passing-under-pressure leaderboard",
        "description": "Every qualifying passer in the league, split by whether the pocket held. Two complete requests\nexist: `--league` with `--season` (a year, or a comma-separated list such as `2023,2024`), or\n`--game` alone (an id from `ref-games`) — anything less is refused with `400 invalid_parameter`.\nNarrow with `--week` and `--franchise`. `--division` fans the request out across NCAA divisions and\nis ignored for every other league. Grades are on PFF's 0-100 scale and every other column is a raw\ntotal or rate; which columns come back depends on the report, the position and the caller's\nentitlement. Add `--export true` for the raw CSV instead of JSON.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `passing_pressure.csv` instead\nof JSON.",
        "tags": [
          "facet"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `passing_pressure.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"passing_pressure.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetPassingPressureResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/passing/pressure?league=nfl&season=2022&week=1&franchise_id=7`, complete.",
                    "value": {
                      "passing_pressure": [
                        {
                          "no_blitz_completion_percent": 62.2,
                          "grades_offense": 54.8,
                          "no_pressure_scrambles": 3,
                          "blitz_touchdowns": 1,
                          "pressure_yards": 56,
                          "no_pressure_spikes": 0,
                          "blitz_ypa": 7.6,
                          "no_blitz_grades_run": 62.9,
                          "blitz_qb_rating": 125.5,
                          "no_pressure_thrown_aways": 0,
                          "no_blitz_bats": 2,
                          "no_blitz_drops": 0,
                          "no_pressure_completion_percent": 66.7,
                          "blitz_aimed_passes": 7,
                          "pressure_grades_run": 64.1,
                          "no_blitz_sack_percent": 6,
                          "no_pressure_bats": 2,
                          "pressure_completions": 5,
                          "blitz_big_time_throws": 0,
                          "no_blitz_drop_rate": 0,
                          "blitz_spikes": 0,
                          "no_pressure_completions": 28,
                          "draft_season": 2020,
                          "no_pressure_passing_snaps": 49,
                          "no_blitz_first_downs": 18,
                          "blitz_avg_time_to_throw": 2.85,
                          "no_pressure_grades_hands_fumble": 80.3,
                          "pressure_aimed_passes": 9,
                          "blitz_sacks": 4,
                          "no_pressure_interceptions": 3,
                          "team_name": "CIN",
                          "pressure_epa": -0.95,
                          "blitz_completions": 5,
                          "blitz_attempts": 8,
                          "pressure_twp_rate": 9.1,
                          "pressure_sacks": 7,
                          "no_blitz_pressure_to_sack_rate": 27.3,
                          "no_pressure_ypa": 6.7,
                          "pressure_passing_snaps": 22,
                          "grades_pass": 52.6,
                          "pressure_bats": 0,
                          "blitz_thrown_aways": 1,
                          "no_pressure_drops": 1,
                          "jersey_number": "09",
                          "pressure_grades_offense_penalty": 75,
                          "pressure_scrambles": 2,
                          "blitz_drop_rate": 28.6,
                          "blitz_completion_percent": 62.5,
                          "no_pressure_first_downs": 21,
                          "blitz_grades_offense_penalty": 73.7,
                          "no_blitz_epa": -0.21,
                          "blitz_interceptions": 0,
                          "no_blitz_dropbacks": 50,
                          "no_blitz_grades_pass": 49.3,
                          "no_blitz_scrambles": 2,
                          "pressure_drop_rate": 16.7,
                          "no_blitz_yards": 277,
                          "base_dropbacks": 65,
                          "pressure_pressure_to_sack_rate": 35,
                          "no_blitz_grades_hands_fumble": 81.1,
                          "no_pressure_grades_offense": 67,
                          "no_pressure_avg_time_to_throw": 2.54,
                          "pressure_dropbacks": 20,
                          "no_blitz_grades_offense_penalty": 78.4,
                          "no_pressure_grades_run": 67.3,
                          "player_game_count": 1,
                          "blitz_turnover_worthy_plays": 1,
                          "no_blitz_touchdowns": 1,
                          "no_blitz_avg_depth_of_target": 7.8,
                          "no_pressure_dropbacks_percent": 69.2,
                          "blitz_grades_pass": 66.4,
                          "eligible_season": 2020,
                          "blitz_avg_depth_of_target": 8.7,
                          "no_blitz_spikes": 0,
                          "no_pressure_dropbacks": 45,
                          "blitz_btt_rate": 0,
                          "blitz_positive_epa_percent": 46.7,
                          "no_pressure_btt_rate": 0,
                          "no_pressure_drop_rate": 3.4,
                          "no_blitz_turnover_worthy_plays": 3,
                          "pressure_positive_epa_percent": 30,
                          "blitz_first_downs": 6,
                          "no_blitz_dropbacks_percent": 76.9,
                          "pressure_turnover_worthy_plays": 2,
                          "no_pressure_epa": 0.14,
                          "no_blitz_avg_time_to_throw": 2.58,
                          "no_blitz_positive_epa_percent": 46,
                          "pressure_btt_rate": 0,
                          "no_pressure_aimed_passes": 40,
                          "pressure_dropbacks_percent": 30.8,
                          "grades_run": 66.3,
                          "no_pressure_def_gen_pressures": 0,
                          "pressure_grades_offense": 30.7,
                          "pressure_completion_percent": 45.5,
                          "pressure_avg_depth_of_target": 7.8,
                          "blitz_epa": -0.17,
                          "pressure_drops": 1,
                          "no_blitz_def_gen_pressures": 11,
                          "pressure_attempts": 11,
                          "pressure_big_time_throws": 0,
                          "no_blitz_thrown_aways": 0,
                          "blitz_drops": 2,
                          "no_pressure_touchdowns": 1,
                          "no_pressure_sacks": 0,
                          "blitz_sack_percent": 26.7,
                          "pressure_sack_percent": 35,
                          "penalties": 0,
                          "no_pressure_attempts": 42,
                          "no_blitz_grades_offense": 49.5,
                          "blitz_scrambles": 3,
                          "blitz_dropbacks_percent": 23.1,
                          "no_pressure_qb_rating": 63.8,
                          "no_blitz_passing_snaps": 56,
                          "no_blitz_aimed_passes": 42,
                          "blitz_yards": 61,
                          "team": "CIN",
                          "no_blitz_attempts": 45,
                          "pressure_accuracy_percent": 66.7,
                          "no_blitz_hit_as_threw": 1,
                          "pressure_hit_as_threw": 1,
                          "blitz_pressure_to_sack_rate": 44.4,
                          "declined_penalties": 0,
                          "no_blitz_btt_rate": 0,
                          "no_blitz_ypa": 6.2,
                          "blitz_grades_run": 68.5,
                          "pressure_interceptions": 1,
                          "blitz_grades_hands_fumble": 20.7,
                          "no_pressure_grades_offense_penalty": 77.9,
                          "position": "QB",
                          "blitz_grades_offense": 71,
                          "grades_hands_fumble": 43.8,
                          "pressure_def_gen_pressures": 20,
                          "pressure_grades_pass": 29.3,
                          "no_blitz_qb_rating": 50,
                          "blitz_hit_as_threw": 0,
                          "pressure_ypa": 5.1,
                          "pressure_avg_time_to_throw": 2.86,
                          "no_blitz_completions": 28,
                          "no_pressure_sack_percent": 0,
                          "player": "Joe Burrow",
                          "no_blitz_accuracy_percent": 66.7,
                          "no_pressure_pressure_to_sack_rate": null,
                          "no_pressure_turnover_worthy_plays": 2,
                          "pressure_first_downs": 3,
                          "blitz_passing_snaps": 15,
                          "franchise_id": 7,
                          "no_pressure_twp_rate": 4.1,
                          "no_blitz_sacks": 3,
                          "no_pressure_accuracy_percent": 72.5,
                          "no_blitz_twp_rate": 5.4,
                          "no_pressure_hit_as_threw": 0,
                          "no_pressure_grades_pass": 64.9,
                          "no_pressure_positive_epa_percent": 53.3,
                          "pressure_spikes": 0,
                          "pressure_grades_hands_fumble": 23.4,
                          "pressure_qb_rating": 53.6,
                          "blitz_bats": 0,
                          "pressure_touchdowns": 1,
                          "pressure_thrown_aways": 1,
                          "no_blitz_interceptions": 4,
                          "blitz_dropbacks": 15,
                          "blitz_def_gen_pressures": 9,
                          "player_id": 28022,
                          "no_blitz_big_time_throws": 0,
                          "no_pressure_avg_depth_of_target": 7.9,
                          "no_pressure_yards": 282,
                          "blitz_twp_rate": 6.7,
                          "blitz_accuracy_percent": 100,
                          "no_pressure_big_time_throws": 0
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/passing/pressure?league=nfl&season=2022&week=1&franchise_id=7&export=true`, complete.",
                    "value": "player,player_id,position,team_name,player_game_count,base_dropbacks,blitz_accuracy_percent,blitz_aimed_passes,blitz_attempts,blitz_avg_depth_of_target,blitz_avg_time_to_throw,blitz_bats,blitz_big_time_throws,blitz_btt_rate,blitz_completion_percent,blitz_completions,blitz_def_gen_pressures,blitz_drop_rate,blitz_dropbacks,blitz_dropbacks_percent,blitz_drops,blitz_epa,blitz_first_downs,blitz_grades_hands_fumble,blitz_grades_offense,blitz_grades_offense_penalty,blitz_grades_pass,blitz_grades_run,blitz_hit_as_threw,blitz_interceptions,blitz_passing_snaps,blitz_positive_epa_percent,blitz_pressure_to_sack_rate,blitz_qb_rating,blitz_sack_percent,blitz_sacks,blitz_scrambles,blitz_spikes,blitz_thrown_aways,blitz_touchdowns,blitz_turnover_worthy_plays,blitz_twp_rate,blitz_yards,blitz_ypa,declined_penalties,franchise_id,grades_hands_fumble,grades_offense,grades_pass,grades_run,no_blitz_accuracy_percent,no_blitz_aimed_passes,no_blitz_attempts,no_blitz_avg_depth_of_target,no_blitz_avg_time_to_throw,no_blitz_bats,no_blitz_big_time_throws,no_blitz_btt_rate,no_blitz_completion_percent,no_blitz_completions,no_blitz_def_gen_pressures,no_blitz_drop_rate,no_blitz_dropbacks,no_blitz_dropbacks_percent,no_blitz_drops,no_blitz_epa,no_blitz_first_downs,no_blitz_grades_hands_fumble,no_blitz_grades_offense,no_blitz_grades_offense_penalty,no_blitz_grades_pass,no_blitz_grades_run,no_blitz_hit_as_threw,no_blitz_interceptions,no_blitz_passing_snaps,no_blitz_positive_epa_percent,no_blitz_pressure_to_sack_rate,no_blitz_qb_rating,no_blitz_sack_percent,no_blitz_sacks,no_blitz_scrambles,no_blitz_spikes,no_blitz_thrown_aways,no_blitz_touchdowns,no_blitz_turnover_worthy_plays,no_blitz_twp_rate,no_blitz_yards,no_blitz_ypa,no_pressure_accuracy_percent,no_pressure_aimed_passes,no_pressure_attempts,no_pressure_avg_depth_of_target,no_pressure_avg_time_to_throw,no_pressure_bats,no_pressure_big_time_throws,no_pressure_btt_rate,no_pressure_completion_percent,no_pressure_completions,no_pressure_def_gen_pressures,no_pressure_drop_rate,no_pressure_dropbacks,no_pressure_dropbacks_percent,no_pressure_drops,no_pressure_epa,no_pressure_first_downs,no_pressure_grades_hands_fumble,no_pressure_grades_offense,no_pressure_grades_offense_penalty,no_pressure_grades_pass,no_pressure_grades_run,no_pressure_hit_as_threw,no_pressure_interceptions,no_pressure_passing_snaps,no_pressure_positive_epa_percent,no_pressure_pressure_to_sack_rate,no_pressure_qb_rating,no_pressure_sack_percent,no_pressure_sacks,no_pressure_scrambles,no_pressure_spikes,no_pressure_thrown_aways,no_pressure_touchdowns,no_pressure_turnover_worthy_plays,no_pressure_twp_rate,no_pressure_yards,no_pressure_ypa,penalties,pressure_accuracy_percent,pressure_aimed_passes,pressure_attempts,pressure_avg_depth_of_target,pressure_avg_time_to_throw,pressure_bats,pressure_big_time_throws,pressure_btt_rate,pressure_completion_percent,pressure_completions,pressure_def_gen_pressures,pressure_drop_rate,pressure_dropbacks,pressure_dropbacks_percent,pressure_drops,pressure_epa,pressure_first_downs,pressure_grades_hands_fumble,pressure_grades_offense,pressure_grades_offense_penalty,pressure_grades_pass,pressure_grades_run,pressure_hit_as_threw,pressure_interceptions,pressure_passing_snaps,pressure_positive_epa_percent,pressure_pressure_to_sack_rate,pressure_qb_rating,pressure_sack_percent,pressure_sacks,pressure_scrambles,pressure_spikes,pressure_thrown_aways,pressure_touchdowns,pressure_turnover_worthy_plays,pressure_twp_rate,pressure_yards,pressure_ypa\r\nJoe Burrow,28022,QB,CIN,1,65,100.0,7,8,8.7,2.85,0,0,0.0,62.5,5,9,28.6,15,23.1,2,-0.17,6,20.7,71.0,73.7,66.4,68.5,0,0,15,46.7,44.4,125.5,26.7,4,3,0,1,1,1,6.7,61,7.6,0,7,43.8,54.8,52.6,66.3,66.7,42,45,7.8,2.58,2,0,0.0,62.2,28,11,0.0,50,76.9,0,-0.21,18,81.1,49.5,78.4,49.3,62.9,1,4,56,46.0,27.3,50.0,6.0,3,2,0,0,1,3,5.4,277,6.2,72.5,40,42,7.9,2.54,2,0,0.0,66.7,28,0,3.4,45,69.2,1,0.14,21,80.3,67.0,77.9,64.9,67.3,0,3,49,53.3,,63.8,0.0,0,3,0,0,1,2,4.1,282,6.7,0,66.7,9,11,7.8,2.86,0,0,0.0,45.5,5,20,16.7,20,30.8,1,-0.95,3,23.4,30.7,75.0,29.3,64.1,1,1,22,30.0,35.0,53.6,35.0,7,2,0,1,1,2,9.1,56,5.1\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/passing/summary": {
      "get": {
        "operationId": "facet-passing-summary",
        "summary": "League-wide passing summary leaderboard",
        "description": "Every qualifying passer in the league, with attempts, yards, touchdowns and grades. Two complete\nrequests exist: `--league` with `--season` (a year, or a comma-separated list such as `2023,2024`),\nor `--game` alone (an id from `ref-games`) — anything less is refused with `400 invalid_parameter`.\nNarrow with `--week` and `--franchise`. `--division` fans the request out across NCAA divisions and\nis ignored for every other league. Grades are on PFF's 0-100 scale and every other column is a raw\ntotal or rate; which columns come back depends on the report, the position and the caller's\nentitlement. Add `--export true` for the raw CSV instead of JSON.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `passing_summary.csv` instead\nof JSON.",
        "tags": [
          "facet"
        ],
        "x-cli-aliases": [
          "passing"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `passing_summary.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"passing_summary.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetPassingSummaryResponse"
                },
                "examples": {
                  "game": {
                    "summary": "One game: Steelers at Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/passing/summary?game_id=23108`, complete.",
                    "value": {
                      "passing_summary": [
                        {
                          "grades_offense": 54.8,
                          "twp_rate": 5.6,
                          "btt_rate": 0,
                          "spikes": 0,
                          "dropbacks": 65,
                          "thrown_aways": 1,
                          "status": "S",
                          "grades_pass": 52.6,
                          "hit_as_threw": 1,
                          "first_downs": 24,
                          "jersey_number": "09",
                          "sack_percent": 10.8,
                          "bats": 2,
                          "sacks": 7,
                          "completions": 33,
                          "yards": 338,
                          "accuracy_percent": 71.4,
                          "scrambles": 5,
                          "interceptions": 4,
                          "drop_rate": 5.7,
                          "grades_run": 66.3,
                          "qb_rating": 61.7,
                          "completion_percent": 62.3,
                          "penalties": 0,
                          "attempts": 53,
                          "declined_penalties": 0,
                          "passing_snaps": 71,
                          "pressure_to_sack_rate": 35,
                          "ypa": 6.4,
                          "drops": 2,
                          "position": "QB",
                          "grades_hands_fumble": 43.8,
                          "avg_time_to_throw": 2.64,
                          "big_time_throws": 0,
                          "player": "Joe Burrow",
                          "positive_epa_percent": 46.2,
                          "franchise_id": 7,
                          "avg_depth_of_target": 7.9,
                          "turnover_worthy_plays": 4,
                          "epa": -0.2,
                          "aimed_passes": 49,
                          "player_id": 28022,
                          "touchdowns": 2,
                          "def_gen_pressures": 20
                        },
                        {
                          "grades_offense": 62,
                          "twp_rate": 2.3,
                          "btt_rate": 5.1,
                          "spikes": 1,
                          "dropbacks": 41,
                          "thrown_aways": 1,
                          "status": "S",
                          "grades_pass": 60.4,
                          "hit_as_threw": 2,
                          "first_downs": 9,
                          "jersey_number": "10",
                          "sack_percent": 2.4,
                          "bats": 1,
                          "sacks": 1,
                          "completions": 21,
                          "yards": 194,
                          "accuracy_percent": 63.6,
                          "scrambles": 2,
                          "interceptions": 0,
                          "drop_rate": 0,
                          "grades_run": 64.2,
                          "qb_rating": 78.2,
                          "completion_percent": 55.3,
                          "penalties": 0,
                          "attempts": 38,
                          "declined_penalties": 0,
                          "passing_snaps": 43,
                          "pressure_to_sack_rate": 7.1,
                          "ypa": 5.1,
                          "drops": 0,
                          "position": "QB",
                          "grades_hands_fumble": 79.7,
                          "avg_time_to_throw": 2.57,
                          "big_time_throws": 2,
                          "player": "Mitch Trubisky",
                          "positive_epa_percent": 41.5,
                          "franchise_id": 25,
                          "avg_depth_of_target": 8.5,
                          "turnover_worthy_plays": 1,
                          "epa": -0.16,
                          "aimed_passes": 33,
                          "player_id": 11757,
                          "touchdowns": 1,
                          "def_gen_pressures": 14
                        }
                      ]
                    }
                  },
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/passing/summary?league=nfl&season=2022&week=1&franchise_id=7`, complete.",
                    "value": {
                      "passing_summary": [
                        {
                          "grades_offense": 54.8,
                          "twp_rate": 5.6,
                          "btt_rate": 0,
                          "spikes": 0,
                          "dropbacks": 65,
                          "thrown_aways": 1,
                          "draft_season": 2020,
                          "team_name": "CIN",
                          "grades_pass": 52.6,
                          "hit_as_threw": 1,
                          "first_downs": 24,
                          "jersey_number": "09",
                          "sack_percent": 10.8,
                          "bats": 2,
                          "sacks": 7,
                          "player_game_count": 1,
                          "eligible_season": 2020,
                          "completions": 33,
                          "yards": 338,
                          "accuracy_percent": 71.4,
                          "scrambles": 5,
                          "interceptions": 4,
                          "drop_rate": 5.7,
                          "grades_run": 66.3,
                          "qb_rating": 61.7,
                          "completion_percent": 62.3,
                          "penalties": 0,
                          "attempts": 53,
                          "team": "CIN",
                          "declined_penalties": 0,
                          "passing_snaps": 71,
                          "pressure_to_sack_rate": 35,
                          "ypa": 6.4,
                          "drops": 2,
                          "position": "QB",
                          "grades_hands_fumble": 43.8,
                          "avg_time_to_throw": 2.64,
                          "big_time_throws": 0,
                          "player": "Joe Burrow",
                          "positive_epa_percent": 46.2,
                          "franchise_id": 7,
                          "avg_depth_of_target": 7.9,
                          "turnover_worthy_plays": 4,
                          "epa": -0.2,
                          "aimed_passes": 49,
                          "player_id": 28022,
                          "touchdowns": 2,
                          "def_gen_pressures": 20
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/passing/summary?league=nfl&season=2022&week=1&franchise_id=7&export=true`, complete.",
                    "value": "player,player_id,position,team_name,player_game_count,accuracy_percent,aimed_passes,attempts,avg_depth_of_target,avg_time_to_throw,bats,big_time_throws,btt_rate,completion_percent,completions,declined_penalties,def_gen_pressures,drop_rate,dropbacks,drops,epa,first_downs,franchise_id,grades_hands_fumble,grades_offense,grades_pass,grades_run,hit_as_threw,interceptions,passing_snaps,penalties,positive_epa_percent,pressure_to_sack_rate,qb_rating,sack_percent,sacks,scrambles,spikes,thrown_aways,touchdowns,turnover_worthy_plays,twp_rate,yards,ypa\r\nJoe Burrow,28022,QB,CIN,1,71.4,49,53,7.9,2.64,2,0,0.0,62.3,33,0,20,5.7,65,2,-0.2,24,7,43.8,54.8,52.6,66.3,1,4,71,0,46.2,35.0,61.7,10.8,7,5,0,1,2,4,5.6,338,6.4\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/receiving/concept": {
      "get": {
        "operationId": "facet-receiving-concept",
        "summary": "League-wide receiving-by-concept leaderboard",
        "description": "Every qualifying receiver in the league, split by play concept. Two complete requests exist:\n`--league` with `--season` (a year, or a comma-separated list such as `2023,2024`), or `--game`\nalone (an id from `ref-games`) — anything less is refused with `400 invalid_parameter`. Narrow with\n`--week` and `--franchise`. `--division` fans the request out across NCAA divisions and is ignored\nfor every other league. Grades are on PFF's 0-100 scale and every other column is a raw total or\nrate; which columns come back depends on the report, the position and the caller's entitlement. Add\n`--export true` for the raw CSV instead of JSON.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `receiving_concept.csv` instead\nof JSON.",
        "tags": [
          "facet"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `receiving_concept.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"receiving_concept.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetReceivingConceptResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/receiving/concept?league=nfl&season=2022&week=1&franchise_id=7`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "receiving_concept": [
                        {
                          "screen_caught_percent": 100,
                          "screen_targeted_qb_rating": 116.7,
                          "slot_grades_pass_route": 79.2,
                          "slot_avg_depth_of_target": 5.8,
                          "slot_positive_epa_percent": 43.8,
                          "screen_yprr": 3,
                          "draft_season": 2021,
                          "slot_routes": 16,
                          "team_name": "CIN",
                          "screen_grades_hands_drop": 78.7,
                          "jersey_number": "01",
                          "screen_contested_catch_rate": null,
                          "slot_yards_per_reception": 8.3,
                          "screen_interceptions": 0,
                          "slot_targets_percent": 25,
                          "screen_longest": 12,
                          "slot_avoided_tackles": 0,
                          "slot_yards_after_catch": 11,
                          "slot_grades_hands_drop": 69.6,
                          "player_game_count": 1,
                          "screen_contested_targets": 0,
                          "eligible_season": 2021,
                          "screen_yards_after_catch_per_reception": 13,
                          "screen_yards": 12,
                          "slot_route_rate": 94.1,
                          "screen_drop_rate": 0,
                          "screen_epa": -0.29,
                          "screen_grades_pass_route": 91.7,
                          "screen_drops": 0,
                          "screen_fumbles": 0,
                          "slot_interceptions": 0,
                          "screen_yards_after_catch": 13,
                          "screen_avg_depth_of_target": -1,
                          "screen_pass_block_rate": 0,
                          "slot_pass_block_rate": 0,
                          "slot_yprr": 1.56,
                          "base_targets": 15,
                          "slot_longest": 11,
                          "slot_drops": 0,
                          "screen_routes": 4,
                          "slot_fumbles": 0,
                          "penalties": 0,
                          "slot_contested_catch_rate": null,
                          "slot_pass_plays": 17,
                          "team": "CIN",
                          "declined_penalties": 0,
                          "screen_positive_epa_percent": 25,
                          "slot_first_downs": 3,
                          "screen_route_rate": 100,
                          "position": "WR",
                          "screen_pass_blocks": 0,
                          "slot_targets": 4,
                          "slot_pass_blocks": 0,
                          "slot_receptions": 3,
                          "screen_first_downs": 1,
                          "slot_caught_percent": 75,
                          "screen_avoided_tackles": 0,
                          "player": "Ja'Marr Chase",
                          "slot_epa": -0.01,
                          "slot_drop_rate": 0,
                          "franchise_id": 7,
                          "slot_touchdowns": 0,
                          "slot_yards_after_catch_per_reception": 3.7,
                          "screen_receptions": 1,
                          "slot_targeted_qb_rating": 90.6,
                          "slot_contested_targets": 0,
                          "screen_yards_per_reception": 12,
                          "slot_contested_receptions": 0,
                          "screen_pass_plays": 4,
                          "screen_contested_receptions": 0,
                          "screen_touchdowns": 0,
                          "screen_targets": 1,
                          "screen_targets_percent": 25,
                          "slot_yards": 25,
                          "player_id": 84270
                        },
                        {
                          "screen_caught_percent": 100,
                          "screen_targeted_qb_rating": 79.2,
                          "slot_grades_pass_route": 80.1,
                          "slot_avg_depth_of_target": 1,
                          "slot_positive_epa_percent": 50,
                          "screen_yprr": 0,
                          "draft_season": 2017,
                          "slot_routes": 2,
                          "team_name": "CIN",
                          "screen_grades_hands_drop": 78.7,
                          "jersey_number": "28",
                          "screen_contested_catch_rate": null,
                          "slot_yards_per_reception": 9,
                          "screen_interceptions": 0,
                          "slot_targets_percent": 50,
                          "screen_longest": 0,
                          "slot_avoided_tackles": 0,
                          "slot_yards_after_catch": 8,
                          "slot_grades_hands_drop": 79.4,
                          "player_game_count": 1,
                          "screen_contested_targets": 0,
                          "eligible_season": 2017,
                          "screen_yards_after_catch_per_reception": 4,
                          "screen_yards": 0,
                          "slot_route_rate": 100,
                          "screen_drop_rate": 0,
                          "screen_epa": -0.29,
                          "screen_grades_pass_route": 64.4,
                          "screen_drops": 0,
                          "screen_fumbles": 0,
                          "slot_interceptions": 0,
                          "screen_yards_after_catch": 4,
                          "screen_avg_depth_of_target": -4,
                          "screen_pass_block_rate": 0,
                          "slot_pass_block_rate": 0,
                          "slot_yprr": 4.5,
                          "base_targets": 8,
                          "slot_longest": 9,
                          "slot_drops": 0,
                          "screen_routes": 4,
                          "slot_fumbles": 0,
                          "penalties": 0,
                          "slot_contested_catch_rate": null,
                          "slot_pass_plays": 2,
                          "team": "CIN",
                          "declined_penalties": 0,
                          "screen_positive_epa_percent": 25,
                          "slot_first_downs": 0,
                          "screen_route_rate": 100,
                          "position": "HB",
                          "screen_pass_blocks": 0,
                          "slot_targets": 1,
                          "slot_pass_blocks": 0,
                          "slot_receptions": 1,
                          "screen_first_downs": 0,
                          "slot_caught_percent": 100,
                          "screen_avoided_tackles": 0,
                          "player": "Joe Mixon",
                          "slot_epa": -0.45,
                          "slot_drop_rate": 0,
                          "franchise_id": 7,
                          "slot_touchdowns": 0,
                          "slot_yards_after_catch_per_reception": 8,
                          "screen_receptions": 1,
                          "slot_targeted_qb_rating": 104.2,
                          "slot_contested_targets": 0,
                          "screen_yards_per_reception": 0,
                          "slot_contested_receptions": 0,
                          "screen_pass_plays": 4,
                          "screen_contested_receptions": 0,
                          "screen_touchdowns": 0,
                          "screen_targets": 1,
                          "screen_targets_percent": 25,
                          "slot_yards": 9,
                          "player_id": 11803
                        },
                        {
                          "screen_caught_percent": null,
                          "screen_targeted_qb_rating": 0,
                          "slot_grades_pass_route": 56.4,
                          "slot_avg_depth_of_target": 14.2,
                          "slot_positive_epa_percent": 44.7,
                          "screen_yprr": 0,
                          "draft_season": 2016,
                          "slot_routes": 47,
                          "team_name": "CIN",
                          "screen_grades_hands_drop": null,
                          "jersey_number": "83",
                          "screen_contested_catch_rate": null,
                          "slot_yards_per_reception": 10.3,
                          "screen_interceptions": 0,
                          "slot_targets_percent": 12.8,
                          "screen_longest": 0,
                          "slot_avoided_tackles": 0,
                          "slot_yards_after_catch": 1,
                          "slot_grades_hands_drop": 75.6,
                          "player_game_count": 1,
                          "screen_contested_targets": 0,
                          "eligible_season": 2016,
                          "screen_yards_after_catch_per_reception": null,
                          "screen_yards": 0,
                          "slot_route_rate": 90.4,
                          "screen_drop_rate": null,
                          "screen_epa": -0.24,
                          "screen_grades_pass_route": 46.2,
                          "screen_drops": 0,
                          "screen_fumbles": 0,
                          "slot_interceptions": 3,
                          "screen_yards_after_catch": 0,
                          "screen_avg_depth_of_target": null,
                          "screen_pass_block_rate": 0,
                          "slot_pass_block_rate": 0,
                          "slot_yprr": 0.66,
                          "base_targets": 7,
                          "slot_longest": 22,
                          "slot_drops": 0,
                          "screen_routes": 3,
                          "slot_fumbles": 0,
                          "penalties": 0,
                          "slot_contested_catch_rate": 0,
                          "slot_pass_plays": 52,
                          "team": "CIN",
                          "declined_penalties": 0,
                          "screen_positive_epa_percent": 33.3,
                          "slot_first_downs": 2,
                          "screen_route_rate": 100,
                          "position": "WR",
                          "screen_pass_blocks": 0,
                          "slot_targets": 6,
                          "slot_pass_blocks": 0,
                          "slot_receptions": 3,
                          "screen_first_downs": 0,
                          "slot_caught_percent": 50,
                          "screen_avoided_tackles": 0,
                          "player": "Tyler Boyd",
                          "slot_epa": -0.36,
                          "slot_drop_rate": 0,
                          "franchise_id": 7,
                          "slot_touchdowns": 0,
                          "slot_yards_after_catch_per_reception": 0.3,
                          "screen_receptions": 0,
                          "slot_targeted_qb_rating": 25.7,
                          "slot_contested_targets": 1,
                          "screen_yards_per_reception": null,
                          "slot_contested_receptions": 0,
                          "screen_pass_plays": 3,
                          "screen_contested_receptions": 0,
                          "screen_touchdowns": 0,
                          "screen_targets": 0,
                          "screen_targets_percent": 0,
                          "slot_yards": 31,
                          "player_id": 10689
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/receiving/concept?league=nfl&season=2022&week=1&franchise_id=7&export=true`, cut to the header and the first 3 lines.",
                    "value": "player,player_id,position,team_name,player_game_count,base_targets,declined_penalties,franchise_id,penalties,screen_avg_depth_of_target,screen_avoided_tackles,screen_caught_percent,screen_contested_catch_rate,screen_contested_receptions,screen_contested_targets,screen_drop_rate,screen_drops,screen_epa,screen_first_downs,screen_fumbles,screen_grades_hands_drop,screen_grades_pass_route,screen_interceptions,screen_longest,screen_pass_block_rate,screen_pass_blocks,screen_pass_plays,screen_positive_epa_percent,screen_receptions,screen_route_rate,screen_routes,screen_targeted_qb_rating,screen_targets,screen_targets_percent,screen_touchdowns,screen_yards,screen_yards_after_catch,screen_yards_after_catch_per_reception,screen_yards_per_reception,screen_yprr,slot_avg_depth_of_target,slot_avoided_tackles,slot_caught_percent,slot_contested_catch_rate,slot_contested_receptions,slot_contested_targets,slot_drop_rate,slot_drops,slot_epa,slot_first_downs,slot_fumbles,slot_grades_hands_drop,slot_grades_pass_route,slot_interceptions,slot_longest,slot_pass_block_rate,slot_pass_blocks,slot_pass_plays,slot_positive_epa_percent,slot_receptions,slot_route_rate,slot_routes,slot_targeted_qb_rating,slot_targets,slot_targets_percent,slot_touchdowns,slot_yards,slot_yards_after_catch,slot_yards_after_catch_per_reception,slot_yards_per_reception,slot_yprr\r\nJa'Marr Chase,84270,WR,CIN,1,15,0,7,0,-1.0,0,100.0,,0,0,0.0,0,-0.29,1,0,78.7,91.7,0,12,0.0,0,4,25.0,1,100.0,4,116.7,1,25.0,0,12,13,13.0,12.0,3.0,5.8,0,75.0,,0,0,0.0,0,-0.01,3,0,69.6,79.2,0,11,0.0,0,17,43.8,3,94.1,16,90.6,4,25.0,0,25,11,3.7,8.3,1.56\r\nJoe Mixon,11803,HB,CIN,1,8,0,7,0,-4.0,0,100.0,,0,0,0.0,0,-0.29,0,0,78.7,64.4,0,0,0.0,0,4,25.0,1,100.0,4,79.2,1,25.0,0,0,4,4.0,0.0,0.0,1.0,0,100.0,,0,0,0.0,0,-0.45,0,0,79.4,80.1,0,9,0.0,0,2,50.0,1,100.0,2,104.2,1,50.0,0,9,8,8.0,9.0,4.5\r\nTyler Boyd,10689,WR,CIN,1,7,0,7,0,,0,,,0,0,,0,-0.24,0,0,,46.2,0,0,0.0,0,3,33.3,0,100.0,3,0.0,0,0.0,0,0,0,,,0.0,14.2,0,50.0,0.0,0,1,0.0,0,-0.36,2,0,75.6,56.4,3,22,0.0,0,52,44.7,3,90.4,47,25.7,6,12.8,0,31,1,0.3,10.3,0.66\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/receiving/coverage": {
      "get": {
        "operationId": "facet-receiving-coverage",
        "summary": "League-wide receiving-versus-coverage leaderboard",
        "description": "Every qualifying receiver in the league, matched against the defenders who covered them. Two\ncomplete requests exist: `--league` with `--season` (a year, or a comma-separated list such as\n`2023,2024`), or `--game` alone (an id from `ref-games`) — anything less is refused with `400\ninvalid_parameter`. Narrow with `--week` and `--franchise`. `--division` fans the request out across\nNCAA divisions and is ignored for every other league. Grades are on PFF's 0-100 scale and every\nother column is a raw total or rate; which columns come back depends on the report, the position and\nthe caller's entitlement. Add `--export true` for the raw CSV instead of JSON.\n\nServes the same report as `facet-defense-coverage-matchup` — same response shape. This export\nflattens the three collections into one sheet: a `side` column (`defenders`, `receivers` or\n`versus`), then `player_id` and `coverage_player_id`, then the remaining columns sorted by name.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `download.csv` instead of JSON.",
        "tags": [
          "facet"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `download.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"download.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetReceivingCoverageResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/receiving/coverage?league=nfl&season=2022&week=1&franchise_id=7`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "receiving_coverage_stats": {
                        "defenders": [
                          {
                            "broken_up_passes": 1,
                            "drops": 0,
                            "first_downs": 2,
                            "grades_coverage_defense": 69.5,
                            "grades_defense": 65.7,
                            "grades_defense_penalty": 77.4,
                            "grades_overall": 65.7,
                            "grades_overall_tackle": 64.1,
                            "grades_run_defense": 45.7,
                            "grades_tackle": 64.1,
                            "interceptions": 0,
                            "longest": 25,
                            "player_game_count": 1,
                            "player_id": 11815,
                            "receptions": 5,
                            "targets": 11,
                            "touchdowns": 0,
                            "yards": 50,
                            "yards_after_catch": 1,
                            "yards_per_reception": 10
                          },
                          {
                            "broken_up_passes": 0,
                            "drops": 0,
                            "first_downs": 2,
                            "grades_coverage_defense": 65.3,
                            "grades_defense": 72.6,
                            "grades_defense_penalty": 76.3,
                            "grades_overall": 72.6,
                            "grades_overall_tackle": 80.8,
                            "grades_pass_rush_defense": 90.5,
                            "grades_run_defense": 67.7,
                            "grades_tackle": 80.8,
                            "interceptions": 0,
                            "longest": 26,
                            "player_game_count": 1,
                            "player_id": 10898,
                            "receptions": 6,
                            "targets": 7,
                            "touchdowns": 0,
                            "yards": 49,
                            "yards_after_catch": 12,
                            "yards_per_reception": 8.2
                          },
                          {
                            "broken_up_passes": 1,
                            "drops": 0,
                            "first_downs": 1,
                            "grades_coverage_defense": 79.9,
                            "grades_defense": 86.7,
                            "grades_defense_penalty": 74.9,
                            "grades_overall": 86.8,
                            "grades_overall_tackle": 82.5,
                            "grades_pass_rush_defense": 53.2,
                            "grades_run_defense": 81.5,
                            "grades_tackle": 82.5,
                            "interceptions": 0,
                            "longest": 31,
                            "player_game_count": 1,
                            "player_id": 29623,
                            "receptions": 4,
                            "targets": 5,
                            "touchdowns": 0,
                            "yards": 44,
                            "yards_after_catch": 26,
                            "yards_per_reception": 11
                          }
                        ],
                        "receivers": [
                          {
                            "broken_up_passes": 0,
                            "drops": 1,
                            "first_downs": 10,
                            "grades_hands_drop": 58.5,
                            "grades_hands_fumble": 71.1,
                            "grades_offense": 74.6,
                            "grades_offense_penalty": 8.3,
                            "grades_overall": 74.6,
                            "grades_pass_route": 76,
                            "grades_run_block": 55.2,
                            "interceptions": 0,
                            "longest": 24,
                            "player_game_count": 1,
                            "player_id": 84270,
                            "receptions": 10,
                            "targets": 15,
                            "touchdowns": 1,
                            "yards": 129,
                            "yards_after_catch": 48,
                            "yards_per_reception": 12.9
                          },
                          {
                            "broken_up_passes": 1,
                            "drops": 0,
                            "first_downs": 3,
                            "grades_hands_drop": 75.6,
                            "grades_hands_fumble": 79.7,
                            "grades_offense": 63.7,
                            "grades_offense_penalty": 79.6,
                            "grades_overall": 63.7,
                            "grades_pass_block": 44.8,
                            "grades_pass_route": 76.4,
                            "grades_run": 58.8,
                            "grades_run_block": 60,
                            "interceptions": 0,
                            "longest": 18,
                            "player_game_count": 1,
                            "player_id": 11803,
                            "receptions": 7,
                            "targets": 8,
                            "touchdowns": 0,
                            "yards": 63,
                            "yards_after_catch": 61,
                            "yards_per_reception": 9
                          },
                          {
                            "broken_up_passes": 0,
                            "drops": 0,
                            "first_downs": 3,
                            "grades_hands_drop": 72.1,
                            "grades_hands_fumble": 67,
                            "grades_offense": 58.1,
                            "grades_offense_penalty": 79,
                            "grades_overall": 58.1,
                            "grades_pass_route": 58.8,
                            "grades_run_block": 47.5,
                            "interceptions": 3,
                            "longest": 22,
                            "player_game_count": 1,
                            "player_id": 10689,
                            "receptions": 4,
                            "targets": 7,
                            "touchdowns": 1,
                            "yards": 33,
                            "yards_after_catch": 1,
                            "yards_per_reception": 8.3
                          }
                        ],
                        "versus": [
                          {
                            "broken_up_passes": 0,
                            "coverage_player_id": 11821,
                            "drops": 1,
                            "first_downs": 5,
                            "interceptions": 0,
                            "longest": 14,
                            "player_id": 84270,
                            "receptions": 5,
                            "targets": 7,
                            "touchdowns": 1,
                            "yards": 46,
                            "yards_after_catch": 23,
                            "yards_per_reception": 9.2
                          },
                          {
                            "broken_up_passes": 1,
                            "coverage_player_id": 10670,
                            "drops": 0,
                            "first_downs": 0,
                            "interceptions": 0,
                            "longest": 9,
                            "player_id": 11803,
                            "receptions": 2,
                            "targets": 3,
                            "touchdowns": 0,
                            "yards": 16,
                            "yards_after_catch": 16,
                            "yards_per_reception": 8
                          },
                          {
                            "broken_up_passes": 0,
                            "coverage_player_id": 11850,
                            "drops": 1,
                            "first_downs": 0,
                            "interceptions": 0,
                            "longest": 0,
                            "player_id": 10840,
                            "receptions": 0,
                            "targets": 3,
                            "touchdowns": 0,
                            "yards": 0,
                            "yards_after_catch": 0,
                            "yards_per_reception": null
                          }
                        ]
                      }
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBodySided"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/receiving/depth": {
      "get": {
        "operationId": "facet-receiving-depth",
        "summary": "League-wide receiving-by-depth leaderboard",
        "description": "Every qualifying receiver in the league, split by how far downfield the target travelled. Two\ncomplete requests exist: `--league` with `--season` (a year, or a comma-separated list such as\n`2023,2024`), or `--game` alone (an id from `ref-games`) — anything less is refused with `400\ninvalid_parameter`. Narrow with `--week` and `--franchise`. `--division` fans the request out across\nNCAA divisions and is ignored for every other league. Grades are on PFF's 0-100 scale and every\nother column is a raw total or rate; which columns come back depends on the report, the position and\nthe caller's entitlement. Add `--export true` for the raw CSV instead of JSON.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `receiving_depth.csv` instead\nof JSON.",
        "tags": [
          "facet"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `receiving_depth.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"receiving_depth.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetReceivingDepthResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/receiving/depth?league=nfl&season=2022&week=1&franchise_id=7`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "receiving_depth": [
                        {
                          "left_deep_route_rate": 100,
                          "center_short_first_downs": 2,
                          "center_short_routes": 15,
                          "right_behind_los_positive_epa_percent": 100,
                          "left_behind_los_yards_after_catch": 0,
                          "center_behind_los_contested_targets": 0,
                          "right_short_routes": 7,
                          "right_deep_pass_block_rate": 0,
                          "medium_interceptions": 0,
                          "right_short_targets_percent": 42.9,
                          "left_deep_contested_catch_rate": null,
                          "right_medium_grades_hands_drop": 64.7,
                          "left_short_targeted_qb_rating": 39.6,
                          "right_medium_contested_catch_rate": null,
                          "short_targets": 8,
                          "deep_contested_catch_rate": null,
                          "center_behind_los_drops": 0,
                          "center_behind_los_interceptions": 0,
                          "left_behind_los_interceptions": 0,
                          "left_deep_first_downs": 0,
                          "left_behind_los_contested_targets": 0,
                          "center_deep_avg_depth_of_target": null,
                          "center_short_drops": 1,
                          "right_behind_los_targets": 1,
                          "right_behind_los_yards_after_catch_per_reception": 13,
                          "center_deep_first_downs": 0,
                          "behind_los_yards_after_catch_per_reception": 13,
                          "right_deep_grades_pass_route": 59.3,
                          "left_short_fumbles": 0,
                          "right_short_positive_epa_percent": 71.4,
                          "center_deep_pass_block_rate": 0,
                          "left_behind_los_avoided_tackles": 0,
                          "center_short_longest": 14,
                          "left_deep_drop_rate": null,
                          "center_short_contested_receptions": 0,
                          "left_deep_routes": 1,
                          "deep_drops": 0,
                          "deep_contested_receptions": 0,
                          "center_behind_los_touchdowns": 0,
                          "center_medium_targeted_qb_rating": 118.8,
                          "left_short_yards_per_reception": null,
                          "deep_touchdowns": 0,
                          "left_short_yprr": 0,
                          "center_deep_drop_rate": null,
                          "center_behind_los_pass_plays": 2,
                          "right_short_first_downs": 3,
                          "right_behind_los_first_downs": 1,
                          "right_behind_los_grades_pass_route": 78.5,
                          "short_interceptions": 0,
                          "behind_los_routes": 1,
                          "right_behind_los_contested_targets": 0,
                          "left_medium_grades_pass_route": 76.4,
                          "right_short_contested_catch_rate": null,
                          "draft_season": 2021,
                          "center_short_grades_hands_drop": 29.9,
                          "deep_receptions": 0,
                          "center_deep_pass_blocks": 0,
                          "left_short_yards_after_catch_per_reception": null,
                          "center_medium_avoided_tackles": 2,
                          "center_medium_grades_pass_route": 95.2,
                          "center_behind_los_positive_epa_percent": 50,
                          "medium_yards_after_catch_per_reception": 4.5,
                          "medium_receptions": 4,
                          "deep_pass_blocks": 0,
                          "right_deep_yards_per_reception": null,
                          "center_medium_longest": 24,
                          "center_deep_contested_catch_rate": null,
                          "medium_epa": 1.19,
                          "left_short_route_rate": 66.7,
                          "right_deep_grades_hands_drop": null,
                          "center_deep_targets": 0,
                          "short_contested_receptions": 0,
                          "center_deep_pass_plays": 2,
                          "left_medium_routes": 3,
                          "deep_yards_after_catch_per_reception": null,
                          "center_deep_contested_receptions": 0,
                          "center_short_pass_blocks": 0,
                          "team_name": "CIN",
                          "deep_pass_block_rate": 0,
                          "short_touchdowns": 1,
                          "center_medium_drops": 0,
                          "left_short_pass_blocks": 0,
                          "right_short_grades_pass_route": 84.9,
                          "center_short_positive_epa_percent": 60,
                          "deep_avg_depth_of_target": 20,
                          "deep_grades_hands_drop": null,
                          "center_behind_los_avg_depth_of_target": null,
                          "left_deep_caught_percent": null,
                          "right_behind_los_contested_catch_rate": null,
                          "center_medium_route_rate": 85.7,
                          "short_grades_pass_route": 81.8,
                          "center_behind_los_contested_receptions": 0,
                          "center_short_receptions": 2,
                          "center_short_yprr": 1.67,
                          "medium_pass_blocks": 0,
                          "medium_yards_per_reception": 18,
                          "center_deep_yprr": 0,
                          "right_deep_drop_rate": null,
                          "center_short_targets": 3,
                          "center_medium_pass_block_rate": 0,
                          "left_behind_los_drop_rate": null,
                          "right_behind_los_targets_percent": 50,
                          "short_contested_catch_rate": null,
                          "behind_los_fumbles": 0,
                          "left_medium_drop_rate": 0,
                          "left_medium_longest": 12,
                          "jersey_number": "01",
                          "medium_yprr": 14.4,
                          "left_short_positive_epa_percent": 50,
                          "center_behind_los_pass_block_rate": 0,
                          "right_short_fumbles": 0,
                          "right_deep_route_rate": 66.7,
                          "right_short_pass_blocks": 0,
                          "left_short_longest": 0,
                          "medium_contested_targets": 1,
                          "behind_los_interceptions": 0,
                          "right_medium_targeted_qb_rating": 118.8,
                          "right_deep_drops": 0,
                          "right_short_route_rate": 100,
                          "medium_grades_pass_route": 95.4,
                          "right_deep_yards": 0,
                          "right_medium_contested_targets": 0,
                          "center_medium_targets": 2,
                          "right_short_avg_depth_of_target": 5.7,
                          "center_deep_longest": 0,
                          "right_behind_los_yards_per_reception": 12,
                          "left_medium_pass_block_rate": 0,
                          "right_deep_yards_after_catch": 0,
                          "right_medium_receptions": 1,
                          "right_short_targeted_qb_rating": 134,
                          "left_deep_targets_percent": 0,
                          "behind_los_pass_blocks": 0,
                          "right_behind_los_touchdowns": 0,
                          "right_medium_targets": 1,
                          "deep_routes": 1,
                          "left_medium_yprr": 4,
                          "deep_yards_per_reception": null,
                          "center_behind_los_avoided_tackles": 0,
                          "left_deep_contested_targets": 0,
                          "medium_avg_depth_of_target": 13,
                          "short_route_rate": 100,
                          "left_behind_los_positive_epa_percent": 100,
                          "left_medium_touchdowns": 0,
                          "deep_targets_percent": 6.7,
                          "behind_los_targets": 1,
                          "center_short_yards": 25,
                          "center_medium_routes": 6,
                          "center_behind_los_grades_pass_route": null,
                          "right_deep_yprr": 0,
                          "center_deep_targeted_qb_rating": 0,
                          "left_deep_targeted_qb_rating": 0,
                          "deep_pass_plays": 1,
                          "center_short_avg_depth_of_target": 6.7,
                          "right_short_yards": 20,
                          "left_medium_first_downs": 1,
                          "right_medium_positive_epa_percent": 50,
                          "left_medium_targeted_qb_rating": 68.8,
                          "right_short_contested_receptions": 0,
                          "right_deep_avoided_tackles": 0,
                          "right_medium_fumbles": 0,
                          "right_behind_los_fumbles": 0,
                          "center_deep_drops": 0,
                          "center_medium_avg_depth_of_target": 13.5,
                          "right_behind_los_pass_block_rate": 0,
                          "left_short_yards_after_catch": 0,
                          "right_behind_los_pass_blocks": 0,
                          "left_behind_los_avg_depth_of_target": null,
                          "center_medium_epa": 0.13,
                          "left_medium_targets_percent": 66.7,
                          "left_behind_los_grades_pass_route": null,
                          "center_behind_los_yards_per_reception": null,
                          "left_deep_targets": 0,
                          "short_contested_targets": 0,
                          "left_medium_contested_catch_rate": 0,
                          "left_deep_yprr": 0,
                          "right_medium_yards_after_catch_per_reception": 0,
                          "right_medium_longest": 15,
                          "behind_los_drop_rate": 0,
                          "right_behind_los_epa": 0.65,
                          "player_game_count": 1,
                          "left_short_pass_plays": 6,
                          "right_short_touchdowns": 1,
                          "behind_los_first_downs": 1,
                          "right_deep_receptions": 0,
                          "left_medium_pass_plays": 3,
                          "eligible_season": 2021,
                          "center_behind_los_yards": 0,
                          "right_medium_pass_blocks": 0,
                          "left_short_grades_pass_route": 57,
                          "left_behind_los_targets_percent": 0,
                          "behind_los_longest": 12,
                          "right_medium_first_downs": 1,
                          "center_deep_yards_after_catch_per_reception": null,
                          "deep_contested_targets": 0,
                          "behind_los_avoided_tackles": 0,
                          "left_behind_los_receptions": 0,
                          "right_short_yards_after_catch": 4,
                          "right_behind_los_yards_after_catch": 13,
                          "right_short_pass_plays": 7,
                          "right_deep_epa": -0.46,
                          "left_short_caught_percent": 0,
                          "center_behind_los_contested_catch_rate": null,
                          "right_short_yards_after_catch_per_reception": 1.3,
                          "right_short_drop_rate": 0,
                          "left_short_yards": 0,
                          "right_behind_los_avg_depth_of_target": -1,
                          "right_deep_first_downs": 0,
                          "left_deep_positive_epa_percent": 0,
                          "short_yards_after_catch": 17,
                          "center_medium_yprr": 7.5,
                          "short_pass_blocks": 0,
                          "left_short_contested_receptions": 0,
                          "short_fumbles": 0,
                          "left_short_pass_block_rate": 0,
                          "center_deep_routes": 2,
                          "left_medium_avoided_tackles": 0,
                          "left_behind_los_pass_plays": 1,
                          "right_deep_touchdowns": 0,
                          "center_medium_receptions": 2,
                          "left_behind_los_drops": 0,
                          "center_short_targets_percent": 20,
                          "deep_epa": -0.25,
                          "medium_touchdowns": 0,
                          "left_medium_route_rate": 100,
                          "left_behind_los_grades_hands_drop": null,
                          "left_deep_fumbles": 0,
                          "medium_avoided_tackles": 2,
                          "center_medium_contested_catch_rate": null,
                          "right_behind_los_routes": 2,
                          "short_targets_percent": 53.3,
                          "left_behind_los_yprr": 0,
                          "medium_route_rate": 100,
                          "left_short_first_downs": 0,
                          "short_longest": 14,
                          "right_behind_los_grades_hands_drop": 64.7,
                          "behind_los_contested_targets": 0,
                          "right_behind_los_avoided_tackles": 0,
                          "right_deep_longest": 0,
                          "right_deep_contested_targets": 0,
                          "right_deep_positive_epa_percent": 0,
                          "right_behind_los_pass_plays": 2,
                          "medium_contested_receptions": 0,
                          "short_targeted_qb_rating": 117.2,
                          "right_behind_los_interceptions": 0,
                          "behind_los_targets_percent": 6.7,
                          "center_deep_yards_after_catch": 0,
                          "behind_los_yards": 12,
                          "right_deep_targets_percent": 50,
                          "left_medium_fumbles": 0,
                          "short_receptions": 5,
                          "left_short_interceptions": 0,
                          "right_medium_interceptions": 0,
                          "left_behind_los_yards": 0,
                          "medium_first_downs": 4,
                          "left_short_avg_depth_of_target": 8,
                          "right_medium_pass_block_rate": 0,
                          "right_medium_targets_percent": 25,
                          "left_behind_los_touchdowns": 0,
                          "right_behind_los_drop_rate": 0,
                          "right_deep_fumbles": 0,
                          "left_deep_contested_receptions": 0,
                          "behind_los_drops": 0,
                          "short_yards_after_catch_per_reception": 3.4,
                          "medium_pass_plays": 5,
                          "behind_los_pass_plays": 1,
                          "left_deep_yards": 0,
                          "center_behind_los_longest": 0,
                          "center_medium_grades_hands_drop": 68.3,
                          "left_behind_los_longest": 0,
                          "center_short_interceptions": 0,
                          "short_avg_depth_of_target": 6.6,
                          "deep_yprr": 0,
                          "left_deep_touchdowns": 0,
                          "base_targets": 15,
                          "deep_yards": 0,
                          "center_medium_yards_after_catch": 18,
                          "left_medium_epa": 0.33,
                          "left_deep_avg_depth_of_target": null,
                          "deep_first_downs": 0,
                          "short_drop_rate": 16.7,
                          "left_medium_positive_epa_percent": 33.3,
                          "center_deep_touchdowns": 0,
                          "right_behind_los_yprr": 6,
                          "center_medium_pass_blocks": 0,
                          "short_positive_epa_percent": 62.5,
                          "medium_fumbles": 0,
                          "center_medium_yards_after_catch_per_reception": 9,
                          "left_short_routes": 4,
                          "behind_los_route_rate": 100,
                          "behind_los_epa": 0.79,
                          "right_behind_los_contested_receptions": 0,
                          "right_medium_yards_after_catch": 0,
                          "center_short_touchdowns": 0,
                          "right_medium_drops": 0,
                          "left_behind_los_routes": 1,
                          "left_deep_epa": -0.25,
                          "left_short_targets": 2,
                          "left_deep_pass_block_rate": 0,
                          "right_deep_caught_percent": 0,
                          "center_short_grades_pass_route": 72,
                          "left_behind_los_fumbles": 0,
                          "right_medium_touchdowns": 0,
                          "center_short_fumbles": 0,
                          "center_behind_los_routes": 2,
                          "behind_los_receptions": 1,
                          "medium_targets_percent": 33.3,
                          "left_medium_yards": 12,
                          "center_medium_touchdowns": 0,
                          "medium_targeted_qb_rating": 118.8,
                          "center_short_drop_rate": 33.3,
                          "penalties": 0,
                          "short_pass_block_rate": 0,
                          "right_deep_avg_depth_of_target": 20,
                          "center_deep_yards": 0,
                          "center_short_yards_after_catch_per_reception": 6.5,
                          "right_short_targets": 3,
                          "behind_los_avg_depth_of_target": -1,
                          "left_behind_los_contested_catch_rate": null,
                          "center_short_targeted_qb_rating": 92.4,
                          "left_behind_los_epa": 0.58,
                          "deep_route_rate": 100,
                          "short_yprr": 5.63,
                          "deep_caught_percent": 0,
                          "center_medium_drop_rate": 0,
                          "center_behind_los_yards_after_catch": 0,
                          "medium_yards": 72,
                          "center_deep_avoided_tackles": 0,
                          "left_short_contested_targets": 0,
                          "center_behind_los_first_downs": 0,
                          "center_medium_interceptions": 0,
                          "center_deep_yards_per_reception": null,
                          "center_deep_contested_targets": 0,
                          "left_short_targets_percent": 50,
                          "short_grades_hands_drop": 45.8,
                          "right_deep_yards_after_catch_per_reception": null,
                          "left_medium_contested_receptions": 0,
                          "center_short_yards_per_reception": 12.5,
                          "center_deep_grades_hands_drop": null,
                          "deep_longest": 0,
                          "left_medium_yards_after_catch_per_reception": 0,
                          "right_short_interceptions": 0,
                          "center_short_caught_percent": 66.7,
                          "left_deep_interceptions": 0,
                          "short_yards_per_reception": 9,
                          "team": "CIN",
                          "center_short_avoided_tackles": 0,
                          "behind_los_yards_per_reception": 12,
                          "short_epa": 0.29,
                          "deep_drop_rate": null,
                          "left_deep_yards_per_reception": null,
                          "right_short_yprr": 2.86,
                          "declined_penalties": 0,
                          "medium_longest": 24,
                          "left_short_contested_catch_rate": null,
                          "right_medium_routes": 4,
                          "left_short_receptions": 0,
                          "left_deep_yards_after_catch_per_reception": null,
                          "deep_targets": 1,
                          "left_short_grades_hands_drop": null,
                          "right_short_epa": 0.37,
                          "left_behind_los_contested_receptions": 0,
                          "medium_targets": 5,
                          "behind_los_targeted_qb_rating": 116.7,
                          "center_short_contested_targets": 0,
                          "center_short_route_rate": 100,
                          "right_medium_route_rate": 100,
                          "left_short_epa": -0.74,
                          "left_deep_avoided_tackles": 0,
                          "center_behind_los_pass_blocks": 0,
                          "deep_interceptions": 0,
                          "right_short_caught_percent": 100,
                          "center_deep_caught_percent": null,
                          "center_medium_fumbles": 0,
                          "behind_los_grades_hands_drop": 64.7,
                          "left_behind_los_targets": 0,
                          "right_medium_yprr": 3.75,
                          "right_short_receptions": 3,
                          "position": "WR",
                          "right_short_contested_targets": 0,
                          "center_medium_yards_per_reception": 22.5,
                          "right_behind_los_yards": 12,
                          "center_behind_los_grades_hands_drop": null,
                          "right_behind_los_receptions": 1,
                          "left_medium_caught_percent": 50,
                          "left_medium_drops": 0,
                          "short_avoided_tackles": 0,
                          "center_short_epa": 0.34,
                          "center_behind_los_targets": 0,
                          "left_deep_pass_blocks": 0,
                          "left_short_drops": 0,
                          "medium_positive_epa_percent": 80,
                          "center_deep_receptions": 0,
                          "right_medium_epa": -0.94,
                          "right_short_pass_block_rate": 0,
                          "center_deep_route_rate": 100,
                          "center_short_pass_plays": 15,
                          "center_deep_interceptions": 0,
                          "left_medium_yards_after_catch": 0,
                          "left_behind_los_pass_blocks": 0,
                          "right_behind_los_longest": 12,
                          "short_yards": 45,
                          "left_deep_receptions": 0,
                          "deep_grades_pass_route": 59.3,
                          "left_medium_targets": 2,
                          "behind_los_grades_pass_route": 78.5,
                          "right_deep_targeted_qb_rating": 39.6,
                          "behind_los_pass_block_rate": 0,
                          "left_medium_pass_blocks": 0,
                          "player": "Ja'Marr Chase",
                          "left_medium_avg_depth_of_target": 11.5,
                          "deep_avoided_tackles": 0,
                          "center_behind_los_yprr": 0,
                          "center_behind_los_epa": -0.08,
                          "right_behind_los_route_rate": 100,
                          "center_deep_fumbles": 0,
                          "left_medium_grades_hands_drop": 64.7,
                          "right_medium_yards": 15,
                          "left_deep_yards_after_catch": 0,
                          "left_deep_pass_plays": 1,
                          "center_short_yards_after_catch": 13,
                          "center_behind_los_route_rate": 100,
                          "right_medium_drop_rate": 0,
                          "medium_grades_hands_drop": 72.1,
                          "right_deep_pass_blocks": 0,
                          "medium_contested_catch_rate": 0,
                          "franchise_id": 7,
                          "center_behind_los_caught_percent": null,
                          "right_behind_los_caught_percent": 100,
                          "short_pass_plays": 8,
                          "center_behind_los_targeted_qb_rating": 0,
                          "deep_targeted_qb_rating": 39.6,
                          "center_short_pass_block_rate": 0,
                          "right_short_avoided_tackles": 0,
                          "left_short_drop_rate": null,
                          "left_medium_yards_per_reception": 12,
                          "left_medium_receptions": 1,
                          "right_medium_pass_plays": 4,
                          "center_medium_contested_targets": 0,
                          "short_first_downs": 5,
                          "center_medium_targets_percent": 33.3,
                          "right_short_longest": 10,
                          "left_deep_longest": 0,
                          "right_short_drops": 0,
                          "right_medium_contested_receptions": 0,
                          "right_deep_contested_catch_rate": null,
                          "center_behind_los_receptions": 0,
                          "right_medium_caught_percent": 100,
                          "right_deep_targets": 1,
                          "center_medium_positive_epa_percent": 50,
                          "medium_drops": 0,
                          "left_deep_grades_hands_drop": null,
                          "behind_los_positive_epa_percent": 100,
                          "left_short_avoided_tackles": 0,
                          "right_medium_grades_pass_route": 78.1,
                          "right_short_grades_hands_drop": 70.5,
                          "left_behind_los_yards_per_reception": null,
                          "medium_yards_after_catch": 18,
                          "center_medium_pass_plays": 7,
                          "left_behind_los_caught_percent": null,
                          "left_medium_contested_targets": 1,
                          "center_medium_contested_receptions": 0,
                          "behind_los_contested_catch_rate": null,
                          "behind_los_yards_after_catch": 13,
                          "left_deep_drops": 0,
                          "center_deep_positive_epa_percent": 50,
                          "left_behind_los_yards_after_catch_per_reception": null,
                          "right_deep_routes": 2,
                          "center_deep_grades_pass_route": null,
                          "deep_yards_after_catch": 0,
                          "center_behind_los_drop_rate": null,
                          "short_drops": 1,
                          "right_deep_contested_receptions": 0,
                          "left_behind_los_targeted_qb_rating": 0,
                          "right_medium_avg_depth_of_target": 15,
                          "right_medium_avoided_tackles": 0,
                          "center_medium_caught_percent": 100,
                          "center_behind_los_fumbles": 0,
                          "center_medium_first_downs": 2,
                          "behind_los_caught_percent": 100,
                          "short_routes": 8,
                          "left_deep_grades_pass_route": null,
                          "medium_routes": 5,
                          "medium_caught_percent": 80,
                          "behind_los_contested_receptions": 0,
                          "behind_los_yprr": 12,
                          "left_short_touchdowns": 0,
                          "medium_drop_rate": 0,
                          "player_id": 84270,
                          "left_behind_los_pass_block_rate": 0,
                          "right_deep_pass_plays": 3,
                          "short_caught_percent": 62.5,
                          "right_medium_yards_per_reception": 15,
                          "center_medium_yards": 45,
                          "center_deep_epa": -0.68,
                          "left_medium_interceptions": 0,
                          "right_deep_interceptions": 0,
                          "deep_positive_epa_percent": 0,
                          "deep_fumbles": 0,
                          "center_short_contested_catch_rate": null,
                          "center_behind_los_targets_percent": 0,
                          "right_short_yards_per_reception": 6.7,
                          "center_deep_targets_percent": 0,
                          "center_behind_los_yards_after_catch_per_reception": null,
                          "behind_los_touchdowns": 0,
                          "medium_pass_block_rate": 0,
                          "left_behind_los_route_rate": 100,
                          "right_behind_los_targeted_qb_rating": 116.7,
                          "right_behind_los_drops": 0,
                          "left_behind_los_first_downs": 0
                        },
                        {
                          "left_deep_route_rate": 100,
                          "center_short_first_downs": 2,
                          "center_short_routes": 10,
                          "right_behind_los_positive_epa_percent": 100,
                          "left_behind_los_yards_after_catch": 14,
                          "center_behind_los_contested_targets": 0,
                          "right_short_routes": 5,
                          "right_deep_pass_block_rate": 0,
                          "medium_interceptions": 0,
                          "right_short_targets_percent": 0,
                          "left_deep_contested_catch_rate": null,
                          "right_medium_grades_hands_drop": null,
                          "left_short_targeted_qb_rating": 0,
                          "right_medium_contested_catch_rate": null,
                          "short_targets": 5,
                          "deep_contested_catch_rate": null,
                          "center_behind_los_drops": 0,
                          "center_behind_los_interceptions": 0,
                          "left_behind_los_interceptions": 0,
                          "left_deep_first_downs": 0,
                          "left_behind_los_contested_targets": 0,
                          "center_deep_avg_depth_of_target": null,
                          "center_short_drops": 0,
                          "right_behind_los_targets": 0,
                          "right_behind_los_yards_after_catch_per_reception": null,
                          "center_deep_first_downs": 0,
                          "behind_los_yards_after_catch_per_reception": 8.7,
                          "right_deep_grades_pass_route": null,
                          "left_short_fumbles": 0,
                          "right_short_positive_epa_percent": 66.7,
                          "center_deep_pass_block_rate": 50,
                          "left_behind_los_avoided_tackles": 0,
                          "center_short_longest": 18,
                          "left_deep_drop_rate": null,
                          "center_short_contested_receptions": 0,
                          "left_deep_routes": 1,
                          "deep_drops": 0,
                          "deep_contested_receptions": 0,
                          "center_behind_los_touchdowns": 0,
                          "center_medium_targeted_qb_rating": 0,
                          "left_short_yards_per_reception": null,
                          "deep_touchdowns": 0,
                          "left_short_yprr": 0,
                          "center_deep_drop_rate": null,
                          "center_behind_los_pass_plays": 2,
                          "right_short_first_downs": 0,
                          "right_behind_los_first_downs": 0,
                          "right_behind_los_grades_pass_route": null,
                          "short_interceptions": 0,
                          "behind_los_routes": 3,
                          "right_behind_los_contested_targets": 0,
                          "left_medium_grades_pass_route": null,
                          "right_short_contested_catch_rate": null,
                          "draft_season": 2017,
                          "center_short_grades_hands_drop": 72.1,
                          "deep_receptions": 0,
                          "center_deep_pass_blocks": 1,
                          "left_short_yards_after_catch_per_reception": null,
                          "center_medium_avoided_tackles": 0,
                          "center_medium_grades_pass_route": null,
                          "center_behind_los_positive_epa_percent": 50,
                          "medium_yards_after_catch_per_reception": null,
                          "medium_receptions": 0,
                          "deep_pass_blocks": 0,
                          "right_deep_yards_per_reception": null,
                          "center_medium_longest": 0,
                          "center_deep_contested_catch_rate": null,
                          "medium_epa": 0,
                          "left_short_route_rate": 66.7,
                          "right_deep_grades_hands_drop": null,
                          "center_deep_targets": 0,
                          "short_contested_receptions": 0,
                          "center_deep_pass_plays": 2,
                          "left_medium_routes": 2,
                          "deep_yards_after_catch_per_reception": null,
                          "center_deep_contested_receptions": 0,
                          "center_short_pass_blocks": 0,
                          "team_name": "CIN",
                          "deep_pass_block_rate": null,
                          "short_touchdowns": 0,
                          "center_medium_drops": 0,
                          "left_short_pass_blocks": 0,
                          "right_short_grades_pass_route": null,
                          "center_short_positive_epa_percent": 60,
                          "deep_avg_depth_of_target": null,
                          "deep_grades_hands_drop": null,
                          "center_behind_los_avg_depth_of_target": -2.5,
                          "left_deep_caught_percent": null,
                          "right_behind_los_contested_catch_rate": null,
                          "center_medium_route_rate": 75,
                          "short_grades_pass_route": 93.1,
                          "center_behind_los_contested_receptions": 0,
                          "center_short_receptions": 4,
                          "center_short_yprr": 4.5,
                          "medium_pass_blocks": 0,
                          "medium_yards_per_reception": null,
                          "center_deep_yprr": 0,
                          "right_deep_drop_rate": null,
                          "center_short_targets": 5,
                          "center_medium_pass_block_rate": 25,
                          "left_behind_los_drop_rate": 0,
                          "right_behind_los_targets_percent": 0,
                          "short_contested_catch_rate": 0,
                          "behind_los_fumbles": 0,
                          "left_medium_drop_rate": null,
                          "left_medium_longest": 0,
                          "jersey_number": "28",
                          "medium_yprr": null,
                          "left_short_positive_epa_percent": 0,
                          "center_behind_los_pass_block_rate": 0,
                          "right_short_fumbles": 0,
                          "right_deep_route_rate": 100,
                          "right_short_pass_blocks": 1,
                          "left_short_longest": 0,
                          "medium_contested_targets": 0,
                          "behind_los_interceptions": 0,
                          "right_medium_targeted_qb_rating": 0,
                          "right_deep_drops": 0,
                          "right_short_route_rate": 83.3,
                          "medium_grades_pass_route": null,
                          "right_deep_yards": 0,
                          "right_medium_contested_targets": 0,
                          "center_medium_targets": 0,
                          "right_short_avg_depth_of_target": null,
                          "center_deep_longest": 0,
                          "right_behind_los_yards_per_reception": null,
                          "left_medium_pass_block_rate": 33.3,
                          "right_deep_yards_after_catch": 0,
                          "right_medium_receptions": 0,
                          "right_short_targeted_qb_rating": 0,
                          "left_deep_targets_percent": 0,
                          "behind_los_pass_blocks": 0,
                          "right_behind_los_touchdowns": 0,
                          "right_medium_targets": 0,
                          "deep_routes": 0,
                          "left_medium_yprr": 0,
                          "deep_yards_per_reception": null,
                          "center_behind_los_avoided_tackles": 0,
                          "left_deep_contested_targets": 0,
                          "medium_avg_depth_of_target": null,
                          "short_route_rate": 100,
                          "left_behind_los_positive_epa_percent": 100,
                          "left_medium_touchdowns": 0,
                          "deep_targets_percent": 0,
                          "behind_los_targets": 3,
                          "center_short_yards": 45,
                          "center_medium_routes": 3,
                          "center_behind_los_grades_pass_route": 68.9,
                          "right_deep_yprr": 0,
                          "center_deep_targeted_qb_rating": 0,
                          "left_deep_targeted_qb_rating": 0,
                          "deep_pass_plays": 0,
                          "center_short_avg_depth_of_target": 2.6,
                          "right_short_yards": 0,
                          "left_medium_first_downs": 0,
                          "right_medium_positive_epa_percent": 0,
                          "left_medium_targeted_qb_rating": 0,
                          "right_short_contested_receptions": 0,
                          "right_deep_avoided_tackles": 0,
                          "right_medium_fumbles": 0,
                          "right_behind_los_fumbles": 0,
                          "center_deep_drops": 0,
                          "center_medium_avg_depth_of_target": null,
                          "right_behind_los_pass_block_rate": 0,
                          "left_short_yards_after_catch": 0,
                          "right_behind_los_pass_blocks": 0,
                          "left_behind_los_avg_depth_of_target": -3,
                          "center_medium_epa": 0.3,
                          "left_medium_targets_percent": 0,
                          "left_behind_los_grades_pass_route": 81.5,
                          "center_behind_los_yards_per_reception": 3.5,
                          "left_deep_targets": 0,
                          "short_contested_targets": 1,
                          "left_medium_contested_catch_rate": null,
                          "left_deep_yprr": 0,
                          "right_medium_yards_after_catch_per_reception": null,
                          "right_medium_longest": 0,
                          "behind_los_drop_rate": 0,
                          "right_behind_los_epa": 0.79,
                          "player_game_count": 1,
                          "left_short_pass_plays": 3,
                          "right_short_touchdowns": 0,
                          "behind_los_first_downs": 1,
                          "right_deep_receptions": 0,
                          "left_medium_pass_plays": 3,
                          "eligible_season": 2017,
                          "center_behind_los_yards": 7,
                          "right_medium_pass_blocks": 0,
                          "left_short_grades_pass_route": null,
                          "left_behind_los_targets_percent": 100,
                          "behind_los_longest": 11,
                          "right_medium_first_downs": 0,
                          "center_deep_yards_after_catch_per_reception": null,
                          "deep_contested_targets": 0,
                          "behind_los_avoided_tackles": 0,
                          "left_behind_los_receptions": 1,
                          "right_short_yards_after_catch": 0,
                          "right_behind_los_yards_after_catch": 0,
                          "right_short_pass_plays": 6,
                          "right_deep_epa": -0.25,
                          "left_short_caught_percent": null,
                          "center_behind_los_contested_catch_rate": null,
                          "right_short_yards_after_catch_per_reception": null,
                          "right_short_drop_rate": null,
                          "left_short_yards": 0,
                          "right_behind_los_avg_depth_of_target": null,
                          "right_deep_first_downs": 0,
                          "left_deep_positive_epa_percent": 0,
                          "short_yards_after_catch": 35,
                          "center_medium_yprr": 0,
                          "short_pass_blocks": 0,
                          "left_short_contested_receptions": 0,
                          "short_fumbles": 0,
                          "left_short_pass_block_rate": 0,
                          "center_deep_routes": 1,
                          "left_medium_avoided_tackles": 0,
                          "left_behind_los_pass_plays": 1,
                          "right_deep_touchdowns": 0,
                          "center_medium_receptions": 0,
                          "left_behind_los_drops": 0,
                          "center_short_targets_percent": 50,
                          "deep_epa": 0,
                          "medium_touchdowns": 0,
                          "left_medium_route_rate": 66.7,
                          "left_behind_los_grades_hands_drop": 64.7,
                          "left_deep_fumbles": 0,
                          "medium_avoided_tackles": 0,
                          "center_medium_contested_catch_rate": null,
                          "right_behind_los_routes": 1,
                          "short_targets_percent": 62.5,
                          "left_behind_los_yprr": 11,
                          "medium_route_rate": null,
                          "left_short_first_downs": 0,
                          "short_longest": 18,
                          "right_behind_los_grades_hands_drop": null,
                          "behind_los_contested_targets": 0,
                          "right_behind_los_avoided_tackles": 0,
                          "right_deep_longest": 0,
                          "right_deep_contested_targets": 0,
                          "right_deep_positive_epa_percent": 0,
                          "right_behind_los_pass_plays": 1,
                          "medium_contested_receptions": 0,
                          "short_targeted_qb_rating": 104.2,
                          "right_behind_los_interceptions": 0,
                          "behind_los_targets_percent": 37.5,
                          "center_deep_yards_after_catch": 0,
                          "behind_los_yards": 18,
                          "right_deep_targets_percent": 0,
                          "left_medium_fumbles": 0,
                          "short_receptions": 4,
                          "left_short_interceptions": 0,
                          "right_medium_interceptions": 0,
                          "left_behind_los_yards": 11,
                          "medium_first_downs": 0,
                          "left_short_avg_depth_of_target": null,
                          "right_medium_pass_block_rate": 0,
                          "right_medium_targets_percent": 0,
                          "left_behind_los_touchdowns": 0,
                          "right_behind_los_drop_rate": null,
                          "right_deep_fumbles": 0,
                          "left_deep_contested_receptions": 0,
                          "behind_los_drops": 0,
                          "short_yards_after_catch_per_reception": 8.8,
                          "medium_pass_plays": 0,
                          "behind_los_pass_plays": 3,
                          "left_deep_yards": 0,
                          "center_behind_los_longest": 7,
                          "center_medium_grades_hands_drop": null,
                          "left_behind_los_longest": 11,
                          "center_short_interceptions": 0,
                          "short_avg_depth_of_target": 2.6,
                          "deep_yprr": null,
                          "left_deep_touchdowns": 0,
                          "base_targets": 8,
                          "deep_yards": 0,
                          "center_medium_yards_after_catch": 0,
                          "left_medium_epa": 0.33,
                          "left_deep_avg_depth_of_target": null,
                          "deep_first_downs": 0,
                          "short_drop_rate": 0,
                          "left_medium_positive_epa_percent": 33.3,
                          "center_deep_touchdowns": 0,
                          "right_behind_los_yprr": 0,
                          "center_medium_pass_blocks": 1,
                          "short_positive_epa_percent": 80,
                          "medium_fumbles": 0,
                          "center_medium_yards_after_catch_per_reception": null,
                          "left_short_routes": 2,
                          "behind_los_route_rate": 100,
                          "behind_los_epa": 0.14,
                          "right_behind_los_contested_receptions": 0,
                          "right_medium_yards_after_catch": 0,
                          "center_short_touchdowns": 0,
                          "right_medium_drops": 0,
                          "left_behind_los_routes": 1,
                          "left_deep_epa": -0.25,
                          "left_short_targets": 0,
                          "left_deep_pass_block_rate": 0,
                          "right_deep_caught_percent": null,
                          "center_short_grades_pass_route": 93.1,
                          "left_behind_los_fumbles": 0,
                          "right_medium_touchdowns": 0,
                          "center_short_fumbles": 0,
                          "center_behind_los_routes": 2,
                          "behind_los_receptions": 3,
                          "medium_targets_percent": 0,
                          "left_medium_yards": 0,
                          "center_medium_touchdowns": 0,
                          "medium_targeted_qb_rating": 0,
                          "center_short_drop_rate": 0,
                          "penalties": 0,
                          "short_pass_block_rate": 0,
                          "right_deep_avg_depth_of_target": null,
                          "center_deep_yards": 0,
                          "center_short_yards_after_catch_per_reception": 8.8,
                          "right_short_targets": 0,
                          "behind_los_avg_depth_of_target": -2.7,
                          "left_behind_los_contested_catch_rate": null,
                          "center_short_targeted_qb_rating": 104.2,
                          "left_behind_los_epa": 0.58,
                          "deep_route_rate": null,
                          "short_yprr": 9,
                          "deep_caught_percent": null,
                          "center_medium_drop_rate": null,
                          "center_behind_los_yards_after_catch": 12,
                          "medium_yards": 0,
                          "center_deep_avoided_tackles": 0,
                          "left_short_contested_targets": 0,
                          "center_behind_los_first_downs": 0,
                          "center_medium_interceptions": 0,
                          "center_deep_yards_per_reception": null,
                          "center_deep_contested_targets": 0,
                          "left_short_targets_percent": 0,
                          "short_grades_hands_drop": 72.1,
                          "right_deep_yards_after_catch_per_reception": null,
                          "left_medium_contested_receptions": 0,
                          "center_short_yards_per_reception": 11.3,
                          "center_deep_grades_hands_drop": null,
                          "deep_longest": 0,
                          "left_medium_yards_after_catch_per_reception": null,
                          "right_short_interceptions": 0,
                          "center_short_caught_percent": 80,
                          "left_deep_interceptions": 0,
                          "short_yards_per_reception": 11.3,
                          "team": "CIN",
                          "center_short_avoided_tackles": 1,
                          "behind_los_yards_per_reception": 6,
                          "short_epa": 0.35,
                          "deep_drop_rate": null,
                          "left_deep_yards_per_reception": null,
                          "right_short_yprr": 0,
                          "declined_penalties": 0,
                          "medium_longest": 0,
                          "left_short_contested_catch_rate": null,
                          "right_medium_routes": 2,
                          "left_short_receptions": 0,
                          "left_deep_yards_after_catch_per_reception": null,
                          "deep_targets": 0,
                          "left_short_grades_hands_drop": null,
                          "right_short_epa": 0.38,
                          "left_behind_los_contested_receptions": 0,
                          "medium_targets": 0,
                          "behind_los_targeted_qb_rating": 91.7,
                          "center_short_contested_targets": 1,
                          "center_short_route_rate": 100,
                          "right_medium_route_rate": 100,
                          "left_short_epa": -2.4,
                          "left_deep_avoided_tackles": 0,
                          "center_behind_los_pass_blocks": 0,
                          "deep_interceptions": 0,
                          "right_short_caught_percent": null,
                          "center_deep_caught_percent": null,
                          "center_medium_fumbles": 0,
                          "behind_los_grades_hands_drop": 70.5,
                          "left_behind_los_targets": 1,
                          "right_medium_yprr": 0,
                          "right_short_receptions": 0,
                          "position": "HB",
                          "right_short_contested_targets": 0,
                          "center_medium_yards_per_reception": null,
                          "right_behind_los_yards": 0,
                          "center_behind_los_grades_hands_drop": 68.3,
                          "right_behind_los_receptions": 0,
                          "left_medium_caught_percent": null,
                          "left_medium_drops": 0,
                          "short_avoided_tackles": 1,
                          "center_short_epa": 0.07,
                          "center_behind_los_targets": 2,
                          "left_deep_pass_blocks": 0,
                          "left_short_drops": 0,
                          "medium_positive_epa_percent": null,
                          "center_deep_receptions": 0,
                          "right_medium_epa": -3.68,
                          "right_short_pass_block_rate": 16.7,
                          "center_deep_route_rate": 50,
                          "center_short_pass_plays": 10,
                          "center_deep_interceptions": 0,
                          "left_medium_yards_after_catch": 0,
                          "left_behind_los_pass_blocks": 0,
                          "right_behind_los_longest": 0,
                          "short_yards": 45,
                          "left_deep_receptions": 0,
                          "deep_grades_pass_route": null,
                          "left_medium_targets": 0,
                          "behind_los_grades_pass_route": 82.7,
                          "right_deep_targeted_qb_rating": 0,
                          "behind_los_pass_block_rate": 0,
                          "left_medium_pass_blocks": 1,
                          "player": "Joe Mixon",
                          "left_medium_avg_depth_of_target": null,
                          "deep_avoided_tackles": 0,
                          "center_behind_los_yprr": 3.5,
                          "center_behind_los_epa": -0.08,
                          "right_behind_los_route_rate": 100,
                          "center_deep_fumbles": 0,
                          "left_medium_grades_hands_drop": null,
                          "right_medium_yards": 0,
                          "left_deep_yards_after_catch": 0,
                          "left_deep_pass_plays": 1,
                          "center_short_yards_after_catch": 35,
                          "center_behind_los_route_rate": 100,
                          "right_medium_drop_rate": null,
                          "medium_grades_hands_drop": null,
                          "right_deep_pass_blocks": 0,
                          "medium_contested_catch_rate": null,
                          "franchise_id": 7,
                          "center_behind_los_caught_percent": 100,
                          "right_behind_los_caught_percent": null,
                          "short_pass_plays": 5,
                          "center_behind_los_targeted_qb_rating": 81.3,
                          "deep_targeted_qb_rating": 0,
                          "center_short_pass_block_rate": 0,
                          "right_short_avoided_tackles": 0,
                          "left_short_drop_rate": null,
                          "left_medium_yards_per_reception": null,
                          "left_medium_receptions": 0,
                          "right_medium_pass_plays": 2,
                          "center_medium_contested_targets": 0,
                          "short_first_downs": 2,
                          "center_medium_targets_percent": 0,
                          "right_short_longest": 0,
                          "left_deep_longest": 0,
                          "right_short_drops": 0,
                          "right_medium_contested_receptions": 0,
                          "right_deep_contested_catch_rate": null,
                          "center_behind_los_receptions": 2,
                          "right_medium_caught_percent": null,
                          "right_deep_targets": 0,
                          "center_medium_positive_epa_percent": 50,
                          "medium_drops": 0,
                          "left_deep_grades_hands_drop": null,
                          "behind_los_positive_epa_percent": 66.7,
                          "left_short_avoided_tackles": 0,
                          "right_medium_grades_pass_route": null,
                          "right_short_grades_hands_drop": null,
                          "left_behind_los_yards_per_reception": 11,
                          "medium_yards_after_catch": 0,
                          "center_medium_pass_plays": 4,
                          "left_behind_los_caught_percent": 100,
                          "left_medium_contested_targets": 0,
                          "center_medium_contested_receptions": 0,
                          "behind_los_contested_catch_rate": null,
                          "behind_los_yards_after_catch": 26,
                          "left_deep_drops": 0,
                          "center_deep_positive_epa_percent": 50,
                          "left_behind_los_yards_after_catch_per_reception": 14,
                          "right_deep_routes": 1,
                          "center_deep_grades_pass_route": null,
                          "deep_yards_after_catch": 0,
                          "center_behind_los_drop_rate": 0,
                          "short_drops": 0,
                          "right_deep_contested_receptions": 0,
                          "left_behind_los_targeted_qb_rating": 112.5,
                          "right_medium_avg_depth_of_target": null,
                          "right_medium_avoided_tackles": 0,
                          "center_medium_caught_percent": null,
                          "center_behind_los_fumbles": 0,
                          "center_medium_first_downs": 0,
                          "behind_los_caught_percent": 100,
                          "short_routes": 5,
                          "left_deep_grades_pass_route": null,
                          "medium_routes": 0,
                          "medium_caught_percent": null,
                          "behind_los_contested_receptions": 0,
                          "behind_los_yprr": 6,
                          "left_short_touchdowns": 0,
                          "medium_drop_rate": null,
                          "player_id": 11803,
                          "left_behind_los_pass_block_rate": 0,
                          "right_deep_pass_plays": 1,
                          "short_caught_percent": 80,
                          "right_medium_yards_per_reception": null,
                          "center_medium_yards": 0,
                          "center_deep_epa": -0.68,
                          "left_medium_interceptions": 0,
                          "right_deep_interceptions": 0,
                          "deep_positive_epa_percent": null,
                          "deep_fumbles": 0,
                          "center_short_contested_catch_rate": 0,
                          "center_behind_los_targets_percent": 100,
                          "right_short_yards_per_reception": null,
                          "center_deep_targets_percent": 0,
                          "center_behind_los_yards_after_catch_per_reception": 6,
                          "behind_los_touchdowns": 0,
                          "medium_pass_block_rate": null,
                          "left_behind_los_route_rate": 100,
                          "right_behind_los_targeted_qb_rating": 0,
                          "right_behind_los_drops": 0,
                          "left_behind_los_first_downs": 1
                        },
                        {
                          "left_deep_route_rate": 100,
                          "center_short_first_downs": 0,
                          "center_short_routes": 11,
                          "right_behind_los_positive_epa_percent": 100,
                          "left_behind_los_yards_after_catch": 0,
                          "center_behind_los_contested_targets": 0,
                          "right_short_routes": 7,
                          "right_deep_pass_block_rate": 0,
                          "medium_interceptions": 2,
                          "right_short_targets_percent": 28.6,
                          "left_deep_contested_catch_rate": null,
                          "right_medium_grades_hands_drop": null,
                          "left_short_targeted_qb_rating": 91.7,
                          "right_medium_contested_catch_rate": null,
                          "short_targets": 3,
                          "deep_contested_catch_rate": 0,
                          "center_behind_los_drops": 0,
                          "center_behind_los_interceptions": 0,
                          "left_behind_los_interceptions": 0,
                          "left_deep_first_downs": 0,
                          "left_behind_los_contested_targets": 0,
                          "center_deep_avg_depth_of_target": 25,
                          "center_short_drops": 0,
                          "right_behind_los_targets": 0,
                          "right_behind_los_yards_after_catch_per_reception": null,
                          "center_deep_first_downs": 1,
                          "behind_los_yards_after_catch_per_reception": null,
                          "right_deep_grades_pass_route": null,
                          "left_short_fumbles": 0,
                          "right_short_positive_epa_percent": 71.4,
                          "center_deep_pass_block_rate": 0,
                          "left_behind_los_avoided_tackles": 0,
                          "center_short_longest": 0,
                          "left_deep_drop_rate": null,
                          "center_short_contested_receptions": 0,
                          "left_deep_routes": 1,
                          "deep_drops": 0,
                          "deep_contested_receptions": 0,
                          "center_behind_los_touchdowns": 0,
                          "center_medium_targeted_qb_rating": 0,
                          "left_short_yards_per_reception": 6,
                          "deep_touchdowns": 0,
                          "left_short_yprr": 1.5,
                          "center_deep_drop_rate": 0,
                          "center_behind_los_pass_plays": 1,
                          "right_short_first_downs": 1,
                          "right_behind_los_first_downs": 0,
                          "right_behind_los_grades_pass_route": null,
                          "short_interceptions": 0,
                          "behind_los_routes": 0,
                          "right_behind_los_contested_targets": 0,
                          "left_medium_grades_pass_route": null,
                          "right_short_contested_catch_rate": null,
                          "draft_season": 2016,
                          "center_short_grades_hands_drop": null,
                          "deep_receptions": 1,
                          "center_deep_pass_blocks": 0,
                          "left_short_yards_after_catch_per_reception": 0,
                          "center_medium_avoided_tackles": 0,
                          "center_medium_grades_pass_route": 57.5,
                          "center_behind_los_positive_epa_percent": 100,
                          "medium_yards_after_catch_per_reception": null,
                          "medium_receptions": 0,
                          "deep_pass_blocks": 0,
                          "right_deep_yards_per_reception": null,
                          "center_medium_longest": 0,
                          "center_deep_contested_catch_rate": 0,
                          "medium_epa": -4.74,
                          "left_short_route_rate": 66.7,
                          "right_deep_grades_hands_drop": null,
                          "center_deep_targets": 2,
                          "short_contested_receptions": 0,
                          "center_deep_pass_plays": 2,
                          "left_medium_routes": 3,
                          "deep_yards_after_catch_per_reception": 0,
                          "center_deep_contested_receptions": 0,
                          "center_short_pass_blocks": 0,
                          "team_name": "CIN",
                          "deep_pass_block_rate": 0,
                          "short_touchdowns": 1,
                          "center_medium_drops": 0,
                          "left_short_pass_blocks": 0,
                          "right_short_grades_pass_route": 77.1,
                          "center_short_positive_epa_percent": 63.6,
                          "deep_avg_depth_of_target": 25,
                          "deep_grades_hands_drop": 64.7,
                          "center_behind_los_avg_depth_of_target": null,
                          "left_deep_caught_percent": null,
                          "right_behind_los_contested_catch_rate": null,
                          "center_medium_route_rate": 80,
                          "short_grades_pass_route": 86.7,
                          "center_behind_los_contested_receptions": 0,
                          "center_short_receptions": 0,
                          "center_short_yprr": 0,
                          "medium_pass_blocks": 0,
                          "medium_yards_per_reception": null,
                          "center_deep_yprr": 11,
                          "right_deep_drop_rate": null,
                          "center_short_targets": 0,
                          "center_medium_pass_block_rate": 0,
                          "left_behind_los_drop_rate": null,
                          "right_behind_los_targets_percent": 0,
                          "short_contested_catch_rate": null,
                          "behind_los_fumbles": 0,
                          "left_medium_drop_rate": null,
                          "left_medium_longest": 0,
                          "jersey_number": "83",
                          "medium_yprr": 0,
                          "left_short_positive_epa_percent": 50,
                          "center_behind_los_pass_block_rate": 0,
                          "right_short_fumbles": 0,
                          "right_deep_route_rate": 0,
                          "right_short_pass_blocks": 0,
                          "left_short_longest": 6,
                          "medium_contested_targets": 0,
                          "behind_los_interceptions": 0,
                          "right_medium_targeted_qb_rating": 0,
                          "right_deep_drops": 0,
                          "right_short_route_rate": 100,
                          "medium_grades_pass_route": 56.8,
                          "right_deep_yards": 0,
                          "right_medium_contested_targets": 0,
                          "center_medium_targets": 1,
                          "right_short_avg_depth_of_target": 2.5,
                          "center_deep_longest": 22,
                          "right_behind_los_yards_per_reception": null,
                          "left_medium_pass_block_rate": 0,
                          "right_deep_yards_after_catch": 0,
                          "right_medium_receptions": 0,
                          "right_short_targeted_qb_rating": 118.8,
                          "left_deep_targets_percent": 0,
                          "behind_los_pass_blocks": 0,
                          "right_behind_los_touchdowns": 0,
                          "right_medium_targets": 1,
                          "deep_routes": 2,
                          "left_medium_yprr": 0,
                          "deep_yards_per_reception": 22,
                          "center_behind_los_avoided_tackles": 0,
                          "left_deep_contested_targets": 0,
                          "medium_avg_depth_of_target": 13.5,
                          "short_route_rate": 100,
                          "left_behind_los_positive_epa_percent": 100,
                          "left_medium_touchdowns": 0,
                          "deep_targets_percent": 28.6,
                          "behind_los_targets": 0,
                          "center_short_yards": 0,
                          "center_medium_routes": 4,
                          "center_behind_los_grades_pass_route": null,
                          "right_deep_yprr": null,
                          "center_deep_targeted_qb_rating": 50,
                          "left_deep_targeted_qb_rating": 0,
                          "deep_pass_plays": 2,
                          "center_short_avg_depth_of_target": null,
                          "right_short_yards": 5,
                          "left_medium_first_downs": 0,
                          "right_medium_positive_epa_percent": 33.3,
                          "left_medium_targeted_qb_rating": 0,
                          "right_short_contested_receptions": 0,
                          "right_deep_avoided_tackles": 0,
                          "right_medium_fumbles": 0,
                          "right_behind_los_fumbles": 0,
                          "center_deep_drops": 0,
                          "center_medium_avg_depth_of_target": 11,
                          "right_behind_los_pass_block_rate": 0,
                          "left_short_yards_after_catch": 0,
                          "right_behind_los_pass_blocks": 0,
                          "left_behind_los_avg_depth_of_target": null,
                          "center_medium_epa": 0.4,
                          "left_medium_targets_percent": 0,
                          "left_behind_los_grades_pass_route": null,
                          "center_behind_los_yards_per_reception": null,
                          "left_deep_targets": 0,
                          "short_contested_targets": 0,
                          "left_medium_contested_catch_rate": null,
                          "left_deep_yprr": 0,
                          "right_medium_yards_after_catch_per_reception": null,
                          "right_medium_longest": 0,
                          "behind_los_drop_rate": null,
                          "right_behind_los_epa": 0.79,
                          "player_game_count": 1,
                          "left_short_pass_plays": 6,
                          "right_short_touchdowns": 1,
                          "behind_los_first_downs": 0,
                          "right_deep_receptions": 0,
                          "left_medium_pass_plays": 3,
                          "eligible_season": 2016,
                          "center_behind_los_yards": 0,
                          "right_medium_pass_blocks": 0,
                          "left_short_grades_pass_route": 78.1,
                          "left_behind_los_targets_percent": 0,
                          "behind_los_longest": 0,
                          "right_medium_first_downs": 0,
                          "center_deep_yards_after_catch_per_reception": 0,
                          "deep_contested_targets": 1,
                          "behind_los_avoided_tackles": 0,
                          "left_behind_los_receptions": 0,
                          "right_short_yards_after_catch": 1,
                          "right_behind_los_yards_after_catch": 0,
                          "right_short_pass_plays": 7,
                          "right_deep_epa": 0,
                          "left_short_caught_percent": 100,
                          "center_behind_los_contested_catch_rate": null,
                          "right_short_yards_after_catch_per_reception": 0.5,
                          "right_short_drop_rate": 0,
                          "left_short_yards": 6,
                          "right_behind_los_avg_depth_of_target": null,
                          "right_deep_first_downs": 0,
                          "left_deep_positive_epa_percent": 0,
                          "short_yards_after_catch": 1,
                          "center_medium_yprr": 0,
                          "short_pass_blocks": 0,
                          "left_short_contested_receptions": 0,
                          "short_fumbles": 0,
                          "left_short_pass_block_rate": 0,
                          "center_deep_routes": 2,
                          "left_medium_avoided_tackles": 0,
                          "left_behind_los_pass_plays": 1,
                          "right_deep_touchdowns": 0,
                          "center_medium_receptions": 0,
                          "left_behind_los_drops": 0,
                          "center_short_targets_percent": 0,
                          "deep_epa": -0.68,
                          "medium_touchdowns": 0,
                          "left_medium_route_rate": 100,
                          "left_behind_los_grades_hands_drop": null,
                          "left_deep_fumbles": 0,
                          "medium_avoided_tackles": 0,
                          "center_medium_contested_catch_rate": null,
                          "right_behind_los_routes": 1,
                          "short_targets_percent": 42.9,
                          "left_behind_los_yprr": 0,
                          "medium_route_rate": 66.7,
                          "left_short_first_downs": 1,
                          "short_longest": 6,
                          "right_behind_los_grades_hands_drop": null,
                          "behind_los_contested_targets": 0,
                          "right_behind_los_avoided_tackles": 0,
                          "right_deep_longest": 0,
                          "right_deep_contested_targets": 0,
                          "right_deep_positive_epa_percent": null,
                          "right_behind_los_pass_plays": 1,
                          "medium_contested_receptions": 0,
                          "short_targeted_qb_rating": 121.5,
                          "right_behind_los_interceptions": 0,
                          "behind_los_targets_percent": 0,
                          "center_deep_yards_after_catch": 0,
                          "behind_los_yards": 0,
                          "right_deep_targets_percent": null,
                          "left_medium_fumbles": 0,
                          "short_receptions": 3,
                          "left_short_interceptions": 0,
                          "right_medium_interceptions": 1,
                          "left_behind_los_yards": 0,
                          "medium_first_downs": 0,
                          "left_short_avg_depth_of_target": 6,
                          "right_medium_pass_block_rate": 0,
                          "right_medium_targets_percent": 33.3,
                          "left_behind_los_touchdowns": 0,
                          "right_behind_los_drop_rate": null,
                          "right_deep_fumbles": 0,
                          "left_deep_contested_receptions": 0,
                          "behind_los_drops": 0,
                          "short_yards_after_catch_per_reception": 0.3,
                          "medium_pass_plays": 3,
                          "behind_los_pass_plays": 0,
                          "left_deep_yards": 0,
                          "center_behind_los_longest": 0,
                          "center_medium_grades_hands_drop": null,
                          "left_behind_los_longest": 0,
                          "center_short_interceptions": 0,
                          "short_avg_depth_of_target": 3.7,
                          "deep_yprr": 11,
                          "left_deep_touchdowns": 0,
                          "base_targets": 7,
                          "deep_yards": 22,
                          "center_medium_yards_after_catch": 0,
                          "left_medium_epa": 0.33,
                          "left_deep_avg_depth_of_target": null,
                          "deep_first_downs": 1,
                          "short_drop_rate": 0,
                          "left_medium_positive_epa_percent": 33.3,
                          "center_deep_touchdowns": 0,
                          "right_behind_los_yprr": 0,
                          "center_medium_pass_blocks": 0,
                          "short_positive_epa_percent": 66.7,
                          "medium_fumbles": 0,
                          "center_medium_yards_after_catch_per_reception": null,
                          "left_short_routes": 4,
                          "behind_los_route_rate": null,
                          "behind_los_epa": 0,
                          "right_behind_los_contested_receptions": 0,
                          "right_medium_yards_after_catch": 0,
                          "center_short_touchdowns": 0,
                          "right_medium_drops": 0,
                          "left_behind_los_routes": 1,
                          "left_deep_epa": -0.25,
                          "left_short_targets": 1,
                          "left_deep_pass_block_rate": 0,
                          "right_deep_caught_percent": null,
                          "center_short_grades_pass_route": null,
                          "left_behind_los_fumbles": 0,
                          "right_medium_touchdowns": 0,
                          "center_short_fumbles": 0,
                          "center_behind_los_routes": 1,
                          "behind_los_receptions": 0,
                          "medium_targets_percent": 28.6,
                          "left_medium_yards": 0,
                          "center_medium_touchdowns": 0,
                          "medium_targeted_qb_rating": 0,
                          "center_short_drop_rate": null,
                          "penalties": 0,
                          "short_pass_block_rate": 0,
                          "right_deep_avg_depth_of_target": null,
                          "center_deep_yards": 22,
                          "center_short_yards_after_catch_per_reception": null,
                          "right_short_targets": 2,
                          "behind_los_avg_depth_of_target": null,
                          "left_behind_los_contested_catch_rate": null,
                          "center_short_targeted_qb_rating": 0,
                          "left_behind_los_epa": 0.58,
                          "deep_route_rate": 100,
                          "short_yprr": 3.67,
                          "deep_caught_percent": 50,
                          "center_medium_drop_rate": null,
                          "center_behind_los_yards_after_catch": 0,
                          "medium_yards": 0,
                          "center_deep_avoided_tackles": 0,
                          "left_short_contested_targets": 0,
                          "center_behind_los_first_downs": 0,
                          "center_medium_interceptions": 1,
                          "center_deep_yards_per_reception": 22,
                          "center_deep_contested_targets": 1,
                          "left_short_targets_percent": 25,
                          "short_grades_hands_drop": 70.5,
                          "right_deep_yards_after_catch_per_reception": null,
                          "left_medium_contested_receptions": 0,
                          "center_short_yards_per_reception": null,
                          "center_deep_grades_hands_drop": 64.7,
                          "deep_longest": 22,
                          "left_medium_yards_after_catch_per_reception": null,
                          "right_short_interceptions": 0,
                          "center_short_caught_percent": null,
                          "left_deep_interceptions": 0,
                          "short_yards_per_reception": 3.7,
                          "team": "CIN",
                          "center_short_avoided_tackles": 0,
                          "behind_los_yards_per_reception": null,
                          "short_epa": 0.92,
                          "deep_drop_rate": 0,
                          "left_deep_yards_per_reception": null,
                          "right_short_yprr": 0.71,
                          "declined_penalties": 0,
                          "medium_longest": 0,
                          "left_short_contested_catch_rate": null,
                          "right_medium_routes": 3,
                          "left_short_receptions": 1,
                          "left_deep_yards_after_catch_per_reception": null,
                          "deep_targets": 2,
                          "left_short_grades_hands_drop": 64.7,
                          "right_short_epa": 0.37,
                          "left_behind_los_contested_receptions": 0,
                          "medium_targets": 2,
                          "behind_los_targeted_qb_rating": 0,
                          "center_short_contested_targets": 0,
                          "center_short_route_rate": 100,
                          "right_medium_route_rate": 100,
                          "left_short_epa": -0.74,
                          "left_deep_avoided_tackles": 0,
                          "center_behind_los_pass_blocks": 0,
                          "deep_interceptions": 1,
                          "right_short_caught_percent": 100,
                          "center_deep_caught_percent": 50,
                          "center_medium_fumbles": 0,
                          "behind_los_grades_hands_drop": null,
                          "left_behind_los_targets": 0,
                          "right_medium_yprr": 0,
                          "right_short_receptions": 2,
                          "position": "WR",
                          "right_short_contested_targets": 0,
                          "center_medium_yards_per_reception": null,
                          "right_behind_los_yards": 0,
                          "center_behind_los_grades_hands_drop": null,
                          "right_behind_los_receptions": 0,
                          "left_medium_caught_percent": null,
                          "left_medium_drops": 0,
                          "short_avoided_tackles": 0,
                          "center_short_epa": 0.47,
                          "center_behind_los_targets": 0,
                          "left_deep_pass_blocks": 0,
                          "left_short_drops": 0,
                          "medium_positive_epa_percent": 0,
                          "center_deep_receptions": 1,
                          "right_medium_epa": -1.94,
                          "right_short_pass_block_rate": 0,
                          "center_deep_route_rate": 100,
                          "center_short_pass_plays": 11,
                          "center_deep_interceptions": 1,
                          "left_medium_yards_after_catch": 0,
                          "left_behind_los_pass_blocks": 0,
                          "right_behind_los_longest": 0,
                          "short_yards": 11,
                          "left_deep_receptions": 0,
                          "deep_grades_pass_route": 77.4,
                          "left_medium_targets": 0,
                          "behind_los_grades_pass_route": null,
                          "right_deep_targeted_qb_rating": 0,
                          "behind_los_pass_block_rate": null,
                          "left_medium_pass_blocks": 0,
                          "player": "Tyler Boyd",
                          "left_medium_avg_depth_of_target": null,
                          "deep_avoided_tackles": 0,
                          "center_behind_los_yprr": 0,
                          "center_behind_los_epa": 0.3,
                          "right_behind_los_route_rate": 100,
                          "center_deep_fumbles": 0,
                          "left_medium_grades_hands_drop": null,
                          "right_medium_yards": 0,
                          "left_deep_yards_after_catch": 0,
                          "left_deep_pass_plays": 1,
                          "center_short_yards_after_catch": 0,
                          "center_behind_los_route_rate": 100,
                          "right_medium_drop_rate": null,
                          "medium_grades_hands_drop": null,
                          "right_deep_pass_blocks": 0,
                          "medium_contested_catch_rate": null,
                          "franchise_id": 7,
                          "center_behind_los_caught_percent": null,
                          "right_behind_los_caught_percent": null,
                          "short_pass_plays": 3,
                          "center_behind_los_targeted_qb_rating": 0,
                          "deep_targeted_qb_rating": 50,
                          "center_short_pass_block_rate": 0,
                          "right_short_avoided_tackles": 0,
                          "left_short_drop_rate": 0,
                          "left_medium_yards_per_reception": null,
                          "left_medium_receptions": 0,
                          "right_medium_pass_plays": 3,
                          "center_medium_contested_targets": 0,
                          "short_first_downs": 2,
                          "center_medium_targets_percent": 25,
                          "right_short_longest": 3,
                          "left_deep_longest": 0,
                          "right_short_drops": 0,
                          "right_medium_contested_receptions": 0,
                          "right_deep_contested_catch_rate": null,
                          "center_behind_los_receptions": 0,
                          "right_medium_caught_percent": 0,
                          "right_deep_targets": 0,
                          "center_medium_positive_epa_percent": 75,
                          "medium_drops": 0,
                          "left_deep_grades_hands_drop": null,
                          "behind_los_positive_epa_percent": null,
                          "left_short_avoided_tackles": 0,
                          "right_medium_grades_pass_route": 60,
                          "right_short_grades_hands_drop": 68.3,
                          "left_behind_los_yards_per_reception": null,
                          "medium_yards_after_catch": 0,
                          "center_medium_pass_plays": 5,
                          "left_behind_los_caught_percent": null,
                          "left_medium_contested_targets": 0,
                          "center_medium_contested_receptions": 0,
                          "behind_los_contested_catch_rate": null,
                          "behind_los_yards_after_catch": 0,
                          "left_deep_drops": 0,
                          "center_deep_positive_epa_percent": 50,
                          "left_behind_los_yards_after_catch_per_reception": null,
                          "right_deep_routes": 0,
                          "center_deep_grades_pass_route": 77.4,
                          "deep_yards_after_catch": 0,
                          "center_behind_los_drop_rate": null,
                          "short_drops": 0,
                          "right_deep_contested_receptions": 0,
                          "left_behind_los_targeted_qb_rating": 0,
                          "right_medium_avg_depth_of_target": 16,
                          "right_medium_avoided_tackles": 0,
                          "center_medium_caught_percent": 0,
                          "center_behind_los_fumbles": 0,
                          "center_medium_first_downs": 0,
                          "behind_los_caught_percent": null,
                          "short_routes": 3,
                          "left_deep_grades_pass_route": null,
                          "medium_routes": 2,
                          "medium_caught_percent": 0,
                          "behind_los_contested_receptions": 0,
                          "behind_los_yprr": null,
                          "left_short_touchdowns": 0,
                          "medium_drop_rate": null,
                          "player_id": 10689,
                          "left_behind_los_pass_block_rate": 0,
                          "right_deep_pass_plays": 1,
                          "short_caught_percent": 100,
                          "right_medium_yards_per_reception": null,
                          "center_medium_yards": 0,
                          "center_deep_epa": -0.68,
                          "left_medium_interceptions": 0,
                          "right_deep_interceptions": 0,
                          "deep_positive_epa_percent": 50,
                          "deep_fumbles": 0,
                          "center_short_contested_catch_rate": null,
                          "center_behind_los_targets_percent": 0,
                          "right_short_yards_per_reception": 2.5,
                          "center_deep_targets_percent": 100,
                          "center_behind_los_yards_after_catch_per_reception": null,
                          "behind_los_touchdowns": 0,
                          "medium_pass_block_rate": 0,
                          "left_behind_los_route_rate": 100,
                          "right_behind_los_targeted_qb_rating": 0,
                          "right_behind_los_drops": 0,
                          "left_behind_los_first_downs": 0
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/receiving/depth?league=nfl&season=2022&week=1&franchise_id=7&export=true`, cut to the header and the first 3 lines.",
                    "value": "player,player_id,position,team_name,player_game_count,base_targets,behind_los_avg_depth_of_target,behind_los_avoided_tackles,behind_los_caught_percent,behind_los_contested_catch_rate,behind_los_contested_receptions,behind_los_contested_targets,behind_los_drop_rate,behind_los_drops,behind_los_epa,behind_los_first_downs,behind_los_fumbles,behind_los_grades_hands_drop,behind_los_grades_pass_route,behind_los_interceptions,behind_los_longest,behind_los_pass_block_rate,behind_los_pass_blocks,behind_los_pass_plays,behind_los_positive_epa_percent,behind_los_receptions,behind_los_route_rate,behind_los_routes,behind_los_targeted_qb_rating,behind_los_targets,behind_los_targets_percent,behind_los_touchdowns,behind_los_yards,behind_los_yards_after_catch,behind_los_yards_after_catch_per_reception,behind_los_yards_per_reception,behind_los_yprr,center_behind_los_avg_depth_of_target,center_behind_los_avoided_tackles,center_behind_los_caught_percent,center_behind_los_contested_catch_rate,center_behind_los_contested_receptions,center_behind_los_contested_targets,center_behind_los_drop_rate,center_behind_los_drops,center_behind_los_epa,center_behind_los_first_downs,center_behind_los_fumbles,center_behind_los_grades_hands_drop,center_behind_los_grades_pass_route,center_behind_los_interceptions,center_behind_los_longest,center_behind_los_pass_block_rate,center_behind_los_pass_blocks,center_behind_los_pass_plays,center_behind_los_positive_epa_percent,center_behind_los_receptions,center_behind_los_route_rate,center_behind_los_routes,center_behind_los_targeted_qb_rating,center_behind_los_targets,center_behind_los_targets_percent,center_behind_los_touchdowns,center_behind_los_yards,center_behind_los_yards_after_catch,center_behind_los_yards_after_catch_per_reception,center_behind_los_yards_per_reception,center_behind_los_yprr,center_deep_avg_depth_of_target,center_deep_avoided_tackles,center_deep_caught_percent,center_deep_contested_catch_rate,center_deep_contested_receptions,center_deep_contested_targets,center_deep_drop_rate,center_deep_drops,center_deep_epa,center_deep_first_downs,center_deep_fumbles,center_deep_grades_hands_drop,center_deep_grades_pass_route,center_deep_interceptions,center_deep_longest,center_deep_pass_block_rate,center_deep_pass_blocks,center_deep_pass_plays,center_deep_positive_epa_percent,center_deep_receptions,center_deep_route_rate,center_deep_routes,center_deep_targeted_qb_rating,center_deep_targets,center_deep_targets_percent,center_deep_touchdowns,center_deep_yards,center_deep_yards_after_catch,center_deep_yards_after_catch_per_reception,center_deep_yards_per_reception,center_deep_yprr,center_medium_avg_depth_of_target,center_medium_avoided_tackles,center_medium_caught_percent,center_medium_contested_catch_rate,center_medium_contested_receptions,center_medium_contested_targets,center_medium_drop_rate,center_medium_drops,center_medium_epa,center_medium_first_downs,center_medium_fumbles,center_medium_grades_hands_drop,center_medium_grades_pass_route,center_medium_interceptions,center_medium_longest,center_medium_pass_block_rate,center_medium_pass_blocks,center_medium_pass_plays,center_medium_positive_epa_percent,center_medium_receptions,center_medium_route_rate,center_medium_routes,center_medium_targeted_qb_rating,center_medium_targets,center_medium_targets_percent,center_medium_touchdowns,center_medium_yards,center_medium_yards_after_catch,center_medium_yards_after_catch_per_reception,center_medium_yards_per_reception,center_medium_yprr,center_short_avg_depth_of_target,center_short_avoided_tackles,center_short_caught_percent,center_short_contested_catch_rate,center_short_contested_receptions,center_short_contested_targets,center_short_drop_rate,center_short_drops,center_short_epa,center_short_first_downs,center_short_fumbles,center_short_grades_hands_drop,center_short_grades_pass_route,center_short_interceptions,center_short_longest,center_short_pass_block_rate,center_short_pass_blocks,center_short_pass_plays,center_short_positive_epa_percent,center_short_receptions,center_short_route_rate,center_short_routes,center_short_targeted_qb_rating,center_short_targets,center_short_targets_percent,center_short_touchdowns,center_short_yards,center_short_yards_after_catch,center_short_yards_after_catch_per_reception,center_short_yards_per_reception,center_short_yprr,declined_penalties,deep_avg_depth_of_target,deep_avoided_tackles,deep_caught_percent,deep_contested_catch_rate,deep_contested_receptions,deep_contested_targets,deep_drop_rate,deep_drops,deep_epa,deep_first_downs,deep_fumbles,deep_grades_hands_drop,deep_grades_pass_route,deep_interceptions,deep_longest,deep_pass_block_rate,deep_pass_blocks,deep_pass_plays,deep_positive_epa_percent,deep_receptions,deep_route_rate,deep_routes,deep_targeted_qb_rating,deep_targets,deep_targets_percent,deep_touchdowns,deep_yards,deep_yards_after_catch,deep_yards_after_catch_per_reception,deep_yards_per_reception,deep_yprr,franchise_id,left_behind_los_avg_depth_of_target,left_behind_los_avoided_tackles,left_behind_los_caught_percent,left_behind_los_contested_catch_rate,left_behind_los_contested_receptions,left_behind_los_contested_targets,left_behind_los_drop_rate,left_behind_los_drops,left_behind_los_epa,left_behind_los_first_downs,left_behind_los_fumbles,left_behind_los_grades_hands_drop,left_behind_los_grades_pass_route,left_behind_los_interceptions,left_behind_los_longest,left_behind_los_pass_block_rate,left_behind_los_pass_blocks,left_behind_los_pass_plays,left_behind_los_positive_epa_percent,left_behind_los_receptions,left_behind_los_route_rate,left_behind_los_routes,left_behind_los_targeted_qb_rating,left_behind_los_targets,left_behind_los_targets_percent,left_behind_los_touchdowns,left_behind_los_yards,left_behind_los_yards_after_catch,left_behind_los_yards_after_catch_per_reception,left_behind_los_yards_per_reception,left_behind_los_yprr,left_deep_avg_depth_of_target,left_deep_avoided_tackles,left_deep_caught_percent,left_deep_contested_catch_rate,left_deep_contested_receptions,left_deep_contested_targets,left_deep_drop_rate,left_deep_drops,left_deep_epa,left_deep_first_downs,left_deep_fumbles,left_deep_grades_hands_drop,left_deep_grades_pass_route,left_deep_interceptions,left_deep_longest,left_deep_pass_block_rate,left_deep_pass_blocks,left_deep_pass_plays,left_deep_positive_epa_percent,left_deep_receptions,left_deep_route_rate,left_deep_routes,left_deep_targeted_qb_rating,left_deep_targets,left_deep_targets_percent,left_deep_touchdowns,left_deep_yards,left_deep_yards_after_catch,left_deep_yards_after_catch_per_reception,left_deep_yards_per_reception,left_deep_yprr,left_medium_avg_depth_of_target,left_medium_avoided_tackles,left_medium_caught_percent,left_medium_contested_catch_rate,left_medium_contested_receptions,left_medium_contested_targets,left_medium_drop_rate,left_medium_drops,left_medium_epa,left_medium_first_downs,left_medium_fumbles,left_medium_grades_hands_drop,left_medium_grades_pass_route,left_medium_interceptions,left_medium_longest,left_medium_pass_block_rate,left_medium_pass_blocks,left_medium_pass_plays,left_medium_positive_epa_percent,left_medium_receptions,left_medium_route_rate,left_medium_routes,left_medium_targeted_qb_rating,left_medium_targets,left_medium_targets_percent,left_medium_touchdowns,left_medium_yards,left_medium_yards_after_catch,left_medium_yards_after_catch_per_reception,left_medium_yards_per_reception,left_medium_yprr,left_short_avg_depth_of_target,left_short_avoided_tackles,left_short_caught_percent,left_short_contested_catch_rate,left_short_contested_receptions,left_short_contested_targets,left_short_drop_rate,left_short_drops,left_short_epa,left_short_first_downs,left_short_fumbles,left_short_grades_hands_drop,left_short_grades_pass_route,left_short_interceptions,left_short_longest,left_short_pass_block_rate,left_short_pass_blocks,left_short_pass_plays,left_short_positive_epa_percent,left_short_receptions,left_short_route_rate,left_short_routes,left_short_targeted_qb_rating,left_short_targets,left_short_targets_percent,left_short_touchdowns,left_short_yards,left_short_yards_after_catch,left_short_yards_after_catch_per_reception,left_short_yards_per_reception,left_short_yprr,medium_avg_depth_of_target,medium_avoided_tackles,medium_caught_percent,medium_contested_catch_rate,medium_contested_receptions,medium_contested_targets,medium_drop_rate,medium_drops,medium_epa,medium_first_downs,medium_fumbles,medium_grades_hands_drop,medium_grades_pass_route,medium_interceptions,medium_longest,medium_pass_block_rate,medium_pass_blocks,medium_pass_plays,medium_positive_epa_percent,medium_receptions,medium_route_rate,medium_routes,medium_targeted_qb_rating,medium_targets,medium_targets_percent,medium_touchdowns,medium_yards,medium_yards_after_catch,medium_yards_after_catch_per_reception,medium_yards_per_reception,medium_yprr,penalties,right_behind_los_avg_depth_of_target,right_behind_los_avoided_tackles,right_behind_los_caught_percent,right_behind_los_contested_catch_rate,right_behind_los_contested_receptions,right_behind_los_contested_targets,right_behind_los_drop_rate,right_behind_los_drops,right_behind_los_epa,right_behind_los_first_downs,right_behind_los_fumbles,right_behind_los_grades_hands_drop,right_behind_los_grades_pass_route,right_behind_los_interceptions,right_behind_los_longest,right_behind_los_pass_block_rate,right_behind_los_pass_blocks,right_behind_los_pass_plays,right_behind_los_positive_epa_percent,right_behind_los_receptions,right_behind_los_route_rate,right_behind_los_routes,right_behind_los_targeted_qb_rating,right_behind_los_targets,right_behind_los_targets_percent,right_behind_los_touchdowns,right_behind_los_yards,right_behind_los_yards_after_catch,right_behind_los_yards_after_catch_per_reception,right_behind_los_yards_per_reception,right_behind_los_yprr,right_deep_avg_depth_of_target,right_deep_avoided_tackles,right_deep_caught_percent,right_deep_contested_catch_rate,right_deep_contested_receptions,right_deep_contested_targets,right_deep_drop_rate,right_deep_drops,right_deep_epa,right_deep_first_downs,right_deep_fumbles,right_deep_grades_hands_drop,right_deep_grades_pass_route,right_deep_interceptions,right_deep_longest,right_deep_pass_block_rate,right_deep_pass_blocks,right_deep_pass_plays,right_deep_positive_epa_percent,right_deep_receptions,right_deep_route_rate,right_deep_routes,right_deep_targeted_qb_rating,right_deep_targets,right_deep_targets_percent,right_deep_touchdowns,right_deep_yards,right_deep_yards_after_catch,right_deep_yards_after_catch_per_reception,right_deep_yards_per_reception,right_deep_yprr,right_medium_avg_depth_of_target,right_medium_avoided_tackles,right_medium_caught_percent,right_medium_contested_catch_rate,right_medium_contested_receptions,right_medium_contested_targets,right_medium_drop_rate,right_medium_drops,right_medium_epa,right_medium_first_downs,right_medium_fumbles,right_medium_grades_hands_drop,right_medium_grades_pass_route,right_medium_interceptions,right_medium_longest,right_medium_pass_block_rate,right_medium_pass_blocks,right_medium_pass_plays,right_medium_positive_epa_percent,right_medium_receptions,right_medium_route_rate,right_medium_routes,right_medium_targeted_qb_rating,right_medium_targets,right_medium_targets_percent,right_medium_touchdowns,right_medium_yards,right_medium_yards_after_catch,right_medium_yards_after_catch_per_reception,right_medium_yards_per_reception,right_medium_yprr,right_short_avg_depth_of_target,right_short_avoided_tackles,right_short_caught_percent,right_short_contested_catch_rate,right_short_contested_receptions,right_short_contested_targets,right_short_drop_rate,right_short_drops,right_short_epa,right_short_first_downs,right_short_fumbles,right_short_grades_hands_drop,right_short_grades_pass_route,right_short_interceptions,right_short_longest,right_short_pass_block_rate,right_short_pass_blocks,right_short_pass_plays,right_short_positive_epa_percent,right_short_receptions,right_short_route_rate,right_short_routes,right_short_targeted_qb_rating,right_short_targets,right_short_targets_percent,right_short_touchdowns,right_short_yards,right_short_yards_after_catch,right_short_yards_after_catch_per_reception,right_short_yards_per_reception,right_short_yprr,short_avg_depth_of_target,short_avoided_tackles,short_caught_percent,short_contested_catch_rate,short_contested_receptions,short_contested_targets,short_drop_rate,short_drops,short_epa,short_first_downs,short_fumbles,short_grades_hands_drop,short_grades_pass_route,short_interceptions,short_longest,short_pass_block_rate,short_pass_blocks,short_pass_plays,short_positive_epa_percent,short_receptions,short_route_rate,short_routes,short_targeted_qb_rating,short_targets,short_targets_percent,short_touchdowns,short_yards,short_yards_after_catch,short_yards_after_catch_per_reception,short_yards_per_reception,short_yprr\r\nJa'Marr Chase,84270,WR,CIN,1,15,-1.0,0,100.0,,0,0,0.0,0,0.79,1,0,64.7,78.5,0,12,0.0,0,1,100.0,1,100.0,1,116.7,1,6.7,0,12,13,13.0,12.0,12.0,,0,,,0,0,,0,-0.08,0,0,,,0,0,0.0,0,2,50.0,0,100.0,2,0.0,0,0.0,0,0,0,,,0.0,,0,,,0,0,,0,-0.68,0,0,,,0,0,0.0,0,2,50.0,0,100.0,2,0.0,0,0.0,0,0,0,,,0.0,13.5,2,100.0,,0,0,0.0,0,0.13,2,0,68.3,95.2,0,24,0.0,0,7,50.0,2,85.7,6,118.8,2,33.3,0,45,18,9.0,22.5,7.5,6.7,0,66.7,,0,0,33.3,1,0.34,2,0,29.9,72.0,0,14,0.0,0,15,60.0,2,100.0,15,92.4,3,20.0,0,25,13,6.5,12.5,1.67,0,20.0,0,0.0,,0,0,,0,-0.25,0,0,,59.3,0,0,0.0,0,1,0.0,0,100.0,1,39.6,1,6.7,0,0,0,,,0.0,7,,0,,,0,0,,0,0.58,0,0,,,0,0,0.0,0,1,100.0,0,100.0,1,0.0,0,0.0,0,0,0,,,0.0,,0,,,0,0,,0,-0.25,0,0,,,0,0,0.0,0,1,0.0,0,100.0,1,0.0,0,0.0,0,0,0,,,0.0,11.5,0,50.0,0.0,0,1,0.0,0,0.33,1,0,64.7,76.4,0,12,0.0,0,3,33.3,1,100.0,3,68.8,2,66.7,0,12,0,0.0,12.0,4.0,8.0,0,0.0,,0,0,,0,-0.74,0,0,,57.0,0,0,0.0,0,6,50.0,0,66.7,4,39.6,2,50.0,0,0,0,,,0.0,13.0,2,80.0,0.0,0,1,0.0,0,1.19,4,0,72.1,95.4,0,24,0.0,0,5,80.0,4,100.0,5,118.8,5,33.3,0,72,18,4.5,18.0,14.4,0,-1.0,0,100.0,,0,0,0.0,0,0.65,1,0,64.7,78.5,0,12,0.0,0,2,100.0,1,100.0,2,116.7,1,50.0,0,12,13,13.0,12.0,6.0,20.0,0,0.0,,0,0,,0,-0.46,0,0,,59.3,0,0,0.0,0,3,0.0,0,66.7,2,39.6,1,50.0,0,0,0,,,0.0,15.0,0,100.0,,0,0,0.0,0,-0.94,1,0,64.7,78.1,0,15,0.0,0,4,50.0,1,100.0,4,118.8,1,25.0,0,15,0,0.0,15.0,3.75,5.7,0,100.0,,0,0,0.0,0,0.37,3,0,70.5,84.9,0,10,0.0,0,7,71.4,3,100.0,7,134.0,3,42.9,1,20,4,1.3,6.7,2.86,6.6,0,62.5,,0,0,16.7,1,0.29,5,0,45.8,81.8,0,14,0.0,0,8,62.5,5,100.0,8,117.2,8,53.3,1,45,17,3.4,9.0,5.63\r\nJoe Mixon,11803,HB,CIN,1,8,-2.7,0,100.0,,0,0,0.0,0,0.14,1,0,70.5,82.7,0,11,0.0,0,3,66.7,3,100.0,3,91.7,3,37.5,0,18,26,8.7,6.0,6.0,-2.5,0,100.0,,0,0,0.0,0,-0.08,0,0,68.3,68.9,0,7,0.0,0,2,50.0,2,100.0,2,81.3,2,100.0,0,7,12,6.0,3.5,3.5,,0,,,0,0,,0,-0.68,0,0,,,0,0,50.0,1,2,50.0,0,50.0,1,0.0,0,0.0,0,0,0,,,0.0,,0,,,0,0,,0,0.3,0,0,,,0,0,25.0,1,4,50.0,0,75.0,3,0.0,0,0.0,0,0,0,,,0.0,2.6,1,80.0,0.0,0,1,0.0,0,0.07,2,0,72.1,93.1,0,18,0.0,0,10,60.0,4,100.0,10,104.2,5,50.0,0,45,35,8.8,11.3,4.5,0,,0,,,0,0,,0,0.0,0,0,,,0,0,,0,0,,0,,0,0.0,0,0.0,0,0,0,,,,7,-3.0,0,100.0,,0,0,0.0,0,0.58,1,0,64.7,81.5,0,11,0.0,0,1,100.0,1,100.0,1,112.5,1,100.0,0,11,14,14.0,11.0,11.0,,0,,,0,0,,0,-0.25,0,0,,,0,0,0.0,0,1,0.0,0,100.0,1,0.0,0,0.0,0,0,0,,,0.0,,0,,,0,0,,0,0.33,0,0,,,0,0,33.3,1,3,33.3,0,66.7,2,0.0,0,0.0,0,0,0,,,0.0,,0,,,0,0,,0,-2.4,0,0,,,0,0,0.0,0,3,0.0,0,66.7,2,0.0,0,0.0,0,0,0,,,0.0,,0,,,0,0,,0,0.0,0,0,,,0,0,,0,0,,0,,0,0.0,0,0.0,0,0,0,,,,0,,0,,,0,0,,0,0.79,0,0,,,0,0,0.0,0,1,100.0,0,100.0,1,0.0,0,0.0,0,0,0,,,0.0,,0,,,0,0,,0,-0.25,0,0,,,0,0,0.0,0,1,0.0,0,100.0,1,0.0,0,0.0,0,0,0,,,0.0,,0,,,0,0,,0,-3.68,0,0,,,0,0,0.0,0,2,0.0,0,100.0,2,0.0,0,0.0,0,0,0,,,0.0,,0,,,0,0,,0,0.38,0,0,,,0,0,16.7,1,6,66.7,0,83.3,5,0.0,0,0.0,0,0,0,,,0.0,2.6,1,80.0,0.0,0,1,0.0,0,0.35,2,0,72.1,93.1,0,18,0.0,0,5,80.0,4,100.0,5,104.2,5,62.5,0,45,35,8.8,11.3,9.0\r\nTyler Boyd,10689,WR,CIN,1,7,,0,,,0,0,,0,0.0,0,0,,,0,0,,0,0,,0,,0,0.0,0,0.0,0,0,0,,,,,0,,,0,0,,0,0.3,0,0,,,0,0,0.0,0,1,100.0,0,100.0,1,0.0,0,0.0,0,0,0,,,0.0,25.0,0,50.0,0.0,0,1,0.0,0,-0.68,1,0,64.7,77.4,1,22,0.0,0,2,50.0,1,100.0,2,50.0,2,100.0,0,22,0,0.0,22.0,11.0,11.0,0,0.0,,0,0,,0,0.4,0,0,,57.5,1,0,0.0,0,5,75.0,0,80.0,4,0.0,1,25.0,0,0,0,,,0.0,,0,,,0,0,,0,0.47,0,0,,,0,0,0.0,0,11,63.6,0,100.0,11,0.0,0,0.0,0,0,0,,,0.0,0,25.0,0,50.0,0.0,0,1,0.0,0,-0.68,1,0,64.7,77.4,1,22,0.0,0,2,50.0,1,100.0,2,50.0,2,28.6,0,22,0,0.0,22.0,11.0,7,,0,,,0,0,,0,0.58,0,0,,,0,0,0.0,0,1,100.0,0,100.0,1,0.0,0,0.0,0,0,0,,,0.0,,0,,,0,0,,0,-0.25,0,0,,,0,0,0.0,0,1,0.0,0,100.0,1,0.0,0,0.0,0,0,0,,,0.0,,0,,,0,0,,0,0.33,0,0,,,0,0,0.0,0,3,33.3,0,100.0,3,0.0,0,0.0,0,0,0,,,0.0,6.0,0,100.0,,0,0,0.0,0,-0.74,1,0,64.7,78.1,0,6,0.0,0,6,50.0,1,66.7,4,91.7,1,25.0,0,6,0,0.0,6.0,1.5,13.5,0,0.0,,0,0,,0,-4.74,0,0,,56.8,2,0,0.0,0,3,0.0,0,66.7,2,0.0,2,28.6,0,0,0,,,0.0,0,,0,,,0,0,,0,0.79,0,0,,,0,0,0.0,0,1,100.0,0,100.0,1,0.0,0,0.0,0,0,0,,,0.0,,0,,,0,0,,0,0.0,0,0,,,0,0,0.0,0,1,,0,0.0,0,0.0,0,,0,0,0,,,,16.0,0,0.0,,0,0,,0,-1.94,0,0,,60.0,1,0,0.0,0,3,33.3,0,100.0,3,0.0,1,33.3,0,0,0,,,0.0,2.5,0,100.0,,0,0,0.0,0,0.37,1,0,68.3,77.1,0,3,0.0,0,7,71.4,2,100.0,7,118.8,2,28.6,1,5,1,0.5,2.5,0.71,3.7,0,100.0,,0,0,0.0,0,0.92,2,0,70.5,86.7,0,6,0.0,0,3,66.7,3,100.0,3,121.5,3,42.9,1,11,1,0.3,3.7,3.67\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/receiving/scheme": {
      "get": {
        "operationId": "facet-receiving-scheme",
        "summary": "League-wide receiving-by-scheme leaderboard",
        "description": "Every qualifying receiver in the league, split by the coverage scheme they faced. Two complete\nrequests exist: `--league` with `--season` (a year, or a comma-separated list such as `2023,2024`),\nor `--game` alone (an id from `ref-games`) — anything less is refused with `400 invalid_parameter`.\nNarrow with `--week` and `--franchise`. `--division` fans the request out across NCAA divisions and\nis ignored for every other league. Grades are on PFF's 0-100 scale and every other column is a raw\ntotal or rate; which columns come back depends on the report, the position and the caller's\nentitlement. Add `--export true` for the raw CSV instead of JSON.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `receiving_scheme.csv` instead\nof JSON.",
        "tags": [
          "facet"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `receiving_scheme.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"receiving_scheme.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetReceivingSchemeResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/receiving/scheme?league=nfl&season=2022&week=1&franchise_id=7`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "receiving_scheme": [
                        {
                          "man_contested_catch_rate": 0,
                          "man_touchdowns": 1,
                          "zone_targets_percent": 17.1,
                          "man_interceptions": 0,
                          "zone_epa": -0.16,
                          "man_avg_depth_of_target": 8.9,
                          "zone_pass_blocks": 0,
                          "zone_avoided_tackles": 2,
                          "man_targeted_qb_rating": 96.4,
                          "draft_season": 2021,
                          "zone_positive_epa_percent": 54.3,
                          "man_targets_percent": 36.8,
                          "man_yards_per_reception": 10.7,
                          "team_name": "CIN",
                          "man_drop_rate": 25,
                          "zone_grades_pass_route": 81,
                          "jersey_number": "01",
                          "zone_fumbles": 0,
                          "man_pass_block_rate": 0,
                          "zone_yards": 83,
                          "man_yprr": 1.68,
                          "player_game_count": 1,
                          "eligible_season": 2021,
                          "zone_drops": 0,
                          "zone_receptions": 5,
                          "man_pass_plays": 23,
                          "man_epa": -0.36,
                          "zone_yards_per_reception": 16.6,
                          "man_contested_targets": 1,
                          "man_longest": 14,
                          "zone_yards_after_catch": 38,
                          "man_receptions": 3,
                          "man_avoided_tackles": 0,
                          "man_first_downs": 3,
                          "base_targets": 15,
                          "zone_contested_catch_rate": null,
                          "zone_targeted_qb_rating": 118.8,
                          "man_routes": 19,
                          "zone_grades_hands_drop": 73.4,
                          "man_route_rate": 82.6,
                          "zone_pass_block_rate": 0,
                          "man_grades_pass_route": 63.9,
                          "penalties": 0,
                          "zone_first_downs": 5,
                          "zone_yprr": 2.37,
                          "man_drops": 1,
                          "zone_caught_percent": 83.3,
                          "team": "CIN",
                          "man_fumbles": 0,
                          "declined_penalties": 0,
                          "man_yards_after_catch": 6,
                          "man_yards": 32,
                          "zone_pass_plays": 36,
                          "position": "WR",
                          "man_targets": 7,
                          "man_grades_hands_drop": 36.2,
                          "man_pass_blocks": 0,
                          "zone_touchdowns": 0,
                          "zone_route_rate": 97.2,
                          "zone_yards_after_catch_per_reception": 7.6,
                          "zone_avg_depth_of_target": 10.8,
                          "player": "Ja'Marr Chase",
                          "franchise_id": 7,
                          "zone_contested_targets": 0,
                          "zone_contested_receptions": 0,
                          "man_contested_receptions": 0,
                          "man_yards_after_catch_per_reception": 2,
                          "zone_targets": 6,
                          "zone_longest": 24,
                          "man_caught_percent": 42.9,
                          "zone_drop_rate": 0,
                          "zone_interceptions": 0,
                          "man_positive_epa_percent": 31.6,
                          "zone_routes": 35,
                          "player_id": 84270
                        },
                        {
                          "man_contested_catch_rate": null,
                          "man_touchdowns": 0,
                          "zone_targets_percent": 38.9,
                          "man_interceptions": 0,
                          "zone_epa": -0.44,
                          "man_avg_depth_of_target": null,
                          "zone_pass_blocks": 1,
                          "zone_avoided_tackles": 1,
                          "man_targeted_qb_rating": 0,
                          "draft_season": 2017,
                          "zone_positive_epa_percent": 52.6,
                          "man_targets_percent": 0,
                          "man_yards_per_reception": null,
                          "team_name": "CIN",
                          "man_drop_rate": null,
                          "zone_grades_pass_route": 90.8,
                          "jersey_number": "28",
                          "zone_fumbles": 0,
                          "man_pass_block_rate": 25,
                          "zone_yards": 63,
                          "man_yprr": 0,
                          "player_game_count": 1,
                          "eligible_season": 2017,
                          "zone_drops": 0,
                          "zone_receptions": 7,
                          "man_pass_plays": 16,
                          "man_epa": -0.51,
                          "zone_yards_per_reception": 9,
                          "man_contested_targets": 0,
                          "man_longest": 0,
                          "zone_yards_after_catch": 61,
                          "man_receptions": 0,
                          "man_avoided_tackles": 0,
                          "man_first_downs": 0,
                          "base_targets": 8,
                          "zone_contested_catch_rate": null,
                          "zone_targeted_qb_rating": 104.2,
                          "man_routes": 10,
                          "zone_grades_hands_drop": 75.6,
                          "man_route_rate": 62.5,
                          "zone_pass_block_rate": 5.3,
                          "man_grades_pass_route": 52.3,
                          "penalties": 0,
                          "zone_first_downs": 3,
                          "zone_yprr": 3.5,
                          "man_drops": 0,
                          "zone_caught_percent": 100,
                          "team": "CIN",
                          "man_fumbles": 0,
                          "declined_penalties": 0,
                          "man_yards_after_catch": 0,
                          "man_yards": 0,
                          "zone_pass_plays": 19,
                          "position": "HB",
                          "man_targets": 0,
                          "man_grades_hands_drop": null,
                          "man_pass_blocks": 4,
                          "zone_touchdowns": 0,
                          "zone_route_rate": 94.7,
                          "zone_yards_after_catch_per_reception": 8.7,
                          "zone_avg_depth_of_target": 0.3,
                          "player": "Joe Mixon",
                          "franchise_id": 7,
                          "zone_contested_targets": 0,
                          "zone_contested_receptions": 0,
                          "man_contested_receptions": 0,
                          "man_yards_after_catch_per_reception": null,
                          "zone_targets": 7,
                          "zone_longest": 18,
                          "man_caught_percent": null,
                          "zone_drop_rate": 0,
                          "zone_interceptions": 0,
                          "man_positive_epa_percent": 28.6,
                          "zone_routes": 18,
                          "player_id": 11803
                        },
                        {
                          "man_contested_catch_rate": null,
                          "man_touchdowns": 1,
                          "zone_targets_percent": 14.8,
                          "man_interceptions": 0,
                          "zone_epa": -0.2,
                          "man_avg_depth_of_target": 3,
                          "zone_pass_blocks": 0,
                          "zone_avoided_tackles": 0,
                          "man_targeted_qb_rating": 118.8,
                          "draft_season": 2016,
                          "zone_positive_epa_percent": 59.3,
                          "man_targets_percent": 6.7,
                          "man_yards_per_reception": 2,
                          "team_name": "CIN",
                          "man_drop_rate": 0,
                          "zone_grades_pass_route": 62.6,
                          "jersey_number": "83",
                          "zone_fumbles": 0,
                          "man_pass_block_rate": 0,
                          "zone_yards": 28,
                          "man_yprr": 0.13,
                          "player_game_count": 1,
                          "eligible_season": 2016,
                          "zone_drops": 0,
                          "zone_receptions": 2,
                          "man_pass_plays": 19,
                          "man_epa": -0.4,
                          "zone_yards_per_reception": 14,
                          "man_contested_targets": 0,
                          "man_longest": 2,
                          "zone_yards_after_catch": 0,
                          "man_receptions": 1,
                          "man_avoided_tackles": 0,
                          "man_first_downs": 1,
                          "base_targets": 7,
                          "zone_contested_catch_rate": null,
                          "zone_targeted_qb_rating": 33.3,
                          "man_routes": 15,
                          "zone_grades_hands_drop": 68.3,
                          "man_route_rate": 78.9,
                          "zone_pass_block_rate": 0,
                          "man_grades_pass_route": 58.2,
                          "penalties": 0,
                          "zone_first_downs": 2,
                          "zone_yprr": 1.04,
                          "man_drops": 0,
                          "zone_caught_percent": 50,
                          "team": "CIN",
                          "man_fumbles": 0,
                          "declined_penalties": 0,
                          "man_yards_after_catch": 0,
                          "man_yards": 2,
                          "zone_pass_plays": 28,
                          "position": "WR",
                          "man_targets": 1,
                          "man_grades_hands_drop": 64.7,
                          "man_pass_blocks": 0,
                          "zone_touchdowns": 0,
                          "zone_route_rate": 96.4,
                          "zone_yards_after_catch_per_reception": 0,
                          "zone_avg_depth_of_target": 13.8,
                          "player": "Tyler Boyd",
                          "franchise_id": 7,
                          "zone_contested_targets": 0,
                          "zone_contested_receptions": 0,
                          "man_contested_receptions": 0,
                          "man_yards_after_catch_per_reception": 0,
                          "zone_targets": 4,
                          "zone_longest": 22,
                          "man_caught_percent": 100,
                          "zone_drop_rate": 0,
                          "zone_interceptions": 2,
                          "man_positive_epa_percent": 33.3,
                          "zone_routes": 27,
                          "player_id": 10689
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/receiving/scheme?league=nfl&season=2022&week=1&franchise_id=7&export=true`, cut to the header and the first 3 lines.",
                    "value": "player,player_id,position,team_name,player_game_count,base_targets,declined_penalties,franchise_id,man_avg_depth_of_target,man_avoided_tackles,man_caught_percent,man_contested_catch_rate,man_contested_receptions,man_contested_targets,man_drop_rate,man_drops,man_epa,man_first_downs,man_fumbles,man_grades_hands_drop,man_grades_pass_route,man_interceptions,man_longest,man_pass_block_rate,man_pass_blocks,man_pass_plays,man_positive_epa_percent,man_receptions,man_route_rate,man_routes,man_targeted_qb_rating,man_targets,man_targets_percent,man_touchdowns,man_yards,man_yards_after_catch,man_yards_after_catch_per_reception,man_yards_per_reception,man_yprr,penalties,zone_avg_depth_of_target,zone_avoided_tackles,zone_caught_percent,zone_contested_catch_rate,zone_contested_receptions,zone_contested_targets,zone_drop_rate,zone_drops,zone_epa,zone_first_downs,zone_fumbles,zone_grades_hands_drop,zone_grades_pass_route,zone_interceptions,zone_longest,zone_pass_block_rate,zone_pass_blocks,zone_pass_plays,zone_positive_epa_percent,zone_receptions,zone_route_rate,zone_routes,zone_targeted_qb_rating,zone_targets,zone_targets_percent,zone_touchdowns,zone_yards,zone_yards_after_catch,zone_yards_after_catch_per_reception,zone_yards_per_reception,zone_yprr\r\nJa'Marr Chase,84270,WR,CIN,1,15,0,7,8.9,0,42.9,0.0,0,1,25.0,1,-0.36,3,0,36.2,63.9,0,14,0.0,0,23,31.6,3,82.6,19,96.4,7,36.8,1,32,6,2.0,10.7,1.68,0,10.8,2,83.3,,0,0,0.0,0,-0.16,5,0,73.4,81.0,0,24,0.0,0,36,54.3,5,97.2,35,118.8,6,17.1,0,83,38,7.6,16.6,2.37\r\nJoe Mixon,11803,HB,CIN,1,8,0,7,,0,,,0,0,,0,-0.51,0,0,,52.3,0,0,25.0,4,16,28.6,0,62.5,10,0.0,0,0.0,0,0,0,,,0.0,0,0.3,1,100.0,,0,0,0.0,0,-0.44,3,0,75.6,90.8,0,18,5.3,1,19,52.6,7,94.7,18,104.2,7,38.9,0,63,61,8.7,9.0,3.5\r\nTyler Boyd,10689,WR,CIN,1,7,0,7,3.0,0,100.0,,0,0,0.0,0,-0.4,1,0,64.7,58.2,0,2,0.0,0,19,33.3,1,78.9,15,118.8,1,6.7,1,2,0,0.0,2.0,0.13,0,13.8,0,50.0,,0,0,0.0,0,-0.2,2,0,68.3,62.6,2,22,0.0,0,28,59.3,2,96.4,27,33.3,4,14.8,0,28,0,0.0,14.0,1.04\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/receiving/summary": {
      "get": {
        "operationId": "facet-receiving-summary",
        "summary": "League-wide receiving summary leaderboard",
        "description": "Every qualifying receiver in the league, with targets, catches, yards and grades. Two complete\nrequests exist: `--league` with `--season` (a year, or a comma-separated list such as `2023,2024`),\nor `--game` alone (an id from `ref-games`) — anything less is refused with `400 invalid_parameter`.\nNarrow with `--week` and `--franchise`. `--division` fans the request out across NCAA divisions and\nis ignored for every other league. Grades are on PFF's 0-100 scale and every other column is a raw\ntotal or rate; which columns come back depends on the report, the position and the caller's\nentitlement. Add `--export true` for the raw CSV instead of JSON.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `receiving_summary.csv` instead\nof JSON.",
        "tags": [
          "facet"
        ],
        "x-cli-aliases": [
          "receiving"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `receiving_summary.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"receiving_summary.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetReceivingSummaryResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/receiving/summary?league=nfl&season=2022&week=1&franchise_id=7`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "receiving_summary": [
                        {
                          "targets": 15,
                          "grades_offense": 74.6,
                          "yards_after_catch_per_reception": 4.8,
                          "grades_pass_route": 76,
                          "draft_season": 2021,
                          "team_name": "CIN",
                          "yprr": 1.98,
                          "wide_snaps": 53,
                          "fumbles": 0,
                          "first_downs": 10,
                          "jersey_number": "01",
                          "inline_snaps": 0,
                          "contested_targets": 1,
                          "player_game_count": 1,
                          "eligible_season": 2021,
                          "inline_rate": 0,
                          "contested_catch_rate": 0,
                          "yards": 129,
                          "receptions": 10,
                          "targeted_qb_rating": 115.7,
                          "interceptions": 0,
                          "caught_percent": 66.7,
                          "drop_rate": 9.1,
                          "grades_hands_drop": 58.5,
                          "slot_rate": 23.9,
                          "slot_snaps": 17,
                          "penalties": 1,
                          "wide_rate": 74.6,
                          "pass_block_rate": 0,
                          "team": "CIN",
                          "declined_penalties": 0,
                          "route_rate": 91.5,
                          "drops": 1,
                          "position": "WR",
                          "grades_hands_fumble": 71.1,
                          "longest": 24,
                          "pass_blocks": 0,
                          "routes": 65,
                          "pass_plays": 71,
                          "yards_per_reception": 12.9,
                          "player": "Ja'Marr Chase",
                          "positive_epa_percent": 46.2,
                          "franchise_id": 7,
                          "contested_receptions": 0,
                          "yards_after_catch": 48,
                          "avg_depth_of_target": 9.1,
                          "epa": -0.2,
                          "avoided_tackles": 2,
                          "player_id": 84270,
                          "touchdowns": 1
                        },
                        {
                          "targets": 8,
                          "grades_pass_block": 44.8,
                          "grades_offense": 63.7,
                          "yards_after_catch_per_reception": 8.7,
                          "grades_pass_route": 76.4,
                          "draft_season": 2017,
                          "team_name": "CIN",
                          "yprr": 1.66,
                          "wide_snaps": 5,
                          "fumbles": 0,
                          "first_downs": 3,
                          "jersey_number": "28",
                          "inline_snaps": 0,
                          "contested_targets": 1,
                          "player_game_count": 1,
                          "eligible_season": 2017,
                          "inline_rate": 0,
                          "contested_catch_rate": 0,
                          "yards": 63,
                          "receptions": 7,
                          "targeted_qb_rating": 99.5,
                          "interceptions": 0,
                          "caught_percent": 87.5,
                          "drop_rate": 0,
                          "grades_hands_drop": 75.6,
                          "slot_rate": 4.4,
                          "slot_snaps": 2,
                          "penalties": 0,
                          "wide_rate": 11.1,
                          "pass_block_rate": 11.1,
                          "team": "CIN",
                          "declined_penalties": 0,
                          "route_rate": 84.4,
                          "drops": 0,
                          "position": "HB",
                          "grades_hands_fumble": 79.7,
                          "longest": 18,
                          "pass_blocks": 5,
                          "routes": 38,
                          "pass_plays": 45,
                          "yards_per_reception": 9,
                          "player": "Joe Mixon",
                          "positive_epa_percent": 41.9,
                          "franchise_id": 7,
                          "contested_receptions": 0,
                          "yards_after_catch": 61,
                          "avg_depth_of_target": 0.6,
                          "epa": -0.4,
                          "avoided_tackles": 1,
                          "player_id": 11803,
                          "touchdowns": 0
                        },
                        {
                          "targets": 7,
                          "grades_offense": 58.1,
                          "yards_after_catch_per_reception": 0.3,
                          "grades_pass_route": 58.8,
                          "draft_season": 2016,
                          "team_name": "CIN",
                          "yprr": 0.63,
                          "wide_snaps": 6,
                          "fumbles": 0,
                          "first_downs": 3,
                          "jersey_number": "83",
                          "inline_snaps": 0,
                          "contested_targets": 1,
                          "player_game_count": 1,
                          "eligible_season": 2016,
                          "inline_rate": 0,
                          "contested_catch_rate": 0,
                          "yards": 33,
                          "receptions": 4,
                          "targeted_qb_rating": 69.3,
                          "interceptions": 3,
                          "caught_percent": 57.1,
                          "drop_rate": 0,
                          "grades_hands_drop": 72.1,
                          "slot_rate": 89.7,
                          "slot_snaps": 52,
                          "penalties": 0,
                          "wide_rate": 10.3,
                          "pass_block_rate": 0,
                          "team": "CIN",
                          "declined_penalties": 0,
                          "route_rate": 89.7,
                          "drops": 0,
                          "position": "WR",
                          "grades_hands_fumble": 67,
                          "longest": 22,
                          "pass_blocks": 0,
                          "routes": 52,
                          "pass_plays": 58,
                          "yards_per_reception": 8.3,
                          "player": "Tyler Boyd",
                          "positive_epa_percent": 48.1,
                          "franchise_id": 7,
                          "contested_receptions": 0,
                          "yards_after_catch": 1,
                          "avg_depth_of_target": 12.6,
                          "epa": -0.24,
                          "avoided_tackles": 0,
                          "player_id": 10689,
                          "touchdowns": 1
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/receiving/summary?league=nfl&season=2022&week=1&franchise_id=7&export=true`, cut to the header and the first 3 lines.",
                    "value": "player,player_id,position,team_name,player_game_count,avg_depth_of_target,avoided_tackles,caught_percent,contested_catch_rate,contested_receptions,contested_targets,declined_penalties,drop_rate,drops,epa,first_downs,franchise_id,fumbles,grades_hands_drop,grades_hands_fumble,grades_offense,grades_pass_block,grades_pass_route,inline_rate,inline_snaps,interceptions,longest,pass_block_rate,pass_blocks,pass_plays,penalties,positive_epa_percent,receptions,route_rate,routes,slot_rate,slot_snaps,targeted_qb_rating,targets,touchdowns,wide_rate,wide_snaps,yards,yards_after_catch,yards_after_catch_per_reception,yards_per_reception,yprr\r\nJa'Marr Chase,84270,WR,CIN,1,9.1,2,66.7,0.0,0,1,0,9.1,1,-0.2,10,7,0,58.5,71.1,74.6,,76.0,0.0,0,0,24,0.0,0,71,1,46.2,10,91.5,65,23.9,17,115.7,15,1,74.6,53,129,48,4.8,12.9,1.98\r\nJoe Mixon,11803,HB,CIN,1,0.6,1,87.5,0.0,0,1,0,0.0,0,-0.4,3,7,0,75.6,79.7,63.7,44.8,76.4,0.0,0,0,18,11.1,5,45,0,41.9,7,84.4,38,4.4,2,99.5,8,0,11.1,5,63,61,8.7,9.0,1.66\r\nTyler Boyd,10689,WR,CIN,1,12.6,0,57.1,0.0,0,1,0,0.0,0,-0.24,3,7,0,72.1,67.0,58.1,,58.8,0.0,0,3,22,0.0,0,58,0,48.1,4,89.7,52,89.7,52,69.3,7,1,10.3,6,33,1,0.3,8.3,0.63\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/rushing/direction": {
      "get": {
        "operationId": "facet-rushing-direction",
        "summary": "League-wide rushing-by-direction leaderboard",
        "description": "Every qualifying runner in the league, split by the gap the run went through, alongside the same\nsplit totalled per franchise. Two complete requests exist: `--league` with `--season` (a year, or a\ncomma-separated list such as `2023,2024`), or `--game` alone (an id from `ref-games`) — anything\nless is refused with `400 invalid_parameter`. Narrow with `--week` and `--franchise`. `--division`\nfans the request out across NCAA divisions and is ignored for every other league. Grades are on\nPFF's 0-100 scale and every other column is a raw total or rate; which columns come back depends on\nthe report, the position and the caller's entitlement. Add `--export true` for the raw CSV instead\nof JSON.\n\nThe only report whose JSON body carries two collections. This export has no header row and one blank\nline per record.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `download.csv` instead of JSON.",
        "tags": [
          "facet"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `download.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"download.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetRushingDirectionResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/rushing/direction?league=nfl&season=2022&week=1&franchise_id=7`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "rushing_direction_stats": [
                        {
                          "directions": [
                            {
                              "attempts": 8,
                              "direction": "MR",
                              "explosive": 0,
                              "first_downs": 0,
                              "franchise_id": 7,
                              "fumbles": 0,
                              "long": 5,
                              "missed_tackles": 0,
                              "player_id": 11803,
                              "touchdowns": 0,
                              "yards": 10,
                              "yards_after_contact": 12,
                              "yco_attempt": 1.5,
                              "ypa": 1.3
                            },
                            {
                              "attempts": 7,
                              "direction": "RG",
                              "explosive": 1,
                              "first_downs": 1,
                              "franchise_id": 7,
                              "fumbles": 0,
                              "long": 31,
                              "missed_tackles": 2,
                              "player_id": 11803,
                              "touchdowns": 0,
                              "yards": 50,
                              "yards_after_contact": 19,
                              "yco_attempt": 2.71,
                              "ypa": 7.1
                            },
                            {
                              "attempts": 4,
                              "direction": "LT",
                              "explosive": 0,
                              "first_downs": 0,
                              "franchise_id": 7,
                              "fumbles": 0,
                              "long": 3,
                              "missed_tackles": 1,
                              "player_id": 11803,
                              "touchdowns": 0,
                              "yards": 8,
                              "yards_after_contact": 7,
                              "yco_attempt": 1.75,
                              "ypa": 2
                            }
                          ],
                          "draft_season": 2017,
                          "eligible_season": 2017,
                          "franchise_id": 7,
                          "jersey_number": "28",
                          "player": "Joe Mixon",
                          "player_id": 11803,
                          "position": "HB",
                          "team": "CIN",
                          "team_name": "CIN",
                          "total_attempts": 27
                        },
                        {
                          "directions": [
                            {
                              "attempts": 1,
                              "direction": "MR",
                              "explosive": 0,
                              "first_downs": 0,
                              "franchise_id": 7,
                              "fumbles": 0,
                              "long": 4,
                              "missed_tackles": 0,
                              "player_id": 11869,
                              "touchdowns": 0,
                              "yards": 4,
                              "yards_after_contact": 3,
                              "yco_attempt": 3,
                              "ypa": 4
                            }
                          ],
                          "draft_season": 2017,
                          "eligible_season": 2017,
                          "franchise_id": 7,
                          "jersey_number": "34",
                          "player": "Samaje Perine",
                          "player_id": 11869,
                          "position": "HB",
                          "team": "CIN",
                          "team_name": "CIN",
                          "total_attempts": 1
                        },
                        {
                          "directions": [
                            {
                              "attempts": 5,
                              "direction": "QBSc",
                              "explosive": 1,
                              "first_downs": 2,
                              "franchise_id": 7,
                              "fumbles": 0,
                              "long": 23,
                              "missed_tackles": 0,
                              "player_id": 28022,
                              "touchdowns": 0,
                              "yards": 45,
                              "yards_after_contact": 12,
                              "yco_attempt": 2.4,
                              "ypa": 9
                            },
                            {
                              "attempts": 1,
                              "direction": "QBSn",
                              "explosive": 0,
                              "first_downs": 1,
                              "franchise_id": 7,
                              "fumbles": 0,
                              "long": 2,
                              "missed_tackles": 0,
                              "player_id": 28022,
                              "touchdowns": 0,
                              "yards": 2,
                              "yards_after_contact": 0,
                              "yco_attempt": 0,
                              "ypa": 2
                            }
                          ],
                          "draft_season": 2020,
                          "eligible_season": 2020,
                          "franchise_id": 7,
                          "jersey_number": "09",
                          "player": "Joe Burrow",
                          "player_id": 28022,
                          "position": "QB",
                          "team": "CIN",
                          "team_name": "CIN",
                          "total_attempts": 6
                        }
                      ],
                      "team_direction_stats": [
                        {
                          "attempts": 3,
                          "direction": "LG",
                          "explosive": 0,
                          "first_downs": 0,
                          "franchise_id": 7,
                          "fumbles": 0,
                          "long": 5,
                          "missed_tackles": 0,
                          "touchdowns": 0,
                          "yards": 5,
                          "yards_after_contact": 4,
                          "yco_attempt": 1.33,
                          "ypa": 1.7
                        },
                        {
                          "attempts": 4,
                          "direction": "LT",
                          "explosive": 0,
                          "first_downs": 0,
                          "franchise_id": 7,
                          "fumbles": 0,
                          "long": 3,
                          "missed_tackles": 1,
                          "touchdowns": 0,
                          "yards": 8,
                          "yards_after_contact": 7,
                          "yco_attempt": 1.75,
                          "ypa": 2
                        },
                        {
                          "attempts": 2,
                          "direction": "ML",
                          "explosive": 0,
                          "first_downs": 0,
                          "franchise_id": 7,
                          "fumbles": 0,
                          "long": 0,
                          "missed_tackles": 0,
                          "touchdowns": 0,
                          "yards": -2,
                          "yards_after_contact": 1,
                          "yco_attempt": 0.5,
                          "ypa": -1
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBodyHeaderless"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/rushing/direction?league=nfl&season=2022&week=1&franchise_id=7&export=true`, complete.",
                    "value": "\r\n\r\n\r\n\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/rushing/summary": {
      "get": {
        "operationId": "facet-rushing-summary",
        "summary": "League-wide rushing summary leaderboard",
        "description": "Every qualifying runner in the league, with attempts, yards, contact metrics and grades. Two\ncomplete requests exist: `--league` with `--season` (a year, or a comma-separated list such as\n`2023,2024`), or `--game` alone (an id from `ref-games`) — anything less is refused with `400\ninvalid_parameter`. Narrow with `--week` and `--franchise`. `--division` fans the request out across\nNCAA divisions and is ignored for every other league. Grades are on PFF's 0-100 scale and every\nother column is a raw total or rate; which columns come back depends on the report, the position and\nthe caller's entitlement. Add `--export true` for the raw CSV instead of JSON.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `rushing_summary.csv` instead\nof JSON.",
        "tags": [
          "facet"
        ],
        "x-cli-aliases": [
          "rushing"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `rushing_summary.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"rushing_summary.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetRushingSummaryResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/rushing/summary?league=nfl&season=2022&week=1&franchise_id=7`, complete.",
                    "value": {
                      "rushing_summary": [
                        {
                          "targets": 8,
                          "grades_pass_block": 44.8,
                          "grades_offense": 63.7,
                          "yards_after_contact": 48,
                          "explosive": 1,
                          "grades_pass_route": 76.4,
                          "draft_season": 2017,
                          "elu_rush_mtf": 3,
                          "breakaway_attempts": 1,
                          "designed_yards": 82,
                          "team_name": "CIN",
                          "yprr": 1.66,
                          "breakaway_percent": 37.8,
                          "fumbles": 0,
                          "first_downs": 2,
                          "elusive_rating": 20.9,
                          "jersey_number": "28",
                          "breakaway_yards": 31,
                          "player_game_count": 1,
                          "eligible_season": 2017,
                          "total_touches": 34,
                          "scramble_yards": 0,
                          "yco_attempt": 1.78,
                          "yards": 82,
                          "grades_run_block": 60,
                          "receptions": 7,
                          "zone_attempts": 14,
                          "scrambles": 0,
                          "grades_run": 58.8,
                          "penalties": 0,
                          "attempts": 27,
                          "elu_yco": 48,
                          "elu_recv_mtf": 1,
                          "team": "CIN",
                          "declined_penalties": 0,
                          "ypa": 3,
                          "drops": 0,
                          "position": "HB",
                          "grades_hands_fumble": 79.7,
                          "longest": 31,
                          "routes": 38,
                          "player": "Joe Mixon",
                          "franchise_id": 7,
                          "rec_yards": 63,
                          "gap_attempts": 12,
                          "run_plays": 28,
                          "avoided_tackles": 3,
                          "grades_offense_penalty": 79.6,
                          "player_id": 11803,
                          "touchdowns": 0
                        },
                        {
                          "targets": 0,
                          "grades_offense": 54.8,
                          "yards_after_contact": 12,
                          "explosive": 1,
                          "draft_season": 2020,
                          "elu_rush_mtf": 0,
                          "breakaway_attempts": 0,
                          "designed_yards": 2,
                          "team_name": "CIN",
                          "yprr": null,
                          "breakaway_percent": 0,
                          "grades_pass": 52.6,
                          "fumbles": 2,
                          "first_downs": 3,
                          "elusive_rating": 0,
                          "jersey_number": "09",
                          "breakaway_yards": 0,
                          "player_game_count": 1,
                          "eligible_season": 2020,
                          "total_touches": 1,
                          "scramble_yards": 45,
                          "yco_attempt": 2,
                          "yards": 47,
                          "grades_run_block": 60,
                          "receptions": 0,
                          "zone_attempts": 0,
                          "scrambles": 5,
                          "grades_run": 66.3,
                          "penalties": 0,
                          "attempts": 6,
                          "elu_yco": 0,
                          "elu_recv_mtf": 0,
                          "team": "CIN",
                          "declined_penalties": 0,
                          "ypa": 7.8,
                          "drops": 0,
                          "position": "QB",
                          "grades_hands_fumble": 43.8,
                          "longest": 23,
                          "routes": 0,
                          "player": "Joe Burrow",
                          "franchise_id": 7,
                          "rec_yards": 0,
                          "gap_attempts": 0,
                          "run_plays": 29,
                          "avoided_tackles": 0,
                          "grades_offense_penalty": 80.6,
                          "player_id": 28022,
                          "touchdowns": 0
                        },
                        {
                          "targets": 4,
                          "grades_pass_block": 74.6,
                          "grades_offense": 60.4,
                          "yards_after_contact": 3,
                          "explosive": 0,
                          "grades_pass_route": 61.2,
                          "draft_season": 2017,
                          "elu_rush_mtf": 0,
                          "breakaway_attempts": 0,
                          "designed_yards": 4,
                          "team_name": "CIN",
                          "yprr": 1.57,
                          "breakaway_percent": 0,
                          "fumbles": 0,
                          "first_downs": 0,
                          "elusive_rating": 0,
                          "jersey_number": "34",
                          "breakaway_yards": 0,
                          "player_game_count": 1,
                          "eligible_season": 2017,
                          "total_touches": 4,
                          "scramble_yards": 0,
                          "yco_attempt": 3,
                          "yards": 4,
                          "receptions": 3,
                          "zone_attempts": 0,
                          "scrambles": 0,
                          "grades_run": 59.4,
                          "penalties": 0,
                          "attempts": 1,
                          "elu_yco": 3,
                          "elu_recv_mtf": 0,
                          "team": "CIN",
                          "declined_penalties": 0,
                          "ypa": 4,
                          "drops": 0,
                          "position": "HB",
                          "grades_hands_fumble": 67.4,
                          "longest": 4,
                          "routes": 21,
                          "player": "Samaje Perine",
                          "franchise_id": 7,
                          "rec_yards": 33,
                          "gap_attempts": 0,
                          "run_plays": 1,
                          "avoided_tackles": 0,
                          "grades_offense_penalty": 77.8,
                          "player_id": 11869,
                          "touchdowns": 0
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/rushing/summary?league=nfl&season=2022&week=1&franchise_id=7&export=true`, complete.",
                    "value": "player,player_id,position,team_name,player_game_count,attempts,avoided_tackles,breakaway_attempts,breakaway_percent,breakaway_yards,declined_penalties,designed_yards,drops,elu_recv_mtf,elu_rush_mtf,elu_yco,elusive_rating,explosive,first_downs,franchise_id,fumbles,gap_attempts,grades_hands_fumble,grades_offense,grades_offense_penalty,grades_pass,grades_pass_block,grades_pass_route,grades_run,grades_run_block,longest,penalties,rec_yards,receptions,routes,run_plays,scramble_yards,scrambles,targets,total_touches,touchdowns,yards,yards_after_contact,yco_attempt,ypa,yprr,zone_attempts\r\nJoe Mixon,11803,HB,CIN,1,27,3,1,37.8,31,0,82,0,1,3,48,20.9,1,2,7,0,12,79.7,63.7,79.6,,44.8,76.4,58.8,60.0,31,0,63,7,38,28,0,0,8,34,0,82,48,1.78,3.0,1.66,14\r\nJoe Burrow,28022,QB,CIN,1,6,0,0,0.0,0,0,2,0,0,0,0,0.0,1,3,7,2,0,43.8,54.8,80.6,52.6,,,66.3,60.0,23,0,0,0,0,29,45,5,0,1,0,47,12,2.0,7.8,,0\r\nSamaje Perine,11869,HB,CIN,1,1,0,0,0.0,0,0,4,0,0,0,3,0.0,0,0,7,0,0,67.4,60.4,77.8,,74.6,61.2,59.4,,4,0,33,3,21,1,0,0,4,4,0,4,3,3.0,4.0,1.57,0\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/defense/coverage": {
      "get": {
        "operationId": "facet-defense-coverage",
        "summary": "League-wide coverage leaderboard",
        "description": "Every qualifying defender in the league, with the passes thrown at them and how they fared. Two\ncomplete requests exist: `--league` with `--season` (a year, or a comma-separated list such as\n`2023,2024`), or `--game` alone (an id from `ref-games`) — anything less is refused with `400\ninvalid_parameter`. Narrow with `--week` and `--franchise`. `--division` fans the request out across\nNCAA divisions and is ignored for every other league. Grades are on PFF's 0-100 scale and every\nother column is a raw total or rate; which columns come back depends on the report, the position and\nthe caller's entitlement. Add `--export true` for the raw CSV instead of JSON.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `defense_coverage_summary.csv`\ninstead of JSON.",
        "tags": [
          "facet"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `defense_coverage_summary.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"defense_coverage_summary.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetDefenseCoverageResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/defense/coverage?league=nfl&season=2022&week=1&franchise_id=7`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "coverage_summary": [
                        {
                          "targets": 3,
                          "yards_per_coverage_snap": 0.2,
                          "draft_season": 2016,
                          "missed_tackles": 1,
                          "catch_rate": 66.7,
                          "team_name": "CIN",
                          "tackles": 2,
                          "coverage_percent": 97.6,
                          "jersey_number": "20",
                          "dropped_ints": 0,
                          "player_game_count": 1,
                          "eligible_season": 2016,
                          "grades_tackle": 29.6,
                          "yards": 8,
                          "receptions": 2,
                          "forced_incompletion_rate": 0,
                          "grades_coverage_defense": 72.1,
                          "interceptions": 0,
                          "snap_counts_coverage": 41,
                          "grades_run_defense": 61.6,
                          "snap_counts_pass_play": 42,
                          "penalties": 0,
                          "forced_incompletes": 0,
                          "team": "CIN",
                          "coverage_snaps_per_target": 13,
                          "stops": 2,
                          "declined_penalties": 0,
                          "position": "CB",
                          "longest": 7,
                          "missed_tackle_rate": 33.3,
                          "grades_defense": 70.6,
                          "yards_per_reception": 4,
                          "grades_defense_penalty": 77.5,
                          "player": "Eli Apple",
                          "franchise_id": 7,
                          "yards_after_catch": 0,
                          "avg_depth_of_target": 6.3,
                          "pass_break_ups": 0,
                          "qb_rating_against": 70.1,
                          "coverage_snaps_per_reception": 19.5,
                          "assists": 0,
                          "grades_pass_rush_defense": 55,
                          "player_id": 10644,
                          "touchdowns": 0
                        },
                        {
                          "targets": 3,
                          "yards_per_coverage_snap": 1.2,
                          "draft_season": 2016,
                          "missed_tackles": 0,
                          "catch_rate": 66.7,
                          "team_name": "CIN",
                          "tackles": 1,
                          "coverage_percent": 88.4,
                          "jersey_number": "24",
                          "dropped_ints": 0,
                          "player_game_count": 1,
                          "eligible_season": 2016,
                          "grades_tackle": 76.7,
                          "yards": 42,
                          "receptions": 2,
                          "forced_incompletion_rate": 0,
                          "grades_coverage_defense": 57.4,
                          "interceptions": 0,
                          "snap_counts_coverage": 38,
                          "grades_run_defense": 66.2,
                          "snap_counts_pass_play": 43,
                          "penalties": 0,
                          "forced_incompletes": 0,
                          "team": "CIN",
                          "coverage_snaps_per_target": 12,
                          "stops": 0,
                          "declined_penalties": 0,
                          "position": "S",
                          "longest": 32,
                          "missed_tackle_rate": 0,
                          "grades_defense": 60.7,
                          "yards_per_reception": 21,
                          "grades_defense_penalty": 75.8,
                          "player": "Vonn Bell",
                          "franchise_id": 7,
                          "yards_after_catch": 39,
                          "avg_depth_of_target": 2.3,
                          "pass_break_ups": 0,
                          "qb_rating_against": 109.7,
                          "coverage_snaps_per_reception": 18,
                          "assists": 0,
                          "grades_pass_rush_defense": 62.4,
                          "player_id": 10695,
                          "touchdowns": 0
                        },
                        {
                          "targets": 7,
                          "yards_per_coverage_snap": 1.4,
                          "draft_season": 2016,
                          "missed_tackles": 0,
                          "catch_rate": 85.7,
                          "team_name": "CIN",
                          "tackles": 7,
                          "coverage_percent": 95,
                          "jersey_number": "21",
                          "dropped_ints": 0,
                          "player_game_count": 1,
                          "eligible_season": 2016,
                          "grades_tackle": 80.8,
                          "yards": 49,
                          "receptions": 6,
                          "forced_incompletion_rate": 0,
                          "grades_coverage_defense": 65.3,
                          "interceptions": 0,
                          "snap_counts_coverage": 38,
                          "grades_run_defense": 67.7,
                          "snap_counts_pass_play": 40,
                          "penalties": 0,
                          "forced_incompletes": 0,
                          "team": "CIN",
                          "coverage_snaps_per_target": 5.1,
                          "stops": 2,
                          "declined_penalties": 0,
                          "position": "CB",
                          "longest": 26,
                          "missed_tackle_rate": 0,
                          "grades_defense": 72.6,
                          "yards_per_reception": 8.2,
                          "grades_defense_penalty": 76.3,
                          "player": "Mike Hilton",
                          "franchise_id": 7,
                          "yards_after_catch": 12,
                          "avg_depth_of_target": 8.1,
                          "pass_break_ups": 0,
                          "qb_rating_against": 95.8,
                          "coverage_snaps_per_reception": 6,
                          "assists": 0,
                          "grades_pass_rush_defense": 90.5,
                          "player_id": 10898,
                          "touchdowns": 0
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/defense/coverage?league=nfl&season=2022&week=1&franchise_id=7&export=true`, cut to the header and the first 3 lines.",
                    "value": "player,player_id,position,team_name,player_game_count,assists,avg_depth_of_target,catch_rate,coverage_percent,coverage_snaps_per_reception,coverage_snaps_per_target,declined_penalties,dropped_ints,forced_incompletes,forced_incompletion_rate,franchise_id,grades_coverage_defense,grades_defense,grades_defense_penalty,grades_pass_rush_defense,grades_run_defense,grades_tackle,interceptions,longest,missed_tackle_rate,missed_tackles,pass_break_ups,penalties,qb_rating_against,receptions,snap_counts_coverage,snap_counts_pass_play,stops,tackles,targets,touchdowns,yards,yards_after_catch,yards_per_coverage_snap,yards_per_reception\r\nEli Apple,10644,CB,CIN,1,0,6.3,66.7,97.6,19.5,13.0,0,0,0,0.0,7,72.1,70.6,77.5,55.0,61.6,29.6,0,7,33.3,1,0,0,70.1,2,41,42,2,2,3,0,8,0,0.2,4.0\r\nVonn Bell,10695,S,CIN,1,0,2.3,66.7,88.4,18.0,12.0,0,0,0,0.0,7,57.4,60.7,75.8,62.4,66.2,76.7,0,32,0.0,0,0,0,109.7,2,38,43,0,1,3,0,42,39,1.2,21.0\r\nMike Hilton,10898,CB,CIN,1,0,8.1,85.7,95.0,6.0,5.1,0,0,0,0.0,7,65.3,72.6,76.3,90.5,67.7,80.8,0,26,0.0,0,0,0,95.8,6,38,40,2,7,7,0,49,12,1.4,8.2\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/defense/coverage_scheme": {
      "get": {
        "operationId": "facet-defense-coverage-scheme",
        "summary": "League-wide coverage-by-scheme leaderboard",
        "description": "Every qualifying defender in the league, split by the coverage scheme they played. Two complete\nrequests exist: `--league` with `--season` (a year, or a comma-separated list such as `2023,2024`),\nor `--game` alone (an id from `ref-games`) — anything less is refused with `400 invalid_parameter`.\nNarrow with `--week` and `--franchise`. `--division` fans the request out across NCAA divisions and\nis ignored for every other league. Grades are on PFF's 0-100 scale and every other column is a raw\ntotal or rate; which columns come back depends on the report, the position and the caller's\nentitlement. Add `--export true` for the raw CSV instead of JSON.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `defense_coverage_scheme.csv`\ninstead of JSON.",
        "tags": [
          "facet"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `defense_coverage_scheme.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"defense_coverage_scheme.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetDefenseCoverageSchemeResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/defense/coverage_scheme?league=nfl&season=2022&week=1&franchise_id=7`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "coverage_scheme": [
                        {
                          "man_touchdowns": 0,
                          "man_interceptions": 0,
                          "zone_snap_counts_coverage_percent": 48.8,
                          "man_avg_depth_of_target": 1,
                          "man_dropped_ints": 0,
                          "draft_season": 2016,
                          "zone_coverage_snaps_per_target": 19,
                          "man_yards_per_reception": 1,
                          "team_name": "CIN",
                          "jersey_number": "20",
                          "man_snap_counts_coverage": 17,
                          "man_tackles": 1,
                          "zone_stops": 1,
                          "zone_snap_counts_coverage": 20,
                          "zone_yards": 7,
                          "man_coverage_snaps_per_target": 16,
                          "zone_coverage_percent": 95.2,
                          "player_game_count": 1,
                          "eligible_season": 2016,
                          "zone_receptions": 1,
                          "zone_forced_incompletion_rate": 0,
                          "man_snap_counts_pass_play": 17,
                          "zone_yards_per_reception": 7,
                          "man_longest": 1,
                          "man_assists": 0,
                          "zone_yards_after_catch": 0,
                          "man_stops": 1,
                          "man_receptions": 1,
                          "zone_tackles": 1,
                          "man_coverage_percent": 100,
                          "penalties": 0,
                          "zone_yards_per_coverage_snap": 0.4,
                          "team": "CIN",
                          "man_catch_rate": 100,
                          "man_grades_coverage_defense": 77.2,
                          "declined_penalties": 0,
                          "man_yards_after_catch": 0,
                          "man_pass_break_ups": 0,
                          "man_yards": 1,
                          "position": "CB",
                          "man_targets": 1,
                          "man_missed_tackle_rate": 0,
                          "zone_assists": 0,
                          "zone_snap_counts_pass_play": 21,
                          "zone_missed_tackle_rate": 50,
                          "zone_touchdowns": 0,
                          "zone_coverage_snaps_per_reception": 19,
                          "man_coverage_snaps_per_reception": 16,
                          "zone_avg_depth_of_target": 7,
                          "man_snap_counts_coverage_percent": 41.5,
                          "player": "Eli Apple",
                          "franchise_id": 7,
                          "zone_forced_incompletes": 0,
                          "man_forced_incompletion_rate": 0,
                          "zone_targets": 1,
                          "zone_longest": 7,
                          "zone_dropped_ints": 0,
                          "zone_interceptions": 0,
                          "man_forced_incompletes": 0,
                          "player_id": 10644,
                          "zone_missed_tackles": 1,
                          "base_snap_counts_coverage": 41,
                          "man_missed_tackles": 0,
                          "zone_grades_coverage_defense": 62,
                          "man_qb_rating_against": 79.2,
                          "zone_pass_break_ups": 0,
                          "zone_qb_rating_against": 95.8,
                          "man_yards_per_coverage_snap": 0.1,
                          "zone_catch_rate": 100
                        },
                        {
                          "man_touchdowns": 0,
                          "man_interceptions": 0,
                          "zone_snap_counts_coverage_percent": 47.4,
                          "man_avg_depth_of_target": 5,
                          "man_dropped_ints": 0,
                          "draft_season": 2016,
                          "zone_coverage_snaps_per_target": 17,
                          "man_yards_per_reception": 10,
                          "team_name": "CIN",
                          "jersey_number": "24",
                          "man_snap_counts_coverage": 15,
                          "man_tackles": 1,
                          "zone_stops": 0,
                          "zone_snap_counts_coverage": 18,
                          "zone_yards": 32,
                          "man_coverage_snaps_per_target": 7,
                          "zone_coverage_percent": 85.7,
                          "player_game_count": 1,
                          "eligible_season": 2016,
                          "zone_receptions": 1,
                          "zone_forced_incompletion_rate": 0,
                          "man_snap_counts_pass_play": 17,
                          "zone_yards_per_reception": 32,
                          "man_longest": 10,
                          "man_assists": 0,
                          "zone_yards_after_catch": 35,
                          "man_stops": 0,
                          "man_receptions": 1,
                          "zone_tackles": 0,
                          "man_coverage_percent": 88.2,
                          "penalties": 0,
                          "zone_yards_per_coverage_snap": 1.9,
                          "team": "CIN",
                          "man_catch_rate": 50,
                          "man_grades_coverage_defense": 64.5,
                          "declined_penalties": 0,
                          "man_yards_after_catch": 4,
                          "man_pass_break_ups": 0,
                          "man_yards": 10,
                          "position": "S",
                          "man_targets": 2,
                          "man_missed_tackle_rate": 0,
                          "zone_assists": 0,
                          "zone_snap_counts_pass_play": 21,
                          "zone_missed_tackle_rate": null,
                          "zone_touchdowns": 0,
                          "zone_coverage_snaps_per_reception": 17,
                          "man_coverage_snaps_per_reception": 14,
                          "zone_avg_depth_of_target": -3,
                          "man_snap_counts_coverage_percent": 39.5,
                          "player": "Vonn Bell",
                          "franchise_id": 7,
                          "zone_forced_incompletes": 0,
                          "man_forced_incompletion_rate": 0,
                          "zone_targets": 1,
                          "zone_longest": 32,
                          "zone_dropped_ints": 0,
                          "zone_interceptions": 0,
                          "man_forced_incompletes": 0,
                          "player_id": 10695,
                          "zone_missed_tackles": 0,
                          "base_snap_counts_coverage": 38,
                          "man_missed_tackles": 0,
                          "zone_grades_coverage_defense": 51.3,
                          "man_qb_rating_against": 64.6,
                          "zone_pass_break_ups": 0,
                          "zone_qb_rating_against": 118.8,
                          "man_yards_per_coverage_snap": 0.7,
                          "zone_catch_rate": 100
                        },
                        {
                          "man_touchdowns": 0,
                          "man_interceptions": 0,
                          "zone_snap_counts_coverage_percent": 47.4,
                          "man_avg_depth_of_target": 9,
                          "man_dropped_ints": 0,
                          "draft_season": 2016,
                          "zone_coverage_snaps_per_target": 4.3,
                          "man_yards_per_reception": 5,
                          "team_name": "CIN",
                          "jersey_number": "21",
                          "man_snap_counts_coverage": 16,
                          "man_tackles": 2,
                          "zone_stops": 0,
                          "zone_snap_counts_coverage": 18,
                          "zone_yards": 39,
                          "man_coverage_snaps_per_target": 5,
                          "zone_coverage_percent": 94.7,
                          "player_game_count": 1,
                          "eligible_season": 2016,
                          "zone_receptions": 4,
                          "zone_forced_incompletion_rate": 0,
                          "man_snap_counts_pass_play": 17,
                          "zone_yards_per_reception": 9.8,
                          "man_longest": 6,
                          "man_assists": 0,
                          "zone_yards_after_catch": 9,
                          "man_stops": 2,
                          "man_receptions": 2,
                          "zone_tackles": 4,
                          "man_coverage_percent": 94.1,
                          "penalties": 0,
                          "zone_yards_per_coverage_snap": 2.3,
                          "team": "CIN",
                          "man_catch_rate": 66.7,
                          "man_grades_coverage_defense": 71.4,
                          "declined_penalties": 0,
                          "man_yards_after_catch": 3,
                          "man_pass_break_ups": 0,
                          "man_yards": 10,
                          "position": "CB",
                          "man_targets": 3,
                          "man_missed_tackle_rate": 0,
                          "zone_assists": 0,
                          "zone_snap_counts_pass_play": 19,
                          "zone_missed_tackle_rate": 0,
                          "zone_touchdowns": 0,
                          "zone_coverage_snaps_per_reception": 4.3,
                          "man_coverage_snaps_per_reception": 7.5,
                          "zone_avg_depth_of_target": 7.5,
                          "man_snap_counts_coverage_percent": 42.1,
                          "player": "Mike Hilton",
                          "franchise_id": 7,
                          "zone_forced_incompletes": 0,
                          "man_forced_incompletion_rate": 0,
                          "zone_targets": 4,
                          "zone_longest": 26,
                          "zone_dropped_ints": 0,
                          "zone_interceptions": 0,
                          "man_forced_incompletes": 0,
                          "player_id": 10898,
                          "zone_missed_tackles": 0,
                          "base_snap_counts_coverage": 38,
                          "man_missed_tackles": 0,
                          "zone_grades_coverage_defense": 55.9,
                          "man_qb_rating_against": 71.5,
                          "zone_pass_break_ups": 0,
                          "zone_qb_rating_against": 107.3,
                          "man_yards_per_coverage_snap": 0.7,
                          "zone_catch_rate": 100
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/defense/coverage_scheme?league=nfl&season=2022&week=1&franchise_id=7&export=true`, cut to the header and the first 3 lines.",
                    "value": "player,player_id,position,team_name,player_game_count,base_snap_counts_coverage,declined_penalties,franchise_id,man_assists,man_avg_depth_of_target,man_catch_rate,man_coverage_percent,man_coverage_snaps_per_reception,man_coverage_snaps_per_target,man_dropped_ints,man_forced_incompletes,man_forced_incompletion_rate,man_grades_coverage_defense,man_interceptions,man_longest,man_missed_tackle_rate,man_missed_tackles,man_pass_break_ups,man_qb_rating_against,man_receptions,man_snap_counts_coverage,man_snap_counts_coverage_percent,man_snap_counts_pass_play,man_stops,man_tackles,man_targets,man_touchdowns,man_yards,man_yards_after_catch,man_yards_per_coverage_snap,man_yards_per_reception,penalties,zone_assists,zone_avg_depth_of_target,zone_catch_rate,zone_coverage_percent,zone_coverage_snaps_per_reception,zone_coverage_snaps_per_target,zone_dropped_ints,zone_forced_incompletes,zone_forced_incompletion_rate,zone_grades_coverage_defense,zone_interceptions,zone_longest,zone_missed_tackle_rate,zone_missed_tackles,zone_pass_break_ups,zone_qb_rating_against,zone_receptions,zone_snap_counts_coverage,zone_snap_counts_coverage_percent,zone_snap_counts_pass_play,zone_stops,zone_tackles,zone_targets,zone_touchdowns,zone_yards,zone_yards_after_catch,zone_yards_per_coverage_snap,zone_yards_per_reception\r\nEli Apple,10644,CB,CIN,1,41,0,7,0,1.0,100.0,100.0,16.0,16.0,0,0,0.0,77.2,0,1,0.0,0,0,79.2,1,17,41.5,17,1,1,1,0,1,0,0.1,1.0,0,0,7.0,100.0,95.2,19.0,19.0,0,0,0.0,62.0,0,7,50.0,1,0,95.8,1,20,48.8,21,1,1,1,0,7,0,0.4,7.0\r\nVonn Bell,10695,S,CIN,1,38,0,7,0,5.0,50.0,88.2,14.0,7.0,0,0,0.0,64.5,0,10,0.0,0,0,64.6,1,15,39.5,17,0,1,2,0,10,4,0.7,10.0,0,0,-3.0,100.0,85.7,17.0,17.0,0,0,0.0,51.3,0,32,,0,0,118.8,1,18,47.4,21,0,0,1,0,32,35,1.9,32.0\r\nMike Hilton,10898,CB,CIN,1,38,0,7,0,9.0,66.7,94.1,7.5,5.0,0,0,0.0,71.4,0,6,0.0,0,0,71.5,2,16,42.1,17,2,2,3,0,10,3,0.7,5.0,0,0,7.5,100.0,94.7,4.3,4.3,0,0,0.0,55.9,0,26,0.0,0,0,107.3,4,18,47.4,19,0,4,4,0,39,9,2.3,9.8\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/defense/coverage_matchup": {
      "get": {
        "operationId": "facet-defense-coverage-matchup",
        "summary": "League-wide coverage matchup leaderboard",
        "description": "Every qualifying defender in the league, matched against the receivers they covered. Two complete\nrequests exist: `--league` with `--season` (a year, or a comma-separated list such as `2023,2024`),\nor `--game` alone (an id from `ref-games`) — anything less is refused with `400 invalid_parameter`.\nNarrow with `--week` and `--franchise`. `--division` fans the request out across NCAA divisions and\nis ignored for every other league. Grades are on PFF's 0-100 scale and every other column is a raw\ntotal or rate; which columns come back depends on the report, the position and the caller's\nentitlement. Add `--export true` for the raw CSV instead of JSON.\n\nALIAS of `facet-receiving-coverage`: both paths serve one and the same report. Identical response\nshape and CSV filename. This export is the same sided sheet as `facet-receiving-coverage`: a `side`\ncolumn, then `player_id` and `coverage_player_id`, then the remaining columns sorted by name.\n\nHidden from the command list (`x-cli-hidden`). It is still callable by name; `--help` lists\n`facet-receiving-coverage` alone rather than the same report under two names.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `download.csv` instead of JSON.",
        "tags": [
          "facet"
        ],
        "x-cli-hidden": true,
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `download.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"download.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetReceivingCoverageResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/defense/coverage_matchup?league=nfl&season=2022&week=1&franchise_id=7`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "receiving_coverage_stats": {
                        "defenders": [
                          {
                            "broken_up_passes": 1,
                            "drops": 0,
                            "first_downs": 2,
                            "grades_coverage_defense": 69.5,
                            "grades_defense": 65.7,
                            "grades_defense_penalty": 77.4,
                            "grades_overall": 65.7,
                            "grades_overall_tackle": 64.1,
                            "grades_run_defense": 45.7,
                            "grades_tackle": 64.1,
                            "interceptions": 0,
                            "longest": 25,
                            "player_game_count": 1,
                            "player_id": 11815,
                            "receptions": 5,
                            "targets": 11,
                            "touchdowns": 0,
                            "yards": 50,
                            "yards_after_catch": 1,
                            "yards_per_reception": 10
                          },
                          {
                            "broken_up_passes": 0,
                            "drops": 0,
                            "first_downs": 2,
                            "grades_coverage_defense": 65.3,
                            "grades_defense": 72.6,
                            "grades_defense_penalty": 76.3,
                            "grades_overall": 72.6,
                            "grades_overall_tackle": 80.8,
                            "grades_pass_rush_defense": 90.5,
                            "grades_run_defense": 67.7,
                            "grades_tackle": 80.8,
                            "interceptions": 0,
                            "longest": 26,
                            "player_game_count": 1,
                            "player_id": 10898,
                            "receptions": 6,
                            "targets": 7,
                            "touchdowns": 0,
                            "yards": 49,
                            "yards_after_catch": 12,
                            "yards_per_reception": 8.2
                          },
                          {
                            "broken_up_passes": 1,
                            "drops": 0,
                            "first_downs": 1,
                            "grades_coverage_defense": 79.9,
                            "grades_defense": 86.7,
                            "grades_defense_penalty": 74.9,
                            "grades_overall": 86.8,
                            "grades_overall_tackle": 82.5,
                            "grades_pass_rush_defense": 53.2,
                            "grades_run_defense": 81.5,
                            "grades_tackle": 82.5,
                            "interceptions": 0,
                            "longest": 31,
                            "player_game_count": 1,
                            "player_id": 29623,
                            "receptions": 4,
                            "targets": 5,
                            "touchdowns": 0,
                            "yards": 44,
                            "yards_after_catch": 26,
                            "yards_per_reception": 11
                          }
                        ],
                        "receivers": [
                          {
                            "broken_up_passes": 0,
                            "drops": 1,
                            "first_downs": 10,
                            "grades_hands_drop": 58.5,
                            "grades_hands_fumble": 71.1,
                            "grades_offense": 74.6,
                            "grades_offense_penalty": 8.3,
                            "grades_overall": 74.6,
                            "grades_pass_route": 76,
                            "grades_run_block": 55.2,
                            "interceptions": 0,
                            "longest": 24,
                            "player_game_count": 1,
                            "player_id": 84270,
                            "receptions": 10,
                            "targets": 15,
                            "touchdowns": 1,
                            "yards": 129,
                            "yards_after_catch": 48,
                            "yards_per_reception": 12.9
                          },
                          {
                            "broken_up_passes": 1,
                            "drops": 0,
                            "first_downs": 3,
                            "grades_hands_drop": 75.6,
                            "grades_hands_fumble": 79.7,
                            "grades_offense": 63.7,
                            "grades_offense_penalty": 79.6,
                            "grades_overall": 63.7,
                            "grades_pass_block": 44.8,
                            "grades_pass_route": 76.4,
                            "grades_run": 58.8,
                            "grades_run_block": 60,
                            "interceptions": 0,
                            "longest": 18,
                            "player_game_count": 1,
                            "player_id": 11803,
                            "receptions": 7,
                            "targets": 8,
                            "touchdowns": 0,
                            "yards": 63,
                            "yards_after_catch": 61,
                            "yards_per_reception": 9
                          },
                          {
                            "broken_up_passes": 0,
                            "drops": 0,
                            "first_downs": 3,
                            "grades_hands_drop": 72.1,
                            "grades_hands_fumble": 67,
                            "grades_offense": 58.1,
                            "grades_offense_penalty": 79,
                            "grades_overall": 58.1,
                            "grades_pass_route": 58.8,
                            "grades_run_block": 47.5,
                            "interceptions": 3,
                            "longest": 22,
                            "player_game_count": 1,
                            "player_id": 10689,
                            "receptions": 4,
                            "targets": 7,
                            "touchdowns": 1,
                            "yards": 33,
                            "yards_after_catch": 1,
                            "yards_per_reception": 8.3
                          }
                        ],
                        "versus": [
                          {
                            "broken_up_passes": 0,
                            "coverage_player_id": 11821,
                            "drops": 1,
                            "first_downs": 5,
                            "interceptions": 0,
                            "longest": 14,
                            "player_id": 84270,
                            "receptions": 5,
                            "targets": 7,
                            "touchdowns": 1,
                            "yards": 46,
                            "yards_after_catch": 23,
                            "yards_per_reception": 9.2
                          },
                          {
                            "broken_up_passes": 1,
                            "coverage_player_id": 10670,
                            "drops": 0,
                            "first_downs": 0,
                            "interceptions": 0,
                            "longest": 9,
                            "player_id": 11803,
                            "receptions": 2,
                            "targets": 3,
                            "touchdowns": 0,
                            "yards": 16,
                            "yards_after_catch": 16,
                            "yards_per_reception": 8
                          },
                          {
                            "broken_up_passes": 0,
                            "coverage_player_id": 11850,
                            "drops": 1,
                            "first_downs": 0,
                            "interceptions": 0,
                            "longest": 0,
                            "player_id": 10840,
                            "receptions": 0,
                            "targets": 3,
                            "touchdowns": 0,
                            "yards": 0,
                            "yards_after_catch": 0,
                            "yards_per_reception": null
                          }
                        ]
                      }
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBodySided"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/defense/pass_rush": {
      "get": {
        "operationId": "facet-defense-pass-rush",
        "summary": "League-wide pass-rush leaderboard",
        "description": "Every qualifying rusher in the league, with pressures, hits, sacks and grades. Two complete requests\nexist: `--league` with `--season` (a year, or a comma-separated list such as `2023,2024`), or\n`--game` alone (an id from `ref-games`) — anything less is refused with `400 invalid_parameter`.\nNarrow with `--week` and `--franchise`. `--division` fans the request out across NCAA divisions and\nis ignored for every other league. Grades are on PFF's 0-100 scale and every other column is a raw\ntotal or rate; which columns come back depends on the report, the position and the caller's\nentitlement. Add `--export true` for the raw CSV instead of JSON.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `pass_rush_summary.csv` instead\nof JSON.",
        "tags": [
          "facet"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `pass_rush_summary.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"pass_rush_summary.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetDefensePassRushResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/defense/pass_rush?league=nfl&season=2022&week=1&franchise_id=7`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "pass_rush_summary": [
                        {
                          "true_pass_set_total_pressures": 0,
                          "draft_season": 2016,
                          "true_pass_set_prp": null,
                          "true_pass_set_hurries": 0,
                          "team_name": "CIN",
                          "prp": 0,
                          "true_pass_set_sacks": 0,
                          "pass_rush_win_rate": 0,
                          "jersey_number": "20",
                          "sacks": 0,
                          "snap_counts_pass_rush": 1,
                          "player_game_count": 1,
                          "eligible_season": 2016,
                          "true_pass_set_snap_counts_pass_play": 18,
                          "pass_rush_wins": 0,
                          "hurries": 0,
                          "pass_rush_opp": 1,
                          "snap_counts_pass_play": 42,
                          "hits": 0,
                          "true_pass_set_pass_rush_win_rate": null,
                          "penalties": 0,
                          "batted_passes": 0,
                          "true_pass_set_hits": 0,
                          "true_pass_set_snap_counts_pass_rush": 0,
                          "team": "CIN",
                          "declined_penalties": 0,
                          "true_pass_set_pass_rush_wins": 0,
                          "total_pressures": 0,
                          "position": "CB",
                          "true_pass_set_grades_pass_rush_defense": null,
                          "true_pass_set_batted_passes": 0,
                          "player": "Eli Apple",
                          "franchise_id": 7,
                          "pass_rush_percent": 2.4,
                          "true_pass_set_pass_rush_opp": 0,
                          "true_pass_set_pass_rush_percent": 0,
                          "grades_pass_rush_defense": 55,
                          "player_id": 10644
                        },
                        {
                          "true_pass_set_total_pressures": 0,
                          "draft_season": 2016,
                          "true_pass_set_prp": 0,
                          "true_pass_set_hurries": 0,
                          "team_name": "CIN",
                          "prp": 10,
                          "true_pass_set_sacks": 0,
                          "pass_rush_win_rate": 0,
                          "jersey_number": "24",
                          "sacks": 0,
                          "snap_counts_pass_rush": 5,
                          "player_game_count": 1,
                          "eligible_season": 2016,
                          "true_pass_set_snap_counts_pass_play": 18,
                          "pass_rush_wins": 0,
                          "hurries": 0,
                          "pass_rush_opp": 5,
                          "snap_counts_pass_play": 43,
                          "hits": 1,
                          "true_pass_set_pass_rush_win_rate": 0,
                          "penalties": 0,
                          "batted_passes": 0,
                          "true_pass_set_hits": 0,
                          "true_pass_set_snap_counts_pass_rush": 3,
                          "team": "CIN",
                          "declined_penalties": 0,
                          "true_pass_set_pass_rush_wins": 0,
                          "total_pressures": 1,
                          "position": "S",
                          "true_pass_set_grades_pass_rush_defense": 54.6,
                          "true_pass_set_batted_passes": 0,
                          "player": "Vonn Bell",
                          "franchise_id": 7,
                          "pass_rush_percent": 11.6,
                          "true_pass_set_pass_rush_opp": 3,
                          "true_pass_set_pass_rush_percent": 16.7,
                          "grades_pass_rush_defense": 62.4,
                          "player_id": 10695
                        },
                        {
                          "true_pass_set_total_pressures": 3,
                          "draft_season": 2016,
                          "true_pass_set_prp": 16.7,
                          "true_pass_set_hurries": 1,
                          "team_name": "CIN",
                          "prp": 6,
                          "true_pass_set_sacks": 0,
                          "pass_rush_win_rate": 12,
                          "jersey_number": "98",
                          "sacks": 0,
                          "snap_counts_pass_rush": 26,
                          "player_game_count": 1,
                          "eligible_season": 2016,
                          "true_pass_set_snap_counts_pass_play": 9,
                          "pass_rush_wins": 3,
                          "hurries": 1,
                          "pass_rush_opp": 25,
                          "snap_counts_pass_play": 26,
                          "hits": 2,
                          "true_pass_set_pass_rush_win_rate": 33.3,
                          "penalties": 0,
                          "batted_passes": 0,
                          "true_pass_set_hits": 2,
                          "true_pass_set_snap_counts_pass_rush": 9,
                          "team": "CIN",
                          "declined_penalties": 0,
                          "true_pass_set_pass_rush_wins": 3,
                          "total_pressures": 3,
                          "position": "DI",
                          "true_pass_set_grades_pass_rush_defense": 90.4,
                          "true_pass_set_batted_passes": 0,
                          "player": "DJ Reader",
                          "franchise_id": 7,
                          "pass_rush_percent": 100,
                          "true_pass_set_pass_rush_opp": 9,
                          "true_pass_set_pass_rush_percent": 100,
                          "grades_pass_rush_defense": 76.3,
                          "player_id": 10800
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/defense/pass_rush?league=nfl&season=2022&week=1&franchise_id=7&export=true`, cut to the header and the first 3 lines.",
                    "value": "player,player_id,position,team_name,player_game_count,batted_passes,declined_penalties,franchise_id,grades_pass_rush_defense,hits,hurries,pass_rush_opp,pass_rush_percent,pass_rush_win_rate,pass_rush_wins,penalties,prp,sacks,snap_counts_pass_play,snap_counts_pass_rush,total_pressures,true_pass_set_batted_passes,true_pass_set_grades_pass_rush_defense,true_pass_set_hits,true_pass_set_hurries,true_pass_set_pass_rush_opp,true_pass_set_pass_rush_percent,true_pass_set_pass_rush_win_rate,true_pass_set_pass_rush_wins,true_pass_set_prp,true_pass_set_sacks,true_pass_set_snap_counts_pass_play,true_pass_set_snap_counts_pass_rush,true_pass_set_total_pressures\r\nEli Apple,10644,CB,CIN,1,0,0,7,55.0,0,0,1,2.4,0.0,0,0,0.0,0,42,1,0,0,,0,0,0,0.0,,0,,0,18,0,0\r\nVonn Bell,10695,S,CIN,1,0,0,7,62.4,1,0,5,11.6,0.0,0,0,10.0,0,43,5,1,0,54.6,0,0,3,16.7,0.0,0,0.0,0,18,3,0\r\nDJ Reader,10800,DI,CIN,1,0,0,7,76.3,2,1,25,100.0,12.0,3,0,6.0,0,26,26,3,0,90.4,2,1,9,100.0,33.3,3,16.7,0,9,9,3\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/defense/run": {
      "get": {
        "operationId": "facet-defense-run",
        "summary": "League-wide run-defense leaderboard",
        "description": "Every qualifying defender in the league, with run stops, tackles and grades. Two complete requests\nexist: `--league` with `--season` (a year, or a comma-separated list such as `2023,2024`), or\n`--game` alone (an id from `ref-games`) — anything less is refused with `400 invalid_parameter`.\nNarrow with `--week` and `--franchise`. `--division` fans the request out across NCAA divisions and\nis ignored for every other league. Grades are on PFF's 0-100 scale and every other column is a raw\ntotal or rate; which columns come back depends on the report, the position and the caller's\nentitlement. Add `--export true` for the raw CSV instead of JSON.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `run_defense_summary.csv`\ninstead of JSON.",
        "tags": [
          "facet"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `run_defense_summary.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"run_defense_summary.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetDefenseRunResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/defense/run?league=nfl&season=2022&week=1&franchise_id=7`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "run_defense_summary": [
                        {
                          "assists": 0,
                          "avg_depth_of_tackle": null,
                          "declined_penalties": 0,
                          "draft_season": 2016,
                          "eligible_season": 2016,
                          "forced_fumbles": 0,
                          "franchise_id": 7,
                          "grades_coverage_defense": 72.1,
                          "grades_defense": 70.6,
                          "grades_defense_penalty": 77.5,
                          "grades_pass_rush_defense": 55,
                          "grades_run_defense": 61.6,
                          "grades_tackle": 29.6,
                          "jersey_number": "20",
                          "missed_tackle_rate": null,
                          "missed_tackles": 0,
                          "penalties": 0,
                          "player": "Eli Apple",
                          "player_game_count": 1,
                          "player_id": 10644,
                          "position": "CB",
                          "run_stop_opp": 19,
                          "snap_counts_run": 19,
                          "stop_percent": 0,
                          "stops": 0,
                          "tackles": 0,
                          "team": "CIN",
                          "team_name": "CIN"
                        },
                        {
                          "assists": 1,
                          "avg_depth_of_tackle": null,
                          "declined_penalties": 0,
                          "draft_season": 2016,
                          "eligible_season": 2016,
                          "forced_fumbles": 0,
                          "franchise_id": 7,
                          "grades_coverage_defense": 57.4,
                          "grades_defense": 60.7,
                          "grades_defense_penalty": 75.8,
                          "grades_pass_rush_defense": 62.4,
                          "grades_run_defense": 66.2,
                          "grades_tackle": 76.7,
                          "jersey_number": "24",
                          "missed_tackle_rate": 0,
                          "missed_tackles": 0,
                          "penalties": 0,
                          "player": "Vonn Bell",
                          "player_game_count": 1,
                          "player_id": 10695,
                          "position": "S",
                          "run_stop_opp": 20,
                          "snap_counts_run": 20,
                          "stop_percent": 0,
                          "stops": 0,
                          "tackles": 0,
                          "team": "CIN",
                          "team_name": "CIN"
                        },
                        {
                          "assists": 0,
                          "avg_depth_of_tackle": -1,
                          "declined_penalties": 0,
                          "draft_season": 2016,
                          "eligible_season": 2016,
                          "forced_fumbles": 0,
                          "franchise_id": 7,
                          "grades_defense": 88.4,
                          "grades_defense_penalty": 76.9,
                          "grades_pass_rush_defense": 76.3,
                          "grades_run_defense": 79,
                          "grades_tackle": 69,
                          "jersey_number": "98",
                          "missed_tackle_rate": 0,
                          "missed_tackles": 0,
                          "penalties": 0,
                          "player": "DJ Reader",
                          "player_game_count": 1,
                          "player_id": 10800,
                          "position": "DI",
                          "run_stop_opp": 16,
                          "snap_counts_run": 16,
                          "stop_percent": 12.5,
                          "stops": 2,
                          "tackles": 2,
                          "team": "CIN",
                          "team_name": "CIN"
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/defense/run?league=nfl&season=2022&week=1&franchise_id=7&export=true`, cut to the header and the first 3 lines.",
                    "value": "player,player_id,position,team_name,player_game_count,assists,avg_depth_of_tackle,declined_penalties,forced_fumbles,franchise_id,grades_coverage_defense,grades_defense,grades_defense_penalty,grades_pass_rush_defense,grades_run_defense,grades_tackle,missed_tackle_rate,missed_tackles,penalties,run_stop_opp,snap_counts_run,stop_percent,stops,tackles\r\nEli Apple,10644,CB,CIN,1,0,,0,0,7,72.1,70.6,77.5,55.0,61.6,29.6,,0,0,19,19,0.0,0,0\r\nVonn Bell,10695,S,CIN,1,1,,0,0,7,57.4,60.7,75.8,62.4,66.2,76.7,0.0,0,0,20,20,0.0,0,0\r\nDJ Reader,10800,DI,CIN,1,0,-1.0,0,0,7,,88.4,76.9,76.3,79.0,69.0,0.0,0,0,16,16,12.5,2,2\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/defense/summary": {
      "get": {
        "operationId": "facet-defense-summary",
        "summary": "League-wide defense summary leaderboard",
        "description": "Every qualifying defender in the league, with tackles, stops, pressures and grades. Two complete\nrequests exist: `--league` with `--season` (a year, or a comma-separated list such as `2023,2024`),\nor `--game` alone (an id from `ref-games`) — anything less is refused with `400 invalid_parameter`.\nNarrow with `--week` and `--franchise`. `--division` fans the request out across NCAA divisions and\nis ignored for every other league. Grades are on PFF's 0-100 scale and every other column is a raw\ntotal or rate; which columns come back depends on the report, the position and the caller's\nentitlement. Add `--export true` for the raw CSV instead of JSON.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `defense_summary.csv` instead\nof JSON.",
        "tags": [
          "facet"
        ],
        "x-cli-aliases": [
          "defense"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `defense_summary.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"defense_summary.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetDefenseSummaryResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/defense/summary?league=nfl&season=2022&week=1&franchise_id=7`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "defense_summary": [
                        {
                          "targets": 3,
                          "interception_touchdowns": 0,
                          "draft_season": 2016,
                          "forced_fumbles": 0,
                          "missed_tackles": 1,
                          "catch_rate": 66.7,
                          "team_name": "CIN",
                          "tackles": 2,
                          "jersey_number": "20",
                          "snap_counts_offball": 60,
                          "snap_counts_box": 6,
                          "sacks": 0,
                          "snap_counts_pass_rush": 1,
                          "player_game_count": 1,
                          "eligible_season": 2016,
                          "snap_counts_dl": 1,
                          "grades_tackle": 29.6,
                          "yards": 8,
                          "receptions": 2,
                          "grades_coverage_defense": 72.1,
                          "hurries": 0,
                          "interceptions": 0,
                          "snap_counts_coverage": 41,
                          "snap_counts_dl_over_t": 0,
                          "snap_counts_dl_a_gap": 0,
                          "fumble_recoveries": 0,
                          "grades_run_defense": 61.6,
                          "snap_counts_corner": 53,
                          "hits": 0,
                          "penalties": 0,
                          "batted_passes": 0,
                          "team": "CIN",
                          "stops": 2,
                          "declined_penalties": 0,
                          "total_pressures": 0,
                          "position": "CB",
                          "fumble_recovery_touchdowns": 0,
                          "longest": 7,
                          "snap_counts_slot": 1,
                          "missed_tackle_rate": 33.3,
                          "grades_defense": 70.6,
                          "yards_per_reception": 4,
                          "grades_defense_penalty": 77.5,
                          "safeties": 0,
                          "player": "Eli Apple",
                          "franchise_id": 7,
                          "snap_counts_defense": 61,
                          "yards_after_catch": 0,
                          "snap_counts_dl_b_gap": 0,
                          "pass_break_ups": 0,
                          "qb_rating_against": 70.1,
                          "snap_counts_run_defense": 19,
                          "tackles_for_loss": 0,
                          "assists": 0,
                          "grades_pass_rush_defense": 55,
                          "player_id": 10644,
                          "snap_counts_fs": 0,
                          "touchdowns": 0,
                          "snap_counts_dl_outside_t": 1
                        },
                        {
                          "targets": 3,
                          "interception_touchdowns": 0,
                          "draft_season": 2016,
                          "forced_fumbles": 0,
                          "missed_tackles": 0,
                          "catch_rate": 66.7,
                          "team_name": "CIN",
                          "tackles": 1,
                          "jersey_number": "24",
                          "snap_counts_offball": 59,
                          "snap_counts_box": 34,
                          "sacks": 0,
                          "snap_counts_pass_rush": 5,
                          "player_game_count": 1,
                          "eligible_season": 2016,
                          "snap_counts_dl": 4,
                          "grades_tackle": 76.7,
                          "yards": 42,
                          "receptions": 2,
                          "grades_coverage_defense": 57.4,
                          "hurries": 0,
                          "interceptions": 0,
                          "snap_counts_coverage": 38,
                          "snap_counts_dl_over_t": 0,
                          "snap_counts_dl_a_gap": 0,
                          "fumble_recoveries": 0,
                          "grades_run_defense": 66.2,
                          "snap_counts_corner": 0,
                          "hits": 1,
                          "penalties": 0,
                          "batted_passes": 0,
                          "team": "CIN",
                          "stops": 0,
                          "declined_penalties": 0,
                          "total_pressures": 1,
                          "position": "S",
                          "fumble_recovery_touchdowns": 0,
                          "longest": 32,
                          "snap_counts_slot": 6,
                          "missed_tackle_rate": 0,
                          "grades_defense": 60.7,
                          "yards_per_reception": 21,
                          "grades_defense_penalty": 75.8,
                          "safeties": 0,
                          "player": "Vonn Bell",
                          "franchise_id": 7,
                          "snap_counts_defense": 63,
                          "yards_after_catch": 39,
                          "snap_counts_dl_b_gap": 0,
                          "pass_break_ups": 0,
                          "qb_rating_against": 109.7,
                          "snap_counts_run_defense": 20,
                          "tackles_for_loss": 0,
                          "assists": 1,
                          "grades_pass_rush_defense": 62.4,
                          "player_id": 10695,
                          "snap_counts_fs": 19,
                          "touchdowns": 0,
                          "snap_counts_dl_outside_t": 4
                        },
                        {
                          "targets": 0,
                          "interception_touchdowns": 0,
                          "draft_season": 2016,
                          "forced_fumbles": 0,
                          "missed_tackles": 0,
                          "catch_rate": null,
                          "team_name": "CIN",
                          "tackles": 2,
                          "jersey_number": "98",
                          "snap_counts_offball": 0,
                          "snap_counts_box": 0,
                          "sacks": 0,
                          "snap_counts_pass_rush": 26,
                          "player_game_count": 1,
                          "eligible_season": 2016,
                          "snap_counts_dl": 42,
                          "grades_tackle": 69,
                          "yards": 0,
                          "receptions": 0,
                          "hurries": 1,
                          "interceptions": 0,
                          "snap_counts_coverage": 0,
                          "snap_counts_dl_over_t": 2,
                          "snap_counts_dl_a_gap": 13,
                          "fumble_recoveries": 0,
                          "grades_run_defense": 79,
                          "snap_counts_corner": 0,
                          "hits": 2,
                          "penalties": 0,
                          "batted_passes": 0,
                          "team": "CIN",
                          "stops": 2,
                          "declined_penalties": 0,
                          "total_pressures": 3,
                          "position": "DI",
                          "fumble_recovery_touchdowns": 0,
                          "longest": null,
                          "snap_counts_slot": 0,
                          "missed_tackle_rate": 0,
                          "grades_defense": 88.4,
                          "yards_per_reception": null,
                          "grades_defense_penalty": 76.9,
                          "safeties": 0,
                          "player": "DJ Reader",
                          "franchise_id": 7,
                          "snap_counts_defense": 42,
                          "yards_after_catch": 0,
                          "snap_counts_dl_b_gap": 27,
                          "pass_break_ups": 0,
                          "qb_rating_against": 0,
                          "snap_counts_run_defense": 16,
                          "tackles_for_loss": 1,
                          "assists": 0,
                          "grades_pass_rush_defense": 76.3,
                          "player_id": 10800,
                          "snap_counts_fs": 0,
                          "touchdowns": 0,
                          "snap_counts_dl_outside_t": 0
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/defense/summary?league=nfl&season=2022&week=1&franchise_id=7&export=true`, cut to the header and the first 3 lines.",
                    "value": "player,player_id,position,team_name,player_game_count,assists,batted_passes,catch_rate,declined_penalties,forced_fumbles,franchise_id,fumble_recoveries,fumble_recovery_touchdowns,grades_coverage_defense,grades_defense,grades_defense_penalty,grades_pass_rush_defense,grades_run_defense,grades_tackle,hits,hurries,interception_touchdowns,interceptions,longest,missed_tackle_rate,missed_tackles,pass_break_ups,penalties,qb_rating_against,receptions,sacks,safeties,snap_counts_box,snap_counts_corner,snap_counts_coverage,snap_counts_defense,snap_counts_dl,snap_counts_dl_a_gap,snap_counts_dl_b_gap,snap_counts_dl_outside_t,snap_counts_dl_over_t,snap_counts_fs,snap_counts_offball,snap_counts_pass_rush,snap_counts_run_defense,snap_counts_slot,stops,tackles,tackles_for_loss,targets,total_pressures,touchdowns,yards,yards_after_catch,yards_per_reception\r\nEli Apple,10644,CB,CIN,1,0,0,66.7,0,0,7,0,0,72.1,70.6,77.5,55.0,61.6,29.6,0,0,0,0,7,33.3,1,0,0,70.1,2,0,0,6,53,41,61,1,0,0,1,0,0,60,1,19,1,2,2,0,3,0,0,8,0,4.0\r\nVonn Bell,10695,S,CIN,1,1,0,66.7,0,0,7,0,0,57.4,60.7,75.8,62.4,66.2,76.7,1,0,0,0,32,0.0,0,0,0,109.7,2,0,0,34,0,38,63,4,0,0,4,0,19,59,5,20,6,0,1,0,3,1,0,42,39,21.0\r\nDJ Reader,10800,DI,CIN,1,0,0,,0,0,7,0,0,,88.4,76.9,76.3,79.0,69.0,2,1,0,0,,0.0,0,0,0,0.0,0,0,0,0,0,0,42,42,13,27,0,2,0,0,26,16,0,2,2,1,0,3,0,0,0,\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/field_goal/summary": {
      "get": {
        "operationId": "facet-field-goal-summary",
        "summary": "League-wide field-goal kicking leaderboard",
        "description": "Every qualifying kicker in the league, with attempts, makes and grades. Two complete requests exist:\n`--league` with `--season` (a year, or a comma-separated list such as `2023,2024`), or `--game`\nalone (an id from `ref-games`) — anything less is refused with `400 invalid_parameter`. Narrow with\n`--week` and `--franchise`. `--division` fans the request out across NCAA divisions and is ignored\nfor every other league. Grades are on PFF's 0-100 scale and every other column is a raw total or\nrate; which columns come back depends on the report, the position and the caller's entitlement. Add\n`--export true` for the raw CSV instead of JSON.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `field_goal_summary.csv`\ninstead of JSON.",
        "tags": [
          "facet"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `field_goal_summary.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"field_goal_summary.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetFieldGoalSummaryResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/field_goal/summary?league=nfl&season=2022&week=1&franchise_id=7`, complete.",
                    "value": {
                      "field_goal_summary": [
                        {
                          "twenty_attempts": 2,
                          "pat_percent": 0,
                          "draft_season": 2021,
                          "forty_made": 0,
                          "team_name": "CIN",
                          "fifty_percent": 100,
                          "total_made": 2,
                          "jersey_number": "02",
                          "one_made": 0,
                          "fifty_attempts": 1,
                          "forty_attempts": 0,
                          "player_game_count": 1,
                          "eligible_season": 2021,
                          "thirty_percent": null,
                          "total_attempts": 3,
                          "pat_attempts": 1,
                          "twenty_made": 1,
                          "one_attempts": 0,
                          "grades_fgep_kicker": 53.2,
                          "thirty_attempts": 0,
                          "penalties": 0,
                          "pat_made": 0,
                          "team": "CIN",
                          "declined_penalties": 0,
                          "one_percent": null,
                          "total_percent": 66.7,
                          "position": "K",
                          "twenty_percent": 50,
                          "forty_percent": null,
                          "player": "Evan McPherson",
                          "franchise_id": 7,
                          "fifty_made": 1,
                          "thirty_made": 0,
                          "player_id": 82583
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/field_goal/summary?league=nfl&season=2022&week=1&franchise_id=7&export=true`, complete.",
                    "value": "player,player_id,position,team_name,player_game_count,declined_penalties,fifty_attempts,fifty_made,fifty_percent,forty_attempts,forty_made,forty_percent,franchise_id,grades_fgep_kicker,one_attempts,one_made,one_percent,pat_attempts,pat_made,pat_percent,penalties,thirty_attempts,thirty_made,thirty_percent,total_attempts,total_made,total_percent,twenty_attempts,twenty_made,twenty_percent\r\nEvan McPherson,82583,K,CIN,1,0,1,1,100.0,0,0,,7,53.2,0,0,,1,0,0.0,0,0,0,,3,2,66.7,2,1,50.0\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/kickoff/summary": {
      "get": {
        "operationId": "facet-kickoff-summary",
        "summary": "League-wide kickoff leaderboard",
        "description": "Every qualifying kicker in the league, with kickoffs, touchbacks and grades. Two complete requests\nexist: `--league` with `--season` (a year, or a comma-separated list such as `2023,2024`), or\n`--game` alone (an id from `ref-games`) — anything less is refused with `400 invalid_parameter`.\nNarrow with `--week` and `--franchise`. `--division` fans the request out across NCAA divisions and\nis ignored for every other league. Grades are on PFF's 0-100 scale and every other column is a raw\ntotal or rate; which columns come back depends on the report, the position and the caller's\nentitlement. Add `--export true` for the raw CSV instead of JSON.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `kickoff_summary.csv` instead\nof JSON.",
        "tags": [
          "facet"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `kickoff_summary.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"kickoff_summary.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetKickoffSummaryResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/kickoff/summary?league=nfl&season=2022&week=1&franchise_id=7`, complete.",
                    "value": {
                      "kicking_summary": [
                        {
                          "attempts": 6,
                          "attempts_with_hangtime": 5,
                          "average_distance": 69.7,
                          "average_hangtime": 4.1,
                          "average_starting_field_position": 24.3,
                          "average_yards_per_return": 1,
                          "declined_penalties": 0,
                          "draft_season": 2021,
                          "eligible_season": 2021,
                          "fair_catches": 0,
                          "franchise_id": 7,
                          "grades_kickoff_kicker": 60,
                          "jersey_number": "02",
                          "kicked_yards": 418,
                          "kicks_returned": 1,
                          "onside_kicks": 0,
                          "penalties": 0,
                          "percent_returned": 16.7,
                          "player": "Evan McPherson",
                          "player_game_count": 1,
                          "player_id": 82583,
                          "position": "K",
                          "return_yards": 1,
                          "team": "CIN",
                          "team_name": "CIN",
                          "total_hangtime": 20.48,
                          "touchbacks": 5
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/kickoff/summary?league=nfl&season=2022&week=1&franchise_id=7&export=true`, complete.",
                    "value": "player,player_id,position,team_name,player_game_count,attempts,attempts_with_hangtime,average_distance,average_hangtime,average_starting_field_position,average_yards_per_return,declined_penalties,fair_catches,franchise_id,grades_kickoff_kicker,kicked_yards,kicks_returned,onside_kicks,penalties,percent_returned,return_yards,total_hangtime,touchbacks\r\nEvan McPherson,82583,K,CIN,1,6,5,69.7,4.1,24.3,1.0,0,0,7,60.0,418,1,0,0,16.7,1,20.48,5\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/punting/summary": {
      "get": {
        "operationId": "facet-punting-summary",
        "summary": "League-wide punting leaderboard",
        "description": "Every qualifying punter in the league, with punts, yards, hang time and grades. Two complete\nrequests exist: `--league` with `--season` (a year, or a comma-separated list such as `2023,2024`),\nor `--game` alone (an id from `ref-games`) — anything less is refused with `400 invalid_parameter`.\nNarrow with `--week` and `--franchise`. `--division` fans the request out across NCAA divisions and\nis ignored for every other league. Grades are on PFF's 0-100 scale and every other column is a raw\ntotal or rate; which columns come back depends on the report, the position and the caller's\nentitlement. Add `--export true` for the raw CSV instead of JSON.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `punting_summary.csv` instead\nof JSON.",
        "tags": [
          "facet"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `punting_summary.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"punting_summary.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetPuntingSummaryResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/punting/summary?league=nfl&season=2022&week=1&franchise_id=7`, complete.",
                    "value": {
                      "punting_summary": [
                        {
                          "touchbacks": 1,
                          "attempts_with_hangtime": 3,
                          "draft_season": 2009,
                          "percent_returned": 33.3,
                          "fair_catches": 1,
                          "team_name": "CIN",
                          "jersey_number": "10",
                          "player_game_count": 1,
                          "eligible_season": 2009,
                          "average_net_yards": 39.33,
                          "yards": 158,
                          "average_hangtime": 4.48,
                          "total_net_yards": 118,
                          "penalties": 0,
                          "attempts": 3,
                          "inside_twenties": 1,
                          "out_of_bounds": 0,
                          "team": "CIN",
                          "average_yards_per_return": 20,
                          "total_hangtime": 13.44,
                          "declined_penalties": 0,
                          "returns": 1,
                          "position": "P",
                          "long": 58,
                          "blocks": 0,
                          "average_yards_per_attempt": 52.67,
                          "player": "Kevin Huber",
                          "franchise_id": 7,
                          "grades_punter": 63,
                          "return_yards": 20,
                          "downeds": 0,
                          "player_id": 5066,
                          "snaps": 3
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/punting/summary?league=nfl&season=2022&week=1&franchise_id=7&export=true`, complete.",
                    "value": "player,player_id,position,team_name,player_game_count,attempts,attempts_with_hangtime,average_hangtime,average_net_yards,average_yards_per_attempt,average_yards_per_return,blocks,declined_penalties,downeds,fair_catches,franchise_id,grades_punter,inside_twenties,long,out_of_bounds,penalties,percent_returned,return_yards,returns,snaps,total_hangtime,total_net_yards,touchbacks,yards\r\nKevin Huber,5066,P,CIN,1,3,3,4.48,39.33,52.67,20.0,0,0,0,1,7,63.0,1,58,0,0,33.3,20,1,3,13.44,118,1,158\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/return/summary": {
      "get": {
        "operationId": "facet-return-summary",
        "summary": "League-wide return leaderboard",
        "description": "Every qualifying returner in the league, with returns, yards, touchdowns and grades. Two complete\nrequests exist: `--league` with `--season` (a year, or a comma-separated list such as `2023,2024`),\nor `--game` alone (an id from `ref-games`) — anything less is refused with `400 invalid_parameter`.\nNarrow with `--week` and `--franchise`. `--division` fans the request out across NCAA divisions and\nis ignored for every other league. Grades are on PFF's 0-100 scale and every other column is a raw\ntotal or rate; which columns come back depends on the report, the position and the caller's\nentitlement. Add `--export true` for the raw CSV instead of JSON.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `return_summary.csv` instead of\nJSON.",
        "tags": [
          "facet"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `return_summary.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"return_summary.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetReturnSummaryResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/return/summary?league=nfl&season=2022&week=1&franchise_id=7`, complete.",
                    "value": {
                      "return_summary": [
                        {
                          "declined_penalties": 0,
                          "draft_season": 2017,
                          "eligible_season": 2017,
                          "franchise_id": 7,
                          "grades_punt_return": 62.7,
                          "grades_return": 62,
                          "jersey_number": "11",
                          "kickoff_attempts": 0,
                          "kickoff_fair_catches": 0,
                          "kickoff_long": 0,
                          "kickoff_muffed_returns": 0,
                          "kickoff_touchdowns": 0,
                          "kickoff_yards": 0,
                          "kickoff_ypa": null,
                          "penalties": 0,
                          "player": "Trent Taylor",
                          "player_game_count": 1,
                          "player_id": 11932,
                          "position": "WR",
                          "punt_attempts": 5,
                          "punt_fair_catches": 1,
                          "punt_long": 10,
                          "punt_muffed_returns": 0,
                          "punt_touchdowns": 0,
                          "punt_yards": 31,
                          "punt_ypa": 6.2,
                          "team": "CIN",
                          "team_name": "CIN",
                          "total_attempts": 5
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/return/summary?league=nfl&season=2022&week=1&franchise_id=7&export=true`, complete.",
                    "value": "player,player_id,position,team_name,player_game_count,declined_penalties,franchise_id,grades_punt_return,grades_return,kickoff_attempts,kickoff_fair_catches,kickoff_long,kickoff_muffed_returns,kickoff_touchdowns,kickoff_yards,kickoff_ypa,penalties,punt_attempts,punt_fair_catches,punt_long,punt_muffed_returns,punt_touchdowns,punt_yards,punt_ypa,total_attempts\r\nTrent Taylor,11932,WR,CIN,1,0,7,62.7,62.0,0,0,0,0,0,0,,0,5,1,10,0,0,31,6.2,5\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/special/summary": {
      "get": {
        "operationId": "facet-special-summary",
        "summary": "League-wide special-teams leaderboard",
        "description": "Every qualifying player in the league, with their special-teams snaps and grades. Two complete\nrequests exist: `--league` with `--season` (a year, or a comma-separated list such as `2023,2024`),\nor `--game` alone (an id from `ref-games`) — anything less is refused with `400 invalid_parameter`.\nNarrow with `--week` and `--franchise`. `--division` fans the request out across NCAA divisions and\nis ignored for every other league. Grades are on PFF's 0-100 scale and every other column is a raw\ntotal or rate; which columns come back depends on the report, the position and the caller's\nentitlement. Add `--export true` for the raw CSV instead of JSON.\n\nA present-but-empty `league`, `season` or `week` short-circuits to an empty 200.\n\nWith `export=true` the response is `text/csv` as an attachment named `special_teams_summary.csv`\ninstead of JSON.",
        "tags": [
          "facet"
        ],
        "x-cli-aliases": [
          "special-teams"
        ],
        "x-requires-one-of": {
          "message": "Give league and season together, or game_id alone",
          "alternatives": [
            [
              "league",
              "season"
            ],
            [
              "game_id"
            ]
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/league"
          },
          {
            "$ref": "#/components/parameters/season_list"
          },
          {
            "$ref": "#/components/parameters/week"
          },
          {
            "$ref": "#/components/parameters/franchise_id"
          },
          {
            "$ref": "#/components/parameters/game_id"
          },
          {
            "$ref": "#/components/parameters/division"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `special_teams_summary.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"special_teams_summary.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FacetSpecialSummaryResponse"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/special/summary?league=nfl&season=2022&week=1&franchise_id=7`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "special_teams_summary": [
                        {
                          "assists": 0,
                          "declined_penalties": 0,
                          "draft_season": 2007,
                          "eligible_season": 2007,
                          "franchise_id": 7,
                          "grades_fgep_offense": 60,
                          "grades_long_snap": 75.3,
                          "grades_misc_st": 52.3,
                          "grades_special_teams_penalty": 62.8,
                          "jersey_number": "46",
                          "missed_tackles": 1,
                          "penalties": 0,
                          "player": "Clark Harris",
                          "player_game_count": 1,
                          "player_id": 3859,
                          "position": "LS",
                          "snap_counts_field_goal": 2,
                          "snap_counts_field_goal_blocking": 0,
                          "snap_counts_kickoff": 0,
                          "snap_counts_kickoff_return": 0,
                          "snap_counts_punt_coverage": 2,
                          "snap_counts_punt_return": 0,
                          "tackles": 0,
                          "team": "CIN",
                          "team_name": "CIN"
                        },
                        {
                          "assists": 0,
                          "declined_penalties": 0,
                          "draft_season": 2009,
                          "eligible_season": 2009,
                          "franchise_id": 7,
                          "grades_fgep_offense": 60,
                          "grades_misc_st": 60.4,
                          "grades_punter": 63,
                          "grades_special_teams_penalty": 66,
                          "jersey_number": "10",
                          "missed_tackles": 0,
                          "penalties": 0,
                          "player": "Kevin Huber",
                          "player_game_count": 1,
                          "player_id": 5066,
                          "position": "P",
                          "snap_counts_field_goal": 4,
                          "snap_counts_field_goal_blocking": 0,
                          "snap_counts_kickoff": 0,
                          "snap_counts_kickoff_return": 0,
                          "snap_counts_punt_coverage": 3,
                          "snap_counts_punt_return": 0,
                          "tackles": 0,
                          "team": "CIN",
                          "team_name": "CIN"
                        },
                        {
                          "assists": 0,
                          "declined_penalties": 0,
                          "draft_season": 2012,
                          "eligible_season": 2012,
                          "franchise_id": 7,
                          "grades_misc_st": 65.5,
                          "grades_special_teams_penalty": 67,
                          "jersey_number": "31",
                          "missed_tackles": 0,
                          "penalties": 0,
                          "player": "Michael Thomas",
                          "player_game_count": 1,
                          "player_id": 7279,
                          "position": "S",
                          "snap_counts_field_goal": 0,
                          "snap_counts_field_goal_blocking": 0,
                          "snap_counts_kickoff": 6,
                          "snap_counts_kickoff_return": 5,
                          "snap_counts_punt_coverage": 3,
                          "snap_counts_punt_return": 7,
                          "tackles": 0,
                          "team": "CIN",
                          "team_name": "CIN"
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, week 1",
                    "description": "`GET /v1/facet/special/summary?league=nfl&season=2022&week=1&franchise_id=7&export=true`, cut to the header and the first 3 lines.",
                    "value": "player,player_id,position,team_name,player_game_count,assists,declined_penalties,franchise_id,grades_fgep_defense,grades_fgep_kicker,grades_fgep_offense,grades_kick_return,grades_kickoff_kicker,grades_long_snap,grades_misc_st,grades_punt_return,grades_punter,grades_special_teams_penalty,missed_tackles,penalties,snap_counts_field_goal,snap_counts_field_goal_blocking,snap_counts_kickoff,snap_counts_kickoff_return,snap_counts_punt_coverage,snap_counts_punt_return,tackles\r\nClark Harris,3859,LS,CIN,1,0,0,7,,,60.0,,,75.3,52.3,,,62.8,1,0,2,0,0,0,2,0,0\r\nKevin Huber,5066,P,CIN,1,0,0,7,,,60.0,,,,60.4,,63.0,66.0,0,0,4,0,0,0,3,0,0\r\nMichael Thomas,7279,S,CIN,1,0,0,7,,,,,,,65.5,,,67.0,0,0,0,0,6,5,3,7,0\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/signature/passing/time_in_pocket": {
      "get": {
        "operationId": "signature-passing-time-in-pocket",
        "summary": "Signature stat: time in pocket",
        "description": "How long each passer holds the ball, in seconds, with what happens either side of the average.\n`league`, `season` and `week` are all required, and restish takes them as positional arguments in\nthat order — `restish pff <command> nfl 2025 1`. Leave one out and restish refuses to send the\nrequest at all; send one blank and it comes back `400 invalid_parameter` naming it. Add `--export\ntrue` for the raw CSV instead of JSON.\n\nWhy those three are required, when nothing else here is: the data behind this API answers an\nincomplete request `200` with an empty body rather than an error, and a caller cannot tell that\napart from \"no data for that week\". This API refuses the request instead.\n\nWith `export=true` the response is `text/csv` as an attachment named `time_in_pocket.csv` instead of\nJSON.",
        "tags": [
          "signature"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season_list_required"
          },
          {
            "$ref": "#/components/parameters/week_required"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `time_in_pocket.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"time_in_pocket.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SignaturePassingTimeInPocketResponse"
                },
                "examples": {
                  "default": {
                    "summary": "NFL, 2022 season, week 1",
                    "description": "`GET /v1/facet/signature/passing/time_in_pocket?league=nfl&season=2022&week=1`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "time_in_pockets": [
                        {
                          "more_btt_rate": 0,
                          "more_grades_run": 69.4,
                          "more_ypa": 7.3,
                          "more_passing_snaps": 37,
                          "more_pressure_to_sack_rate": 41.7,
                          "less_def_gen_pressures": 8,
                          "dropbacks": 65,
                          "less_sack_percent": 6.5,
                          "less_first_downs": 13,
                          "less_ypa": 5.6,
                          "draft_season": 2020,
                          "less_pressure_to_sack_rate": 25,
                          "less_aimed_passes": 27,
                          "more_dropbacks_percent": 52.3,
                          "less_positive_epa_percent": 41.9,
                          "team_name": "CIN",
                          "avg_ttt_scrambles": 3.78,
                          "more_yards": 176,
                          "more_accuracy_percent": 77.3,
                          "less_attempts": 29,
                          "less_drop_rate": 5.6,
                          "jersey_number": "09",
                          "more_turnover_worthy_plays": 2,
                          "more_interceptions": 2,
                          "more_sack_percent": 14.7,
                          "more_twp_rate": 5.4,
                          "less_completions": 17,
                          "more_thrown_aways": 1,
                          "less_btt_rate": 0,
                          "more_big_time_throws": 0,
                          "less_qb_rating": 68.5,
                          "less_hit_as_threw": 1,
                          "more_attempts": 24,
                          "player_game_count": 1,
                          "less_spikes": 0,
                          "eligible_season": 2020,
                          "less_dropbacks_percent": 47.7,
                          "more_qb_rating": 53.5,
                          "less_dropbacks": 31,
                          "more_grades_hands_fumble": 78.4,
                          "more_avg_depth_of_target": 8.9,
                          "less_scrambles": 0,
                          "more_positive_epa_percent": 50,
                          "less_sacks": 2,
                          "less_grades_pass": 54.2,
                          "less_drops": 1,
                          "more_sacks": 5,
                          "more_first_downs": 11,
                          "less_big_time_throws": 0,
                          "avg_ttt_attempts": 2.45,
                          "more_aimed_passes": 22,
                          "less_accuracy_percent": 66.7,
                          "more_scrambles": 5,
                          "less_epa": 0,
                          "more_spikes": 0,
                          "less_grades_offense": 53.9,
                          "avg_ttt_sacks": 3.24,
                          "more_grades_offense_penalty": 76.9,
                          "team": "CIN",
                          "less_bats": 1,
                          "less_grades_run": null,
                          "position": "QB",
                          "less_touchdowns": 2,
                          "less_yards": 162,
                          "less_grades_run_block": null,
                          "less_grades_hands_fumble": 26.9,
                          "more_hit_as_threw": 0,
                          "more_epa": -0.38,
                          "avg_time_to_throw": 2.64,
                          "less_turnover_worthy_plays": 2,
                          "less_completion_percent": 58.6,
                          "more_drops": 1,
                          "player": "Joe Burrow",
                          "more_touchdowns": 0,
                          "franchise_id": 7,
                          "more_drop_rate": 5.9,
                          "less_twp_rate": 5.9,
                          "more_grades_offense": 57.5,
                          "less_thrown_aways": 0,
                          "less_avg_depth_of_target": 7.1,
                          "less_avg_time_to_throw": 1.99,
                          "less_grades_offense_penalty": 76.6,
                          "less_interceptions": 2,
                          "more_def_gen_pressures": 12,
                          "more_avg_time_to_throw": 3.23,
                          "more_dropbacks": 34,
                          "more_grades_pass": 53.5,
                          "player_id": 28022,
                          "less_passing_snaps": 34,
                          "more_completions": 16,
                          "more_grades_run_block": null,
                          "more_bats": 1,
                          "more_completion_percent": 66.7
                        },
                        {
                          "more_btt_rate": 0,
                          "more_grades_run": null,
                          "more_ypa": 5.8,
                          "more_passing_snaps": 34,
                          "more_pressure_to_sack_rate": 15.8,
                          "less_def_gen_pressures": 3,
                          "dropbacks": 62,
                          "less_sack_percent": 0,
                          "less_first_downs": 9,
                          "less_ypa": 4.7,
                          "draft_season": 2008,
                          "less_pressure_to_sack_rate": 0,
                          "less_aimed_passes": 27,
                          "more_dropbacks_percent": 53.2,
                          "less_positive_epa_percent": 48.3,
                          "team_name": "NYJ",
                          "avg_ttt_scrambles": null,
                          "more_yards": 173,
                          "more_accuracy_percent": 83.3,
                          "less_attempts": 29,
                          "less_drop_rate": 9.5,
                          "jersey_number": "19",
                          "more_turnover_worthy_plays": 0,
                          "more_interceptions": 0,
                          "more_sack_percent": 9.1,
                          "more_twp_rate": 0,
                          "less_completions": 19,
                          "more_thrown_aways": 2,
                          "less_btt_rate": 0,
                          "more_big_time_throws": 0,
                          "less_qb_rating": 73.3,
                          "less_hit_as_threw": 1,
                          "more_attempts": 30,
                          "player_game_count": 1,
                          "less_spikes": 0,
                          "eligible_season": 2008,
                          "less_dropbacks_percent": 46.8,
                          "more_qb_rating": 76.1,
                          "less_dropbacks": 29,
                          "more_grades_hands_fumble": 78.1,
                          "more_avg_depth_of_target": 7.2,
                          "less_scrambles": 0,
                          "more_positive_epa_percent": 36.4,
                          "less_sacks": 0,
                          "less_grades_pass": 65.5,
                          "less_drops": 2,
                          "more_sacks": 3,
                          "more_first_downs": 9,
                          "less_big_time_throws": 0,
                          "avg_ttt_attempts": 2.56,
                          "more_aimed_passes": 24,
                          "less_accuracy_percent": 77.8,
                          "more_scrambles": 0,
                          "less_epa": -0.06,
                          "more_spikes": 0,
                          "less_grades_offense": 66.1,
                          "avg_ttt_sacks": 4.1,
                          "more_grades_offense_penalty": 76.6,
                          "team": "NYJ",
                          "less_bats": 0,
                          "less_grades_run": null,
                          "position": "QB",
                          "less_touchdowns": 1,
                          "less_yards": 136,
                          "less_grades_run_block": null,
                          "less_grades_hands_fumble": 77.7,
                          "more_hit_as_threw": 3,
                          "more_epa": -0.3,
                          "avg_time_to_throw": 2.63,
                          "less_turnover_worthy_plays": 0,
                          "less_completion_percent": 65.5,
                          "more_drops": 2,
                          "player": "Joe Flacco",
                          "more_touchdowns": 0,
                          "franchise_id": 22,
                          "more_drop_rate": 10,
                          "less_twp_rate": 0,
                          "more_grades_offense": 67.6,
                          "less_thrown_aways": 1,
                          "less_avg_depth_of_target": 4.4,
                          "less_avg_time_to_throw": 1.85,
                          "less_grades_offense_penalty": 76.4,
                          "less_interceptions": 1,
                          "more_def_gen_pressures": 19,
                          "more_avg_time_to_throw": 3.32,
                          "more_dropbacks": 33,
                          "more_grades_pass": 66.8,
                          "player_id": 4332,
                          "less_passing_snaps": 32,
                          "more_completions": 18,
                          "more_grades_run_block": null,
                          "more_bats": 1,
                          "more_completion_percent": 60
                        },
                        {
                          "more_btt_rate": 0,
                          "more_grades_run": 73.1,
                          "more_ypa": 7.4,
                          "more_passing_snaps": 26,
                          "more_pressure_to_sack_rate": 25,
                          "less_def_gen_pressures": 4,
                          "dropbacks": 54,
                          "less_sack_percent": 0,
                          "less_first_downs": 11,
                          "less_ypa": 6.8,
                          "draft_season": 2008,
                          "less_pressure_to_sack_rate": 0,
                          "less_aimed_passes": 28,
                          "more_dropbacks_percent": 46.3,
                          "less_positive_epa_percent": 48.3,
                          "team_name": "IND",
                          "avg_ttt_scrambles": 4.65,
                          "more_yards": 156,
                          "more_accuracy_percent": 73.7,
                          "less_attempts": 29,
                          "less_drop_rate": 5,
                          "jersey_number": "02",
                          "more_turnover_worthy_plays": 2,
                          "more_interceptions": 0,
                          "more_sack_percent": 8,
                          "more_twp_rate": 7.7,
                          "less_completions": 19,
                          "more_thrown_aways": 1,
                          "less_btt_rate": 0,
                          "more_big_time_throws": 0,
                          "less_qb_rating": 82,
                          "less_hit_as_threw": 0,
                          "more_attempts": 21,
                          "player_game_count": 1,
                          "less_spikes": 0,
                          "eligible_season": 2008,
                          "less_dropbacks_percent": 53.7,
                          "more_qb_rating": 84.6,
                          "less_dropbacks": 29,
                          "more_grades_hands_fumble": 17.9,
                          "more_avg_depth_of_target": 9.8,
                          "less_scrambles": 0,
                          "more_positive_epa_percent": 44,
                          "less_sacks": 0,
                          "less_grades_pass": 61,
                          "less_drops": 1,
                          "more_sacks": 2,
                          "more_first_downs": 11,
                          "less_big_time_throws": 0,
                          "avg_ttt_attempts": 2.42,
                          "more_aimed_passes": 19,
                          "less_accuracy_percent": 71.4,
                          "more_scrambles": 2,
                          "less_epa": 0.21,
                          "more_spikes": 0,
                          "less_grades_offense": 61.2,
                          "avg_ttt_sacks": 3.75,
                          "more_grades_offense_penalty": 75.6,
                          "team": "IND",
                          "less_bats": 1,
                          "less_grades_run": null,
                          "position": "QB",
                          "less_touchdowns": 1,
                          "less_yards": 196,
                          "less_grades_run_block": null,
                          "less_grades_hands_fumble": 77.4,
                          "more_hit_as_threw": 0,
                          "more_epa": 0.06,
                          "avg_time_to_throw": 2.55,
                          "less_turnover_worthy_plays": 2,
                          "less_completion_percent": 65.5,
                          "more_drops": 1,
                          "player": "Matt Ryan",
                          "more_touchdowns": 0,
                          "franchise_id": 14,
                          "more_drop_rate": 7.1,
                          "less_twp_rate": 6.7,
                          "more_grades_offense": 65.9,
                          "less_thrown_aways": 0,
                          "less_avg_depth_of_target": 5.1,
                          "less_avg_time_to_throw": 1.89,
                          "less_grades_offense_penalty": 76.1,
                          "less_interceptions": 1,
                          "more_def_gen_pressures": 8,
                          "more_avg_time_to_throw": 3.31,
                          "more_dropbacks": 25,
                          "more_grades_pass": 61,
                          "player_id": 4317,
                          "less_passing_snaps": 30,
                          "more_completions": 13,
                          "more_grades_run_block": null,
                          "more_bats": 1,
                          "more_completion_percent": 61.9
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "NFL, 2022 season, week 1",
                    "description": "`GET /v1/facet/signature/passing/time_in_pocket?league=nfl&season=2022&week=1&export=true`, cut to the header and the first 3 lines.",
                    "value": "player,player_id,position,team_name,player_game_count,avg_time_to_throw,avg_ttt_attempts,avg_ttt_sacks,avg_ttt_scrambles,dropbacks,franchise_id,less_accuracy_percent,less_aimed_passes,less_attempts,less_avg_depth_of_target,less_avg_time_to_throw,less_bats,less_big_time_throws,less_btt_rate,less_completion_percent,less_completions,less_def_gen_pressures,less_drop_rate,less_dropbacks,less_dropbacks_percent,less_drops,less_epa,less_first_downs,less_grades_hands_drop,less_grades_hands_fumble,less_grades_offense,less_grades_offense_penalty,less_grades_pass,less_grades_pass_route,less_grades_run,less_hit_as_threw,less_interceptions,less_passing_snaps,less_positive_epa_percent,less_pressure_to_sack_rate,less_qb_rating,less_sack_percent,less_sacks,less_scrambles,less_spikes,less_thrown_aways,less_touchdowns,less_turnover_worthy_plays,less_twp_rate,less_yards,less_ypa,more_accuracy_percent,more_aimed_passes,more_attempts,more_avg_depth_of_target,more_avg_time_to_throw,more_bats,more_big_time_throws,more_btt_rate,more_completion_percent,more_completions,more_def_gen_pressures,more_drop_rate,more_dropbacks,more_dropbacks_percent,more_drops,more_epa,more_first_downs,more_grades_hands_drop,more_grades_hands_fumble,more_grades_offense,more_grades_offense_penalty,more_grades_pass,more_grades_pass_route,more_grades_run,more_hit_as_threw,more_interceptions,more_passing_snaps,more_positive_epa_percent,more_pressure_to_sack_rate,more_qb_rating,more_sack_percent,more_sacks,more_scrambles,more_spikes,more_thrown_aways,more_touchdowns,more_turnover_worthy_plays,more_twp_rate,more_yards,more_ypa\r\nJoe Burrow,28022,QB,CIN,1,2.64,2.45,3.24,3.78,65,7,66.7,27,29,7.1,1.99,1,0,0.0,58.6,17,8,5.6,31,47.7,1,0.0,13,,26.9,53.9,76.6,54.2,,,1,2,34,41.9,25.0,68.5,6.5,2,0,0,0,2,2,5.9,162,5.6,77.3,22,24,8.9,3.23,1,0,0.0,66.7,16,12,5.9,34,52.3,1,-0.38,11,,78.4,57.5,76.9,53.5,,69.4,0,2,37,50.0,41.7,53.5,14.7,5,5,0,1,0,2,5.4,176,7.3\r\nJoe Flacco,4332,QB,NYJ,1,2.63,2.56,4.1,,62,22,77.8,27,29,4.4,1.85,0,0,0.0,65.5,19,3,9.5,29,46.8,2,-0.06,9,,77.7,66.1,76.4,65.5,,,1,1,32,48.3,0.0,73.3,0.0,0,0,0,1,1,0,0.0,136,4.7,83.3,24,30,7.2,3.32,1,0,0.0,60.0,18,19,10.0,33,53.2,2,-0.3,9,,78.1,67.6,76.6,66.8,,,3,0,34,36.4,15.8,76.1,9.1,3,0,0,2,0,0,0.0,173,5.8\r\nMatt Ryan,4317,QB,IND,1,2.55,2.42,3.75,4.65,54,14,71.4,28,29,5.1,1.89,1,0,0.0,65.5,19,4,5.0,29,53.7,1,0.21,11,,77.4,61.2,76.1,61.0,,,0,1,30,48.3,0.0,82.0,0.0,0,0,0,0,1,2,6.7,196,6.8,73.7,19,21,9.8,3.31,1,0,0.0,61.9,13,8,7.1,25,46.3,1,0.06,11,,17.9,65.9,75.6,61.0,,73.1,0,0,26,44.0,25.0,84.6,8.0,2,2,0,1,0,2,7.7,156,7.4\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/signature/pass-blocking/efficiency/line": {
      "get": {
        "operationId": "signature-pass-blocking-efficiency-line",
        "summary": "Signature stat: pass-blocking efficiency, by line",
        "description": "Pass-blocking efficiency for each offensive line as a unit: one row per team rather than one per\nplayer. `league`, `season` and `week` are all required, and restish takes them as positional\narguments in that order — `restish pff <command> nfl 2025 1`. Leave one out and restish refuses to\nsend the request at all; send one blank and it comes back `400 invalid_parameter` naming it. Add\n`--export true` for the raw CSV instead of JSON.\n\nThe one hyphenated path segment in the surface. Its CSV header row is the team-level set, not the\nper-player one.\n\nWhy those three are required, when nothing else here is: the data behind this API answers an\nincomplete request `200` with an empty body rather than an error, and a caller cannot tell that\napart from \"no data for that week\". This API refuses the request instead.\n\nWith `export=true` the response is `text/csv` as an attachment named\n`line_pass_blocking_efficiency.csv` instead of JSON.",
        "tags": [
          "signature"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season_list_required"
          },
          {
            "$ref": "#/components/parameters/week_required"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `line_pass_blocking_efficiency.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"line_pass_blocking_efficiency.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SignaturePassBlockingEfficiencyLineResponse"
                },
                "examples": {
                  "default": {
                    "summary": "NFL, 2022 season, week 1",
                    "description": "`GET /v1/facet/signature/pass-blocking/efficiency/line?league=nfl&season=2022&week=1`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "pbes": [
                        {
                          "attempts": 36,
                          "franchise_id": 2,
                          "hits_allowed": 0,
                          "hurries_allowed": 2,
                          "pass_snaps": 36,
                          "pbe": 97.2,
                          "player_game_count": 1,
                          "pressures_allowed": 2,
                          "sacks_allowed": 0,
                          "season_id": 2022,
                          "team_name": "ATL"
                        },
                        {
                          "attempts": 40,
                          "franchise_id": 25,
                          "hits_allowed": 3,
                          "hurries_allowed": 1,
                          "pass_snaps": 40,
                          "pbe": 95,
                          "player_game_count": 1,
                          "pressures_allowed": 4,
                          "sacks_allowed": 0,
                          "season_id": 2022,
                          "team_name": "PIT"
                        },
                        {
                          "attempts": 34,
                          "franchise_id": 31,
                          "hits_allowed": 2,
                          "hurries_allowed": 2,
                          "pass_snaps": 34,
                          "pbe": 94.1,
                          "player_game_count": 1,
                          "pressures_allowed": 4,
                          "sacks_allowed": 0,
                          "season_id": 2022,
                          "team_name": "TEN"
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "NFL, 2022 season, week 1",
                    "description": "`GET /v1/facet/signature/pass-blocking/efficiency/line?league=nfl&season=2022&week=1&export=true`, cut to the header and the first 3 lines.",
                    "value": "team_name,franchise_id,player_game_count,attempts,hits_allowed,hurries_allowed,pass_snaps,pbe,pressures_allowed,sacks_allowed\r\nATL,2,1,36,0,2,36,97.2,2,0\r\nPIT,25,1,40,3,1,40,95.0,4,0\r\nTEN,31,1,34,2,2,34,94.1,4,0\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/signature/defense/outside_pass_rush": {
      "get": {
        "operationId": "signature-defense-outside-pass-rush",
        "summary": "Signature stat: outside pass rush",
        "description": "Pass-rush productivity for edge rushers, counting pressures per rush rather than sacks alone.\n`league`, `season` and `week` are all required, and restish takes them as positional arguments in\nthat order — `restish pff <command> nfl 2025 1`. Leave one out and restish refuses to send the\nrequest at all; send one blank and it comes back `400 invalid_parameter` naming it. Add `--export\ntrue` for the raw CSV instead of JSON.\n\nWhy those three are required, when nothing else here is: the data behind this API answers an\nincomplete request `200` with an empty body rather than an error, and a caller cannot tell that\napart from \"no data for that week\". This API refuses the request instead.\n\nWith `export=true` the response is `text/csv` as an attachment named `pass_rush_productivity.csv`\ninstead of JSON.",
        "tags": [
          "signature"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season_list_required"
          },
          {
            "$ref": "#/components/parameters/week_required"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `pass_rush_productivity.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"pass_rush_productivity.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SignatureDefenseOutsidePassRushResponse"
                },
                "examples": {
                  "default": {
                    "summary": "NFL, 2022 season, week 1",
                    "description": "`GET /v1/facet/signature/defense/outside_pass_rush?league=nfl&season=2022&week=1`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "prps": [
                        {
                          "lhs_sacks": 0,
                          "rhs_hits": 0,
                          "rhs_prp": 100,
                          "draft_season": 2018,
                          "pass_snaps": 14,
                          "lhs_hurries": 0,
                          "team_name": "CLV",
                          "prp": 100,
                          "tackles": 0,
                          "rhs_pressures": 1,
                          "rhs_pass_rush_percent": 100,
                          "jersey_number": "33",
                          "lhs_pass_rush_percent": 0,
                          "lhs_pass_rush_snaps": 0,
                          "sacks": 1,
                          "lhs_assists": 0,
                          "player_game_count": 1,
                          "eligible_season": 2018,
                          "lhs_pressures": 0,
                          "pass_rush_snaps": 1,
                          "hurries": 0,
                          "rhs_pass_rush_snaps": 1,
                          "lhs_prp": null,
                          "hits": 0,
                          "lhs_hits": 0,
                          "rhs_tackles": 0,
                          "lhs_stops": 0,
                          "team": "CLV",
                          "stops": 0,
                          "rhs_misses": 0,
                          "position": "S",
                          "pressures": 1,
                          "misses": 0,
                          "player": "Ronnie Harrison",
                          "rhs_sacks": 1,
                          "franchise_id": 8,
                          "pass_rush_percent": 7.1,
                          "rhs_hurries": 0,
                          "rhs_assists": 0,
                          "rhs_stops": 0,
                          "assists": 0,
                          "player_id": 49206,
                          "lhs_tackles": 0,
                          "lhs_misses": 0
                        },
                        {
                          "lhs_sacks": 0,
                          "rhs_hits": 0,
                          "rhs_prp": null,
                          "draft_season": 2015,
                          "pass_snaps": 13,
                          "lhs_hurries": 0,
                          "team_name": "CAR",
                          "prp": 100,
                          "tackles": 0,
                          "rhs_pressures": 0,
                          "rhs_pass_rush_percent": null,
                          "jersey_number": "57",
                          "lhs_pass_rush_percent": null,
                          "lhs_pass_rush_snaps": 0,
                          "sacks": 1,
                          "lhs_assists": 0,
                          "player_game_count": 1,
                          "eligible_season": 2015,
                          "lhs_pressures": 0,
                          "pass_rush_snaps": 1,
                          "hurries": 0,
                          "rhs_pass_rush_snaps": 0,
                          "lhs_prp": null,
                          "hits": 0,
                          "lhs_hits": 0,
                          "rhs_tackles": 0,
                          "lhs_stops": 0,
                          "team": "CAR",
                          "stops": 1,
                          "rhs_misses": 0,
                          "position": "LB",
                          "pressures": 1,
                          "misses": 0,
                          "player": "Damien Wilson",
                          "rhs_sacks": 0,
                          "franchise_id": 5,
                          "pass_rush_percent": 7.7,
                          "rhs_hurries": 0,
                          "rhs_assists": 0,
                          "rhs_stops": 0,
                          "assists": 0,
                          "player_id": 9560,
                          "lhs_tackles": 0,
                          "lhs_misses": 0
                        },
                        {
                          "lhs_sacks": 0,
                          "rhs_hits": 0,
                          "rhs_prp": 50,
                          "draft_season": 2017,
                          "pass_snaps": 15,
                          "lhs_hurries": 0,
                          "team_name": "MIA",
                          "prp": 50,
                          "tackles": 0,
                          "rhs_pressures": 1,
                          "rhs_pass_rush_percent": 100,
                          "jersey_number": "45",
                          "lhs_pass_rush_percent": 0,
                          "lhs_pass_rush_snaps": 0,
                          "sacks": 0,
                          "lhs_assists": 0,
                          "player_game_count": 1,
                          "eligible_season": 2017,
                          "lhs_pressures": 0,
                          "pass_rush_snaps": 1,
                          "hurries": 1,
                          "rhs_pass_rush_snaps": 1,
                          "lhs_prp": null,
                          "hits": 0,
                          "lhs_hits": 0,
                          "rhs_tackles": 0,
                          "lhs_stops": 0,
                          "team": "MIA",
                          "stops": 0,
                          "rhs_misses": 0,
                          "position": "LB",
                          "pressures": 1,
                          "misses": 0,
                          "player": "Duke Riley",
                          "rhs_sacks": 0,
                          "franchise_id": 17,
                          "pass_rush_percent": 6.7,
                          "rhs_hurries": 1,
                          "rhs_assists": 0,
                          "rhs_stops": 0,
                          "assists": 0,
                          "player_id": 11830,
                          "lhs_tackles": 0,
                          "lhs_misses": 0
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "NFL, 2022 season, week 1",
                    "description": "`GET /v1/facet/signature/defense/outside_pass_rush?league=nfl&season=2022&week=1&export=true`, cut to the header and the first 3 lines.",
                    "value": "player,player_id,position,team_name,player_game_count,assists,franchise_id,hits,hurries,lhs_assists,lhs_hits,lhs_hurries,lhs_misses,lhs_pass_rush_percent,lhs_pass_rush_snaps,lhs_pressures,lhs_prp,lhs_sacks,lhs_stops,lhs_tackles,misses,pass_rush_percent,pass_rush_snaps,pass_snaps,pressures,prp,rhs_assists,rhs_hits,rhs_hurries,rhs_misses,rhs_pass_rush_percent,rhs_pass_rush_snaps,rhs_pressures,rhs_prp,rhs_sacks,rhs_stops,rhs_tackles,sacks,stops,tackles\r\nRonnie Harrison,49206,S,CLV,1,0,8,0,0,0,0,0,0,0.0,0,0,,0,0,0,0,7.1,1,14,1,100.0,0,0,0,0,100.0,1,1,100.0,1,0,0,1,0,0\r\nDamien Wilson,9560,LB,CAR,1,0,5,0,0,0,0,0,0,,0,0,,0,0,0,0,7.7,1,13,1,100.0,0,0,0,0,,0,0,,0,0,0,1,1,0\r\nDuke Riley,11830,LB,MIA,1,0,17,0,1,0,0,0,0,0.0,0,0,,0,0,0,0,6.7,1,15,1,50.0,0,0,1,0,100.0,1,1,50.0,0,0,0,0,0,0\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/facet/signature/defense/slot_coverage": {
      "get": {
        "operationId": "signature-defense-slot-coverage",
        "summary": "Signature stat: slot coverage",
        "description": "Coverage productivity for defenders lined up in the slot. `league`, `season` and `week` are all\nrequired, and restish takes them as positional arguments in that order — `restish pff <command> nfl\n2025 1`. Leave one out and restish refuses to send the request at all; send one blank and it comes\nback `400 invalid_parameter` naming it. Add `--export true` for the raw CSV instead of JSON.\n\nWhy those three are required, when nothing else here is: the data behind this API answers an\nincomplete request `200` with an empty body rather than an error, and a caller cannot tell that\napart from \"no data for that week\". This API refuses the request instead.\n\nWith `export=true` the response is `text/csv` as an attachment named `slot_coverage.csv` instead of\nJSON.",
        "tags": [
          "signature"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/league_required"
          },
          {
            "$ref": "#/components/parameters/season_list_required"
          },
          {
            "$ref": "#/components/parameters/week_required"
          },
          {
            "$ref": "#/components/parameters/export"
          }
        ],
        "responses": {
          "200": {
            "description": "JSON report, or — when `export=true` — a CSV attachment named `slot_coverage.csv`.",
            "headers": {
              "Content-Disposition": {
                "description": "Sent only with the `text/csv` variant. The filename is the one the report declares.",
                "required": false,
                "schema": {
                  "type": "string"
                },
                "example": "attachment; filename=\"slot_coverage.csv\""
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SignatureDefenseSlotCoverageResponse"
                },
                "examples": {
                  "default": {
                    "summary": "NFL, 2022 season, week 1",
                    "description": "`GET /v1/facet/signature/defense/slot_coverage?league=nfl&season=2022&week=1`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "slot_coverages": [
                        {
                          "coverage_snaps": 2,
                          "coverage_snaps_per_reception": null,
                          "coverage_snaps_per_target": 2,
                          "draft_season": 2018,
                          "eligible_season": 2018,
                          "franchise_id": 24,
                          "interceptions": 0,
                          "jersey_number": "43",
                          "player": "Kyzir White",
                          "player_game_count": 1,
                          "player_id": 44485,
                          "position": "LB",
                          "qb_rating_against": 39.6,
                          "receptions": 0,
                          "targets": 1,
                          "team": "PHI",
                          "team_name": "PHI",
                          "touchdowns": 0,
                          "yards": 0,
                          "yards_after_catch": 0,
                          "yards_per_coverage_snap": 0
                        },
                        {
                          "coverage_snaps": 4,
                          "coverage_snaps_per_reception": null,
                          "coverage_snaps_per_target": 4,
                          "draft_season": 2014,
                          "eligible_season": 2014,
                          "franchise_id": 9,
                          "interceptions": 0,
                          "jersey_number": "42",
                          "player": "Anthony Barr",
                          "player_game_count": 1,
                          "player_id": 8644,
                          "position": "LB",
                          "qb_rating_against": 39.6,
                          "receptions": 0,
                          "targets": 1,
                          "team": "DAL",
                          "team_name": "DAL",
                          "touchdowns": 0,
                          "yards": 0,
                          "yards_after_catch": 0,
                          "yards_per_coverage_snap": 0
                        },
                        {
                          "coverage_snaps": 1,
                          "coverage_snaps_per_reception": null,
                          "coverage_snaps_per_target": 1,
                          "draft_season": 2014,
                          "eligible_season": 2014,
                          "franchise_id": 13,
                          "interceptions": 0,
                          "jersey_number": "57",
                          "player": "Kevin Pierre-Louis",
                          "player_game_count": 1,
                          "player_id": 8767,
                          "position": "LB",
                          "qb_rating_against": 39.6,
                          "receptions": 0,
                          "targets": 1,
                          "team": "HST",
                          "team_name": "HST",
                          "touchdowns": 0,
                          "yards": 0,
                          "yards_after_catch": 0,
                          "yards_per_coverage_snap": 0
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvBody"
                },
                "examples": {
                  "default": {
                    "summary": "NFL, 2022 season, week 1",
                    "description": "`GET /v1/facet/signature/defense/slot_coverage?league=nfl&season=2022&week=1&export=true`, cut to the header and the first 3 lines.",
                    "value": "player,player_id,position,team_name,player_game_count,coverage_snaps,coverage_snaps_per_reception,coverage_snaps_per_target,franchise_id,interceptions,qb_rating_against,receptions,targets,touchdowns,yards,yards_after_catch,yards_per_coverage_snap\r\nKyzir White,44485,LB,PHI,1,2,,2.0,24,0,39.6,0,1,0,0,0,0.0\r\nAnthony Barr,8644,LB,DAL,1,4,,4.0,9,0,39.6,0,1,0,0,0,0.0\r\nKevin Pierre-Louis,8767,LB,HST,1,1,,1.0,13,0,39.6,0,1,0,0,0,0.0\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ExportTooBroad"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v1/auth/whoami": {
      "get": {
        "operationId": "whoami",
        "summary": "Show what this API believes about the current credential",
        "description": "Answers with the account's tier and entitlement rather than refusing a non-Pro account, so a PFF+ or\nfree account can see WHY it would be refused elsewhere — `entitled: false` with the real tier —\ninstead of guessing from a blanket `403`. Never spends a sign-in: it reads the account and, if a\nsession already exists, reports its expiry without creating one.",
        "tags": [
          "auth"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "The credential verified. The body says what that means for this account.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Whoami"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          }
        }
      }
    },
    "/v1/auth/logout": {
      "post": {
        "operationId": "logout",
        "summary": "End this credential's access to this API",
        "description": "Revokes the session this API holds for the caller and denylists the presented credential until its\nown expiry. It does not reach the credential's issuer: the API key you presented stays valid at\nClerk until you revoke it on the account page, and an OAuth grant can still refresh — so this ends\naccess HERE, not everywhere; the account page or support is where to revoke those. Works for any\nverified credential whether or not the account is entitled, so a downgraded account can still sign\nout.",
        "tags": [
          "auth"
        ],
        "parameters": [],
        "responses": {
          "204": {
            "description": "Signed out. Nothing to report, and a body would only invite parsing one."
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/openapi.json": {
      "get": {
        "operationId": "openapi-json",
        "summary": "Fetch this contract as JSON",
        "description": "The same bytes `GET /openapi.json` always answers with — this operation exists so the contract can\nname itself, not because fetching your own spec through its own generated CLI is a common thing to\ndo. No credential is required; see `security: []` above.",
        "tags": [
          "meta"
        ],
        "security": [],
        "parameters": [],
        "responses": {
          "200": {
            "description": "This document, as JSON.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "This OpenAPI document itself."
                }
              }
            }
          }
        }
      }
    },
    "/openapi.yaml": {
      "get": {
        "operationId": "openapi-yaml",
        "summary": "Fetch this contract as YAML",
        "description": "The same bytes `GET /openapi.yaml` always answers with, byte for byte — including this comment\nheader. No credential is required; see `security: []` above.",
        "tags": [
          "meta"
        ],
        "security": [],
        "parameters": [],
        "responses": {
          "200": {
            "description": "This document, as YAML.",
            "content": {
              "application/yaml": {
                "schema": {
                  "type": "string",
                  "description": "This OpenAPI document itself, rendered as YAML."
                }
              }
            }
          }
        }
      }
    },
    "/v2/{league}/positions/reports/{report}": {
      "get": {
        "operationId": "position-report",
        "summary": "One of nineteen player reports for the whole league, one row per player",
        "description": "Every player in one report — `passing`, `rushing`, `coverage`, `punting` and the rest — one\nrow per player with the report's own stat columns, league-wide: the same nineteen reports\n`team-report` serves for one club, without the club. Which columns come back depends on the\nreport, the season and the entitlement, so `columns` names and types them per answer rather\nthan this document enumerating them; the three identity keys `playerId`, `player` and\n`position` are always present. `season` defaults to the current season and `weekGroup` to\n`REGPO`; `week` and `weekTo` narrow the group to one week or a span. The five special-teams\nreports start in the 2013 season; an earlier season is refused with `400 invalid_parameter`.\nServed for the NCAA the same way, over the FBS and FCS programmes the rest of the API covers.\nTwo slow-path outcomes, both worth a rerun or a narrower `week` span: a report whose reads run\npast the minute its session credential lives may come back complete but with fewer columns\nthan usual (the source answers an expired credential with a partial table, not an error), and\na report that outlives its own time budget is `504 upstream_timeout`. With `format=csv` the\ntable streams as a file; see `CsvTable`.\n\nThe reports PFF has added its newer data points to carry them as extra columns, exactly as\n`team-report` does: `pass-blocking` — `pbwr` and `truePassSetPbwr` (pass block win rate, on\nall snaps and on true pass sets), `islandRate` and `islandPassBlockWinRate`, plus\n`offensePosGradedRate` and `offenseNegGradedRate` (OVR POS% / OVR NEG%: the linemen's\npositively / negatively graded share of the OVR grade's offensive snaps — every offensive-role\nsnap on a regular, pre-snap-penalty or two-point play, nullified plays in, the combined grade\nwith the penalty grade included; the TE and RB rows the board also seats carry them too);\n`run-blocking` — `posGradedRate` and `negGradedRate`, with `zone…` and `gap…`\nvariants, plus the same `offensePosGradedRate` / `offenseNegGradedRate` pair; `run-defense` —\n`posGradedRate` and `negGradedRate`; `pass-rush` — `doubleTeamRate`, plus the NCAA-only\n`doubleTeamPassRushWinRate` and `singleTeamPassRushWinRate` (Pass Rush Win Rate on\ndouble- / single-blocked snaps; NCAA only, no NFL source yet); `passing` —\n`passRateOe`, `completionOe` and `accuracyOe`, plus `offensePosGradedRate` and\n`offenseNegGradedRate` (the QB's positively / negatively graded share of the OVR grade's\noffensive snaps — nullified plays and scrambles in, penalty grade included); `receiving` — `receptionsOe`,\n`receptionsOeTotal`, `linedUpVsCb`, `linedUpVsS` and `linedUpVsLb`, plus `offensePosGradedRate` and\n`offenseNegGradedRate` (the same pair for the receivers — WR, TE and HB rows alike); `rushing` —\n`carryShare`, plus `offensePosGradedRate` and `offenseNegGradedRate` (the same pair for the\nbacks, and for the QB, WR or TE rushers the board also seats); `field-goals` — `fieldGoalOe`\nand `fieldGoalOeTotal`. Rates are percentages\non the 0–100 scale at one decimal, over-expectation figures in percentage points and the\ntwo totals in receptions and makes; a cell is `null` when the source has no rows for\nthe player or the rate's denominator is zero. The\ngraded-play rates (`pbwr`, `posGradedRate`, `negGradedRate`, `offensePosGradedRate`, `offenseNegGradedRate` and their variants) are served\nfor the NFL and NCAA alike. Coverage varies key by key among the rest:\n`doubleTeamRate`, `passRateOe`, `completionOe`, `fieldGoalOe` and\n`fieldGoalOeTotal` are served for the NFL and NCAA alike too;\n`doubleTeamPassRushWinRate` and `singleTeamPassRushWinRate` for the\nNCAA only; `accuracyOe`, `receptionsOe`, `receptionsOeTotal`,\n`linedUpVsCb`, `linedUpVsS`, `linedUpVsLb` and `carryShare` stay\nNFL-only, absent from an NCAA answer. The\nteam-keyed `positionTargetShare` is a `team-report` column only and never appears here. New\ncolumns join as PFF adds them, so read `columns` rather than assuming a list.",
        "tags": [
          "position"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LeaguePath"
          },
          {
            "$ref": "#/components/parameters/PositionReportPath"
          },
          {
            "$ref": "#/components/parameters/SeasonQuery"
          },
          {
            "$ref": "#/components/parameters/WeekGroupQuery"
          },
          {
            "$ref": "#/components/parameters/WeekQuery"
          },
          {
            "$ref": "#/components/parameters/WeekToQuery"
          },
          {
            "$ref": "#/components/parameters/FormatQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "The table.",
            "headers": {
              "Content-Disposition": {
                "$ref": "#/components/headers/CsvContentDisposition"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PositionReportTable"
                },
                "examples": {
                  "default": {
                    "summary": "NFL offense, every player, 2022 regular season",
                    "description": "`GET /v2/nfl/positions/reports/offense?season=2022&weekGroup=REG`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "league": "nfl",
                      "season": 2022,
                      "weekGroup": "REG",
                      "week": null,
                      "weekTo": null,
                      "report": "offense",
                      "section": "offense",
                      "columns": [
                        {
                          "key": "playerId",
                          "label": "Player id",
                          "type": "integer"
                        },
                        {
                          "key": "player",
                          "label": "Player",
                          "type": "string"
                        },
                        {
                          "key": "position",
                          "label": "Pos",
                          "type": "string"
                        },
                        {
                          "key": "declinedPenalties",
                          "label": "Declined penalties",
                          "type": "integer"
                        },
                        {
                          "key": "draftSeason",
                          "label": "Draft season",
                          "type": "integer"
                        },
                        {
                          "key": "eligibleSeason",
                          "label": "Eligible season",
                          "type": "integer"
                        },
                        {
                          "key": "franchiseId",
                          "label": "Franchise id",
                          "type": "integer"
                        },
                        {
                          "key": "gradesHandsFumble",
                          "label": "Grades hands fumble",
                          "type": "number"
                        },
                        {
                          "key": "gradesOffense",
                          "label": "Grades offense",
                          "type": "number"
                        },
                        {
                          "key": "gradesOffensePenalty",
                          "label": "Grades offense penalty",
                          "type": "number"
                        },
                        {
                          "key": "gradesPass",
                          "label": "Grades pass",
                          "type": "number"
                        },
                        {
                          "key": "gradesPassRoute",
                          "label": "Grades pass route",
                          "type": "number"
                        },
                        {
                          "key": "gradesRun",
                          "label": "Grades run",
                          "type": "number"
                        },
                        {
                          "key": "gradesRunBlock",
                          "label": "Grades run block",
                          "type": "number"
                        },
                        {
                          "key": "jerseyNumber",
                          "label": "Jersey number",
                          "type": "string"
                        },
                        {
                          "key": "penalties",
                          "label": "Penalties",
                          "type": "integer"
                        },
                        {
                          "key": "playerGameCount",
                          "label": "Player game count",
                          "type": "integer"
                        },
                        {
                          "key": "snapCountsPass",
                          "label": "Snap counts pass",
                          "type": "integer"
                        },
                        {
                          "key": "snapCountsPassBlock",
                          "label": "Snap counts pass block",
                          "type": "integer"
                        },
                        {
                          "key": "snapCountsPassRoute",
                          "label": "Snap counts pass route",
                          "type": "integer"
                        },
                        {
                          "key": "snapCountsRun",
                          "label": "Snap counts run",
                          "type": "integer"
                        },
                        {
                          "key": "snapCountsRunBlock",
                          "label": "Snap counts run block",
                          "type": "integer"
                        },
                        {
                          "key": "snapCountsTotal",
                          "label": "Snap counts total",
                          "type": "integer"
                        },
                        {
                          "key": "snapCountsTotalPass",
                          "label": "Snap counts total pass",
                          "type": "integer"
                        },
                        {
                          "key": "snapCountsTotalRun",
                          "label": "Snap counts total run",
                          "type": "integer"
                        },
                        {
                          "key": "team",
                          "label": "Team",
                          "type": "string"
                        },
                        {
                          "key": "teamName",
                          "label": "Team name",
                          "type": "string"
                        },
                        {
                          "key": "gradesPassBlock",
                          "label": "Grades pass block",
                          "type": "number"
                        }
                      ],
                      "rows": [
                        {
                          "playerId": 698,
                          "player": "Tom Brady",
                          "position": "QB",
                          "declinedPenalties": 0,
                          "draftSeason": 2000,
                          "eligibleSeason": 2000,
                          "franchiseId": 30,
                          "gradesHandsFumble": 78.8,
                          "gradesOffense": 79.7,
                          "gradesOffensePenalty": 71,
                          "gradesPass": 79.3,
                          "gradesPassRoute": 59.9,
                          "gradesRun": 44,
                          "gradesRunBlock": 60.1,
                          "jerseyNumber": "12",
                          "penalties": 3,
                          "playerGameCount": 17,
                          "snapCountsPass": 808,
                          "snapCountsPassBlock": 0,
                          "snapCountsPassRoute": 1,
                          "snapCountsRun": 25,
                          "snapCountsRunBlock": 359,
                          "snapCountsTotal": 1193,
                          "snapCountsTotalPass": 809,
                          "snapCountsTotalRun": 384,
                          "team": "TB",
                          "teamName": "TB",
                          "gradesPassBlock": null
                        },
                        {
                          "playerId": 1906,
                          "player": "Andy Lee",
                          "position": "P",
                          "declinedPenalties": 0,
                          "draftSeason": 2004,
                          "eligibleSeason": 2004,
                          "franchiseId": 1,
                          "gradesHandsFumble": 60.4,
                          "gradesOffense": 59.5,
                          "gradesOffensePenalty": 67.4,
                          "gradesPass": 60.3,
                          "gradesPassRoute": null,
                          "gradesRun": null,
                          "gradesRunBlock": 60,
                          "jerseyNumber": "14",
                          "penalties": 0,
                          "playerGameCount": 2,
                          "snapCountsPass": 1,
                          "snapCountsPassBlock": 0,
                          "snapCountsPassRoute": 0,
                          "snapCountsRun": 0,
                          "snapCountsRunBlock": 1,
                          "snapCountsTotal": 2,
                          "snapCountsTotalPass": 1,
                          "snapCountsTotalRun": 1,
                          "team": "ARZ",
                          "teamName": "ARZ",
                          "gradesPassBlock": null
                        },
                        {
                          "playerId": 2148,
                          "player": "Jason Peters",
                          "position": "T",
                          "declinedPenalties": 0,
                          "draftSeason": 2004,
                          "eligibleSeason": 2004,
                          "franchiseId": 9,
                          "gradesHandsFumble": null,
                          "gradesOffense": 70.3,
                          "gradesOffensePenalty": 84.4,
                          "gradesPass": null,
                          "gradesPassRoute": null,
                          "gradesRun": null,
                          "gradesRunBlock": 71.8,
                          "jerseyNumber": "71",
                          "penalties": 0,
                          "playerGameCount": 12,
                          "snapCountsPass": 0,
                          "snapCountsPassBlock": 135,
                          "snapCountsPassRoute": 0,
                          "snapCountsRun": 0,
                          "snapCountsRunBlock": 100,
                          "snapCountsTotal": 235,
                          "snapCountsTotalPass": 135,
                          "snapCountsTotalRun": 100,
                          "team": "DAL",
                          "teamName": "DAL",
                          "gradesPassBlock": 60.5
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvTable"
                },
                "examples": {
                  "default": {
                    "summary": "NFL offense, every player, 2022 regular season",
                    "description": "`GET /v2/nfl/positions/reports/offense?season=2022&weekGroup=REG&format=csv`, cut to the header and the first 3 lines.",
                    "value": "playerId,player,position,declinedPenalties,draftSeason,eligibleSeason,franchiseId,gradesHandsFumble,gradesOffense,gradesOffensePenalty,gradesPass,gradesPassRoute,gradesRun,gradesRunBlock,jerseyNumber,penalties,playerGameCount,snapCountsPass,snapCountsPassBlock,snapCountsPassRoute,snapCountsRun,snapCountsRunBlock,snapCountsTotal,snapCountsTotalPass,snapCountsTotalRun,team,teamName,gradesPassBlock\r\n698,Tom Brady,QB,0,2000,2000,30,78.8,79.7,71,79.3,59.9,44,60.1,12,3,17,808,0,1,25,359,1193,809,384,TB,TB,\r\n1906,Andy Lee,P,0,2004,2004,1,60.4,59.5,67.4,60.3,,,60,14,0,2,1,0,0,0,1,2,1,1,ARZ,ARZ,\r\n2148,Jason Peters,T,0,2004,2004,9,,70.3,84.4,,,,71.8,71,0,12,0,135,0,0,100,235,135,100,DAL,DAL,60.5\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v2/{league}/teams": {
      "get": {
        "operationId": "team-directory",
        "summary": "The league's teams for a season, with ids, slugs, colours and groups",
        "description": "One row per team the league fields in `season` — franchise id, slug (what every per-team command\ntakes as `team`), name, city and nickname, short code, primary and secondary colours, and the\nids of the groups the team belongs to (conference, division, tier), joined with `;` so the row\nstays one line. `groups` beside the table names each group id with its slug, name and parent\nids, so a script can turn `groupIds` into words. Rows are ordered by city, falling back to the\nteam's name where the directory has no city. `season` defaults to the current season. NCAA\ndirectories are large: the FBS and FCS programmes, every\nconference and sub-division; lower divisions and all-star groups are left out on purpose.\nWith `format=csv` the table streams as a file; see `CsvTable`.",
        "tags": [
          "team"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LeaguePath"
          },
          {
            "$ref": "#/components/parameters/SeasonQuery"
          },
          {
            "$ref": "#/components/parameters/FormatQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "The table.",
            "headers": {
              "Content-Disposition": {
                "$ref": "#/components/headers/CsvContentDisposition"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamDirectoryTable"
                },
                "examples": {
                  "default": {
                    "summary": "NFL, 2022 season",
                    "description": "`GET /v2/nfl/teams?season=2022`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "league": "nfl",
                      "season": 2022,
                      "groups": [
                        {
                          "id": 1,
                          "slug": "afc",
                          "name": "AFC",
                          "parentIds": []
                        },
                        {
                          "id": 2,
                          "slug": "afc-east",
                          "name": "AFC East",
                          "parentIds": [
                            1
                          ]
                        },
                        {
                          "id": 3,
                          "slug": "afc-north",
                          "name": "AFC North",
                          "parentIds": [
                            1
                          ]
                        }
                      ],
                      "columns": [
                        {
                          "key": "franchiseId",
                          "label": "Franchise id",
                          "type": "integer"
                        },
                        {
                          "key": "slug",
                          "label": "Slug",
                          "type": "string"
                        },
                        {
                          "key": "name",
                          "label": "Name",
                          "type": "string"
                        },
                        {
                          "key": "city",
                          "label": "City",
                          "type": "string"
                        },
                        {
                          "key": "nickname",
                          "label": "Nickname",
                          "type": "string"
                        },
                        {
                          "key": "abbreviation",
                          "label": "Abbr",
                          "type": "string"
                        },
                        {
                          "key": "primaryColor",
                          "label": "Primary colour",
                          "type": "string"
                        },
                        {
                          "key": "secondaryColor",
                          "label": "Secondary colour",
                          "type": "string"
                        },
                        {
                          "key": "groupIds",
                          "label": "Group ids",
                          "type": "string"
                        }
                      ],
                      "rows": [
                        {
                          "franchiseId": 1,
                          "slug": "arizona-cardinals",
                          "name": "Arizona Cardinals",
                          "city": "Arizona",
                          "nickname": "Cardinals",
                          "abbreviation": "ARZ",
                          "primaryColor": "#97233f",
                          "secondaryColor": "#ffffff",
                          "groupIds": "6;10"
                        },
                        {
                          "franchiseId": 2,
                          "slug": "atlanta-falcons",
                          "name": "Atlanta Falcons",
                          "city": "Atlanta",
                          "nickname": "Falcons",
                          "abbreviation": "ATL",
                          "primaryColor": "#a71930",
                          "secondaryColor": "#000000",
                          "groupIds": "6;9"
                        },
                        {
                          "franchiseId": 3,
                          "slug": "baltimore-ravens",
                          "name": "Baltimore Ravens",
                          "city": "Baltimore",
                          "nickname": "Ravens",
                          "abbreviation": "BLT",
                          "primaryColor": "#1a195f",
                          "secondaryColor": "#000000",
                          "groupIds": "1;3"
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvTable"
                },
                "examples": {
                  "default": {
                    "summary": "NFL, 2022 season",
                    "description": "`GET /v2/nfl/teams?season=2022&format=csv`, cut to the header and the first 3 lines.",
                    "value": "franchiseId,slug,name,city,nickname,abbreviation,primaryColor,secondaryColor,groupIds\r\n1,arizona-cardinals,Arizona Cardinals,Arizona,Cardinals,ARZ,#97233f,#ffffff,6;10\r\n2,atlanta-falcons,Atlanta Falcons,Atlanta,Falcons,ATL,#a71930,#000000,6;9\r\n3,baltimore-ravens,Baltimore Ravens,Baltimore,Ravens,BLT,#1a195f,#000000,1;3\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v2/{league}/teams/stats": {
      "get": {
        "operationId": "team-stats",
        "summary": "Team stats table for one category, every value ranked against the scope",
        "description": "One row per team — the whole league, or the conference or division named by `scope` — for one\nstat category (`offense-overall-success` unless `category` says otherwise), with every stat\nvalue carrying its rank within that scope in the column beside it: `epaPerPlay` and\n`epaPerPlayRank`, `successRate` and `successRateRank`, and so on. `columns` lists every key a row\ncarries, in order, with a human label and a type; rows hold scalars only, so each row is one\nline of a table and `-o table` prints it as one.\n\n`season` defaults to the current season and `weekGroup` to `REGPO`; name explicit weeks with\n`weekIds` instead — the two cannot be combined. A value that does not apply is `null`, never\nleft out. `updatedAt` is when the data behind this table was last refreshed; it is `null`, with\nno rows, for a season that has not been loaded yet — NFL seasons before 2025, and every NCAA\nseason, at the time of writing. With `format=csv` the table streams as a file; see `CsvTable`.\n\nNewer data points join a category as PFF adds them, so the column list can grow between\ntwo answers. The data-science entries — weighted EPA per play (`wepa`, and\n`wepaAllowed` on defense), series conversion rate (`conversionAfter4`, `conversionAfter4Allowed`),\npressure rate over expectation (`pressureOe`, `pressureOeAllowed`), pass and run rate over\nexpectation (`isPassOe`, `runRateOe`) and the WR, TE and RB target shares (`targetShareWR`,\n`targetShareTE`, `targetShareRB`) — appear in their categories, each with its rank column.\nCoverage varies by league: `wepa` / `wepaAllowed` are absent for the NCAA — its store has no\nrows for them yet; every other entry in this list is served for the NCAA too.\nRead `columns` rather than assuming a list.",
        "tags": [
          "team"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LeaguePath"
          },
          {
            "$ref": "#/components/parameters/SeasonQuery"
          },
          {
            "$ref": "#/components/parameters/WeekGroupQuery"
          },
          {
            "$ref": "#/components/parameters/WeekIdsQuery"
          },
          {
            "$ref": "#/components/parameters/TeamStatsCategory"
          },
          {
            "$ref": "#/components/parameters/TeamStatsScope"
          },
          {
            "$ref": "#/components/parameters/FormatQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "The table.",
            "headers": {
              "Content-Disposition": {
                "$ref": "#/components/headers/CsvContentDisposition"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamStatsTable"
                },
                "examples": {
                  "default": {
                    "summary": "AFC North, 2022 season, offense overall success",
                    "description": "`GET /v2/nfl/teams/stats?season=2022&category=offense-overall-success&scope=afc-north`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "league": "nfl",
                      "season": 2022,
                      "category": "offense-overall-success",
                      "scope": "afc-north",
                      "weekGroup": "REGPO",
                      "updatedAt": "2026-09-02T16:05:41.662Z",
                      "columns": [
                        {
                          "key": "teamId",
                          "label": "Team id",
                          "type": "integer"
                        },
                        {
                          "key": "abbreviation",
                          "label": "Team",
                          "type": "string"
                        },
                        {
                          "key": "name",
                          "label": "Name",
                          "type": "string"
                        },
                        {
                          "key": "epaPerPlay",
                          "label": "EPA / play",
                          "type": "number"
                        },
                        {
                          "key": "epaPerPlayRank",
                          "label": "EPA / play rank",
                          "type": "integer"
                        },
                        {
                          "key": "successRate",
                          "label": "Success rate",
                          "type": "number"
                        },
                        {
                          "key": "successRateRank",
                          "label": "Success rate rank",
                          "type": "integer"
                        },
                        {
                          "key": "explosivePlayRate",
                          "label": "Explosive play rate",
                          "type": "number"
                        },
                        {
                          "key": "explosivePlayRateRank",
                          "label": "Explosive play rate rank",
                          "type": "integer"
                        },
                        {
                          "key": "pointsPerDrive",
                          "label": "Points per drive",
                          "type": "number"
                        },
                        {
                          "key": "pointsPerDriveRank",
                          "label": "Points per drive rank",
                          "type": "integer"
                        },
                        {
                          "key": "thirdDownConversionRate",
                          "label": "Third down conversion rate",
                          "type": "number"
                        },
                        {
                          "key": "thirdDownConversionRateRank",
                          "label": "Third down conversion rate rank",
                          "type": "integer"
                        },
                        {
                          "key": "redZoneConversionRate",
                          "label": "Red zone conversion rate",
                          "type": "number"
                        },
                        {
                          "key": "redZoneConversionRateRank",
                          "label": "Red zone conversion rate rank",
                          "type": "integer"
                        },
                        {
                          "key": "offensiveTurnovers",
                          "label": "Offensive turnovers",
                          "type": "integer"
                        },
                        {
                          "key": "offensiveTurnoversRank",
                          "label": "Offensive turnovers rank",
                          "type": "integer"
                        },
                        {
                          "key": "wepa",
                          "label": "Weighted EPA / play",
                          "type": "number"
                        },
                        {
                          "key": "wepaRank",
                          "label": "Weighted EPA / play rank",
                          "type": "integer"
                        },
                        {
                          "key": "conversionAfter4",
                          "label": "Series conversion rate",
                          "type": "number"
                        },
                        {
                          "key": "conversionAfter4Rank",
                          "label": "Series conversion rate rank",
                          "type": "integer"
                        }
                      ],
                      "rows": [
                        {
                          "teamId": 3,
                          "abbreviation": "BAL",
                          "name": "Baltimore Ravens",
                          "epaPerPlay": -0.0011422182468694172,
                          "epaPerPlayRank": 4,
                          "successRate": 0.45796064400715564,
                          "successRateRank": 3,
                          "explosivePlayRate": 0.15506035283194058,
                          "explosivePlayRateRank": 1,
                          "pointsPerDrive": 1.7246376811594204,
                          "pointsPerDriveRank": 2,
                          "thirdDownConversionRate": 0.4148471615720524,
                          "thirdDownConversionRateRank": 3,
                          "redZoneConversionRate": 0.36363636363636365,
                          "redZoneConversionRateRank": 4,
                          "offensiveTurnovers": 32,
                          "offensiveTurnoversRank": 4,
                          "wepa": 0.04061080053667263,
                          "wepaRank": 2,
                          "conversionAfter4": 0.7214428857715431,
                          "conversionAfter4Rank": 2
                        },
                        {
                          "teamId": 7,
                          "abbreviation": "CIN",
                          "name": "Cincinnati Bengals",
                          "epaPerPlay": 0.08366720386784852,
                          "epaPerPlayRank": 1,
                          "successRate": 0.48751007252215955,
                          "successRateRank": 1,
                          "explosivePlayRate": 0.12468407750631845,
                          "explosivePlayRateRank": 3,
                          "pointsPerDrive": 2.1126126126126126,
                          "pointsPerDriveRank": 1,
                          "thirdDownConversionRate": 0.4773662551440329,
                          "thirdDownConversionRateRank": 1,
                          "redZoneConversionRate": 0.5,
                          "redZoneConversionRateRank": 1,
                          "offensiveTurnovers": 23,
                          "offensiveTurnoversRank": 1,
                          "wepa": 0.09219242546333602,
                          "wepaRank": 1,
                          "conversionAfter4": 0.7622504537205081,
                          "conversionAfter4Rank": 1
                        },
                        {
                          "teamId": 8,
                          "abbreviation": "CLE",
                          "name": "Cleveland Browns",
                          "epaPerPlay": 0.019342293906810033,
                          "epaPerPlayRank": 2,
                          "successRate": 0.4507168458781362,
                          "successRateRank": 4,
                          "explosivePlayRate": 0.146455223880597,
                          "explosivePlayRateRank": 2,
                          "pointsPerDrive": 1.700507614213198,
                          "pointsPerDriveRank": 3,
                          "thirdDownConversionRate": 0.3793103448275862,
                          "thirdDownConversionRateRank": 4,
                          "redZoneConversionRate": 0.4225352112676056,
                          "redZoneConversionRateRank": 2,
                          "offensiveTurnovers": 24,
                          "offensiveTurnoversRank": 3,
                          "wepa": 0.013324260752688173,
                          "wepaRank": 4,
                          "conversionAfter4": 0.7214137214137214,
                          "conversionAfter4Rank": 3
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvTable"
                },
                "examples": {
                  "default": {
                    "summary": "AFC North, 2022 season, offense overall success",
                    "description": "`GET /v2/nfl/teams/stats?season=2022&category=offense-overall-success&scope=afc-north&format=csv`, cut to the header and the first 3 lines.",
                    "value": "teamId,abbreviation,name,epaPerPlay,epaPerPlayRank,successRate,successRateRank,explosivePlayRate,explosivePlayRateRank,pointsPerDrive,pointsPerDriveRank,thirdDownConversionRate,thirdDownConversionRateRank,redZoneConversionRate,redZoneConversionRateRank,offensiveTurnovers,offensiveTurnoversRank,wepa,wepaRank,conversionAfter4,conversionAfter4Rank\r\n3,BAL,Baltimore Ravens,-0.0011422182468694172,4,0.45796064400715564,3,0.15506035283194058,1,1.7246376811594204,2,0.4148471615720524,3,0.36363636363636365,4,32,4,0.04061080053667263,2,0.7214428857715431,2\r\n7,CIN,Cincinnati Bengals,0.08366720386784852,1,0.48751007252215955,1,0.12468407750631845,3,2.1126126126126126,1,0.4773662551440329,1,0.5,1,23,1,0.09219242546333602,1,0.7622504537205081,1\r\n8,CLE,Cleveland Browns,0.019342293906810033,2,0.4507168458781362,4,0.146455223880597,2,1.700507614213198,3,0.3793103448275862,4,0.4225352112676056,2,24,3,0.013324260752688173,4,0.7214137214137214,3\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v2/{league}/teams/{team}/roster": {
      "get": {
        "operationId": "team-roster",
        "summary": "A team's depth-chart roster with grades, ranks and snap counts",
        "description": "One row per player on the team's depth chart, in depth-chart order (starters first within each\nalignment slot): id, name, jersey, roster position and depth-chart alignment, unit, depth order,\nthe season grade for the player's unit with its league-wide rank and the size of that ranking\n(`gradeRank` out of `gradeRankOf`), height (feet and inches packed as one number, `604` for six\nfoot four), weight, birth date, draft-eligibility year, injury status (`active`, `questionable`,\n`out`), unit snaps in the season and the share of the unit's snaps they represent. A player\nwith no graded snaps carries `null` grade and rank. `season` defaults to the current season.\nFor NCAA programmes the roster is served from the same depth-chart source and is empty\nwhere that source has no entry for the programme. With `format=csv` the table streams as a\nfile; see `CsvTable`.",
        "tags": [
          "team"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LeaguePath"
          },
          {
            "$ref": "#/components/parameters/TeamPath"
          },
          {
            "$ref": "#/components/parameters/SeasonQuery"
          },
          {
            "$ref": "#/components/parameters/FormatQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "The table.",
            "headers": {
              "Content-Disposition": {
                "$ref": "#/components/headers/CsvContentDisposition"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamRosterTable"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season",
                    "description": "`GET /v2/nfl/teams/cincinnati-bengals/roster?season=2022`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "league": "nfl",
                      "season": 2022,
                      "team": {
                        "franchiseId": 7,
                        "slug": "cincinnati-bengals",
                        "abbreviation": "CIN",
                        "name": "Cincinnati Bengals"
                      },
                      "columns": [
                        {
                          "key": "playerId",
                          "label": "Player id",
                          "type": "integer"
                        },
                        {
                          "key": "name",
                          "label": "Player",
                          "type": "string"
                        },
                        {
                          "key": "jersey",
                          "label": "No.",
                          "type": "string"
                        },
                        {
                          "key": "position",
                          "label": "Pos",
                          "type": "string"
                        },
                        {
                          "key": "alignment",
                          "label": "Alignment",
                          "type": "string"
                        },
                        {
                          "key": "unit",
                          "label": "Unit",
                          "type": "string"
                        },
                        {
                          "key": "depthOrder",
                          "label": "Depth",
                          "type": "integer"
                        },
                        {
                          "key": "grade",
                          "label": "Grade",
                          "type": "number"
                        },
                        {
                          "key": "gradeRank",
                          "label": "Grade rank",
                          "type": "integer"
                        },
                        {
                          "key": "gradeRankOf",
                          "label": "Grade rank of",
                          "type": "integer"
                        },
                        {
                          "key": "height",
                          "label": "Height",
                          "type": "integer"
                        },
                        {
                          "key": "weight",
                          "label": "Weight",
                          "type": "integer"
                        },
                        {
                          "key": "birthDate",
                          "label": "Birth date",
                          "type": "string"
                        },
                        {
                          "key": "eligibilityYear",
                          "label": "Eligibility year",
                          "type": "integer"
                        },
                        {
                          "key": "status",
                          "label": "Status",
                          "type": "string"
                        },
                        {
                          "key": "snapCounts",
                          "label": "Snaps",
                          "type": "integer"
                        },
                        {
                          "key": "snapPct",
                          "label": "Snap %",
                          "type": "number"
                        }
                      ],
                      "rows": [
                        {
                          "playerId": 28022,
                          "name": "Joe Burrow",
                          "jersey": "9",
                          "position": "QB",
                          "alignment": "QB",
                          "unit": "offense",
                          "depthOrder": 1,
                          "grade": 91.8,
                          "gradeRank": 2,
                          "gradeRankOf": 38,
                          "height": 604,
                          "weight": 215,
                          "birthDate": "1996-12-10",
                          "eligibilityYear": 2020,
                          "status": "active",
                          "snapCounts": 1289,
                          "snapPct": 98.8
                        },
                        {
                          "playerId": 4332,
                          "name": "Joe Flacco",
                          "jersey": "16",
                          "position": "QB",
                          "alignment": "QB",
                          "unit": "offense",
                          "depthOrder": 2,
                          "grade": 68,
                          "gradeRank": 27,
                          "gradeRankOf": 38,
                          "height": 606,
                          "weight": 245,
                          "birthDate": "1985-01-16",
                          "eligibilityYear": 2008,
                          "status": "active",
                          "snapCounts": null,
                          "snapPct": null
                        },
                        {
                          "playerId": 77787,
                          "name": "Chase Brown",
                          "jersey": "30",
                          "position": "HB",
                          "alignment": "HB",
                          "unit": "offense",
                          "depthOrder": 1,
                          "grade": 75.1,
                          "gradeRank": 24,
                          "gradeRankOf": 59,
                          "height": 509,
                          "weight": 215,
                          "birthDate": "2000-03-21",
                          "eligibilityYear": 2023,
                          "status": "active",
                          "snapCounts": null,
                          "snapPct": null
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvTable"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season",
                    "description": "`GET /v2/nfl/teams/cincinnati-bengals/roster?season=2022&format=csv`, cut to the header and the first 3 lines.",
                    "value": "playerId,name,jersey,position,alignment,unit,depthOrder,grade,gradeRank,gradeRankOf,height,weight,birthDate,eligibilityYear,status,snapCounts,snapPct\r\n28022,Joe Burrow,9,QB,QB,offense,1,91.8,2,38,604,215,1996-12-10,2020,active,1289,98.8\r\n4332,Joe Flacco,16,QB,QB,offense,2,68,27,38,606,245,1985-01-16,2008,active,,\r\n77787,Chase Brown,30,HB,HB,offense,1,75.1,24,59,509,215,2000-03-21,2023,active,,\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v2/{league}/teams/{team}/schedule": {
      "get": {
        "operationId": "team-schedule",
        "summary": "A team's season schedule, with results and strength of schedule",
        "description": "One row per week of the team's season — regular-season weeks including byes, then the\npostseason — with the game id, kickoff time, home or away, the opponent's id, short code, name\nand division, the opponent's record, and once the game is final the result and both scores. A\nbye row carries `isBye: true` and `null` in every game field. `sosScore` is the opponent's\nstrength-of-schedule figure for that game, `opponentElo` the opponent's Elo rating entering\nthat week (a whole number; `null` for NCAA, whose store has no rating), `opponentEloRank`\nwhere that rating ranks among every club rated that week\n(1 = highest; `null` whenever `opponentElo` is), and `sos` beside the table summarises the\nseason:\nscore, rank, games played and remaining, and how many games fall in each difficulty bucket.\n`sos` is `null` when no strength-of-schedule source exists for the league. `season` defaults to\nthe current season. For NCAA programmes `sos` is always `null`, and `opponentDivision` names the\nopponent's conference subdivision (`Sun Belt West`) only when the directory tracks one for that\nconference — most NCAA conferences have none, so it is `null` there too. With `format=csv` the\ntable streams as a file; see `CsvTable`.",
        "tags": [
          "team"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LeaguePath"
          },
          {
            "$ref": "#/components/parameters/TeamPath"
          },
          {
            "$ref": "#/components/parameters/SeasonQuery"
          },
          {
            "$ref": "#/components/parameters/FormatQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "The table.",
            "headers": {
              "Content-Disposition": {
                "$ref": "#/components/headers/CsvContentDisposition"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamScheduleTable"
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvTable"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season",
                    "description": "`GET /v2/nfl/teams/cincinnati-bengals/schedule?season=2022&format=csv`, cut to the header and the first 3 lines.",
                    "value": "week,weekLabel,isBye,gameId,kickoff,homeAway,opponentFranchiseId,opponentAbbr,opponentName,opponentDivision,opponentWins,opponentLosses,result,teamScore,opponentScore,sosScore,opponentElo,opponentEloRank\r\n1,1,false,23108,2022-09-11T17:00:00.000Z,home,25,PIT,Pittsburgh Steelers,AFC North,0,0,L,20,23,4.4,1486,22\r\n2,2,false,23124,2022-09-18T20:25:00.000Z,away,9,DAL,Dallas Cowboys,NFC East,0,1,L,17,20,7.2,1542,9\r\n3,3,false,23132,2022-09-25T17:00:00.000Z,away,22,NYJ,New York Jets,AFC East,1,1,W,27,12,3.5,1352,32\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v2/{league}/teams/{team}/leaders": {
      "get": {
        "operationId": "team-leaders",
        "summary": "A team's leaders for one position group, with rank and percentile",
        "description": "One row per player of the team in the chosen position group — `receiving` unless `group` says\notherwise — with every stat of that group's leaderboard and, beside each, where the value\nplaces among the qualified players at that player's own position across the league: `targets`\nthen `targetsRank` (1 = best), `targetsRankOf` (how many qualified players were ranked) and\n`targetsPercentile` (the share of them, 0–100, the value beats — higher is better whatever the\nstat's direction), and so on. Qualified means carrying at least a fifth of the position\nleader's volume in the group's headline category, the same floor the by-position reports open\non; a player below it is listed with their stats and all three placing columns `null`.\n`qualification` beside the table states the rule: the volume column it is measured on and its\nname in prose, the share of the position leader's volume required, and the resulting minimum\nfor each position. `season` defaults to the current season and `weekGroup` to `REGPO`. A stat\nthe source did not report for a player is `null` in all four columns. `updatedAt` is the time\nthis answer was produced.\nFor NCAA programmes the same table is served over the FBS and FCS universe; players whose\nposition code falls outside the group's NFL vocabulary are not listed, and a programme with\nno rows in the group's facet gets an empty table rather than an error. This is one facet\nread, not a multi-report fan-out, so the token backing it rarely runs out — but a read that\ndoes span past 60 s carries the same risk as the two report operations: it may come back\nwith fewer columns than usual, so rerun it. With `format=csv` the table streams as a file;\nsee `CsvTable`.",
        "tags": [
          "team"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LeaguePath"
          },
          {
            "$ref": "#/components/parameters/TeamPath"
          },
          {
            "$ref": "#/components/parameters/SeasonQuery"
          },
          {
            "$ref": "#/components/parameters/WeekGroupQuery"
          },
          {
            "$ref": "#/components/parameters/LeadersGroupQuery"
          },
          {
            "$ref": "#/components/parameters/FormatQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "The table.",
            "headers": {
              "Content-Disposition": {
                "$ref": "#/components/headers/CsvContentDisposition"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamLeadersTable"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, receiving",
                    "description": "`GET /v2/nfl/teams/cincinnati-bengals/leaders?season=2022&group=receiving`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "league": "nfl",
                      "season": 2022,
                      "weekGroup": "REGPO",
                      "team": {
                        "franchiseId": 7,
                        "slug": "cincinnati-bengals",
                        "abbreviation": "CIN",
                        "name": "Cincinnati Bengals"
                      },
                      "group": "receiving",
                      "updatedAt": "2026-09-16T15:00:14.399Z",
                      "qualification": {
                        "key": "targets",
                        "label": "targets",
                        "share": 0.2,
                        "minimums": {
                          "WR": 37,
                          "TE": 36.4,
                          "RB": 25.200000000000003
                        }
                      },
                      "columns": [
                        {
                          "key": "playerId",
                          "label": "Player id",
                          "type": "integer"
                        },
                        {
                          "key": "name",
                          "label": "Player",
                          "type": "string"
                        },
                        {
                          "key": "position",
                          "label": "Pos",
                          "type": "string"
                        },
                        {
                          "key": "jersey",
                          "label": "No.",
                          "type": "string"
                        },
                        {
                          "key": "games",
                          "label": "#G",
                          "type": "integer"
                        },
                        {
                          "key": "gamesRank",
                          "label": "#G rank",
                          "type": "integer"
                        },
                        {
                          "key": "gamesRankOf",
                          "label": "#G rank of",
                          "type": "integer"
                        },
                        {
                          "key": "gamesPercentile",
                          "label": "#G percentile",
                          "type": "integer"
                        },
                        {
                          "key": "targets",
                          "label": "TGT",
                          "type": "integer"
                        },
                        {
                          "key": "targetsRank",
                          "label": "TGT rank",
                          "type": "integer"
                        },
                        {
                          "key": "targetsRankOf",
                          "label": "TGT rank of",
                          "type": "integer"
                        },
                        {
                          "key": "targetsPercentile",
                          "label": "TGT percentile",
                          "type": "integer"
                        },
                        {
                          "key": "receptions",
                          "label": "REC",
                          "type": "integer"
                        },
                        {
                          "key": "receptionsRank",
                          "label": "REC rank",
                          "type": "integer"
                        },
                        {
                          "key": "receptionsRankOf",
                          "label": "REC rank of",
                          "type": "integer"
                        },
                        {
                          "key": "receptionsPercentile",
                          "label": "REC percentile",
                          "type": "integer"
                        },
                        {
                          "key": "receptionPct",
                          "label": "REC%",
                          "type": "number"
                        },
                        {
                          "key": "receptionPctRank",
                          "label": "REC% rank",
                          "type": "integer"
                        },
                        {
                          "key": "receptionPctRankOf",
                          "label": "REC% rank of",
                          "type": "integer"
                        },
                        {
                          "key": "receptionPctPercentile",
                          "label": "REC% percentile",
                          "type": "integer"
                        },
                        {
                          "key": "receivingYards",
                          "label": "YDS",
                          "type": "integer"
                        },
                        {
                          "key": "receivingYardsRank",
                          "label": "YDS rank",
                          "type": "integer"
                        },
                        {
                          "key": "receivingYardsRankOf",
                          "label": "YDS rank of",
                          "type": "integer"
                        },
                        {
                          "key": "receivingYardsPercentile",
                          "label": "YDS percentile",
                          "type": "integer"
                        },
                        {
                          "key": "yardsPerReception",
                          "label": "Y/REC",
                          "type": "number"
                        },
                        {
                          "key": "yardsPerReceptionRank",
                          "label": "Y/REC rank",
                          "type": "integer"
                        },
                        {
                          "key": "yardsPerReceptionRankOf",
                          "label": "Y/REC rank of",
                          "type": "integer"
                        },
                        {
                          "key": "yardsPerReceptionPercentile",
                          "label": "Y/REC percentile",
                          "type": "integer"
                        },
                        {
                          "key": "receivingTd",
                          "label": "TD",
                          "type": "integer"
                        },
                        {
                          "key": "receivingTdRank",
                          "label": "TD rank",
                          "type": "integer"
                        },
                        {
                          "key": "receivingTdRankOf",
                          "label": "TD rank of",
                          "type": "integer"
                        },
                        {
                          "key": "receivingTdPercentile",
                          "label": "TD percentile",
                          "type": "integer"
                        },
                        {
                          "key": "gradeOffense",
                          "label": "OFF",
                          "type": "number"
                        },
                        {
                          "key": "gradeOffenseRank",
                          "label": "OFF rank",
                          "type": "integer"
                        },
                        {
                          "key": "gradeOffenseRankOf",
                          "label": "OFF rank of",
                          "type": "integer"
                        },
                        {
                          "key": "gradeOffensePercentile",
                          "label": "OFF percentile",
                          "type": "integer"
                        },
                        {
                          "key": "gradeReceiving",
                          "label": "RECV",
                          "type": "number"
                        },
                        {
                          "key": "gradeReceivingRank",
                          "label": "RECV rank",
                          "type": "integer"
                        },
                        {
                          "key": "gradeReceivingRankOf",
                          "label": "RECV rank of",
                          "type": "integer"
                        },
                        {
                          "key": "gradeReceivingPercentile",
                          "label": "RECV percentile",
                          "type": "integer"
                        },
                        {
                          "key": "gradeDrop",
                          "label": "DROP",
                          "type": "number"
                        },
                        {
                          "key": "gradeDropRank",
                          "label": "DROP rank",
                          "type": "integer"
                        },
                        {
                          "key": "gradeDropRankOf",
                          "label": "DROP rank of",
                          "type": "integer"
                        },
                        {
                          "key": "gradeDropPercentile",
                          "label": "DROP percentile",
                          "type": "integer"
                        },
                        {
                          "key": "gradeFumble",
                          "label": "FUM",
                          "type": "number"
                        },
                        {
                          "key": "gradeFumbleRank",
                          "label": "FUM rank",
                          "type": "integer"
                        },
                        {
                          "key": "gradeFumbleRankOf",
                          "label": "FUM rank of",
                          "type": "integer"
                        },
                        {
                          "key": "gradeFumblePercentile",
                          "label": "FUM percentile",
                          "type": "integer"
                        },
                        {
                          "key": "gradePassBlock",
                          "label": "PBLK",
                          "type": "number"
                        },
                        {
                          "key": "gradePassBlockRank",
                          "label": "PBLK rank",
                          "type": "integer"
                        },
                        {
                          "key": "gradePassBlockRankOf",
                          "label": "PBLK rank of",
                          "type": "integer"
                        },
                        {
                          "key": "gradePassBlockPercentile",
                          "label": "PBLK percentile",
                          "type": "integer"
                        }
                      ],
                      "rows": [
                        {
                          "playerId": 84270,
                          "name": "Ja'Marr Chase",
                          "position": "WR",
                          "jersey": "01",
                          "games": 15,
                          "gamesRank": 63,
                          "gamesRankOf": 102,
                          "gamesPercentile": 30,
                          "targets": 155,
                          "targetsRank": 7,
                          "targetsRankOf": 102,
                          "targetsPercentile": 93,
                          "receptions": 107,
                          "receptionsRank": 7,
                          "receptionsRankOf": 102,
                          "receptionsPercentile": 93,
                          "receptionPct": 0.69,
                          "receptionPctRank": 33,
                          "receptionPctRankOf": 102,
                          "receptionPctPercentile": 67,
                          "receivingYards": 1266,
                          "receivingYardsRank": 9,
                          "receivingYardsRankOf": 102,
                          "receivingYardsPercentile": 91,
                          "yardsPerReception": 11.8,
                          "yardsPerReceptionRank": 61,
                          "yardsPerReceptionRankOf": 102,
                          "yardsPerReceptionPercentile": 39,
                          "receivingTd": 11,
                          "receivingTdRank": 3,
                          "receivingTdRankOf": 102,
                          "receivingTdPercentile": 96,
                          "gradeOffense": 83.9,
                          "gradeOffenseRank": 10,
                          "gradeOffenseRankOf": 102,
                          "gradeOffensePercentile": 90,
                          "gradeReceiving": 85.2,
                          "gradeReceivingRank": 11,
                          "gradeReceivingRankOf": 102,
                          "gradeReceivingPercentile": 89,
                          "gradeDrop": 79.1,
                          "gradeDropRank": 40,
                          "gradeDropRankOf": 102,
                          "gradeDropPercentile": 61,
                          "gradeFumble": 37.9,
                          "gradeFumbleRank": 76,
                          "gradeFumbleRankOf": 102,
                          "gradeFumblePercentile": 25,
                          "gradePassBlock": null,
                          "gradePassBlockRank": null,
                          "gradePassBlockRankOf": null,
                          "gradePassBlockPercentile": null
                        },
                        {
                          "playerId": 45775,
                          "name": "Trayveon Williams",
                          "position": "RB",
                          "jersey": "32",
                          "games": 6,
                          "gamesRank": null,
                          "gamesRankOf": null,
                          "gamesPercentile": null,
                          "targets": 2,
                          "targetsRank": null,
                          "targetsRankOf": null,
                          "targetsPercentile": null,
                          "receptions": 2,
                          "receptionsRank": null,
                          "receptionsRankOf": null,
                          "receptionsPercentile": null,
                          "receptionPct": 1,
                          "receptionPctRank": null,
                          "receptionPctRankOf": null,
                          "receptionPctPercentile": null,
                          "receivingYards": 30,
                          "receivingYardsRank": null,
                          "receivingYardsRankOf": null,
                          "receivingYardsPercentile": null,
                          "yardsPerReception": 15,
                          "yardsPerReceptionRank": null,
                          "yardsPerReceptionRankOf": null,
                          "yardsPerReceptionPercentile": null,
                          "receivingTd": 0,
                          "receivingTdRank": null,
                          "receivingTdRankOf": null,
                          "receivingTdPercentile": null,
                          "gradeOffense": 82.3,
                          "gradeOffenseRank": null,
                          "gradeOffenseRankOf": null,
                          "gradeOffensePercentile": null,
                          "gradeReceiving": 81.6,
                          "gradeReceivingRank": null,
                          "gradeReceivingRankOf": null,
                          "gradeReceivingPercentile": null,
                          "gradeDrop": 68.3,
                          "gradeDropRank": null,
                          "gradeDropRankOf": null,
                          "gradeDropPercentile": null,
                          "gradeFumble": 81.1,
                          "gradeFumbleRank": null,
                          "gradeFumbleRankOf": null,
                          "gradeFumblePercentile": null,
                          "gradePassBlock": 80.9,
                          "gradePassBlockRank": null,
                          "gradePassBlockRankOf": null,
                          "gradePassBlockPercentile": null
                        },
                        {
                          "playerId": 11803,
                          "name": "Joe Mixon",
                          "position": "RB",
                          "jersey": "28",
                          "games": 17,
                          "gamesRank": 14,
                          "gamesRankOf": 48,
                          "gamesPercentile": 46,
                          "targets": 79,
                          "targetsRank": 6,
                          "targetsRankOf": 48,
                          "targetsPercentile": 88,
                          "receptions": 68,
                          "receptionsRank": 5,
                          "receptionsRankOf": 48,
                          "receptionsPercentile": 90,
                          "receptionPct": 0.861,
                          "receptionPctRank": 10,
                          "receptionPctRankOf": 48,
                          "receptionPctPercentile": 79,
                          "receivingYards": 491,
                          "receivingYardsRank": 5,
                          "receivingYardsRankOf": 48,
                          "receivingYardsPercentile": 90,
                          "yardsPerReception": 7.2,
                          "yardsPerReceptionRank": 24,
                          "yardsPerReceptionRankOf": 48,
                          "yardsPerReceptionPercentile": 50,
                          "receivingTd": 2,
                          "receivingTdRank": 11,
                          "receivingTdRankOf": 48,
                          "receivingTdPercentile": 67,
                          "gradeOffense": 80.8,
                          "gradeOffenseRank": 10,
                          "gradeOffenseRankOf": 48,
                          "gradeOffensePercentile": 79,
                          "gradeReceiving": 77,
                          "gradeReceivingRank": 7,
                          "gradeReceivingRankOf": 48,
                          "gradeReceivingPercentile": 85,
                          "gradeDrop": 69,
                          "gradeDropRank": 20,
                          "gradeDropRankOf": 48,
                          "gradeDropPercentile": 58,
                          "gradeFumble": 91.3,
                          "gradeFumbleRank": 1,
                          "gradeFumbleRankOf": 48,
                          "gradeFumblePercentile": 98,
                          "gradePassBlock": 34.9,
                          "gradePassBlockRank": 38,
                          "gradePassBlockRankOf": 48,
                          "gradePassBlockPercentile": 21
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvTable"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season, receiving",
                    "description": "`GET /v2/nfl/teams/cincinnati-bengals/leaders?season=2022&group=receiving&format=csv`, cut to the header and the first 3 lines.",
                    "value": "playerId,name,position,jersey,games,gamesRank,gamesRankOf,gamesPercentile,targets,targetsRank,targetsRankOf,targetsPercentile,receptions,receptionsRank,receptionsRankOf,receptionsPercentile,receptionPct,receptionPctRank,receptionPctRankOf,receptionPctPercentile,receivingYards,receivingYardsRank,receivingYardsRankOf,receivingYardsPercentile,yardsPerReception,yardsPerReceptionRank,yardsPerReceptionRankOf,yardsPerReceptionPercentile,receivingTd,receivingTdRank,receivingTdRankOf,receivingTdPercentile,gradeOffense,gradeOffenseRank,gradeOffenseRankOf,gradeOffensePercentile,gradeReceiving,gradeReceivingRank,gradeReceivingRankOf,gradeReceivingPercentile,gradeDrop,gradeDropRank,gradeDropRankOf,gradeDropPercentile,gradeFumble,gradeFumbleRank,gradeFumbleRankOf,gradeFumblePercentile,gradePassBlock,gradePassBlockRank,gradePassBlockRankOf,gradePassBlockPercentile\r\n84270,Ja'Marr Chase,WR,01,15,63,102,30,155,7,102,93,107,7,102,93,0.69,33,102,67,1266,9,102,91,11.8,61,102,39,11,3,102,96,83.9,10,102,90,85.2,11,102,89,79.1,40,102,61,37.9,76,102,25,,,,\r\n45775,Trayveon Williams,RB,32,6,,,,2,,,,2,,,,1,,,,30,,,,15,,,,0,,,,82.3,,,,81.6,,,,68.3,,,,81.1,,,,80.9,,,\r\n11803,Joe Mixon,RB,28,17,14,48,46,79,6,48,88,68,5,48,90,0.861,10,48,79,491,5,48,90,7.2,24,48,50,2,11,48,67,80.8,10,48,79,77,7,48,85,69,20,48,58,91.3,1,48,98,34.9,38,48,21\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v2/{league}/teams/{team}/reports/rushing-direction": {
      "get": {
        "operationId": "team-rushing-direction",
        "summary": "A team's rushing by direction, one row per rusher and gap, plus totals",
        "description": "Two tables in one answer. `columns` and `rows` hold one row per rusher and run direction — the\nplayer's id, name and position, the direction (left end to right end, then the quarterback\nbuckets) and the eleven direction stats: attempts, yards, yards per attempt, touchdowns, first\ndowns, explosive runs, yards after contact and per attempt, longest, avoided tackles, fumbles.\nRushers are ordered by total attempts, most first, so the first rows are the lead back.\n`totalsColumns` and `teamTotals` hold one row per direction for the whole team. `season`\ndefaults to the current season and `weekGroup` to `REGPO`. Served for NCAA programmes the same\nway; a programme with no rows in that source gets both tables empty rather than an error. A\nreport that takes longer than a minute may come back with fewer columns than usual — rerun it.\nWith `format=csv` the rusher × direction table streams as a file, or the team totals with\n`table=totals`; see `CsvTable`.",
        "tags": [
          "team"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LeaguePath"
          },
          {
            "$ref": "#/components/parameters/TeamPath"
          },
          {
            "$ref": "#/components/parameters/SeasonQuery"
          },
          {
            "$ref": "#/components/parameters/WeekGroupQuery"
          },
          {
            "$ref": "#/components/parameters/FormatQuery"
          },
          {
            "$ref": "#/components/parameters/TableQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "The two tables.",
            "headers": {
              "Content-Disposition": {
                "$ref": "#/components/headers/CsvContentDisposition"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamRushingDirectionTable"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season",
                    "description": "`GET /v2/nfl/teams/cincinnati-bengals/reports/rushing-direction?season=2022`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "league": "nfl",
                      "season": 2022,
                      "weekGroup": "REGPO",
                      "team": {
                        "franchiseId": 7,
                        "slug": "cincinnati-bengals",
                        "abbreviation": "CIN",
                        "name": "Cincinnati Bengals"
                      },
                      "columns": [
                        {
                          "key": "playerId",
                          "label": "Player id",
                          "type": "integer"
                        },
                        {
                          "key": "player",
                          "label": "Player",
                          "type": "string"
                        },
                        {
                          "key": "position",
                          "label": "Pos",
                          "type": "string"
                        },
                        {
                          "key": "direction",
                          "label": "Direction",
                          "type": "string"
                        },
                        {
                          "key": "attempts",
                          "label": "ATT",
                          "type": "integer"
                        },
                        {
                          "key": "yards",
                          "label": "YDS",
                          "type": "integer"
                        },
                        {
                          "key": "ypa",
                          "label": "YPA",
                          "type": "number"
                        },
                        {
                          "key": "touchdowns",
                          "label": "TD",
                          "type": "integer"
                        },
                        {
                          "key": "firstDowns",
                          "label": "1st",
                          "type": "integer"
                        },
                        {
                          "key": "explosive",
                          "label": "10+",
                          "type": "integer"
                        },
                        {
                          "key": "yardsAfterContact",
                          "label": "YCO",
                          "type": "integer"
                        },
                        {
                          "key": "ycoAttempt",
                          "label": "YCO/A",
                          "type": "number"
                        },
                        {
                          "key": "longest",
                          "label": "LNG",
                          "type": "integer"
                        },
                        {
                          "key": "avoidedTackles",
                          "label": "MTF",
                          "type": "integer"
                        },
                        {
                          "key": "fumbles",
                          "label": "FUM",
                          "type": "integer"
                        }
                      ],
                      "rows": [
                        {
                          "playerId": 11803,
                          "player": "Joe Mixon",
                          "position": "HB",
                          "direction": "LE",
                          "attempts": 24,
                          "yards": 106,
                          "ypa": 4.4,
                          "touchdowns": 2,
                          "firstDowns": 6,
                          "explosive": 4,
                          "yardsAfterContact": 83,
                          "ycoAttempt": 3.46,
                          "longest": 14,
                          "avoidedTackles": 6,
                          "fumbles": 0
                        },
                        {
                          "playerId": 11803,
                          "player": "Joe Mixon",
                          "position": "HB",
                          "direction": "LT",
                          "attempts": 17,
                          "yards": 49,
                          "ypa": 2.9,
                          "touchdowns": 0,
                          "firstDowns": 4,
                          "explosive": 1,
                          "yardsAfterContact": 33,
                          "ycoAttempt": 1.94,
                          "longest": 12,
                          "avoidedTackles": 2,
                          "fumbles": 0
                        },
                        {
                          "playerId": 11803,
                          "player": "Joe Mixon",
                          "position": "HB",
                          "direction": "LG",
                          "attempts": 32,
                          "yards": 98,
                          "ypa": 3.1,
                          "touchdowns": 3,
                          "firstDowns": 9,
                          "explosive": 3,
                          "yardsAfterContact": 79,
                          "ycoAttempt": 2.47,
                          "longest": 16,
                          "avoidedTackles": 4,
                          "fumbles": 0
                        }
                      ],
                      "totalsColumns": [
                        {
                          "key": "direction",
                          "label": "Direction",
                          "type": "string"
                        },
                        {
                          "key": "attempts",
                          "label": "ATT",
                          "type": "integer"
                        },
                        {
                          "key": "yards",
                          "label": "YDS",
                          "type": "integer"
                        },
                        {
                          "key": "ypa",
                          "label": "YPA",
                          "type": "number"
                        },
                        {
                          "key": "touchdowns",
                          "label": "TD",
                          "type": "integer"
                        },
                        {
                          "key": "firstDowns",
                          "label": "1st",
                          "type": "integer"
                        },
                        {
                          "key": "explosive",
                          "label": "10+",
                          "type": "integer"
                        },
                        {
                          "key": "yardsAfterContact",
                          "label": "YCO",
                          "type": "integer"
                        },
                        {
                          "key": "ycoAttempt",
                          "label": "YCO/A",
                          "type": "number"
                        },
                        {
                          "key": "longest",
                          "label": "LNG",
                          "type": "integer"
                        },
                        {
                          "key": "avoidedTackles",
                          "label": "MTF",
                          "type": "integer"
                        },
                        {
                          "key": "fumbles",
                          "label": "FUM",
                          "type": "integer"
                        }
                      ],
                      "teamTotals": [
                        {
                          "direction": "JS-L",
                          "attempts": 3,
                          "yards": 10,
                          "ypa": 3.3,
                          "touchdowns": 0,
                          "firstDowns": 1,
                          "explosive": 1,
                          "yardsAfterContact": 9,
                          "ycoAttempt": 3,
                          "longest": 11,
                          "avoidedTackles": 1,
                          "fumbles": 0
                        },
                        {
                          "direction": "LE",
                          "attempts": 41,
                          "yards": 151,
                          "ypa": 3.7,
                          "touchdowns": 2,
                          "firstDowns": 7,
                          "explosive": 4,
                          "yardsAfterContact": 126,
                          "ycoAttempt": 3.07,
                          "longest": 14,
                          "avoidedTackles": 7,
                          "fumbles": 0
                        },
                        {
                          "direction": "LT",
                          "attempts": 23,
                          "yards": 76,
                          "ypa": 3.3,
                          "touchdowns": 0,
                          "firstDowns": 4,
                          "explosive": 1,
                          "yardsAfterContact": 47,
                          "ycoAttempt": 2.04,
                          "longest": 12,
                          "avoidedTackles": 2,
                          "fumbles": 0
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvTable"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals, 2022 season",
                    "description": "`GET /v2/nfl/teams/cincinnati-bengals/reports/rushing-direction?season=2022&format=csv`, cut to the header and the first 3 lines.",
                    "value": "playerId,player,position,direction,attempts,yards,ypa,touchdowns,firstDowns,explosive,yardsAfterContact,ycoAttempt,longest,avoidedTackles,fumbles\r\n11803,Joe Mixon,HB,LE,24,106,4.4,2,6,4,83,3.46,14,6,0\r\n11803,Joe Mixon,HB,LT,17,49,2.9,0,4,1,33,1.94,12,2,0\r\n11803,Joe Mixon,HB,LG,32,98,3.1,3,9,3,79,2.47,16,4,0\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    },
    "/v2/{league}/teams/{team}/reports/{report}": {
      "get": {
        "operationId": "team-report",
        "summary": "One of nineteen player reports for a team, one row per player",
        "description": "The team's players in one report — `passing`, `rushing`, `coverage`, `punting` and the rest —\none row per player with the report's own stat columns. Which columns come back depends on the\nreport, the season and the entitlement, so `columns` names and types them per answer rather than\nthis document enumerating them; the three identity keys `playerId`, `player` and `position` are\nalways present. `season` defaults to the current season and `weekGroup` to `REGPO`; `week` and\n`weekTo` narrow the group to one week or a span. The five special-teams reports start in the\n2013 season; an earlier season is refused with `400 invalid_parameter`. Served for NCAA\nprogrammes the same way; a report with no rows for the programme in its section comes back\nas an empty table, never an error. Two slow-path outcomes, both worth a rerun or a narrower\n`week` span: a report whose reads run past the minute its session credential lives may come\nback complete but with fewer columns than usual (the source answers an expired credential\nwith a partial table, not an error), and a report that outlives its own time budget is\n`504 upstream_timeout`. With `format=csv` the table streams as a file; see `CsvTable`.\n\nThe reports PFF has added its newer data points to carry them as extra columns:\n`pass-blocking` — `pbwr` and `truePassSetPbwr` (pass block win rate, on all snaps and on true\npass sets), `islandRate` and `islandPassBlockWinRate`, plus `offensePosGradedRate` and\n`offenseNegGradedRate` (OVR POS% / OVR NEG%: the linemen's positively / negatively graded share\nof the OVR grade's offensive snaps — every offensive-role snap on a regular, pre-snap-penalty or\ntwo-point play, nullified plays in, the combined grade with the penalty grade included; the TE\nand RB rows the board also seats carry them too); `run-blocking` — `posGradedRate` and\n`negGradedRate`, with `zone…` and `gap…` variants, plus the same `offensePosGradedRate` /\n`offenseNegGradedRate` pair; `run-defense` — `posGradedRate` and\n`negGradedRate`; `pass-rush` — `doubleTeamRate`, plus the NCAA-only\n`doubleTeamPassRushWinRate` and `singleTeamPassRushWinRate` (Pass Rush Win Rate on\ndouble- / single-blocked snaps; NCAA only, no NFL source yet); `passing` —\n`passRateOe`, `completionOe` and `accuracyOe`, plus `offensePosGradedRate` and\n`offenseNegGradedRate` (the QB's positively / negatively graded share of the OVR grade's\noffensive snaps — nullified plays and scrambles in, penalty grade included); `receiving` —\n`receptionsOe`, `receptionsOeTotal`, `linedUpVsCb`, `linedUpVsS` and `linedUpVsLb`, plus `offensePosGradedRate` and\n`offenseNegGradedRate` (the same pair for the receivers — WR, TE and HB rows alike); `rushing` — `carryShare`, plus\n`offensePosGradedRate` and `offenseNegGradedRate` (the same pair for the backs, and for the QB, WR or TE\nrushers the board also seats);\n`field-goals` — `fieldGoalOe` and\n`fieldGoalOeTotal`. Rates are percentages on the 0–100 scale at one decimal, over-expectation\nfigures in percentage points and the two totals in receptions and makes; a cell is `null` when the source has no rows for\nthe player or the rate's denominator is zero. The graded-play rates (`pbwr`, `posGradedRate`, `negGradedRate`,\n`offensePosGradedRate`, `offenseNegGradedRate` and their variants) are served for the NFL and\nNCAA alike. Coverage varies key by key among the rest: `doubleTeamRate`,\n`passRateOe`, `completionOe`, `fieldGoalOe` and `fieldGoalOeTotal` are served for the NFL and\nNCAA alike too; `doubleTeamPassRushWinRate` and `singleTeamPassRushWinRate` for the NCAA only;\n`accuracyOe`, `receptionsOe`, `receptionsOeTotal`, `linedUpVsCb`, `linedUpVsS`,\n`linedUpVsLb` and `carryShare` stay NFL-only, absent from an NCAA answer. New columns join as\nPFF adds them, so read `columns` rather than assuming a list.",
        "tags": [
          "team"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LeaguePath"
          },
          {
            "$ref": "#/components/parameters/TeamPath"
          },
          {
            "$ref": "#/components/parameters/TeamReportPath"
          },
          {
            "$ref": "#/components/parameters/SeasonQuery"
          },
          {
            "$ref": "#/components/parameters/WeekGroupQuery"
          },
          {
            "$ref": "#/components/parameters/WeekQuery"
          },
          {
            "$ref": "#/components/parameters/WeekToQuery"
          },
          {
            "$ref": "#/components/parameters/FormatQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "The table.",
            "headers": {
              "Content-Disposition": {
                "$ref": "#/components/headers/CsvContentDisposition"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamReportTable"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals offense, 2022 regular season",
                    "description": "`GET /v2/nfl/teams/cincinnati-bengals/reports/offense?season=2022&weekGroup=REG`, with each list of rows cut to its first 3 entries. The live response carries every row.",
                    "value": {
                      "league": "nfl",
                      "season": 2022,
                      "weekGroup": "REG",
                      "week": null,
                      "weekTo": null,
                      "team": {
                        "franchiseId": 7,
                        "slug": "cincinnati-bengals",
                        "abbreviation": "CIN",
                        "name": "Cincinnati Bengals"
                      },
                      "report": "offense",
                      "section": "offense",
                      "columns": [
                        {
                          "key": "playerId",
                          "label": "Player id",
                          "type": "integer"
                        },
                        {
                          "key": "player",
                          "label": "Player",
                          "type": "string"
                        },
                        {
                          "key": "position",
                          "label": "Pos",
                          "type": "string"
                        },
                        {
                          "key": "declinedPenalties",
                          "label": "Declined penalties",
                          "type": "integer"
                        },
                        {
                          "key": "draftSeason",
                          "label": "Draft season",
                          "type": "integer"
                        },
                        {
                          "key": "eligibleSeason",
                          "label": "Eligible season",
                          "type": "integer"
                        },
                        {
                          "key": "franchiseId",
                          "label": "Franchise id",
                          "type": "integer"
                        },
                        {
                          "key": "gradesOffense",
                          "label": "Grades offense",
                          "type": "number"
                        },
                        {
                          "key": "gradesOffensePenalty",
                          "label": "Grades offense penalty",
                          "type": "number"
                        },
                        {
                          "key": "gradesPassBlock",
                          "label": "Grades pass block",
                          "type": "number"
                        },
                        {
                          "key": "gradesRunBlock",
                          "label": "Grades run block",
                          "type": "number"
                        },
                        {
                          "key": "jerseyNumber",
                          "label": "Jersey number",
                          "type": "string"
                        },
                        {
                          "key": "penalties",
                          "label": "Penalties",
                          "type": "integer"
                        },
                        {
                          "key": "playerGameCount",
                          "label": "Player game count",
                          "type": "integer"
                        },
                        {
                          "key": "snapCountsPass",
                          "label": "Snap counts pass",
                          "type": "integer"
                        },
                        {
                          "key": "snapCountsPassBlock",
                          "label": "Snap counts pass block",
                          "type": "integer"
                        },
                        {
                          "key": "snapCountsPassRoute",
                          "label": "Snap counts pass route",
                          "type": "integer"
                        },
                        {
                          "key": "snapCountsRun",
                          "label": "Snap counts run",
                          "type": "integer"
                        },
                        {
                          "key": "snapCountsRunBlock",
                          "label": "Snap counts run block",
                          "type": "integer"
                        },
                        {
                          "key": "snapCountsTotal",
                          "label": "Snap counts total",
                          "type": "integer"
                        },
                        {
                          "key": "snapCountsTotalPass",
                          "label": "Snap counts total pass",
                          "type": "integer"
                        },
                        {
                          "key": "snapCountsTotalRun",
                          "label": "Snap counts total run",
                          "type": "integer"
                        },
                        {
                          "key": "team",
                          "label": "Team",
                          "type": "string"
                        },
                        {
                          "key": "teamName",
                          "label": "Team name",
                          "type": "string"
                        },
                        {
                          "key": "gradesHandsFumble",
                          "label": "Grades hands fumble",
                          "type": "number"
                        },
                        {
                          "key": "gradesPass",
                          "label": "Grades pass",
                          "type": "number"
                        },
                        {
                          "key": "gradesPassRoute",
                          "label": "Grades pass route",
                          "type": "number"
                        },
                        {
                          "key": "gradesRun",
                          "label": "Grades run",
                          "type": "number"
                        }
                      ],
                      "rows": [
                        {
                          "playerId": 9719,
                          "player": "La'el Collins",
                          "position": "T",
                          "declinedPenalties": 2,
                          "draftSeason": 2015,
                          "eligibleSeason": 2015,
                          "franchiseId": 7,
                          "gradesOffense": 57.9,
                          "gradesOffensePenalty": 69.3,
                          "gradesPassBlock": 44.2,
                          "gradesRunBlock": 73.5,
                          "jerseyNumber": "71",
                          "penalties": 8,
                          "playerGameCount": 15,
                          "snapCountsPass": 0,
                          "snapCountsPassBlock": 618,
                          "snapCountsPassRoute": 0,
                          "snapCountsRun": 0,
                          "snapCountsRunBlock": 333,
                          "snapCountsTotal": 951,
                          "snapCountsTotalPass": 618,
                          "snapCountsTotalRun": 333,
                          "team": "CIN",
                          "teamName": "CIN",
                          "gradesHandsFumble": null,
                          "gradesPass": null,
                          "gradesPassRoute": null,
                          "gradesRun": null
                        },
                        {
                          "playerId": 10689,
                          "player": "Tyler Boyd",
                          "position": "WR",
                          "declinedPenalties": 0,
                          "draftSeason": 2016,
                          "eligibleSeason": 2016,
                          "franchiseId": 7,
                          "gradesOffense": 71.1,
                          "gradesOffensePenalty": 88.5,
                          "gradesPassBlock": 54.6,
                          "gradesRunBlock": 51.7,
                          "jerseyNumber": "83",
                          "penalties": 0,
                          "playerGameCount": 16,
                          "snapCountsPass": 2,
                          "snapCountsPassBlock": 4,
                          "snapCountsPassRoute": 596,
                          "snapCountsRun": 0,
                          "snapCountsRunBlock": 196,
                          "snapCountsTotal": 798,
                          "snapCountsTotalPass": 602,
                          "snapCountsTotalRun": 196,
                          "team": "CIN",
                          "teamName": "CIN",
                          "gradesHandsFumble": 80.7,
                          "gradesPass": 71.4,
                          "gradesPassRoute": 70.8,
                          "gradesRun": null
                        },
                        {
                          "playerId": 10835,
                          "player": "Brandon Allen",
                          "position": "QB",
                          "declinedPenalties": 0,
                          "draftSeason": 2016,
                          "eligibleSeason": 2016,
                          "franchiseId": 7,
                          "gradesOffense": 74.9,
                          "gradesOffensePenalty": 73.9,
                          "gradesPassBlock": null,
                          "gradesRunBlock": 60,
                          "jerseyNumber": "08",
                          "penalties": 0,
                          "playerGameCount": 1,
                          "snapCountsPass": 4,
                          "snapCountsPassBlock": 0,
                          "snapCountsPassRoute": 0,
                          "snapCountsRun": 3,
                          "snapCountsRunBlock": 9,
                          "snapCountsTotal": 16,
                          "snapCountsTotalPass": 4,
                          "snapCountsTotalRun": 12,
                          "team": "CIN",
                          "teamName": "CIN",
                          "gradesHandsFumble": 70.5,
                          "gradesPass": 70.1,
                          "gradesPassRoute": null,
                          "gradesRun": 65.7
                        }
                      ]
                    }
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/CsvTable"
                },
                "examples": {
                  "default": {
                    "summary": "Cincinnati Bengals offense, 2022 regular season",
                    "description": "`GET /v2/nfl/teams/cincinnati-bengals/reports/offense?season=2022&weekGroup=REG&format=csv`, cut to the header and the first 3 lines.",
                    "value": "playerId,player,position,declinedPenalties,draftSeason,eligibleSeason,franchiseId,gradesOffense,gradesOffensePenalty,gradesPassBlock,gradesRunBlock,jerseyNumber,penalties,playerGameCount,snapCountsPass,snapCountsPassBlock,snapCountsPassRoute,snapCountsRun,snapCountsRunBlock,snapCountsTotal,snapCountsTotalPass,snapCountsTotalRun,team,teamName,gradesHandsFumble,gradesPass,gradesPassRoute,gradesRun\r\n9719,La'el Collins,T,2,2015,2015,7,57.9,69.3,44.2,73.5,71,8,15,0,618,0,0,333,951,618,333,CIN,CIN,,,,\r\n10689,Tyler Boyd,WR,0,2016,2016,7,71.1,88.5,54.6,51.7,83,0,16,2,4,596,0,196,798,602,196,CIN,CIN,80.7,71.4,70.8,\r\n10835,Brandon Allen,QB,0,2016,2016,7,74.9,73.9,,60,08,0,1,4,0,0,3,9,16,4,12,CIN,CIN,70.5,70.1,,65.7\r\n"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "502": {
            "$ref": "#/components/responses/UpstreamError"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "504": {
            "$ref": "#/components/responses/UpstreamTimeout"
          }
        }
      }
    }
  },
  "components": {
    "parameters": {
      "league": {
        "name": "league",
        "in": "query",
        "description": "League slug for the leaderboard commands — exactly `nfl`, `ncaa`, `hs`, `aaf` and `ufl` are\nrecognised; anything else is rejected. Give it with `--season`, or give `--game` alone instead (the\nleague is resolved from the game); a request satisfying neither is refused with `400\ninvalid_parameter` before anything is fetched, and a blank value counts as missing for that rule.\nAccess is enforced per league: a caller with view-only rights gets a `200` with fields removed and a\n`restricted` key, not a `403`.",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "nfl",
            "ncaa",
            "hs",
            "aaf",
            "ufl"
          ]
        },
        "example": "nfl"
      },
      "league_required": {
        "name": "league",
        "in": "query",
        "description": "League slug, and the FIRST positional argument of every command that takes one — every command\nexcept the `facet` leaderboards, where `--league` stays a flag because `--game` alone is a complete\nrequest. Exactly `nfl`, `ncaa`, `hs`, `aaf` and `ufl` are recognised; anything else is rejected.\nOnly the four configured leagues — `nfl`, `ncaa`, `aaf`, `ufl` — are ever listed by `ref-leagues`,\nso `hs` is accepted here but has no discoverable metadata. Access is enforced per league: a caller\nwith view-only rights gets a `200` with fields removed and a `restricted` key, not a `403`.\nRequired: leave the positional out and restish refuses to send the request at all, and a blank value\nis refused with `400 invalid_parameter` naming this parameter, before anything is fetched.",
        "required": true,
        "schema": {
          "type": "string",
          "enum": [
            "nfl",
            "ncaa",
            "hs",
            "aaf",
            "ufl"
          ]
        },
        "example": "nfl"
      },
      "season": {
        "name": "season",
        "in": "query",
        "description": "Season, as a four-digit year. Integer-coerced by `ref-games`, the `team` family and the `player`\nfamilies, so this form is a single season — a comma-separated list does not survive the coercion.\nThe `facet` and `signature` families never coerce it and take a list instead; they use the\n`season_list` variant. On `player-position-pivot` exports, a request spanning too many seasons is\nrejected with a `422`.",
        "required": false,
        "schema": {
          "type": "integer"
        },
        "example": 2022
      },
      "season_required": {
        "name": "season",
        "in": "query",
        "description": "Season, as a four-digit year, taken as a positional argument. A single season only — this form is\ninteger-coerced, so a comma-separated list does not survive it. Required: leave the positional out\nand restish refuses to send the request at all, and a blank value is refused with `400\ninvalid_parameter` naming this parameter, before anything is fetched.",
        "required": true,
        "schema": {
          "type": "integer"
        },
        "example": 2022
      },
      "season_list": {
        "name": "season",
        "in": "query",
        "description": "Season for the leaderboard commands. A four-digit year, or a comma-separated list such as\n`2023,2024` — never coerced, so a list reaches the data intact. Give it with `--league`, or give\n`--game` alone instead; a request satisfying neither is refused with `400 invalid_parameter` before\nanything is fetched, and a blank value counts as missing for that rule. When `--game` carries the\nrequest, a blank season instead short-circuits to an empty 200 — the recorded behaviour of the data\nbehind this API. On an export, a value spanning too many seasons comes back `422`.",
        "required": false,
        "schema": {
          "type": "string",
          "pattern": "^(\\d{4}(,\\d{4})*)?$"
        },
        "example": "2022"
      },
      "season_list_required": {
        "name": "season",
        "in": "query",
        "description": "Season, and the SECOND positional argument of the four `signature` commands. A four-digit year, or a\ncomma-separated list of them such as `2023,2024` — the `signature` family never coerces this value,\nso a list reaches the data intact. Required: leave the positional out and restish refuses to send\nthe request at all, and a blank value is refused with `400 invalid_parameter` naming this parameter,\nbefore anything is fetched — the pattern below admits the blank string only because the shape is\nshared with the optional variant. On an export, a value spanning too many seasons comes back `422`.",
        "required": true,
        "schema": {
          "type": "string",
          "pattern": "^(\\d{4}(,\\d{4})*)?$"
        },
        "example": "2022"
      },
      "week": {
        "name": "week",
        "in": "query",
        "description": "Week filter. Never coerced except by `ref-games`, so a comma-separated list is accepted such as\n`1,2,3`. `ref-games` is the one exception — it integer-coerces the value and takes the\n`week_integer` variant. A present-but-empty value short-circuits `facet`/`signature` to an empty\n200. On exports, a value spanning too many weeks is rejected with a `422`. The ids are per league:\nNFL is `1`-`18` regular season, `28`, `29`, `30` and `32` postseason (Wild Card, Divisional,\nConference Championship, Super Bowl — there is no `31`) and `-1` to `-5` preseason (`-1` is the Hall\nof Fame game; the ids run backwards in time); NCAA is `0`-`16` regular season and `17`-`20`\npostseason (conference championships, bowls, semifinals, championship) with no preseason.\n`ref-leagues` lists each league's weeks.",
        "required": false,
        "schema": {
          "type": "string"
        },
        "example": "1"
      },
      "week_required": {
        "name": "week",
        "in": "query",
        "description": "Week, and the THIRD positional argument of the four `signature` commands. A week number, or a\ncomma-separated list such as `1,2,3` — the `signature` family never coerces this value, so a list\nreaches the data intact. Required: leave the positional out and restish refuses to send the request\nat all, and a blank value is refused with `400 invalid_parameter` naming this parameter, before\nanything is fetched. On an export, a value spanning too many weeks comes back `422`. The ids are per\nleague: NFL is `1`-`18` regular season, `28`, `29`, `30` and `32` postseason (Wild Card, Divisional,\nConference Championship, Super Bowl — there is no `31`) and `-1` to `-5` preseason (`-1` is the Hall\nof Fame game; the ids run backwards in time); NCAA is `0`-`16` regular season and `17`-`20`\npostseason (conference championships, bowls, semifinals, championship) with no preseason.\n`ref-leagues` lists each league's weeks.",
        "required": true,
        "schema": {
          "type": "string"
        },
        "example": "1"
      },
      "week_integer": {
        "name": "week",
        "in": "query",
        "description": "Week, and the THIRD positional argument of `games` — the one command that takes a single week number\nrather than a comma-separated list. Required: leave the positional out and restish refuses to send\nthe request at all, and a blank value is refused with `400 invalid_parameter` naming this parameter,\nbefore anything is fetched. Week ids are per league: NFL is `1`-`18` regular season, `28`, `29`,\n`30` and `32` postseason (Wild Card, Divisional, Conference Championship, Super Bowl — there is no\n`31`) and `-1` to `-5` preseason (`-1` is the Hall of Fame game; the ids run backwards in time);\nNCAA is `0`-`16` regular season and `17`-`20` postseason (conference championships, bowls,\nsemifinals, championship) with no preseason. `ref-leagues` lists each league's weeks.",
        "required": true,
        "schema": {
          "type": "integer"
        },
        "example": 1
      },
      "franchise_id": {
        "name": "franchise_id",
        "in": "query",
        "x-cli-name": "franchise",
        "description": "Franchise (team) id. Integer-coerced by `ref-games` and the `team` family, forwarded uncoerced by\n`facet`. Unlike `season` and `week` there is no list variant: nothing splits this value and no known\ncaller sends more than one, so a list form would be speculation. Sent as `--franchise` on the\ncommand line and as `franchise_id` on the wire. Ids come from `ref-leagues` / `team-list`.",
        "required": false,
        "schema": {
          "type": "integer"
        },
        "example": 7
      },
      "franchise_id_required": {
        "name": "franchise_id",
        "in": "query",
        "description": "Franchise (team) id, and the THIRD positional argument of `team-summary` — the report is\nfranchise-scoped, so there is no all-teams form of it. Ids come from `ref-leagues` / `team-list`.\nRequired: leave the positional out and restish refuses to send the request at all, and a blank value\nis refused with `400 invalid_parameter` naming this parameter, before anything is fetched.",
        "required": true,
        "schema": {
          "type": "integer"
        },
        "example": 7
      },
      "game_id": {
        "name": "game_id",
        "in": "query",
        "x-cli-name": "game",
        "description": "Single-game filter, `facet` family only, forwarded uncoerced. It is also read by the entitlement\ncheck, which resolves the game to its league and applies that league's restrictions — so a `game_id`\nfrom a league you cannot access is a 403 even when `league` says otherwise. Sent as `--game` on the\ncommand line and as `game_id` on the wire. Ids come from `ref-games`.",
        "required": false,
        "schema": {
          "type": "integer"
        },
        "example": 23108
      },
      "player_id": {
        "name": "player_id",
        "in": "query",
        "description": "Player id, taken as a positional argument. Ids come from `ref-players`. Required: leave the\npositional out and restish refuses to send the request at all, and a blank value is refused with\n`400 invalid_parameter` naming this parameter, before anything is fetched.",
        "required": true,
        "schema": {
          "type": "integer"
        },
        "example": 28022
      },
      "id": {
        "name": "id",
        "in": "query",
        "description": "Exact player-id lookup, `ref-players` only. Distinct from `player_id`, which the report families\nuse.",
        "required": false,
        "schema": {
          "type": "integer"
        },
        "example": 28022
      },
      "name": {
        "name": "name",
        "in": "query",
        "description": "Free-text player-name search, `ref-players` only. Forwarded to the upstream as `q`, not as `name`.",
        "required": false,
        "schema": {
          "type": "string"
        },
        "example": "burrow"
      },
      "career": {
        "name": "career",
        "in": "query",
        "description": "Career-aggregate toggle, on the player report operations only. Forwarded uncoerced and not validated\nhere — the upstream interprets it, and how it is interpreted depends on the report:\n\nOn the 13 reports whose body is a `PlayerReportSummary`, `career=true` replaces `season`: send\n`league` + `career=true` + `week` + `player_id` and the body switches from\n`subject`/`week_totals`/`weeks` to `subject`/`career`/`seasons`.\n\nOn the five that are not (`player-passing-concept`, `player-passing-depth`,\n`player-passing-pressure`, `player-receiving-depth`, `player-rushing-direction`) it changes nothing\n— the same body comes back — and `season` is still required: omitting it is a 400, with or without\n`career`.",
        "required": false,
        "schema": {
          "type": "string"
        }
      },
      "division": {
        "name": "division",
        "in": "query",
        "description": "NCAA division fan-out, `facet` family only, and **only honoured when `league=ncaa`** — for any other\nleague it is ignored entirely. Comma-separated; each element must be `fbs`, `fcs` or `lower` and\nmaps to a group of franchises: `fbs` covers FBS plus the all-star group, `fcs` covers FCS, and\n`lower` covers D2 and D3. Any other value fails with `502 upstream_error` — the request reaches the\ndata behind this API and that is where it breaks. Divisions are fetched in parallel and the results\nconcatenated, so a multi-division request can take substantially longer than a single-division one.",
        "required": false,
        "schema": {
          "type": "string"
        },
        "example": "fbs"
      },
      "export": {
        "name": "export",
        "in": "query",
        "description": "`--export true` — the literal string `true`, and nothing else — returns the report as `text/csv`\nrather than JSON. A restish client prints the raw file under `--rsh-print b`, or you can redirect\nthe body to a file; asking for `-o json` instead renders the whole export as a single JSON string,\nquoted and with its line breaks escaped. An unentitled request returns an empty body. Any other\nvalue returns JSON. Exports are metered separately from reads — a request spanning too many weeks or\nseasons is rejected with a `422`, and an exhausted export budget with a `429`. On\n`player-position-pivot`, `--export true` alone is not enough: `--player` and `--season` must be\npresent too, or JSON comes back instead.",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "true"
          ]
        }
      },
      "LeaguePath": {
        "name": "league",
        "in": "path",
        "required": true,
        "description": "League slug: `nfl` or `ncaa`. Anything else is refused with `400 invalid_parameter` before any\ndata is fetched. It is the first positional argument of every command on this surface.",
        "example": "nfl",
        "schema": {
          "type": "string",
          "enum": [
            "nfl",
            "ncaa"
          ]
        }
      },
      "SeasonQuery": {
        "name": "season",
        "in": "query",
        "required": false,
        "description": "Season, as a four-digit year: `2006` or later, and at most one year past the current season.\nLeft out, the current season is used — the season turns over on 1 March, so January and February\nstill belong to the previous year's season. A present-but-empty or non-numeric value is refused\nwith `400 invalid_parameter`: a default is applied only to a parameter that was omitted.",
        "example": 2022,
        "schema": {
          "type": "integer",
          "minimum": 2006
        }
      },
      "WeekGroupQuery": {
        "name": "weekGroup",
        "in": "query",
        "required": false,
        "description": "Which part of the season to cover: `REG` (regular season), `PO` (playoffs), `REGPO` (both,\nthe default) or `PRE` (the NFL preseason — NCAA has none, so `PRE` on an NCAA request is\nrefused with `400 invalid_parameter`). Cannot be combined with `weekIds` — naming both is\nrefused with `400 invalid_parameter`. Echoed back on the response as `weekGroup`.",
        "example": "REG",
        "schema": {
          "type": "string",
          "enum": [
            "PRE",
            "REG",
            "PO",
            "REGPO"
          ]
        }
      },
      "WeekIdsQuery": {
        "name": "weekIds",
        "in": "query",
        "required": false,
        "description": "Comma-separated week ids to cover instead of a whole `weekGroup` — `1,2,3` is the first three\nregular-season weeks. Every id must be a real week of the league's calendar; the list is\nde-duplicated and put in calendar order, and the response echoes it as `weekIds` in place of\n`weekGroup`. Cannot be combined with `weekGroup` — naming both is refused with\n`400 invalid_parameter`. The calendar is per league: NFL is `-1` to `-5` preseason (`-1` is\nthe Hall of Fame game, so the ids run backwards in time), `1`-`18` regular season and\n`28`, `29`, `30`, `32` postseason (Wild Card, Divisional, Conference Championship, Super\nBowl — there is no `31`); NCAA is `0`-`16` regular season and `17`-`20` postseason\n(conference championships, bowls, semifinals, championship) with no preseason. `17` and\n`18` are therefore regular-season weeks in NFL and postseason weeks in NCAA.",
        "example": "1,2,3",
        "schema": {
          "type": "string",
          "pattern": "^-?[0-9]+(,-?[0-9]+)*$"
        }
      },
      "TeamPath": {
        "name": "team",
        "in": "path",
        "required": true,
        "description": "The team, as its slug (`los-angeles-rams`) or its numeric franchise id (`26`) — both resolve\nthrough the league's team directory for the season, and both produce the same answer. Unknown\neither way is refused with `404 not_found`, and `details.team` echoes what was asked. The\nsecond positional argument of every per-team command.",
        "example": "cincinnati-bengals",
        "schema": {
          "type": "string",
          "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
        }
      },
      "WeekQuery": {
        "name": "week",
        "in": "query",
        "required": false,
        "description": "Narrow the report to one week of the `weekGroup` — or, with `weekTo`, to a span of weeks. A week\nid the group does not hold is refused with `400 invalid_parameter` naming the ids it does hold.\nThe span is taken by position in the group's calendar, not by id arithmetic: NFL `REGPO` runs\n`1`-`18` then `28`, `29`, `30`, `32`, so `week=18&weekTo=29` is three weeks; NCAA `REGPO` is\nthe contiguous `0`-`20`, with `17`-`20` the postseason.",
        "example": 1,
        "schema": {
          "type": "integer"
        }
      },
      "WeekToQuery": {
        "name": "weekTo",
        "in": "query",
        "required": false,
        "description": "The last week of a span that starts at `week`; requires `week`. A reversed span is read the\nright way round. Refused with `400 invalid_parameter` when `week` is absent.",
        "example": 4,
        "schema": {
          "type": "integer"
        }
      },
      "FormatQuery": {
        "name": "format",
        "in": "query",
        "required": false,
        "description": "The body's shape: `json` (the default) is the table object described under `application/json`;\n`csv` streams the same table as a file — header row of the column keys, one line per row — with\n`content-type: text/csv` and a `content-disposition` attachment name built from the command, the\nteam and the season. Metadata beside the table (`sos`, `groups`, `updatedAt`, the echoed week\nspan) is not in the file; ask for `json` when you need it. Errors keep the JSON envelope whatever\n`format` said. Any other value is refused with `400 invalid_parameter`.",
        "schema": {
          "type": "string",
          "enum": [
            "json",
            "csv"
          ],
          "default": "json"
        }
      },
      "TableQuery": {
        "name": "table",
        "in": "query",
        "required": false,
        "description": "Which of this operation's two tables to serve when `format=csv`: `rows` (the default) is the\nrusher × direction table, `totals` the team's per-direction totals. The JSON body always carries\nboth. Refused with `400 invalid_parameter` for any other value.",
        "schema": {
          "type": "string",
          "enum": [
            "rows",
            "totals"
          ],
          "default": "rows"
        }
      },
      "PositionReportPath": {
        "name": "report",
        "in": "path",
        "required": true,
        "description": "Which report: `offense`, `passing`, `passing-depth`, `passing-pressure`, `receiving`,\n`receiving-depth`, `rushing`, `blocking`, `pass-blocking`, `run-blocking`, `defense`,\n`run-defense`, `pass-rush`, `coverage`, `special-teams`, `kick-returns`, `field-goals`,\n`punting`, `kickoffs` — the same vocabulary as `team-report`. The second positional\nargument.",
        "example": "offense",
        "schema": {
          "type": "string",
          "enum": [
            "offense",
            "passing",
            "passing-depth",
            "passing-pressure",
            "receiving",
            "receiving-depth",
            "rushing",
            "blocking",
            "pass-blocking",
            "run-blocking",
            "defense",
            "run-defense",
            "pass-rush",
            "coverage",
            "special-teams",
            "kick-returns",
            "field-goals",
            "punting",
            "kickoffs"
          ]
        }
      },
      "TeamStatsCategory": {
        "name": "category",
        "in": "query",
        "required": false,
        "description": "Which stat category the table covers. `offense-overall-success` unless set. An unknown value is\nrefused with `400 invalid_parameter` — the message lists the accepted ones.",
        "schema": {
          "type": "string",
          "default": "offense-overall-success",
          "enum": [
            "offense-overall-success",
            "offense-passing",
            "offense-rushing",
            "defense-overall-success",
            "defense-passing",
            "defense-rushing",
            "defense-opponent-tendencies"
          ]
        }
      },
      "TeamStatsScope": {
        "name": "scope",
        "in": "query",
        "required": false,
        "description": "Which teams the ranks are computed against — and which rows come back: `league` (every team,\nthe default), a conference (`afc`, `nfc`) or a division (`afc-east` … `nfc-west`). Conference and\ndivision scopes are NFL-only; an unknown value is refused with `400 invalid_parameter`.",
        "schema": {
          "type": "string",
          "default": "league",
          "enum": [
            "league",
            "afc",
            "nfc",
            "afc-east",
            "afc-north",
            "afc-south",
            "afc-west",
            "nfc-east",
            "nfc-north",
            "nfc-south",
            "nfc-west"
          ]
        }
      },
      "LeadersGroupQuery": {
        "name": "group",
        "in": "query",
        "required": false,
        "description": "Which position group the leaders come from — `receiving` (the default), `passing`, `rushing` or\n`defense`. Anything else is refused with `400 invalid_parameter`.",
        "schema": {
          "type": "string",
          "default": "receiving",
          "enum": [
            "receiving",
            "passing",
            "rushing",
            "defense"
          ]
        }
      },
      "TeamReportPath": {
        "name": "report",
        "in": "path",
        "required": true,
        "description": "Which report: `offense`, `passing`, `passing-depth`, `passing-pressure`, `receiving`,\n`receiving-depth`, `rushing`, `blocking`, `pass-blocking`, `run-blocking`, `defense`,\n`run-defense`, `pass-rush`, `coverage`, `special-teams`, `kick-returns`, `field-goals`,\n`punting`, `kickoffs`. The third positional argument. Rushing direction is its own command,\n`team-rushing-direction`, because its answer is two tables.",
        "example": "offense",
        "schema": {
          "type": "string",
          "enum": [
            "offense",
            "passing",
            "passing-depth",
            "passing-pressure",
            "receiving",
            "receiving-depth",
            "rushing",
            "blocking",
            "pass-blocking",
            "run-blocking",
            "defense",
            "run-defense",
            "pass-rush",
            "coverage",
            "special-teams",
            "kick-returns",
            "field-goals",
            "punting",
            "kickoffs"
          ]
        }
      }
    },
    "schemas": {
      "ReportValue": {
        "description": "One report cell.\n\nThe column set is not fixed by this API: the upstream row is passed through untouched apart from\nflattening the `grades` / `snap_counts` / `*_grades` sub-objects into prefixed keys —\n`grades.offense` becomes `grades_offense`. Which columns a row carries therefore depends on the\nreport, the position, the query form and the caller's entitlement, and cannot be enumerated here.",
        "type": [
          "string",
          "number",
          "boolean",
          "null"
        ]
      },
      "RestrictedColumns": {
        "description": "The columns that were withheld from this response.\n\nPresent only for a caller with view-but-not-access rights on the league: only the report's\nallowlisted columns are kept, and this key lists every column that was withheld. A caller with full\naccess never sees the key at all, so its absence is the signal that nothing was stripped — never\nassume a missing column means the stat does not exist.\n\nEvery report operation can emit it. The `ref`, `team-list`, `player-seasons` and\n`player-snaps-summary` operations cannot: they carry no report envelope.",
        "type": "array",
        "items": {
          "type": "string"
        },
        "examples": [
          [
            "grades_offense",
            "grades_pass",
            "turnover_worthy_plays"
          ]
        ]
      },
      "ReportPlayerRow": {
        "description": "One player row of a report.\n\nColumns are data-driven (see `ReportValue`), so only the identity columns are named. Those are the\nones the API pins: `player`, `player_id`, `position`, `team_name` and `player_game_count` lead every\nper-player CSV header row, and `team`, `jersey_number`, `draft_season` and `eligible_season` are\nheld out of the stat columns — all nine are identity, not statistics. `status` appears on the\n`game_id` query form.\n\nEach is typed nullable: the value is the upstream row's, and nothing here guarantees it.",
        "type": "object",
        "properties": {
          "player": {
            "type": [
              "string",
              "null"
            ]
          },
          "player_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "position": {
            "type": [
              "string",
              "null"
            ]
          },
          "team": {
            "type": [
              "string",
              "null"
            ]
          },
          "team_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "franchise_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "jersey_number": {
            "description": "A string on the wire — `\"09\"`, `\"00\"`; leading zeros are meaningful.",
            "type": [
              "string",
              "null"
            ]
          },
          "player_game_count": {
            "type": [
              "integer",
              "null"
            ]
          },
          "draft_season": {
            "type": [
              "integer",
              "null"
            ]
          },
          "eligible_season": {
            "type": [
              "integer",
              "null"
            ]
          },
          "status": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "additionalProperties": {
          "$ref": "#/components/schemas/ReportValue"
        }
      },
      "ReportPlayerRows": {
        "description": "A report's row collection — one row per player matching the filters.\n\nEmpty (`[]`) rather than absent when there is nothing to report — the short-circuit responses still\ncarry the report key, with an empty array under it.",
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/ReportPlayerRow"
        }
      },
      "ReportTeamRow": {
        "description": "One team row of a report.\n\nThe team-level CSV header row pins `team_name`, `franchise_id` and `player_game_count` as the\nleading columns and holds `season_id` out of the stat columns; everything else is data-driven (see\n`ReportValue`). Used by `signature-pass-blocking-efficiency-line`, the one report with that header\nrow.",
        "type": "object",
        "properties": {
          "team_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "franchise_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "player_game_count": {
            "type": [
              "integer",
              "null"
            ]
          },
          "season_id": {
            "type": [
              "integer",
              "null"
            ]
          }
        },
        "additionalProperties": {
          "$ref": "#/components/schemas/ReportValue"
        }
      },
      "ReportTeamRows": {
        "description": "A team report's row collection. Empty rather than absent when there is nothing to report.",
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/ReportTeamRow"
        }
      },
      "CsvBody": {
        "description": "The `?export=true` body of the 33 CSV-capable operations (28 `facet`, 4 `signature` and\n`player-position-pivot`): a header row of comma-separated column names, then one row per record,\nCRLF-terminated. Three of the 33 answer with `CsvBodyHeaderless` instead — their report declares no\nheader row — and the two coverage matchup routes with `CsvBodySided`; neither is this shape.\n\n**Ask for JSON, not CSV.** `Accept: text/csv` is refused with a `406` before the export is reached,\n`export=true` or not. The export still arrives as `text/csv`, because the response sets that content\ntype itself.",
        "oneOf": [
          {
            "title": "EntitledExport",
            "description": "The export itself: a header row, then one row per record, CRLF-terminated.",
            "type": "string",
            "minLength": 1,
            "pattern": "^[^\\r\\n,]+(,[^\\r\\n,]*)+\\r?\\n"
          },
          {
            "title": "UnentitledExport",
            "description": "An empty body. A caller with view-but-not-access rights on this league gets a `200 text/csv` with a\n`Content-Disposition` and no bytes at all, rather than a `403`. Zero bytes is therefore \"you are not\nentitled to this export\", never \"no rows matched\" — an entitled export with no matching records\nstill carries its header row.",
            "type": "string",
            "maxLength": 0
          }
        ]
      },
      "CsvBodySided": {
        "description": "The `?export=true` body of `facet-receiving-coverage` and its alias `facet-defense-coverage-matchup`\n— the one report whose JSON is three row collections (`ReceivingCoverageStats`) rather than one. The\nexport flattens them into one sheet: the header is always `side,player_id,coverage_player_id`\nfollowed by the remaining columns sorted by name, and every row names its collection in `side`\n(`defenders`, `receivers` or `versus`). `coverage_player_id` is set on `versus` rows only.\n\n`pattern` pins that fixed header prefix, so a blank-line export (what these routes served before the\nfix), an HTML error page and any other report's sheet all fail to validate. A zero-row query returns\nan empty file, as every other export does, so the empty string is allowed and `minLength` is absent\non purpose.\n\nNot `CsvBody`: that schema's header line is any comma-separated list, and a client reading this\nexport should know the first three columns up front.",
        "type": "string",
        "pattern": "^($|side,player_id,coverage_player_id(,[^\\r\\n,]*)*\\r?\\n)"
      },
      "CsvBodyHeaderless": {
        "description": "The `?export=true` body of the three operations whose report declares no CSV header row. The export\nis one blank CRLF line per record, no header row at all, and the attachment is always named\n`download.csv`.\n\nThree reports, three operations: `offense_summary`, `passing_detail` and `rushing_direction`.\n`facet-receiving-coverage` and its alias `facet-defense-coverage-matchup` used to be here too; their\nexport now carries a header row (`CsvBodySided`).\n\nThis is a real `200 text/csv` with a real `Content-Disposition`, which is why those routes stay in\nthe 33: the response is well-formed, it just carries no columns. A client should say so rather than\npretend the column set exists. There is no header line to assert, so `CsvBody`'s pattern would\nreject every one of them — but \"no header\" is not \"anything\": an empty column list can only ever\nproduce nothing at all, or CRLF-terminated blank lines, one per record. `pattern` says exactly that,\nso an upstream HTML error page no longer validates as a successful export. `minLength` is still\nabsent on purpose: a zero-row query returns an empty file, and that is a valid answer.\n\nA zero-byte body is indistinguishable from a headerless export with no records: both are nothing at\nall. Treat an empty response from one of these three as \"no columns and possibly no rows\", and use\nthe JSON form of the operation when the difference matters.",
        "type": "string",
        "pattern": "^(\\r\\n)*$"
      },
      "LeagueWeek": {
        "description": "One week of a league's calendar.",
        "type": "object",
        "required": [
          "id",
          "name",
          "abbreviation",
          "display_order",
          "pre_season",
          "regular_season",
          "post_season",
          "all_star"
        ],
        "properties": {
          "id": {
            "description": "Week id. Negative for preseason (Hall of Fame is -1), 1-18 regular season, 28/29/30/32 postseason on\nthe NFL calendar.",
            "type": "integer"
          },
          "name": {
            "type": "string",
            "examples": [
              "Week 1"
            ]
          },
          "abbreviation": {
            "type": "string",
            "examples": [
              "1",
              "HF"
            ]
          },
          "display_order": {
            "type": "integer"
          },
          "pre_season": {
            "type": "boolean"
          },
          "regular_season": {
            "type": "boolean"
          },
          "post_season": {
            "type": "boolean"
          },
          "all_star": {
            "type": "boolean"
          }
        },
        "additionalProperties": true
      },
      "LeagueWeekGroup": {
        "description": "A named bundle of week ids. The five candidates are PRE, REG, PO, REGPO and AS; a group with no\nweeks is dropped, so NFL has four and a league with all-star weeks has five. `default` is hard-coded\ntrue on REGPO only.",
        "type": "object",
        "required": [
          "label",
          "value",
          "default",
          "weeks"
        ],
        "properties": {
          "label": {
            "type": "string",
            "examples": [
              "Reg + Post"
            ]
          },
          "value": {
            "type": "string",
            "enum": [
              "PRE",
              "REG",
              "PO",
              "REGPO",
              "AS"
            ]
          },
          "default": {
            "type": "boolean"
          },
          "weeks": {
            "type": "array",
            "items": {
              "type": "integer"
            }
          }
        },
        "additionalProperties": false
      },
      "League": {
        "description": "One league the caller may view.\n\nCarries `id`, `name` and `abbreviation` plus `weeks`, `seasons`, `default_season`, `default_week`,\n`default_week_group`, `slug` and `week_groups`. Season 2005 is withheld from `seasons` deliberately:\nonly a single game exists in it.",
        "type": "object",
        "required": [
          "id",
          "name",
          "abbreviation",
          "slug",
          "seasons",
          "weeks",
          "week_groups",
          "default_season",
          "default_week",
          "default_week_group"
        ],
        "properties": {
          "id": {
            "type": "integer",
            "examples": [
              1
            ]
          },
          "name": {
            "type": "string",
            "examples": [
              "Pro Football"
            ]
          },
          "abbreviation": {
            "type": "string",
            "examples": [
              "NFL"
            ]
          },
          "slug": {
            "description": "Downcased `abbreviation` — this is the value the `league` query parameter takes.",
            "type": "string",
            "examples": [
              "nfl"
            ]
          },
          "seasons": {
            "description": "Seasons with stats, newest first.",
            "type": "array",
            "items": {
              "type": "integer"
            }
          },
          "default_season": {
            "type": "integer"
          },
          "default_week": {
            "type": "integer"
          },
          "default_week_group": {
            "description": "The `week_groups[].value` containing `default_week`, falling back to `REGPO`.",
            "type": "string"
          },
          "weeks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LeagueWeek"
            }
          },
          "week_groups": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LeagueWeekGroup"
            }
          }
        },
        "additionalProperties": true
      },
      "LeaguesResponse": {
        "description": "`ref-leagues`. A `leagues` array carrying the subset of the four configured leagues — nfl, ncaa,\naaf, ufl — the caller may view. A signed-in caller of any tier gets a non-empty list, so an empty\narray means the caller may view nothing, not that the service is down.",
        "type": "object",
        "required": [
          "leagues"
        ],
        "properties": {
          "leagues": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/League"
            }
          }
        },
        "additionalProperties": false
      },
      "GameTeam": {
        "description": "The home/away team block on a `ref-games` row.",
        "type": "object",
        "required": [
          "franchise_id"
        ],
        "properties": {
          "franchise_id": {
            "type": "integer"
          },
          "city": {
            "type": [
              "string",
              "null"
            ]
          },
          "nickname": {
            "type": [
              "string",
              "null"
            ]
          },
          "abbreviation": {
            "description": "PFF's abbreviation (six characters at NCAA scale — `BAMACT`), not the broadcast one.",
            "type": [
              "string",
              "null"
            ]
          },
          "display_abbreviation": {
            "type": [
              "string",
              "null"
            ]
          },
          "mid_abbreviation": {
            "type": [
              "string",
              "null"
            ]
          },
          "slug": {
            "type": [
              "string",
              "null"
            ]
          },
          "color_metadata": {
            "description": "Null on NFL rows; an object of colour refs on the `team-list` payload (see `DirectoryTeam`).",
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "type": [
                "string",
                "null"
              ]
            }
          }
        },
        "additionalProperties": true
      },
      "GameLeague": {
        "description": "The league block carried inline on a `ref-games` row (`league_id` 1 = NFL, 2 = NCAA).",
        "type": "object",
        "required": [
          "id",
          "abbreviation",
          "name"
        ],
        "properties": {
          "id": {
            "type": "integer"
          },
          "abbreviation": {
            "type": "string",
            "examples": [
              "NFL"
            ]
          },
          "name": {
            "type": "string",
            "examples": [
              "Pro Football"
            ]
          }
        },
        "additionalProperties": true
      },
      "Game": {
        "description": "One game result, passed through unshaped — this is the upstream row.",
        "type": "object",
        "required": [
          "id",
          "season",
          "week",
          "start",
          "home_franchise_id",
          "away_franchise_id"
        ],
        "properties": {
          "id": {
            "description": "Game id — the value the `game_id` query parameter takes.",
            "type": "integer"
          },
          "season": {
            "type": "integer"
          },
          "week": {
            "type": "integer"
          },
          "start": {
            "description": "Kickoff, UTC.",
            "type": "string",
            "format": "date-time",
            "examples": [
              "2025-09-07T17:00:00Z"
            ]
          },
          "league": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/GameLeague"
              },
              {
                "type": "null"
              }
            ]
          },
          "league_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "lock_status": {
            "description": "Charting state of the game: `processed` means it has been fully charted. The value set is\nupstream-owned and deliberately not enumerated here.",
            "type": [
              "string",
              "null"
            ],
            "examples": [
              "processed"
            ]
          },
          "has_stats": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "stadium_id": {
            "description": "An id only — there is no stadium lookup in this API, so there is no name to join to.",
            "type": [
              "integer",
              "null"
            ]
          },
          "home_franchise_id": {
            "type": "integer"
          },
          "away_franchise_id": {
            "type": "integer"
          },
          "home_team": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/GameTeam"
              },
              {
                "type": "null"
              }
            ]
          },
          "away_team": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/GameTeam"
              },
              {
                "type": "null"
              }
            ]
          },
          "score": {
            "description": "Null before kickoff.",
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "home_team": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "away_team": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  }
                },
                "additionalProperties": true
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": true
      },
      "GamesResponse": {
        "description": "`ref-games`. A `games` array.",
        "type": "object",
        "required": [
          "games"
        ],
        "properties": {
          "games": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Game"
            }
          }
        },
        "additionalProperties": false
      },
      "PlayerTeam": {
        "description": "A team block on a `ref-players` row, carrying `city`, `nickname`, `abbreviation`, `slug`,\n`primary_color` and `secondary_color`, plus `id` from the team's `franchise_id`. Null when the\nroster row's franchise has no match in the response's team list.",
        "type": "object",
        "required": [
          "id",
          "city",
          "nickname",
          "abbreviation",
          "slug",
          "primary_color",
          "secondary_color"
        ],
        "properties": {
          "id": {
            "description": "The franchise id — renamed from `franchise_id` by the view.",
            "type": "integer"
          },
          "city": {
            "type": [
              "string",
              "null"
            ]
          },
          "nickname": {
            "type": [
              "string",
              "null"
            ]
          },
          "abbreviation": {
            "type": [
              "string",
              "null"
            ]
          },
          "slug": {
            "type": [
              "string",
              "null"
            ]
          },
          "primary_color": {
            "type": [
              "string",
              "null"
            ],
            "examples": [
              "#003594"
            ]
          },
          "secondary_color": {
            "type": [
              "string",
              "null"
            ],
            "examples": [
              "#FFA300"
            ]
          }
        },
        "additionalProperties": false
      },
      "PlayerDraft": {
        "description": "Draft record. Null when the roster row has no draft, or a draft with no `franchise_id` — undrafted\nplayers. `round` and `selection` are null on an undrafted-free-agent record (`type: \"FA\"`) that\nstill carries a season.",
        "type": "object",
        "required": [
          "team",
          "round",
          "season",
          "selection",
          "type"
        ],
        "properties": {
          "team": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PlayerTeam"
              },
              {
                "type": "null"
              }
            ]
          },
          "round": {
            "type": [
              "integer",
              "null"
            ]
          },
          "season": {
            "type": [
              "integer",
              "null"
            ]
          },
          "selection": {
            "type": [
              "integer",
              "null"
            ]
          },
          "type": {
            "description": "`AD` is an amateur-draft entry, `FA` a free-agent one. The value set is upstream-owned and\ndeliberately not enumerated here.",
            "type": [
              "string",
              "null"
            ],
            "examples": [
              "AD",
              "FA"
            ]
          }
        },
        "additionalProperties": false
      },
      "PlayerSearchRow": {
        "description": "One `ref-players` hit. The key set is fixed — unlike the report rows, this shape is the API's own,\nnot the upstream's. Rows are sorted by `[last_name, first_name]`.",
        "type": "object",
        "required": [
          "id",
          "first_name",
          "last_name",
          "position",
          "jersey_number",
          "dob",
          "weight",
          "height",
          "speed",
          "team",
          "draft",
          "college",
          "current_class",
          "current_eligible_year"
        ],
        "properties": {
          "id": {
            "description": "Player id — the value the `player_id` (and `id`) query parameters take.",
            "type": "integer"
          },
          "first_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "last_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "position": {
            "type": [
              "string",
              "null"
            ],
            "examples": [
              "QB"
            ]
          },
          "jersey_number": {
            "description": "A string — leading zeros are meaningful.",
            "type": [
              "string",
              "null"
            ],
            "examples": [
              "09"
            ]
          },
          "dob": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "examples": [
              "1988-02-07"
            ]
          },
          "weight": {
            "description": "Pounds.",
            "type": [
              "integer",
              "null"
            ]
          },
          "height": {
            "description": "Packed as feet × 100 + inches — `601` is 6′1″.",
            "type": [
              "integer",
              "null"
            ]
          },
          "speed": {
            "type": [
              "number",
              "null"
            ]
          },
          "team": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PlayerTeam"
              },
              {
                "type": "null"
              }
            ]
          },
          "draft": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PlayerDraft"
              },
              {
                "type": "null"
              }
            ]
          },
          "college": {
            "description": "The college *name*, flattened from the roster row's college struct.",
            "type": [
              "string",
              "null"
            ]
          },
          "current_class": {
            "type": [
              "string",
              "null"
            ]
          },
          "current_eligible_year": {
            "type": [
              "integer",
              "null"
            ]
          }
        },
        "additionalProperties": false
      },
      "PlayersResponse": {
        "description": "`ref-players`. A `players` array, empty when nothing matches; the `name` query parameter reaches the\nupstream as `q`.",
        "type": "object",
        "required": [
          "players"
        ],
        "properties": {
          "players": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PlayerSearchRow"
            }
          }
        },
        "additionalProperties": false
      },
      "FranchiseGroup": {
        "description": "A franchise grouping — conference, division, NCAA tier. Derived from the season's teams, and also\ncarried inline on each team's `groups`. `heirarchy` is the ancestor path *including* the group's own\nid, outermost first — NFC East is `[6, 7]`: the conference id, then its own — and yes, the wire\nreally does spell it that way. NCAA nests one level deeper (tier, conference, sub-division).",
        "type": "object",
        "required": [
          "id",
          "name",
          "slug",
          "heirarchy"
        ],
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string",
            "examples": [
              "NFC East"
            ]
          },
          "slug": {
            "type": "string",
            "examples": [
              "nfc-east"
            ]
          },
          "heirarchy": {
            "type": "array",
            "items": {
              "type": "integer"
            }
          }
        },
        "additionalProperties": true
      },
      "DirectoryTeam": {
        "description": "One `teams[]` entry. Passed through untouched, so this is the upstream row; identity fields are\nnullable because exhibition and historical franchises arrive half-filled. `groups` is the team's\nfull ancestor chain, not just its leaf group.",
        "type": "object",
        "required": [
          "franchise_id"
        ],
        "properties": {
          "franchise_id": {
            "description": "The value the `franchise_id` query parameter takes.",
            "type": "integer"
          },
          "slug": {
            "type": [
              "string",
              "null"
            ]
          },
          "city": {
            "type": [
              "string",
              "null"
            ]
          },
          "nickname": {
            "type": [
              "string",
              "null"
            ]
          },
          "abbreviation": {
            "type": [
              "string",
              "null"
            ]
          },
          "display_abbreviation": {
            "type": [
              "string",
              "null"
            ]
          },
          "mid_abbreviation": {
            "type": [
              "string",
              "null"
            ]
          },
          "gsis_abbreviation": {
            "type": [
              "string",
              "null"
            ]
          },
          "primary_color": {
            "type": [
              "string",
              "null"
            ]
          },
          "secondary_color": {
            "type": [
              "string",
              "null"
            ]
          },
          "color_metadata": {
            "description": "The full colour set (`background_color_ref`, `helmet_color_ref`, `jersey_color_ref`, …). Keys are\nupstream-owned; the values are hex colour strings.",
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          "league": {
            "type": [
              "string",
              "null"
            ],
            "examples": [
              "NFL"
            ]
          },
          "league_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "start_season": {
            "type": [
              "integer",
              "null"
            ]
          },
          "end_season": {
            "description": "`3000` on a current franchise — the upstream's open-ended sentinel.",
            "type": [
              "integer",
              "null"
            ]
          },
          "updated_at": {
            "description": "A naive timestamp — no offset, microsecond precision. Deliberately not `format: date-time`, which it\nwould fail.",
            "type": [
              "string",
              "null"
            ]
          },
          "groups": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FranchiseGroup"
            }
          }
        },
        "additionalProperties": true
      },
      "ShortGame": {
        "description": "A game trimmed to five fields. `team-list` reduces every game to `id`, `away_franchise_id`,\n`home_franchise_id`, `week` and `start` — so a `team-list` game carries no score, no teams and no\nleague, and `ref-games` is where those live.",
        "type": "object",
        "required": [
          "id",
          "away_franchise_id",
          "home_franchise_id",
          "week",
          "start"
        ],
        "properties": {
          "id": {
            "type": "integer"
          },
          "away_franchise_id": {
            "type": "integer"
          },
          "home_franchise_id": {
            "type": "integer"
          },
          "week": {
            "type": "integer"
          },
          "start": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "TeamsResponse": {
        "description": "`team-list`. `teams`, `franchise_groups` and `games`: the season's franchises, the grouping tree\nderived from them, and the season's whole schedule trimmed to five fields. No report envelope and no\n`restricted` key — this operation carries neither.",
        "type": "object",
        "required": [
          "teams",
          "franchise_groups",
          "games"
        ],
        "properties": {
          "teams": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DirectoryTeam"
            }
          },
          "franchise_groups": {
            "description": "Every group any of the returned teams belongs to, deduplicated and flattened.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FranchiseGroup"
            }
          },
          "games": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ShortGame"
            }
          }
        },
        "additionalProperties": false
      },
      "TeamOverviewResponse": {
        "description": "`team-overview`. Report envelope keyed `team_overview` — one row per team.\n\nIdentity is `franchise_id`, `abbreviation` and `name`; `wins`, `losses`, `ties`, `points_scored` and\n`points_allowed` are stat columns like any other and are *omitted*, not nulled, for a season that\nhas not kicked off.",
        "type": "object",
        "required": [
          "team_overview"
        ],
        "properties": {
          "team_overview": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "franchise_id": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "abbreviation": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "additionalProperties": {
                "$ref": "#/components/schemas/ReportValue"
              }
            }
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "TeamSummaryResponse": {
        "description": "`team-summary`. Report envelope keyed `team_summary` — one row per game in the requested week set,\ni.e. the team's schedule with results, not a season aggregate.",
        "type": "object",
        "required": [
          "team_summary"
        ],
        "properties": {
          "team_summary": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "franchise_id": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "game_id": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "week": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "start": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "opponent": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "opponent_franchise_id": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "home": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "away": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "lock_status": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "points_scored": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "points_allowed": {
                  "type": [
                    "integer",
                    "null"
                  ]
                }
              },
              "additionalProperties": {
                "$ref": "#/components/schemas/ReportValue"
              }
            }
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "PlayerSeasonsResponse": {
        "description": "`player-seasons`. Raw upstream JSON: no report envelope and no allowlisting, so there is never a\n`restricted` key. Newest season first.",
        "type": "object",
        "required": [
          "seasons"
        ],
        "properties": {
          "seasons": {
            "type": "array",
            "items": {
              "type": "integer"
            }
          }
        },
        "additionalProperties": false
      },
      "PlayerSnapsSummaryResponse": {
        "description": "`player-snaps-summary`. Raw upstream JSON: no report envelope, no allowlisting and no `restricted`\nkey. This is the ONE place `snap_counts` survives as a nested object — every report operation\nflattens it to `snap_counts_*` columns, and this one does not.",
        "type": "object",
        "required": [
          "snaps"
        ],
        "properties": {
          "snaps": {
            "type": "object",
            "properties": {
              "season": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "snap_counts": {
                "description": "Snap totals by type — `offense`, `defense`, `special_teams`, `pass`, `pass_route`, `pass_block`,\n`run`, `run_block`, `pass_rush`, `run_defense`, `coverage`, the kicking-game types. Upstream-owned,\nso enumerated by example only.",
                "type": "object",
                "additionalProperties": {
                  "type": [
                    "number",
                    "null"
                  ]
                }
              }
            },
            "additionalProperties": true
          }
        },
        "additionalProperties": false
      },
      "PositionPivotWeekRow": {
        "description": "One week of a position's snap counts. The CSV export flattens exactly these rows and names their\ncolumns: `position_group`, `position`, `week_id`, then the snap types.",
        "type": "object",
        "properties": {
          "week_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "position_group": {
            "type": [
              "string",
              "null"
            ]
          },
          "position": {
            "type": [
              "string",
              "null"
            ]
          },
          "off_def": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "additionalProperties": {
          "$ref": "#/components/schemas/ReportValue"
        }
      },
      "PositionPivotPosition": {
        "description": "One alignment within a display group, with its per-week snap counts. The CSV export reaches its rows\nthrough `positions` then `weeks`.",
        "type": "object",
        "properties": {
          "group": {
            "type": [
              "string",
              "null"
            ]
          },
          "position": {
            "type": [
              "string",
              "null"
            ]
          },
          "weeks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PositionPivotWeekRow"
            }
          }
        },
        "additionalProperties": true
      },
      "PositionPivotGroup": {
        "description": "One display group (QB, WR, …). There is no rollup row: group totals are summed from\n`positions[].weeks[]`, which is what the CSV export does.",
        "type": "object",
        "properties": {
          "group": {
            "type": [
              "string",
              "null"
            ]
          },
          "group_order": {
            "type": [
              "integer",
              "null"
            ]
          },
          "positions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PositionPivotPosition"
            }
          }
        },
        "additionalProperties": true
      },
      "PositionPivotResponse": {
        "description": "`player-position-pivot` (JSON variant). Report envelope keyed `snaps`.\n\nThis is the JSON clause. The CSV needs `--export true` AND `--player` AND `--season` together; with\n`--export true` but no `--player` the request falls through to here and returns JSON with a `200` —\nno error, no CSV. An unentitled export returns an empty body — no header row — while this JSON still\ncarries the groups with their stat columns stripped; an entitled export with no matching records\nstill carries its header row.",
        "type": "object",
        "required": [
          "snaps"
        ],
        "properties": {
          "snaps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PositionPivotGroup"
            }
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "PlayerReportSubject": {
        "description": "The query echo on a player summary report: who was asked about, over what, and which grade facets\nthe report carries. `grade_keys` names the `grades_*` columns the rows can hold.",
        "type": "object",
        "properties": {
          "player_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "league_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "season": {
            "description": "Absent in career mode (`career=true`), present otherwise.",
            "type": [
              "integer",
              "null"
            ]
          },
          "week": {
            "description": "The requested week ids — STRINGS here, integers on the week rows.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "grade_keys": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": true
      },
      "PlayerReportGameContext": {
        "description": "The game a week row belongs to. Its fields are repeated flat on the parent row.",
        "type": "object",
        "properties": {
          "game_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "week": {
            "type": [
              "integer",
              "null"
            ]
          },
          "home_franchise_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "away_franchise_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "home_team_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "away_team_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "player_franchise_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "position": {
            "type": [
              "string",
              "null"
            ]
          },
          "status": {
            "description": "`S` means the player started. The value set is upstream-owned and deliberately not enumerated here.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "additionalProperties": {
          "$ref": "#/components/schemas/ReportValue"
        }
      },
      "PlayerReportWeekRow": {
        "description": "One week of a player summary report: the game context (flat, and repeated as a nested `game` object)\nplus that week's stat and grade columns.",
        "type": "object",
        "properties": {
          "week": {
            "type": [
              "integer",
              "null"
            ]
          },
          "game_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "game": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PlayerReportGameContext"
              },
              {
                "type": "null"
              }
            ]
          },
          "player_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "player_franchise_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "home_franchise_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "away_franchise_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "home_team_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "away_team_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "jersey_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "position": {
            "type": [
              "string",
              "null"
            ]
          },
          "status": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "additionalProperties": {
          "$ref": "#/components/schemas/ReportValue"
        }
      },
      "PlayerReportWeekTotalRow": {
        "description": "The aggregate over the requested week set, one row per franchise the player appeared for — two rows\nfor a mid-season trade, each naming its `franchise_id`, and no combined row (verified live\n2026-09-09 on player 63707). A single-team player gets one row.",
        "type": "object",
        "properties": {
          "season": {
            "type": [
              "integer",
              "null"
            ]
          },
          "league_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "franchise_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "team_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "player_game_count": {
            "type": [
              "integer",
              "null"
            ]
          }
        },
        "additionalProperties": {
          "$ref": "#/components/schemas/ReportValue"
        }
      },
      "PlayerReportSeasonRow": {
        "description": "One season of a career-mode report. `franchise_id` is an ARRAY here, not the integer it is\neverywhere else: a season split across teams lists every franchise.",
        "type": "object",
        "properties": {
          "season": {
            "type": [
              "integer",
              "null"
            ]
          },
          "franchise_id": {
            "type": "array",
            "items": {
              "type": "integer"
            }
          }
        },
        "additionalProperties": {
          "$ref": "#/components/schemas/ReportValue"
        }
      },
      "PlayerReportSummary": {
        "description": "A player summary report body, in one of two modes.\n\n**Season mode** (the default): `subject`, `week_totals` (the one aggregate row over the requested\nweeks) and `weeks` (one row per game).\n\n**Career mode**: `subject`, `career` (the all-time aggregate) and `seasons` (one row per season).\n\nThe two sets do not overlap, and the mode is chosen upstream off the `career` parameter, so every\nkey is optional here.\n\nCareer mode replaces `season` rather than joining it: send `league` + `career=true` + `week` +\n`player_id`, with no season at all. The five player reports that are NOT this shape behave\ndifferently again: `career=true` changes nothing there, and omitting `season` is a 400.",
        "type": "object",
        "properties": {
          "subject": {
            "$ref": "#/components/schemas/PlayerReportSubject"
          },
          "week_totals": {
            "type": "array",
            "description": "One row per franchise represented in the requested weeks — a mid-season trade is two rows, one per\nside, with no combined row; a single-team player gets one.",
            "items": {
              "$ref": "#/components/schemas/PlayerReportWeekTotalRow"
            }
          },
          "weeks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PlayerReportWeekRow"
            }
          },
          "career": {
            "description": "Career aggregate — career mode only.",
            "type": "object",
            "properties": {
              "player_id": {
                "type": [
                  "integer",
                  "null"
                ]
              }
            },
            "additionalProperties": {
              "$ref": "#/components/schemas/ReportValue"
            }
          },
          "seasons": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PlayerReportSeasonRow"
            }
          }
        },
        "additionalProperties": true
      },
      "PlayerReportDirections": {
        "description": "The `player-rushing-direction` body: one row per rushing direction, and no `subject` block — this\npath is a detail query, not one of the graded summaries.\n\nNote the contrast with `facet-rushing-direction`, where the same `rushing_direction_stats` key holds\nan ARRAY of player rows, each with its own nested `directions`.",
        "type": "object",
        "properties": {
          "player_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "directions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RushingDirectionEntry"
            }
          }
        },
        "additionalProperties": true
      },
      "RushingDirectionEntry": {
        "description": "One (player, direction) split — `RE`, `LT`, `LG`, `ML`, `RG`, `JS-L`, `QBSc`, … The direction\nvocabulary is upstream-owned and deliberately not enumerated here.",
        "type": "object",
        "properties": {
          "direction": {
            "type": [
              "string",
              "null"
            ]
          },
          "player_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "franchise_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "team_name": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "additionalProperties": {
          "$ref": "#/components/schemas/ReportValue"
        }
      },
      "FacetRushingDirectionRow": {
        "description": "One player of the `facet-rushing-direction` leaderboard. Identical to `ReportPlayerRow` except for\nthe nested `directions` array, which is why this report declares no CSV header row and exports a\nheaderless CSV (see `CsvBody`).",
        "type": "object",
        "properties": {
          "player": {
            "type": [
              "string",
              "null"
            ]
          },
          "player_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "position": {
            "type": [
              "string",
              "null"
            ]
          },
          "team": {
            "type": [
              "string",
              "null"
            ]
          },
          "team_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "franchise_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "jersey_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "player_game_count": {
            "type": [
              "integer",
              "null"
            ]
          },
          "draft_season": {
            "type": [
              "integer",
              "null"
            ]
          },
          "eligible_season": {
            "type": [
              "integer",
              "null"
            ]
          },
          "status": {
            "type": [
              "string",
              "null"
            ]
          },
          "total_attempts": {
            "description": "The player's attempts across every direction. Premium-gated (it is listed in `restricted`), and not\nguaranteed on the wire — consumers should fall back to the sum of `directions[].attempts`, which is\nwhat it is derived from.",
            "type": [
              "integer",
              "null"
            ]
          },
          "directions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RushingDirectionEntry"
            }
          }
        },
        "additionalProperties": {
          "$ref": "#/components/schemas/ReportValue"
        }
      },
      "TeamDirectionRow": {
        "description": "One (franchise, direction) team split, carried under the report's second collection key.\n\nCaveat: the `division` fan-out drops it. That form rebuilds the body from its parallel chunks under\nthe primary report key only — so `league=ncaa&division=…` returns `rushing_direction_stats` alone.\nThat same rebuild CONCATENATES the chunks without deduping, so a multi-division value repeats every\nplayer row once per division: `division=fbs,fcs` on franchise 194 / 2024 returned 36 rows for 18\nplayers, byte-identical in pairs, where the unnarrowed call returned 18 rows and both collections\n(live-probed 2026-09-01). Send no `division` on this report.",
        "type": "object",
        "properties": {
          "direction": {
            "type": [
              "string",
              "null"
            ]
          },
          "franchise_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "team_name": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "additionalProperties": {
          "$ref": "#/components/schemas/ReportValue"
        }
      },
      "ReceivingCoverageStats": {
        "description": "The `facet-receiving-coverage` body — three parallel row collections rather than one, which is why\nits CSV is a sided sheet: the collections flatten into rows with a leading `side` column, then\n`player_id` and `coverage_player_id`, then the remaining columns sorted by name.\n\n`defenders` and `receivers` are per-player rows; `versus` is per (receiver, coverage defender)\nmatchup, keyed `player_id` + `coverage_player_id`.",
        "type": "object",
        "properties": {
          "defenders": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "receivers": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "versus": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "player_id": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "coverage_player_id": {
                  "type": [
                    "integer",
                    "null"
                  ]
                }
              },
              "additionalProperties": {
                "$ref": "#/components/schemas/ReportValue"
              }
            }
          }
        },
        "additionalProperties": true
      },
      "FacetOffenseSummaryResponse": {
        "description": "`facet-offense-summary`.\n\nReport envelope: the body is keyed `offense_summary`, and the upstream payload is returned under\nthat key unchanged apart from grade flattening and entitlement allowlisting.",
        "type": "object",
        "required": [
          "offense_summary"
        ],
        "properties": {
          "offense_summary": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetOffenseBlockingResponse": {
        "description": "`facet-offense-blocking`.\n\nReport envelope: the body is keyed `blocking_summary`, and the upstream payload is returned under\nthat key unchanged apart from grade flattening and entitlement allowlisting.\n\nRow shape is not a guess: this report has a CSV header row, and deriving one requires a list of row\nobjects — a body of any other shape would fail on every export.",
        "type": "object",
        "required": [
          "blocking_summary"
        ],
        "properties": {
          "blocking_summary": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetOffensePassBlockingResponse": {
        "description": "`facet-offense-pass-blocking`.\n\nReport envelope: the body is keyed `pass_blocking`, and the upstream payload is returned under that\nkey unchanged apart from grade flattening and entitlement allowlisting.\n\nRow shape is not a guess: this report has a CSV header row, and deriving one requires a list of row\nobjects — a body of any other shape would fail on every export.",
        "type": "object",
        "required": [
          "pass_blocking"
        ],
        "properties": {
          "pass_blocking": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetOffenseRunBlockingResponse": {
        "description": "`facet-offense-run-blocking`.\n\nReport envelope: the body is keyed `run_blocking`, and the upstream payload is returned under that\nkey unchanged apart from grade flattening and entitlement allowlisting.\n\nRow shape is not a guess: this report has a CSV header row, and deriving one requires a list of row\nobjects — a body of any other shape would fail on every export.",
        "type": "object",
        "required": [
          "run_blocking"
        ],
        "properties": {
          "run_blocking": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetPassingAllowedPressureResponse": {
        "description": "`facet-passing-allowed-pressure`.\n\nReport envelope: the body is keyed `passing_allowed_pressure`, and the upstream payload is returned\nunder that key unchanged apart from grade flattening and entitlement allowlisting.\n\nRow shape is not a guess: this report has a CSV header row, and deriving one requires a list of row\nobjects — a body of any other shape would fail on every export.",
        "type": "object",
        "required": [
          "passing_allowed_pressure"
        ],
        "properties": {
          "passing_allowed_pressure": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetPassingConceptResponse": {
        "description": "`facet-passing-concept`.\n\nReport envelope: the body is keyed `passing_concept`, and the upstream payload is returned under\nthat key unchanged apart from grade flattening and entitlement allowlisting.\n\nRow shape is not a guess: this report has a CSV header row, and deriving one requires a list of row\nobjects — a body of any other shape would fail on every export.",
        "type": "object",
        "required": [
          "passing_concept"
        ],
        "properties": {
          "passing_concept": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetPassingDepthResponse": {
        "description": "`facet-passing-depth`.\n\nReport envelope: the body is keyed `passing_depth`, and the upstream payload is returned under that\nkey unchanged apart from grade flattening and entitlement allowlisting.\n\nRow shape is not a guess: this report has a CSV header row, and deriving one requires a list of row\nobjects — a body of any other shape would fail on every export.",
        "type": "object",
        "required": [
          "passing_depth"
        ],
        "properties": {
          "passing_depth": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetPassingDetailResponse": {
        "description": "`facet-passing-detail`.\n\nReport envelope: the body is keyed `passing_detail_stats`, and the upstream payload is returned\nunder that key unchanged apart from grade flattening and entitlement allowlisting.",
        "type": "object",
        "required": [
          "passing_detail_stats"
        ],
        "properties": {
          "passing_detail_stats": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetPassingPressureResponse": {
        "description": "`facet-passing-pressure`.\n\nReport envelope: the body is keyed `passing_pressure`, and the upstream payload is returned under\nthat key unchanged apart from grade flattening and entitlement allowlisting.\n\nRow shape is not a guess: this report has a CSV header row, and deriving one requires a list of row\nobjects — a body of any other shape would fail on every export.",
        "type": "object",
        "required": [
          "passing_pressure"
        ],
        "properties": {
          "passing_pressure": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetPassingSummaryResponse": {
        "description": "`facet-passing-summary`.\n\nReport envelope: the body is keyed `passing_summary`, and the upstream payload is returned under\nthat key unchanged apart from grade flattening and entitlement allowlisting.",
        "type": "object",
        "required": [
          "passing_summary"
        ],
        "properties": {
          "passing_summary": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetReceivingConceptResponse": {
        "description": "`facet-receiving-concept`.\n\nReport envelope: the body is keyed `receiving_concept`, and the upstream payload is returned under\nthat key unchanged apart from grade flattening and entitlement allowlisting.\n\nRow shape is not a guess: this report has a CSV header row, and deriving one requires a list of row\nobjects — a body of any other shape would fail on every export.",
        "type": "object",
        "required": [
          "receiving_concept"
        ],
        "properties": {
          "receiving_concept": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetReceivingDepthResponse": {
        "description": "`facet-receiving-depth`.\n\nReport envelope: the body is keyed `receiving_depth`, and the upstream payload is returned under\nthat key unchanged apart from grade flattening and entitlement allowlisting.\n\nRow shape is not a guess: this report has a CSV header row, and deriving one requires a list of row\nobjects — a body of any other shape would fail on every export.",
        "type": "object",
        "required": [
          "receiving_depth"
        ],
        "properties": {
          "receiving_depth": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetReceivingSchemeResponse": {
        "description": "`facet-receiving-scheme`.\n\nReport envelope: the body is keyed `receiving_scheme`, and the upstream payload is returned under\nthat key unchanged apart from grade flattening and entitlement allowlisting.\n\nRow shape is not a guess: this report has a CSV header row, and deriving one requires a list of row\nobjects — a body of any other shape would fail on every export.",
        "type": "object",
        "required": [
          "receiving_scheme"
        ],
        "properties": {
          "receiving_scheme": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetReceivingSummaryResponse": {
        "description": "`facet-receiving-summary`.\n\nReport envelope: the body is keyed `receiving_summary`, and the upstream payload is returned under\nthat key unchanged apart from grade flattening and entitlement allowlisting.",
        "type": "object",
        "required": [
          "receiving_summary"
        ],
        "properties": {
          "receiving_summary": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetRushingSummaryResponse": {
        "description": "`facet-rushing-summary`.\n\nReport envelope: the body is keyed `rushing_summary`, and the upstream payload is returned under\nthat key unchanged apart from grade flattening and entitlement allowlisting.\n\nRow shape is not a guess: this report has a CSV header row, and deriving one requires a list of row\nobjects — a body of any other shape would fail on every export.",
        "type": "object",
        "required": [
          "rushing_summary"
        ],
        "properties": {
          "rushing_summary": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetDefenseCoverageResponse": {
        "description": "`facet-defense-coverage`.\n\nReport envelope: the body is keyed `coverage_summary`, and the upstream payload is returned under\nthat key unchanged apart from grade flattening and entitlement allowlisting.\n\nRow shape is not a guess: this report has a CSV header row, and deriving one requires a list of row\nobjects — a body of any other shape would fail on every export.",
        "type": "object",
        "required": [
          "coverage_summary"
        ],
        "properties": {
          "coverage_summary": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetDefenseCoverageSchemeResponse": {
        "description": "`facet-defense-coverage-scheme`.\n\nReport envelope: the body is keyed `coverage_scheme`, and the upstream payload is returned under\nthat key unchanged apart from grade flattening and entitlement allowlisting.\n\nRow shape is not a guess: this report has a CSV header row, and deriving one requires a list of row\nobjects — a body of any other shape would fail on every export.",
        "type": "object",
        "required": [
          "coverage_scheme"
        ],
        "properties": {
          "coverage_scheme": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetDefensePassRushResponse": {
        "description": "`facet-defense-pass-rush`.\n\nReport envelope: the body is keyed `pass_rush_summary`, and the upstream payload is returned under\nthat key unchanged apart from grade flattening and entitlement allowlisting.\n\nRow shape is not a guess: this report has a CSV header row, and deriving one requires a list of row\nobjects — a body of any other shape would fail on every export.",
        "type": "object",
        "required": [
          "pass_rush_summary"
        ],
        "properties": {
          "pass_rush_summary": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetDefenseRunResponse": {
        "description": "`facet-defense-run`.\n\nReport envelope: the body is keyed `run_defense_summary`, and the upstream payload is returned under\nthat key unchanged apart from grade flattening and entitlement allowlisting.\n\nRow shape is not a guess: this report has a CSV header row, and deriving one requires a list of row\nobjects — a body of any other shape would fail on every export.",
        "type": "object",
        "required": [
          "run_defense_summary"
        ],
        "properties": {
          "run_defense_summary": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetDefenseSummaryResponse": {
        "description": "`facet-defense-summary`.\n\nReport envelope: the body is keyed `defense_summary`, and the upstream payload is returned under\nthat key unchanged apart from grade flattening and entitlement allowlisting.",
        "type": "object",
        "required": [
          "defense_summary"
        ],
        "properties": {
          "defense_summary": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetFieldGoalSummaryResponse": {
        "description": "`facet-field-goal-summary`.\n\nReport envelope: the body is keyed `field_goal_summary`, and the upstream payload is returned under\nthat key unchanged apart from grade flattening and entitlement allowlisting.\n\nRow shape is not a guess: this report has a CSV header row, and deriving one requires a list of row\nobjects — a body of any other shape would fail on every export.",
        "type": "object",
        "required": [
          "field_goal_summary"
        ],
        "properties": {
          "field_goal_summary": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetKickoffSummaryResponse": {
        "description": "`facet-kickoff-summary`.\n\nReport envelope: the body is keyed `kicking_summary`, and the upstream payload is returned under\nthat key unchanged apart from grade flattening and entitlement allowlisting.\n\nRow shape is not a guess: this report has a CSV header row, and deriving one requires a list of row\nobjects — a body of any other shape would fail on every export.\n\nNote the key is `kicking_summary`, not `kickoff_summary`.",
        "type": "object",
        "required": [
          "kicking_summary"
        ],
        "properties": {
          "kicking_summary": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetPuntingSummaryResponse": {
        "description": "`facet-punting-summary`.\n\nReport envelope: the body is keyed `punting_summary`, and the upstream payload is returned under\nthat key unchanged apart from grade flattening and entitlement allowlisting.\n\nRow shape is not a guess: this report has a CSV header row, and deriving one requires a list of row\nobjects — a body of any other shape would fail on every export.",
        "type": "object",
        "required": [
          "punting_summary"
        ],
        "properties": {
          "punting_summary": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetReturnSummaryResponse": {
        "description": "`facet-return-summary`.\n\nReport envelope: the body is keyed `return_summary`, and the upstream payload is returned under that\nkey unchanged apart from grade flattening and entitlement allowlisting.\n\nRow shape is not a guess: this report has a CSV header row, and deriving one requires a list of row\nobjects — a body of any other shape would fail on every export.",
        "type": "object",
        "required": [
          "return_summary"
        ],
        "properties": {
          "return_summary": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetSpecialSummaryResponse": {
        "description": "`facet-special-summary`.\n\nReport envelope: the body is keyed `special_teams_summary`, and the upstream payload is returned\nunder that key unchanged apart from grade flattening and entitlement allowlisting.\n\nRow shape is not a guess: this report has a CSV header row, and deriving one requires a list of row\nobjects — a body of any other shape would fail on every export.",
        "type": "object",
        "required": [
          "special_teams_summary"
        ],
        "properties": {
          "special_teams_summary": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetRushingDirectionResponse": {
        "description": "`facet-rushing-direction`.\n\nThe one report in the surface whose body carries TWO collections: `rushing_direction_stats` (per\nplayer, each with a nested `directions` array) and `team_direction_stats` (per franchise and\ndirection). Both survive the empty-response path, so both keys are always present.",
        "type": "object",
        "required": [
          "rushing_direction_stats"
        ],
        "properties": {
          "rushing_direction_stats": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FacetRushingDirectionRow"
            }
          },
          "team_direction_stats": {
            "description": "Absent whenever the request sends `division` — see `TeamDirectionRow`.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TeamDirectionRow"
            }
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "FacetReceivingCoverageResponse": {
        "description": "`facet-receiving-coverage`, and its alias `facet-defense-coverage-matchup`. Both paths serve one and\nthe same report, so they are one response shape, one report key and one CSV filename.\n\nUnlike every other facet report the body under the report key is an OBJECT, not a row array.",
        "type": "object",
        "required": [
          "receiving_coverage_stats"
        ],
        "properties": {
          "receiving_coverage_stats": {
            "description": "The three collections — or an EMPTY ARRAY when the request short-circuited. A present-but-empty\n`league`, `season` or `week` answers with an empty array under the report key, whatever shape the\npopulated body has. Every other facet body is a row array already, so this is the one response where\nthe empty form and the populated form differ.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ReceivingCoverageStats"
              },
              {
                "title": "EmptyReport",
                "description": "The short-circuit form — always zero-length.",
                "type": "array",
                "maxItems": 0
              }
            ]
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "SignaturePassingTimeInPocketResponse": {
        "description": "`signature-passing-time-in-pocket`.\n\nReport envelope keyed `time_in_pockets`.\n\n`league`, `season` and `week` must all be PRESENT, or the response is a `200` carrying\n`{\"time_in_pockets\": []}` and nothing else. That is deliberate upstream behaviour, and it is why all\nthree are `required` here.\n\nRow shape is not a guess: this report has a CSV header row, and deriving one requires a list of row\nobjects — a body of any other shape would fail on every export.",
        "type": "object",
        "required": [
          "time_in_pockets"
        ],
        "properties": {
          "time_in_pockets": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "SignaturePassBlockingEfficiencyLineResponse": {
        "description": "`signature-pass-blocking-efficiency-line`.\n\nReport envelope keyed `pbes`.\n\n`league`, `season` and `week` must all be PRESENT, or the response is a `200` carrying `{\"pbes\":\n[]}` and nothing else. That is deliberate upstream behaviour, and it is why all three are `required`\nhere.\n\nRow shape is not a guess: this report has a team-level CSV header row, and deriving one requires a\nnon-empty list of row objects.\n\nThe one team-level report in the surface — rows are franchises, not players.",
        "type": "object",
        "required": [
          "pbes"
        ],
        "properties": {
          "pbes": {
            "$ref": "#/components/schemas/ReportTeamRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "SignatureDefenseOutsidePassRushResponse": {
        "description": "`signature-defense-outside-pass-rush`.\n\nReport envelope keyed `prps`.\n\n`league`, `season` and `week` must all be PRESENT, or the response is a `200` carrying `{\"prps\":\n[]}` and nothing else. That is deliberate upstream behaviour, and it is why all three are `required`\nhere.\n\nRow shape is not a guess: this report has a CSV header row, and deriving one requires a list of row\nobjects — a body of any other shape would fail on every export.",
        "type": "object",
        "required": [
          "prps"
        ],
        "properties": {
          "prps": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "SignatureDefenseSlotCoverageResponse": {
        "description": "`signature-defense-slot-coverage`.\n\nReport envelope keyed `slot_coverages`.\n\n`league`, `season` and `week` must all be PRESENT, or the response is a `200` carrying\n`{\"slot_coverages\": []}` and nothing else. That is deliberate upstream behaviour, and it is why all\nthree are `required` here.\n\nRow shape is not a guess: this report has a CSV header row, and deriving one requires a list of row\nobjects — a body of any other shape would fail on every export.",
        "type": "object",
        "required": [
          "slot_coverages"
        ],
        "properties": {
          "slot_coverages": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "PlayerOffenseSummaryResponse": {
        "description": "`player-offense-summary`.\n\nReport envelope keyed `offense_summary`. Every player report answers with this same envelope, and\nwith the same grade flattening and entitlement allowlisting.\n\nThe body under the report key is the summary object: `subject` + `week_totals` + `weeks`, or\n`subject` + `career` + `seasons` when `career=true`.\n\n`export=true` is silently ignored on this operation, which is why no `text/csv` response is\ndeclared.",
        "type": "object",
        "required": [
          "offense_summary"
        ],
        "properties": {
          "offense_summary": {
            "$ref": "#/components/schemas/PlayerReportSummary"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "PlayerOffenseBlockingResponse": {
        "description": "`player-offense-blocking`.\n\nReport envelope keyed `blocking_summary`. Every player report answers with this same envelope, and\nwith the same grade flattening and entitlement allowlisting.\n\nThe body under the report key is the summary object: `subject` + `week_totals` + `weeks`, or\n`subject` + `career` + `seasons` when `career=true`.\n\n`export=true` is silently ignored on this operation, which is why no `text/csv` response is\ndeclared.",
        "type": "object",
        "required": [
          "blocking_summary"
        ],
        "properties": {
          "blocking_summary": {
            "$ref": "#/components/schemas/PlayerReportSummary"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "PlayerOffensePassBlockingResponse": {
        "description": "`player-offense-pass-blocking`.\n\nReport envelope keyed `pass_blocking`. Every player report answers with this same envelope, and with\nthe same grade flattening and entitlement allowlisting.\n\nThe body under the report key is the summary object: `subject` + `week_totals` + `weeks`, or\n`subject` + `career` + `seasons` when `career=true`.\n\n`export=true` is silently ignored on this operation, which is why no `text/csv` response is\ndeclared.",
        "type": "object",
        "required": [
          "pass_blocking"
        ],
        "properties": {
          "pass_blocking": {
            "$ref": "#/components/schemas/PlayerReportSummary"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "PlayerOffenseRunBlockingResponse": {
        "description": "`player-offense-run-blocking`.\n\nReport envelope keyed `run_blocking`. Every player report answers with this same envelope, and with\nthe same grade flattening and entitlement allowlisting.\n\nThe body under the report key is the summary object: `subject` + `week_totals` + `weeks`, or\n`subject` + `career` + `seasons` when `career=true`.\n\n`export=true` is silently ignored on this operation, which is why no `text/csv` response is\ndeclared.",
        "type": "object",
        "required": [
          "run_blocking"
        ],
        "properties": {
          "run_blocking": {
            "$ref": "#/components/schemas/PlayerReportSummary"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "PlayerPassingSummaryResponse": {
        "description": "`player-passing-summary`.\n\nReport envelope keyed `passing_summary`. Every player report answers with this same envelope, and\nwith the same grade flattening and entitlement allowlisting.\n\nThe body under the report key is the summary object: `subject` + `week_totals` + `weeks`, or\n`subject` + `career` + `seasons` when `career=true`.\n\n`export=true` is silently ignored on this operation, which is why no `text/csv` response is\ndeclared.",
        "type": "object",
        "required": [
          "passing_summary"
        ],
        "properties": {
          "passing_summary": {
            "$ref": "#/components/schemas/PlayerReportSummary"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "PlayerPassingConceptResponse": {
        "description": "`player-passing-concept`.\n\nReport envelope keyed `passing_concept`. Every player report answers with this same envelope, and\nwith the same grade flattening and entitlement allowlisting.\n\nThe body under the report key is a flat ARRAY of rows, not the summary object — this is a detail\n(splits) report. It carries no `subject` block, so there are no grade facets to read off it.\n\n`career=true` does NOT change this shape: the same array comes back, with no `career` / `seasons`\nblock — the career mode the summary reports have does not exist here. And unlike those reports, this\none needs `season`: dropping it is a 400 (`{\"error\":{\"reason\":\"unexpected condition\"}}`), with or\nwithout `career`.\n\n`export=true` is silently ignored on this operation, which is why no `text/csv` response is\ndeclared.",
        "type": "object",
        "required": [
          "passing_concept"
        ],
        "properties": {
          "passing_concept": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "PlayerPassingDepthResponse": {
        "description": "`player-passing-depth`.\n\nReport envelope keyed `passing_depth`. Every player report answers with this same envelope, and with\nthe same grade flattening and entitlement allowlisting.\n\nThe body under the report key is a flat ARRAY of rows, not the summary object — this is a detail\n(splits) report. It carries no `subject` block, so there are no grade facets to read off it.\n\n`career=true` does NOT change this shape: the same array comes back, with no `career` / `seasons`\nblock — the career mode the summary reports have does not exist here. And unlike those reports, this\none needs `season`: dropping it is a 400 (`{\"error\":{\"reason\":\"unexpected condition\"}}`), with or\nwithout `career`.\n\n`export=true` is silently ignored on this operation, which is why no `text/csv` response is\ndeclared.",
        "type": "object",
        "required": [
          "passing_depth"
        ],
        "properties": {
          "passing_depth": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "PlayerPassingPressureResponse": {
        "description": "`player-passing-pressure`.\n\nReport envelope keyed `passing_pressure`. Every player report answers with this same envelope, and\nwith the same grade flattening and entitlement allowlisting.\n\nThe body under the report key is a flat ARRAY of rows, not the summary object — this is a detail\n(splits) report. It carries no `subject` block, so there are no grade facets to read off it.\n\n`career=true` does NOT change this shape: the same array comes back, with no `career` / `seasons`\nblock — the career mode the summary reports have does not exist here. And unlike those reports, this\none needs `season`: dropping it is a 400 (`{\"error\":{\"reason\":\"unexpected condition\"}}`), with or\nwithout `career`.\n\n`export=true` is silently ignored on this operation, which is why no `text/csv` response is\ndeclared.",
        "type": "object",
        "required": [
          "passing_pressure"
        ],
        "properties": {
          "passing_pressure": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "PlayerRushingDirectionResponse": {
        "description": "`player-rushing-direction`.\n\nReport envelope keyed `rushing_direction_stats`. Every player report answers with this same\nenvelope, and with the same grade flattening and entitlement allowlisting.\n\nThe body under the report key is a direction object, not the summary object and not a row array.\n\n`career=true` does NOT change this shape: the same directions object comes back, with no `career` /\n`seasons` block — the career mode the summary reports have does not exist here. And unlike those\nreports, this one needs `season`: dropping it is a 400 (`{\"error\":{\"reason\":\"unexpected\ncondition\"}}`), with or without `career`.\n\n`export=true` is silently ignored on this operation, which is why no `text/csv` response is\ndeclared.",
        "type": "object",
        "required": [
          "rushing_direction_stats"
        ],
        "properties": {
          "rushing_direction_stats": {
            "$ref": "#/components/schemas/PlayerReportDirections"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "PlayerRushingSummaryResponse": {
        "description": "`player-rushing-summary`.\n\nReport envelope keyed `rushing_summary`. Every player report answers with this same envelope, and\nwith the same grade flattening and entitlement allowlisting.\n\nThe body under the report key is the summary object: `subject` + `week_totals` + `weeks`, or\n`subject` + `career` + `seasons` when `career=true`.\n\n`export=true` is silently ignored on this operation, which is why no `text/csv` response is\ndeclared.",
        "type": "object",
        "required": [
          "rushing_summary"
        ],
        "properties": {
          "rushing_summary": {
            "$ref": "#/components/schemas/PlayerReportSummary"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "PlayerReceivingDepthResponse": {
        "description": "`player-receiving-depth`.\n\nReport envelope keyed `receiving_depth`. Every player report answers with this same envelope, and\nwith the same grade flattening and entitlement allowlisting.\n\nThe body under the report key is a flat ARRAY of rows, not the summary object — this is a detail\n(splits) report. It carries no `subject` block, so there are no grade facets to read off it.\n\n`career=true` does NOT change this shape: the same array comes back, with no `career` / `seasons`\nblock — the career mode the summary reports have does not exist here. And unlike those reports, this\none needs `season`: dropping it is a 400 (`{\"error\":{\"reason\":\"unexpected condition\"}}`), with or\nwithout `career`.\n\n`export=true` is silently ignored on this operation, which is why no `text/csv` response is\ndeclared.",
        "type": "object",
        "required": [
          "receiving_depth"
        ],
        "properties": {
          "receiving_depth": {
            "$ref": "#/components/schemas/ReportPlayerRows"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "PlayerReceivingSummaryResponse": {
        "description": "`player-receiving-summary`.\n\nReport envelope keyed `receiving_summary`. Every player report answers with this same envelope, and\nwith the same grade flattening and entitlement allowlisting.\n\nThe body under the report key is the summary object: `subject` + `week_totals` + `weeks`, or\n`subject` + `career` + `seasons` when `career=true`.\n\n`export=true` is silently ignored on this operation, which is why no `text/csv` response is\ndeclared.",
        "type": "object",
        "required": [
          "receiving_summary"
        ],
        "properties": {
          "receiving_summary": {
            "$ref": "#/components/schemas/PlayerReportSummary"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "PlayerDefenseSummaryResponse": {
        "description": "`player-defense-summary`.\n\nReport envelope keyed `defense_summary`. Every player report answers with this same envelope, and\nwith the same grade flattening and entitlement allowlisting.\n\nThe body under the report key is the summary object: `subject` + `week_totals` + `weeks`, or\n`subject` + `career` + `seasons` when `career=true`.\n\n`export=true` is silently ignored on this operation, which is why no `text/csv` response is\ndeclared.",
        "type": "object",
        "required": [
          "defense_summary"
        ],
        "properties": {
          "defense_summary": {
            "$ref": "#/components/schemas/PlayerReportSummary"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "PlayerFieldGoalSummaryResponse": {
        "description": "`player-field-goal-summary`.\n\nReport envelope keyed `field_goal_summary`. Every player report answers with this same envelope, and\nwith the same grade flattening and entitlement allowlisting.\n\nThe body under the report key is the summary object: `subject` + `week_totals` + `weeks`, or\n`subject` + `career` + `seasons` when `career=true`.\n\n`export=true` is silently ignored on this operation, which is why no `text/csv` response is\ndeclared.",
        "type": "object",
        "required": [
          "field_goal_summary"
        ],
        "properties": {
          "field_goal_summary": {
            "$ref": "#/components/schemas/PlayerReportSummary"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "PlayerKickoffSummaryResponse": {
        "description": "`player-kickoff-summary`.\n\nReport envelope keyed `kicking_summary`. Every player report answers with this same envelope, and\nwith the same grade flattening and entitlement allowlisting.\n\nThe body under the report key is the summary object: `subject` + `week_totals` + `weeks`, or\n`subject` + `career` + `seasons` when `career=true`.\n\n`export=true` is silently ignored on this operation, which is why no `text/csv` response is\ndeclared.\n\nNote the key is `kicking_summary`, not `kickoff_summary`.",
        "type": "object",
        "required": [
          "kicking_summary"
        ],
        "properties": {
          "kicking_summary": {
            "$ref": "#/components/schemas/PlayerReportSummary"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "PlayerPuntingSummaryResponse": {
        "description": "`player-punting-summary`.\n\nReport envelope keyed `punting_summary`. Every player report answers with this same envelope, and\nwith the same grade flattening and entitlement allowlisting.\n\nThe body under the report key is the summary object: `subject` + `week_totals` + `weeks`, or\n`subject` + `career` + `seasons` when `career=true`.\n\n`export=true` is silently ignored on this operation, which is why no `text/csv` response is\ndeclared.",
        "type": "object",
        "required": [
          "punting_summary"
        ],
        "properties": {
          "punting_summary": {
            "$ref": "#/components/schemas/PlayerReportSummary"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "PlayerReturnSummaryResponse": {
        "description": "`player-return-summary`.\n\nReport envelope keyed `return_summary`. Every player report answers with this same envelope, and\nwith the same grade flattening and entitlement allowlisting.\n\nThe body under the report key is the summary object: `subject` + `week_totals` + `weeks`, or\n`subject` + `career` + `seasons` when `career=true`.\n\n`export=true` is silently ignored on this operation, which is why no `text/csv` response is\ndeclared.",
        "type": "object",
        "required": [
          "return_summary"
        ],
        "properties": {
          "return_summary": {
            "$ref": "#/components/schemas/PlayerReportSummary"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "PlayerSpecialSummaryResponse": {
        "description": "`player-special-summary`.\n\nReport envelope keyed `special_teams_summary`. Every player report answers with this same envelope,\nand with the same grade flattening and entitlement allowlisting.\n\nThe body under the report key is the summary object: `subject` + `week_totals` + `weeks`, or\n`subject` + `career` + `seasons` when `career=true`.\n\n`export=true` is silently ignored on this operation, which is why no `text/csv` response is\ndeclared.",
        "type": "object",
        "required": [
          "special_teams_summary"
        ],
        "properties": {
          "special_teams_summary": {
            "$ref": "#/components/schemas/PlayerReportSummary"
          },
          "restricted": {
            "$ref": "#/components/schemas/RestrictedColumns"
          }
        },
        "additionalProperties": false
      },
      "Column": {
        "title": "Column",
        "description": "One entry per key every row carries, in the order the rows carry them. `label` is the human\nheading a table renderer prints; `type` is the JSON type of a non-null cell — `integer`,\n`number`, `string` or `boolean`. Any cell may also be `null`, meaning the value does not apply\nor was withheld; a row never omits a key.",
        "type": "object",
        "required": [
          "key",
          "label",
          "type"
        ],
        "additionalProperties": false,
        "properties": {
          "key": {
            "type": "string",
            "pattern": "^[a-z][A-Za-z0-9]*$",
            "description": "The row key, camelCase."
          },
          "label": {
            "type": "string",
            "description": "Human-readable heading for the column."
          },
          "type": {
            "type": "string",
            "enum": [
              "integer",
              "number",
              "string",
              "boolean"
            ],
            "description": "JSON type of a non-null cell in this column."
          }
        }
      },
      "TeamIdentity": {
        "title": "TeamIdentity",
        "description": "The team a per-team table describes — id, slug, short code and name, as the directory has them.",
        "type": "object",
        "required": [
          "franchiseId",
          "slug",
          "abbreviation",
          "name"
        ],
        "additionalProperties": false,
        "properties": {
          "franchiseId": {
            "type": "integer"
          },
          "slug": {
            "type": "string"
          },
          "abbreviation": {
            "type": [
              "string",
              "null"
            ],
            "description": "The short display code (`LA`), or `null` when the directory has none."
          },
          "name": {
            "type": "string"
          }
        }
      },
      "ReportRow": {
        "title": "ReportRow",
        "description": "One player's row of a data-driven report: the identity keys every report carries, then the\nreport's own stat columns, which `columns` names and types. Every value is a number, a string, a\nboolean or `null` — a nested object never appears in a row.",
        "type": "object",
        "required": [
          "playerId",
          "player",
          "position"
        ],
        "properties": {
          "playerId": {
            "type": "integer"
          },
          "player": {
            "type": "string"
          },
          "position": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "additionalProperties": {
          "type": [
            "number",
            "string",
            "boolean",
            "null"
          ]
        }
      },
      "CsvTable": {
        "title": "CsvTable",
        "description": "The table as a file, when `format=csv`. Four rules: the first line is the column keys in\n`columns` order and every following line is one row, lines end in CRLF; a field holding a\ncomma, a double quote, CR or LF is wrapped in double quotes with embedded quotes doubled\n(RFC 4180); a `null` cell is an empty field, booleans are `true`/`false`, numbers print exactly\nas they do in the JSON body (no rounding, no thousands separators); the file is UTF-8 with no\nbyte-order mark. An empty table is the header line alone. Metadata that sits beside the table\nin the JSON body is not in the file.",
        "type": "string",
        "minLength": 1,
        "pattern": "^[a-z][A-Za-z0-9]*(,[a-z][A-Za-z0-9]*)*\\r\\n"
      },
      "PositionReportTable": {
        "title": "PositionReportTable",
        "description": "A column with no non-null value anywhere in this answer's rows is typed `string`, whatever\nthe underlying stat would otherwise be — there is nothing else to infer a type from.",
        "type": "object",
        "required": [
          "league",
          "season",
          "weekGroup",
          "week",
          "weekTo",
          "report",
          "section",
          "columns",
          "rows"
        ],
        "additionalProperties": false,
        "properties": {
          "league": {
            "type": "string",
            "enum": [
              "nfl",
              "ncaa"
            ]
          },
          "season": {
            "type": "integer"
          },
          "weekGroup": {
            "type": "string",
            "enum": [
              "PRE",
              "REG",
              "PO",
              "REGPO"
            ]
          },
          "week": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The week asked for, or `null` for the whole group."
          },
          "weekTo": {
            "type": [
              "integer",
              "null"
            ]
          },
          "report": {
            "type": "string"
          },
          "section": {
            "type": "string",
            "enum": [
              "offense",
              "passing",
              "receiving",
              "rushing",
              "blocking",
              "defense",
              "special-teams"
            ]
          },
          "columns": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Column"
            }
          },
          "rows": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReportRow"
            }
          }
        }
      },
      "TeamStatsRow": {
        "title": "TeamStatsRow",
        "description": "One team. `teamId`, `abbreviation` and `name` are always present; every other key is a stat value\nor its rank, named by `columns`. A stat that does not apply to the team is `null`, and so is a\nrank the scope has no answer for.",
        "type": "object",
        "required": [
          "teamId",
          "abbreviation",
          "name"
        ],
        "properties": {
          "teamId": {
            "type": "integer",
            "description": "The franchise id, stable across seasons."
          },
          "abbreviation": {
            "type": "string",
            "description": "Short team code, as the scoreboard prints it."
          },
          "name": {
            "type": "string",
            "description": "Full team name."
          }
        },
        "additionalProperties": {
          "type": [
            "number",
            "null"
          ],
          "description": "A stat value (`<key>`) or its rank (`<key>Rank`), as named in `columns`."
        }
      },
      "TeamStatsTable": {
        "title": "TeamStatsTable",
        "description": "What was asked (`league`, `season`, `category`, `scope`, and `weekGroup` or `weekIds`), when the\ndata was last refreshed (`updatedAt`), then the table: `columns` in header order and `rows`, one\nper team, holding exactly those keys.",
        "type": "object",
        "required": [
          "league",
          "season",
          "category",
          "scope",
          "updatedAt",
          "columns",
          "rows"
        ],
        "additionalProperties": false,
        "properties": {
          "league": {
            "type": "string",
            "enum": [
              "nfl",
              "ncaa"
            ]
          },
          "season": {
            "type": "integer"
          },
          "category": {
            "type": "string"
          },
          "scope": {
            "type": "string"
          },
          "weekGroup": {
            "type": "string",
            "enum": [
              "PRE",
              "REG",
              "PO",
              "REGPO"
            ],
            "description": "Present when the table covers a whole season part; absent when `weekIds` is."
          },
          "weekIds": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "minItems": 1,
            "description": "Present when explicit weeks were named; absent when `weekGroup` is."
          },
          "updatedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When the data behind this table was last refreshed; `null` for a season not loaded yet."
          },
          "columns": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Column"
            }
          },
          "rows": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TeamStatsRow"
            }
          }
        },
        "oneOf": [
          {
            "required": [
              "weekGroup"
            ]
          },
          {
            "required": [
              "weekIds"
            ]
          }
        ]
      },
      "TeamDirectoryGroup": {
        "title": "TeamDirectoryGroup",
        "description": "One conference, division or tier the league's teams are grouped into; `parentIds` are its ancestors, outermost first.",
        "type": "object",
        "required": [
          "id",
          "slug",
          "name",
          "parentIds"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "integer"
          },
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "parentIds": {
            "type": "array",
            "items": {
              "type": "integer"
            }
          }
        }
      },
      "TeamDirectoryRow": {
        "title": "TeamDirectoryRow",
        "description": "One team. Every key is always present; a team with no colours carries `null` in both colour columns.",
        "type": "object",
        "required": [
          "franchiseId",
          "slug",
          "name",
          "city",
          "nickname",
          "abbreviation",
          "primaryColor",
          "secondaryColor",
          "groupIds"
        ],
        "additionalProperties": false,
        "properties": {
          "franchiseId": {
            "type": "integer"
          },
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "city": {
            "type": [
              "string",
              "null"
            ]
          },
          "nickname": {
            "type": [
              "string",
              "null"
            ]
          },
          "abbreviation": {
            "type": [
              "string",
              "null"
            ],
            "description": "The short display code (`LA`) when the directory has one, else its abbreviation; `null` when neither — the same value every per-team table's `team.abbreviation` shows."
          },
          "primaryColor": {
            "type": [
              "string",
              "null"
            ]
          },
          "secondaryColor": {
            "type": [
              "string",
              "null"
            ]
          },
          "groupIds": {
            "type": "string",
            "description": "Group ids the team belongs to, joined with `;` (`11;24` — see `groups`). Empty string for none."
          }
        }
      },
      "TeamDirectoryTable": {
        "title": "TeamDirectoryTable",
        "type": "object",
        "required": [
          "league",
          "season",
          "groups",
          "columns",
          "rows"
        ],
        "additionalProperties": false,
        "properties": {
          "league": {
            "type": "string",
            "enum": [
              "nfl",
              "ncaa"
            ]
          },
          "season": {
            "type": "integer"
          },
          "groups": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TeamDirectoryGroup"
            }
          },
          "columns": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Column"
            }
          },
          "rows": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TeamDirectoryRow"
            }
          }
        }
      },
      "TeamRosterRow": {
        "title": "TeamRosterRow",
        "description": "One player, in depth-chart order. Every key is always present; a value that does not apply is `null`.",
        "type": "object",
        "required": [
          "playerId",
          "name",
          "jersey",
          "position",
          "alignment",
          "unit",
          "depthOrder",
          "grade",
          "gradeRank",
          "gradeRankOf",
          "height",
          "weight",
          "birthDate",
          "eligibilityYear",
          "status",
          "snapCounts",
          "snapPct"
        ],
        "additionalProperties": false,
        "properties": {
          "playerId": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "jersey": {
            "type": [
              "string",
              "null"
            ]
          },
          "position": {
            "type": "string"
          },
          "alignment": {
            "type": "string"
          },
          "unit": {
            "type": "string",
            "enum": [
              "offense",
              "defense",
              "special-teams"
            ]
          },
          "depthOrder": {
            "type": "integer"
          },
          "grade": {
            "type": [
              "number",
              "null"
            ]
          },
          "gradeRank": {
            "type": [
              "integer",
              "null"
            ]
          },
          "gradeRankOf": {
            "type": [
              "integer",
              "null"
            ]
          },
          "height": {
            "type": [
              "integer",
              "null"
            ]
          },
          "weight": {
            "type": [
              "integer",
              "null"
            ]
          },
          "birthDate": {
            "type": [
              "string",
              "null"
            ]
          },
          "eligibilityYear": {
            "type": [
              "integer",
              "null"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "questionable",
              "out"
            ]
          },
          "snapCounts": {
            "type": [
              "integer",
              "null"
            ]
          },
          "snapPct": {
            "type": [
              "number",
              "null"
            ]
          }
        }
      },
      "TeamRosterTable": {
        "title": "TeamRosterTable",
        "type": "object",
        "required": [
          "league",
          "season",
          "team",
          "columns",
          "rows"
        ],
        "additionalProperties": false,
        "properties": {
          "league": {
            "type": "string",
            "enum": [
              "nfl",
              "ncaa"
            ]
          },
          "season": {
            "type": "integer"
          },
          "team": {
            "$ref": "#/components/schemas/TeamIdentity"
          },
          "columns": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Column"
            }
          },
          "rows": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TeamRosterRow"
            }
          }
        }
      },
      "TeamScheduleSos": {
        "title": "TeamScheduleSos",
        "description": "The season's strength-of-schedule summary — score and rank, games played and remaining, and the count of games in each difficulty bucket (`hardest` … `easiest`).",
        "type": "object",
        "required": [
          "score",
          "rank",
          "played",
          "remaining",
          "buckets"
        ],
        "additionalProperties": false,
        "properties": {
          "score": {
            "type": "number"
          },
          "rank": {
            "type": "integer"
          },
          "played": {
            "type": "integer"
          },
          "remaining": {
            "type": "integer"
          },
          "buckets": {
            "description": "Count of games in each of the six fixed difficulty tiers, hardest to easiest.",
            "type": "object",
            "required": [
              "hardest",
              "hard",
              "medium-hard",
              "medium-easy",
              "easy",
              "easiest"
            ],
            "additionalProperties": false,
            "properties": {
              "hardest": {
                "type": "integer"
              },
              "hard": {
                "type": "integer"
              },
              "medium-hard": {
                "type": "integer"
              },
              "medium-easy": {
                "type": "integer"
              },
              "easy": {
                "type": "integer"
              },
              "easiest": {
                "type": "integer"
              }
            }
          }
        }
      },
      "TeamScheduleRow": {
        "title": "TeamScheduleRow",
        "description": "One week. A bye carries `isBye: true` and `null` in every game field; a game not yet played\ncarries `null` result and scores.",
        "type": "object",
        "required": [
          "week",
          "weekLabel",
          "isBye",
          "gameId",
          "kickoff",
          "homeAway",
          "opponentFranchiseId",
          "opponentAbbr",
          "opponentName",
          "opponentDivision",
          "opponentWins",
          "opponentLosses",
          "result",
          "teamScore",
          "opponentScore",
          "sosScore",
          "opponentElo",
          "opponentEloRank"
        ],
        "additionalProperties": false,
        "properties": {
          "week": {
            "type": "integer"
          },
          "weekLabel": {
            "type": [
              "string",
              "null"
            ]
          },
          "isBye": {
            "type": "boolean"
          },
          "gameId": {
            "type": [
              "integer",
              "null"
            ]
          },
          "kickoff": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "homeAway": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "home",
              "away",
              null
            ]
          },
          "opponentFranchiseId": {
            "type": [
              "integer",
              "null"
            ]
          },
          "opponentAbbr": {
            "type": [
              "string",
              "null"
            ]
          },
          "opponentName": {
            "type": [
              "string",
              "null"
            ]
          },
          "opponentDivision": {
            "type": [
              "string",
              "null"
            ]
          },
          "opponentWins": {
            "type": [
              "integer",
              "null"
            ]
          },
          "opponentLosses": {
            "type": [
              "integer",
              "null"
            ]
          },
          "result": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "W",
              "L",
              "T",
              null
            ]
          },
          "teamScore": {
            "type": [
              "integer",
              "null"
            ]
          },
          "opponentScore": {
            "type": [
              "integer",
              "null"
            ]
          },
          "sosScore": {
            "type": [
              "number",
              "null"
            ]
          },
          "opponentElo": {
            "type": [
              "integer",
              "null"
            ]
          },
          "opponentEloRank": {
            "type": [
              "integer",
              "null"
            ]
          }
        }
      },
      "TeamScheduleTable": {
        "title": "TeamScheduleTable",
        "type": "object",
        "required": [
          "league",
          "season",
          "team",
          "sos",
          "columns",
          "rows"
        ],
        "additionalProperties": false,
        "properties": {
          "league": {
            "type": "string",
            "enum": [
              "nfl",
              "ncaa"
            ]
          },
          "season": {
            "type": "integer"
          },
          "team": {
            "$ref": "#/components/schemas/TeamIdentity"
          },
          "sos": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/TeamScheduleSos"
              },
              {
                "type": "null"
              }
            ]
          },
          "columns": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Column"
            }
          },
          "rows": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TeamScheduleRow"
            }
          }
        }
      },
      "TeamLeadersRow": {
        "title": "TeamLeadersRow",
        "description": "One player. `playerId`, `name`, `position` and `jersey` are always present; every other key is a stat value, its rank, the size of the ranked pool or its percentile, named in `columns`; a stat the source did not report is `null` in all four, and so are the three placing cells of a player below their position's qualifying volume.",
        "type": "object",
        "required": [
          "playerId",
          "name",
          "position",
          "jersey"
        ],
        "properties": {
          "playerId": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "position": {
            "type": "string"
          },
          "jersey": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "additionalProperties": {
          "type": [
            "number",
            "null"
          ]
        }
      },
      "TeamLeadersQualification": {
        "title": "TeamLeadersQualification",
        "description": "How the table decided who counts as qualified for a placing: at least `share` of the position\nleader's volume on the `key` column (`label` is that column in prose), which comes to\n`minimums` — the raw floor for each position. A position missing from `minimums` had no\nvolume to measure, so nobody there is ranked.",
        "type": "object",
        "required": [
          "key",
          "label",
          "share",
          "minimums"
        ],
        "additionalProperties": false,
        "properties": {
          "key": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "share": {
            "type": "number"
          },
          "minimums": {
            "type": "object",
            "additionalProperties": {
              "type": "number"
            }
          }
        }
      },
      "TeamLeadersTable": {
        "title": "TeamLeadersTable",
        "type": "object",
        "required": [
          "league",
          "season",
          "weekGroup",
          "team",
          "group",
          "updatedAt",
          "qualification",
          "columns",
          "rows"
        ],
        "additionalProperties": false,
        "properties": {
          "league": {
            "type": "string",
            "enum": [
              "nfl",
              "ncaa"
            ]
          },
          "season": {
            "type": "integer"
          },
          "weekGroup": {
            "type": "string",
            "enum": [
              "PRE",
              "REG",
              "PO",
              "REGPO"
            ]
          },
          "team": {
            "$ref": "#/components/schemas/TeamIdentity"
          },
          "group": {
            "type": "string",
            "enum": [
              "receiving",
              "passing",
              "rushing",
              "defense"
            ]
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "description": "When this answer was produced."
          },
          "qualification": {
            "$ref": "#/components/schemas/TeamLeadersQualification"
          },
          "columns": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Column"
            }
          },
          "rows": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TeamLeadersRow"
            }
          }
        }
      },
      "TeamReportTable": {
        "title": "TeamReportTable",
        "description": "A column with no non-null value anywhere in this answer's rows is typed `string`, whatever\nthe underlying stat would otherwise be — there is nothing else to infer a type from.",
        "type": "object",
        "required": [
          "league",
          "season",
          "weekGroup",
          "week",
          "weekTo",
          "team",
          "report",
          "section",
          "columns",
          "rows"
        ],
        "additionalProperties": false,
        "properties": {
          "league": {
            "type": "string",
            "enum": [
              "nfl",
              "ncaa"
            ]
          },
          "season": {
            "type": "integer"
          },
          "weekGroup": {
            "type": "string",
            "enum": [
              "PRE",
              "REG",
              "PO",
              "REGPO"
            ]
          },
          "week": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The week asked for, or `null` for the whole group."
          },
          "weekTo": {
            "type": [
              "integer",
              "null"
            ]
          },
          "team": {
            "$ref": "#/components/schemas/TeamIdentity"
          },
          "report": {
            "type": "string"
          },
          "section": {
            "type": "string",
            "enum": [
              "offense",
              "passing",
              "receiving",
              "rushing",
              "blocking",
              "defense",
              "special-teams"
            ]
          },
          "columns": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Column"
            }
          },
          "rows": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReportRow"
            }
          }
        }
      },
      "RushingDirectionRow": {
        "title": "RushingDirectionRow",
        "description": "One rusher in one run direction.",
        "type": "object",
        "required": [
          "playerId",
          "player",
          "position",
          "direction"
        ],
        "properties": {
          "playerId": {
            "type": "integer"
          },
          "player": {
            "type": "string"
          },
          "position": {
            "type": [
              "string",
              "null"
            ]
          },
          "direction": {
            "type": "string"
          }
        },
        "additionalProperties": {
          "type": [
            "number",
            "null"
          ]
        }
      },
      "RushingDirectionTotalsRow": {
        "title": "RushingDirectionTotalsRow",
        "description": "The team's totals in one run direction.",
        "type": "object",
        "required": [
          "direction"
        ],
        "properties": {
          "direction": {
            "type": "string"
          }
        },
        "additionalProperties": {
          "type": [
            "number",
            "null"
          ]
        }
      },
      "TeamRushingDirectionTable": {
        "title": "TeamRushingDirectionTable",
        "type": "object",
        "required": [
          "league",
          "season",
          "weekGroup",
          "team",
          "columns",
          "rows",
          "totalsColumns",
          "teamTotals"
        ],
        "additionalProperties": false,
        "properties": {
          "league": {
            "type": "string",
            "enum": [
              "nfl",
              "ncaa"
            ]
          },
          "season": {
            "type": "integer"
          },
          "weekGroup": {
            "type": "string",
            "enum": [
              "PRE",
              "REG",
              "PO",
              "REGPO"
            ]
          },
          "team": {
            "$ref": "#/components/schemas/TeamIdentity"
          },
          "columns": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Column"
            }
          },
          "rows": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RushingDirectionRow"
            }
          },
          "totalsColumns": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Column"
            }
          },
          "teamTotals": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RushingDirectionTotalsRow"
            }
          }
        }
      },
      "Error": {
        "title": "Error",
        "description": "The single error shape this API answers with, on every status below. `code` is the field to branch\non — it is stable, and the human-readable `message` is not. `request_id` is echoed in the\n`x-request-id` response header and is what to quote in a bug report. `details` is machine-readable\ncontext for the failure: `upstream_status` on anything that came back from the data behind this API\n(`null` when there was no response at all), `parameter` on a parameter rejected before any data was\nfetched, `upstream_timeout_ms` on a deadline this API imposed, `upstream` naming which data source\nfailed on a `502` or `504` from a `/v2` operation, and `league` and `team` on a `404` for a team\nthat did not resolve. It never carries an upstream body.",
        "type": "object",
        "required": [
          "error"
        ],
        "additionalProperties": false,
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "code",
              "message",
              "request_id"
            ],
            "additionalProperties": false,
            "properties": {
              "code": {
                "type": "string",
                "enum": [
                  "invalid_parameter",
                  "not_found",
                  "unauthorized",
                  "forbidden",
                  "rate_limited",
                  "session_provisioning",
                  "upstream_error",
                  "upstream_timeout",
                  "internal_error"
                ]
              },
              "message": {
                "type": "string",
                "description": "Human-readable, and deliberately not part of the contract."
              },
              "request_id": {
                "type": "string",
                "description": "Also sent as the `x-request-id` response header."
              },
              "details": {
                "type": "object",
                "additionalProperties": true,
                "description": "Machine-readable context. Absent when there is none."
              }
            }
          }
        }
      },
      "Whoami": {
        "description": "What this API believes about the caller. `entitled` and `tier` are reported here, never enforced —\nthis operation itself never gates on either.",
        "type": "object",
        "required": [
          "external_id",
          "email",
          "tier",
          "entitled",
          "entitlement_reason",
          "credential",
          "session_expires_at",
          "installations"
        ],
        "additionalProperties": false,
        "properties": {
          "external_id": {
            "type": [
              "string",
              "null"
            ],
            "description": "The linked subscriber identity this credential resolves to, or `null` for an account with none —\nevery other operation refuses that account with `403 forbidden`, reason `unlinked_account`."
          },
          "email": {
            "type": [
              "string",
              "null"
            ],
            "description": "The account email on file, or `null`."
          },
          "tier": {
            "type": [
              "string",
              "null"
            ],
            "description": "The account's subscription tier (for example `pro`, `annual`, `monthly`), or `null`. Not itself the\nentitlement decision — see `entitled`."
          },
          "entitled": {
            "type": "boolean",
            "description": "Whether this account may use the operations below. `false` is the one place this API says why a\nrequest would be refused, rather than refusing it."
          },
          "entitlement_reason": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "subscription_required",
              "trial",
              "unlinked_account",
              null
            ],
            "description": "Which refusal, when `entitled` is `false`; `null` when it is `true`. Mirrors the `403` error\nenvelope's own `details.reason` on every other operation: `subscription_required` (the account is\nnot PFF Pro), `trial` (a Pro free trial, which does not include this API until it converts) and\n`unlinked_account` (no subscriber record at all) are different problems with different fixes, and a\nbare `entitled: false` would send a paying account that is merely unlinked or on trial to the\nsubscribe page for something buying Pro again would not fix."
          },
          "credential": {
            "type": "string",
            "enum": [
              "oauth",
              "api_key"
            ],
            "description": "Which security scheme the presented credential satisfied."
          },
          "session_expires_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When the session this API holds for the caller next needs renewing, or `null` when no session exists\nyet — this operation never creates one."
          },
          "installations": {
            "type": "object",
            "required": [
              "max"
            ],
            "additionalProperties": false,
            "properties": {
              "max": {
                "type": "integer",
                "description": "The number of devices this account may use the CLI from. Reported only — nothing enforces it yet."
              }
            }
          }
        }
      }
    },
    "responses": {
      "BadRequest": {
        "description": "The request parameters were rejected.\n\n`error.code` is `invalid_parameter`.\n\nEither the request was refused before any data was fetched — a `required` parameter above was\nmissing or empty — or the parameters themselves were rejected. In the first case\n`error.details.parameter` names the offending parameter and `error.details.upstream_status` is\n`null`.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Unauthorized": {
        "description": "The credential is missing or was refused.\n\n`error.code` is `unauthorized`.\n\n`details.reason` names why: `missing` (no `Authorization` header at all), `malformed` (not a bearer\ncredential this API understands), `expired`, `invalid_signature`, `revoked`, or `wrong_token_type`\n(a session token was presented — this API never accepts one). The `WWW-Authenticate` response header\nis always `Bearer realm=\"pff-pro\", error=\"invalid_token\"`.",
        "headers": {
          "WWW-Authenticate": {
            "description": "Bearer realm=\"pff-pro\", error=\"invalid_token\" (RFC 6750).",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Forbidden": {
        "description": "The caller may not read this league or report, or may not use this API at all.\n\n`error.code` is `forbidden`.\n\nFour shapes share this status. Three are this API refusing the account itself and are told apart by\n`details.reason`; the fourth is the upstream refusing one league or report to an account that is\notherwise entitled, which carries `details.upstream_status` and no `details.reason` at all. A\nview-only league entitlement is NOT any of them: that comes back `200` with the withheld columns\nlisted under `restricted`, never a `403`. `subscription_required` means the credential verified but\nthe account is not PFF Pro — `details.tier` carries the account's tier (or `null`) and\n`details.subscribe_url` where to upgrade; the message names both. `trial` means the account is on\nthe Pro free trial, which does not include this API until it converts to a paid plan —\n`details.tier` carries it, and there is no `subscribe_url` because there is nothing left to buy.\n`unlinked_account` means the account has no linked subscriber record at all — a support matter, not\na subscription one.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "NotFound": {
        "description": "No such route, or no such report.\n\n`error.code` is `not_found`.\n\nThe same envelope whichever it is.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "ExportTooBroad": {
        "description": "The requested export spans too many weeks or seasons.\n\n`error.code` is `upstream_error`.\n\nRequests spanning too many weeks or seasons are rejected with a `422`. Narrow the `week` or `season`\nlist and retry; `error.details.upstream_status` is `422`.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "RateLimited": {
        "description": "A read or export budget is exhausted.\n\n`error.code` is `rate_limited`.\n\nTwo causes share this status, told apart by `error.code`. `rate_limited` is this API's own\nper-account budget — so many reads a minute, so many exports a minute, across every operation here —\nand `error.details.scope` says which (`api` or `export`; `verify_ip` when too many API keys were\ntried from one address); `x-ratelimit-limit`, `x-ratelimit-remaining` and `x-ratelimit-reset` (epoch\nseconds) ride on every counted response, not only this one, so a client can watch its budget before\nit runs out. `upstream_error` is the data source's own metering refusing an export — reads and\nexports are metered separately there too — and `error.details.upstream_status` is `429`.\n`Retry-After` says when to come back, on either cause.",
        "headers": {
          "Retry-After": {
            "description": "Seconds to wait before retrying.",
            "required": false,
            "schema": {
              "type": "integer"
            }
          },
          "X-RateLimit-Limit": {
            "description": "The budget the refused request was counted against, in requests per window.",
            "required": false,
            "schema": {
              "type": "integer"
            }
          },
          "X-RateLimit-Remaining": {
            "description": "Requests left in the current window — `0` on a refusal.",
            "required": false,
            "schema": {
              "type": "integer"
            }
          },
          "X-RateLimit-Reset": {
            "description": "When the window resets, as seconds since the Unix epoch.",
            "required": false,
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "InternalError": {
        "description": "This API failed.\n\n`error.code` is `internal_error`.\n\nA fault in this API itself, not in the data behind it — that is reported as a `502`. Nothing of the\nunderlying error reaches the caller; `error.request_id` is what to quote when reporting it.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "UpstreamError": {
        "description": "The data behind this API could not be reached, or failed.\n\n`error.code` is `upstream_error`.\n\n`error.details.upstream_status` carries the status that came back, or `null` when there never was a\nresponse. Retryable, but not immediately.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "UpstreamUnavailable": {
        "description": "A dependency this API needs is temporarily unavailable.\n\n`error.code` is `upstream_error`.\n\nThree causes share this status, told apart by `error.code`. `upstream_error` covers export metering\nthat failed closed, and the identity provider being unreachable while verifying a credential or\nreading an account — both are retryable service states, not faults. `session_provisioning` means\nthis API is still setting up a session for a caller signing in for the first time, or after a long\ngap — retrying is the intended way to wait it out, never a sign of a broken request. `Retry-After`\nsays how long, on every cause.",
        "headers": {
          "Retry-After": {
            "description": "Seconds to wait before retrying.",
            "required": false,
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "UpstreamTimeout": {
        "description": "The request did not complete in time.\n\n`error.code` is `upstream_timeout`.\n\nThe `facet` family is allowed substantially longer than the rest, because an NCAA `division` fan-out\ngenuinely runs long. `error.details.upstream_timeout_ms` carries the deadline that fired when this\nAPI imposed it.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      }
    },
    "headers": {
      "CsvContentDisposition": {
        "description": "Present only when `format=csv`:\n`attachment; filename=\"<operationId[-selector]>_<league>[_<team|scope>]_<season>[_<weekGroup>|_<weekIds joined by ->].csv\"`.\n`team-directory` has neither a team nor a scope, so that segment is omitted —\n`team-directory_nfl_2025.csv`. Only `[A-Za-z0-9._-]` survive in the name; anything else becomes `-`.",
        "required": false,
        "schema": {
          "type": "string"
        }
      }
    },
    "securitySchemes": {
      "pffOAuth": {
        "type": "oauth2",
        "description": "Sign in with your PFF account in the browser (interactive use).",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://clerk.pff.com/oauth/authorize",
            "tokenUrl": "https://clerk.pff.com/oauth/token",
            "scopes": {
              "openid": "",
              "profile": "",
              "email": "",
              "offline_access": "stay signed in — lets the CLI refresh silently"
            }
          }
        }
      },
      "pffApiKey": {
        "type": "http",
        "scheme": "bearer",
        "description": "A PFF API key (ak_…) from www.pff.com/account/api-keys — for scripts and CI, never a browser."
      }
    }
  }
}