{
  "openapi": "3.1.1",
  "info": {
    "title": "Data API",
    "description": "Pokémon TCG card data: series, sets, cards and their physical variants, with the sealed products they come in\nand the Pokédex entries, artists and characters they reference.\n\n## Getting started\n\nEvery endpoint is a GET that returns JSON, at this address, and needs an API key (see API keys below). Any site\nmay call it from a browser. A typical way through the data:\n\n1. `/series` or `/sets`: the releases, by release date.\n2. `/sets/{id}/cards`: a set's checklist, every card in number order with its image.\n3. `/cards/{id}`: one card with its game text and every physical variant.\n4. `/variants/{id}`: one variant with the sets that list it and the sealed products it can come in. A\n   collection records its copies against variant ids.\n\nThe [status page](/status) shows the same data as pages, and links the requests each one was built from.\n\n## API keys\n\nSign in at [cardapiportal.cardcentral.gg](https://cardapiportal.cardcentral.gg) to create a key, and send it in\nthe `X-Api-Key` header of every request:\n\n```\ncurl -H \"X-Api-Key: cc_…\" https://cardapi.cardcentral.gg/sets\n```\n\nA key is shown once, when it is created; the portal lists your keys by their first characters and revokes\nthem. Keep a key on your server: one used in a page's own script is visible to everyone who opens the page.\nA request without a valid key gets `401 Unauthorized`.\n\n## Rate limits\n\nEach key may make 120 requests at once and 60 a minute after that, and each account 20,000 a\nday across its keys, unless the portal shows other limits for it. A request over a limit gets `429 Too Many Requests` with a\n`Retry-After` header, the seconds to wait. A `304 Not Modified` doesn't count, so revalidating with the\n`ETag` (see Versions and caching) is free.\n\n## Conventions\n\n- **Ids** are the data's own stable string ids: set `bs`, card `bs-2`, variant `bs-2:1st-edition`,\n  Pokédex form `0019-alola`. A variant id's `:` may also be sent as `%3A`.\n- **Vocabulary values** such as rarities, finishes, stamps and energy types are ids (`rare-holo`,\n  `reverse-holo`, `1st-edition`, `Water`), not display labels: labels such as \"1st Edition Holo\"\n  are up to the client. New values appear as the data grows.\n- **Energy symbols** inside card text are written as the type in braces: \"Discard a {Fire} Energy\".\n- **Fields without a value are left out** of a response rather than sent as `null`.\n- **Images** name their source and path, and their `url` once the source is hosted. Link to the `url` rather\n  than copying the image.\n\n## Versions and caching\n\n- The data is replaced when a new release is published; `/meta` names the data commit being served and when\n  it was imported.\n- Responses carry an `ETag` that changes only with the data or the API itself. Send it back as\n  `If-None-Match` to get `304 Not Modified` with no body. They may be cached for 60 seconds.\n- Responses are compressed (Brotli or gzip) for clients that send `Accept-Encoding`.\n\n## Errors\n\nErrors are problems (RFC 9457, `application/problem+json`) with the `status`, its `title` and a `detail` for\ndevelopers: `{ \"status\": 404, \"title\": \"Not Found\", \"detail\": \"Card not found.\" }`.\n\n## Changes\n\nNew endpoints, fields and vocabulary values appear as the data grows, so clients should ignore what they\ndon't know. Removing or renaming one is rare and deliberate: a breaking change.",
    "version": "1.0.0+166ce95d1a1e9c91e86d1f780e4eadb04ea9af1b"
  },
  "servers": [
    {
      "url": "https://cardapi.cardcentral.gg/"
    }
  ],
  "paths": {
    "/meta": {
      "get": {
        "tags": [
          "Meta"
        ],
        "summary": "Get the data version",
        "description": "The data commit being served, when it was imported, and the API commit serving it. It changes whenever a new data release goes live, so it also works as a cache key.",
        "operationId": "getMeta",
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetaResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/variants/{id}": {
      "get": {
        "tags": [
          "Variants"
        ],
        "summary": "Get a variant",
        "description": "A variant with its card, the sets that list it, such as the Trainer Deck a copy came in, and the sealed products\nit can come in. A card's variants are also part of `/cards/{id}`.",
        "operationId": "getVariant",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The variant id, e.g. `bs-2:1st-edition`. The `:` may also be sent as `%3A`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VariantDetailResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/product-variants/{id}": {
      "get": {
        "tags": [
          "Products"
        ],
        "summary": "Get a product variant",
        "description": "A product variant with its product and everything it holds, listing every card variant: the cards a pack can\ncontain or a deck's list. A variant that shares another's contents (`contentsOf`) holds that variant's.",
        "operationId": "getProductVariant",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The product variant id, e.g. `bs-booster-pack:1st-edition`. The `:` may also be sent as `%3A`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductVariantDetailResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/sets/{id}/products": {
      "get": {
        "tags": [
          "Products"
        ],
        "summary": "List a set's products",
        "description": "The sealed products that sell a set's cards, ordered by release date, then id: the set's product catalog.",
        "operationId": "listSetProducts",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The set id, e.g. `bs`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProductSummaryResponse"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/progress": {
      "get": {
        "tags": [
          "Progress"
        ],
        "summary": "Get the data's progress",
        "description": "Every series, ordered by the release date of its first set, and its sets by release date, each with how many\ncards are entered against its card counts, how many have images, and a status. A set that is known but not\nentered yet is in the data with its card count and no cards. Counted from the data being served, so it\nchanges with each data release.",
        "operationId": "getProgress",
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProgressResponse"
                }
              }
            }
          }
        }
      }
    },
    "/series": {
      "get": {
        "tags": [
          "Series"
        ],
        "summary": "List series",
        "description": "Every series, ordered by the release date of its first set: series have no order of their own.",
        "operationId": "listSeries",
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SeriesSummaryResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/series/{id}": {
      "get": {
        "tags": [
          "Series"
        ],
        "summary": "Get a series",
        "description": "A series with its sets, ordered by release date.",
        "operationId": "getSeries",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The series id, e.g. `original`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SeriesResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/sets": {
      "get": {
        "tags": [
          "Sets"
        ],
        "summary": "List sets",
        "description": "Every set of every series, ordered by release date.",
        "operationId": "listSets",
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SetSummaryResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/sets/{id}": {
      "get": {
        "tags": [
          "Sets"
        ],
        "summary": "Get a set",
        "description": "A set with its card counts, packaging text, logo, symbol, subsets and galleries. Its cards are in the checklist, `/sets/{id}/cards`.",
        "operationId": "getSet",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The set id, e.g. `bs`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SetResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/sets/{id}/cards": {
      "get": {
        "tags": [
          "Sets"
        ],
        "summary": "Get a set's checklist",
        "description": "The cards the set holds in checklist order. First its own, in the order they are numbered in: the main set,\nthen each subset in turn, a card numbered in several of them appearing in each. Then the cards of other sets\nit links, in the order of its links, each with the set it is filed in. Then the variants of those cards the set\nlinks, in the same order.",
        "operationId": "getChecklist",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The set id, e.g. `bs`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChecklistResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/cards": {
      "get": {
        "tags": [
          "Cards"
        ],
        "summary": "List cards",
        "description": "Every card, one page at a time: sets by release date, the cards of each set in checklist order. A page past the\nlast one is empty. For one set's cards, use its checklist, `/sets/{id}/cards`.",
        "operationId": "listCards",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "The page number, from 1. Defaults to 1.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "Cards per page, from 1 to 250. Defaults to 50.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PageResponseOfCardSummaryResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/cards/{id}": {
      "get": {
        "tags": [
          "Cards"
        ],
        "summary": "Get a card",
        "description": "A card with its game text, numbers, the Pokémon and characters it names, the ones drawn in its art (those it doesn't name marked as cameos), its artists, the pictures it is part of and every physical variant.",
        "operationId": "getCard",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The card id: `{set}-{number}`, e.g. `bs-2`, or `{set}-{subset}-{number}` for a card numbered only in a subset, e.g. `30c-rgb-R`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/stamps": {
      "get": {
        "tags": [
          "Reference entries"
        ],
        "summary": "List stamps",
        "description": "Marks printed on some variants, including the 1st Edition symbol. A variant's `stamps` are these ids.",
        "operationId": "listStamps",
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReferenceEntryResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/stamps/{id}": {
      "get": {
        "tags": [
          "Reference entries"
        ],
        "summary": "Get a stamp",
        "description": "A stamp with how to recognise it on a card.",
        "operationId": "getStamp",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The stamp id, e.g. `1st-edition`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferenceEntryResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/print-runs": {
      "get": {
        "tags": [
          "Reference entries"
        ],
        "summary": "List print runs",
        "description": "Print runs with physical differences of their own, such as Base Set's shadowless run. A variant's `printRun` is one of these ids.",
        "operationId": "listPrintRuns",
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReferenceEntryResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/print-runs/{id}": {
      "get": {
        "tags": [
          "Reference entries"
        ],
        "summary": "Get a print run",
        "description": "A print run with how to recognise it on a card.",
        "operationId": "getPrintRun",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The print run id, e.g. `shadowless`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferenceEntryResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/errors": {
      "get": {
        "tags": [
          "Reference entries"
        ],
        "summary": "List print errors",
        "description": "Kinds of print error shared by many cards, such as a wrong energy symbol. A variant's `errors` are these ids.",
        "operationId": "listErrors",
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReferenceEntryResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/errors/{id}": {
      "get": {
        "tags": [
          "Reference entries"
        ],
        "summary": "Get a print error",
        "description": "A print error with how to recognise it on a card.",
        "operationId": "getError",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The print error id, e.g. `energy-symbol`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferenceEntryResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/patterns": {
      "get": {
        "tags": [
          "Reference entries"
        ],
        "summary": "List foil patterns",
        "description": "What a variant's foil looks like, such as Cosmos or Poké Ball. A variant's `pattern` is one of these ids.",
        "operationId": "listPatterns",
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReferenceEntryResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/patterns/{id}": {
      "get": {
        "tags": [
          "Reference entries"
        ],
        "summary": "Get a foil pattern",
        "description": "A foil pattern with how to recognise it on a card.",
        "operationId": "getPattern",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The foil pattern id, e.g. `cosmos`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferenceEntryResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/artists": {
      "get": {
        "tags": [
          "Artists"
        ],
        "summary": "List artists",
        "description": "Every artist credited on a card, ordered by id.",
        "operationId": "listArtists",
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PersonResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/artists/{id}": {
      "get": {
        "tags": [
          "Artists"
        ],
        "summary": "Get an artist",
        "description": "An artist with their localized names.",
        "operationId": "getArtist",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The artist id, e.g. `ken-sugimori`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PersonResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/artists/{id}/cards": {
      "get": {
        "tags": [
          "Artists"
        ],
        "summary": "List an artist's cards",
        "description": "Every card that credits the artist, in the order of `/cards`: sets by release date, the cards of each set in checklist order.",
        "operationId": "listArtistCards",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The artist id, e.g. `ken-sugimori`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CardSummaryResponse"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/characters": {
      "get": {
        "tags": [
          "Characters"
        ],
        "summary": "List characters",
        "description": "Every person, trainer class and group a card shows or belongs to, ordered by id.",
        "operationId": "listCharacters",
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PersonResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/characters/{id}": {
      "get": {
        "tags": [
          "Characters"
        ],
        "summary": "Get a character",
        "description": "A character with their localized names and description.",
        "operationId": "getCharacter",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The character id, e.g. `arven`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PersonResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/characters/{id}/cards": {
      "get": {
        "tags": [
          "Characters"
        ],
        "summary": "List a character's cards",
        "description": "Every card that names or draws the character, in the order of `/cards`: sets by release date, the cards of each\nset in checklist order. A card that draws the character but doesn't name them is marked as a cameo.",
        "operationId": "listCharacterCards",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The character id, e.g. `arven`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CardAppearanceResponse"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/pokedex": {
      "get": {
        "tags": [
          "Pokédex"
        ],
        "summary": "List species",
        "description": "Every Pokémon species, in National Pokédex order, with its base form's types and artwork.",
        "operationId": "listSpecies",
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SpeciesSummaryResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/pokedex/{id}": {
      "get": {
        "tags": [
          "Pokédex"
        ],
        "summary": "Get a species",
        "description": "A species with its Pokédex facts and its forms. The forms' ids are what cards reference; each form has its own types, weaknesses, size, abilities, base stats and artwork.",
        "operationId": "getSpecies",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The National Pokédex number, zero-padded to 4 digits, e.g. `0019`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SpeciesResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/pokedex/{id}/cards": {
      "get": {
        "tags": [
          "Pokédex"
        ],
        "summary": "List a species' cards",
        "description": "Every card that names or draws one of the species' forms, in the order of `/cards`: sets by release date, the\ncards of each set in checklist order. A card that draws the species but doesn't name it is marked as a cameo.",
        "operationId": "listSpeciesCards",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The National Pokédex number, zero-padded to 4 digits, e.g. `0025`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CardAppearanceResponse"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/abilities": {
      "get": {
        "tags": [
          "Pokédex"
        ],
        "summary": "List abilities",
        "description": "Every video game ability a Pokédex form has, by id.",
        "operationId": "listAbilities",
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GameAbilityResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/abilities/{id}": {
      "get": {
        "tags": [
          "Pokédex"
        ],
        "summary": "Get an ability",
        "description": "A video game ability with its description.",
        "operationId": "getAbility",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The ability id, e.g. `poison-point`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GameAbilityResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/pictures": {
      "get": {
        "tags": [
          "Pictures"
        ],
        "summary": "List pictures",
        "description": "Every picture, ordered by id.",
        "operationId": "listPictures",
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PictureSummaryResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/pictures/{id}": {
      "get": {
        "tags": [
          "Pictures"
        ],
        "summary": "Get a picture",
        "description": "A picture with its cards laid out in a grid, ready to place side by side.",
        "operationId": "getPicture",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The picture id, e.g. `hs-lugia-legend`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PictureResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/products": {
      "get": {
        "tags": [
          "Products"
        ],
        "summary": "List products",
        "description": "Every sealed product, ordered by release date, then id.",
        "operationId": "listProducts",
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProductSummaryResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/products/{id}": {
      "get": {
        "tags": [
          "Products"
        ],
        "summary": "Get a product",
        "description": "A product with its artworks and its variants, the default first, each with the artworks it comes in and what\nit holds: how many card variants for a pack or a deck (`/product-variants/{id}` lists them), the product\nvariants for a box. A variant that shares another's contents names it in `contentsOf` instead.",
        "operationId": "getProduct",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The product id, e.g. `bs-booster-pack`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AbilityResponse": {
        "required": [
          "kind",
          "name",
          "text"
        ],
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "description": "What the card calls it: \"Pokémon Power\", \"Poké-Power\", \"Poké-Body\", \"Ability\" or \"Ancient Trait\"."
          },
          "special": {
            "examples": [
              "VSTAR Power"
            ],
            "type": "string",
            "description": "A header printed above it, e.g. \"VSTAR Power\"."
          },
          "name": {
            "type": "string",
            "description": "The name as printed."
          },
          "text": {
            "type": "string",
            "description": "The effect as printed."
          }
        },
        "description": "An ability, Poké-Power or Poké-Body printed on a Pokémon."
      },
      "AttackResponse": {
        "required": [
          "name",
          "cost"
        ],
        "type": "object",
        "properties": {
          "special": {
            "examples": [
              "GX"
            ],
            "type": "string",
            "description": "A header printed above it, e.g. \"GX\" or \"VSTAR Power\"."
          },
          "name": {
            "type": "string",
            "description": "The name as printed."
          },
          "cost": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The energy it costs, one type per symbol, e.g. [\"Fire\", \"Colorless\"]. Empty for a free attack."
          },
          "damage": {
            "examples": [
              "30"
            ],
            "type": "string",
            "description": "The damage as printed, e.g. \"30\", \"40+\" or \"20×\". Absent when blank."
          },
          "text": {
            "type": "string",
            "description": "The effect as printed."
          }
        },
        "description": "An attack printed on a Pokémon."
      },
      "CardAppearanceResponse": {
        "required": [
          "id",
          "setId",
          "name",
          "supertype",
          "cameo"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "bs-2"
            ],
            "type": "string",
            "description": "The card id, e.g. `bs-2`."
          },
          "setId": {
            "type": "string",
            "description": "The id of the set whose symbol and number the card prints."
          },
          "number": {
            "examples": [
              "032"
            ],
            "type": "string",
            "description": "The main-set number exactly as printed before the slash, e.g. \"032\". Absent for a card numbered only in a subset."
          },
          "displayNumber": {
            "examples": [
              "032/128"
            ],
            "type": "string",
            "description": "The number as it appears on the card in the set it is filed in, e.g. \"032/128\": its main-set number, or its first subset number for a card numbered only in a subset. Absent when the numbering has no count to show after the slash."
          },
          "name": {
            "type": "string",
            "description": "The card name as printed."
          },
          "supertype": {
            "type": "string",
            "description": "`pokemon`, `trainer` or `energy`."
          },
          "rarity": {
            "examples": [
              "rare-holo"
            ],
            "type": "string",
            "description": "The rarity symbol as an id, e.g. `rare-holo`. Absent when the card has none or it isn't known yet."
          },
          "image": {
            "description": "The image of the card's default variant.",
            "$ref": "#/components/schemas/ImageResponse"
          },
          "forms": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "For a species, which of its forms the card names or draws, in Pokédex order, e.g. [\"0019-alola\"]. Absent for a character."
          },
          "cameo": {
            "type": "boolean",
            "description": "True when the card draws it but doesn't name it, e.g. Pikachu on Special Delivery Charizard; false when the card names it, as its own Pokémon (one of several on a Tag Team), a Supporter's person or a Trainer's owner, drawn or not. See `cameo` on `/cards/{id}`."
          }
        },
        "description": "A card a Pokémon or character is on: named by it, drawn in its art, or both."
      },
      "CardCountResponse": {
        "required": [
          "total"
        ],
        "type": "object",
        "properties": {
          "printed": {
            "type": "integer",
            "description": "The number printed after the slash, e.g. 102 on \"4/102\". Absent when no count is printed, e.g. when the numbers themselves are not on the cards.",
            "format": "int32"
          },
          "total": {
            "type": "integer",
            "description": "All cards, including secret rares numbered past the printed count.",
            "format": "int32"
          }
        },
        "description": "How many cards a set or subset numbers."
      },
      "CardPictureResponse": {
        "required": [
          "id",
          "name",
          "row",
          "column"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "hs-lugia-legend"
            ],
            "type": "string",
            "description": "The picture id, e.g. `hs-lugia-legend`. See `/pictures/{id}` for the whole grid."
          },
          "name": {
            "examples": [
              "Lugia LEGEND"
            ],
            "type": "string",
            "description": "The picture's name, e.g. \"Lugia LEGEND\"."
          },
          "row": {
            "type": "integer",
            "description": "The card's row in the grid, from 0 at the top.",
            "format": "int32"
          },
          "column": {
            "type": "integer",
            "description": "The card's column in the grid, from 0 at the left.",
            "format": "int32"
          }
        },
        "description": "A picture the card is part of, with the card's place in it."
      },
      "CardResponse": {
        "required": [
          "id",
          "setId",
          "name",
          "supertype",
          "displayNumbers",
          "pokemon",
          "illustratedPokemon",
          "artists",
          "characters",
          "illustratedCharacters",
          "pictures",
          "variants"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "bs-2"
            ],
            "type": "string",
            "description": "The card id: `{set}-{number}`, e.g. `bs-2`, or `{set}-{subset}-{number}` for a card numbered only in a subset."
          },
          "setId": {
            "type": "string",
            "description": "The id of the set whose symbol and number the card prints."
          },
          "number": {
            "examples": [
              "032"
            ],
            "type": "string",
            "description": "The main-set number exactly as printed before the slash, e.g. \"032\" on 032/128. Absent for a card numbered only in a subset."
          },
          "printedNumber": {
            "type": "string",
            "description": "The number printed on the card when it can't be built from its numbers, e.g. a reprint that carries its original set's number (\"123/172\")."
          },
          "reprintOf": {
            "type": "string",
            "description": "The id of the card this reprints."
          },
          "name": {
            "type": "string",
            "description": "The card name as printed."
          },
          "supertype": {
            "type": "string",
            "description": "`pokemon`, `trainer` or `energy`."
          },
          "subtypes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Categories with rules or collecting relevance of their own, e.g. `ex-sv`, `tag-team` or `full-art`."
          },
          "rarity": {
            "examples": [
              "rare-holo"
            ],
            "type": "string",
            "description": "The rarity symbol as an id, e.g. `rare-holo`. Absent when the card has none or it isn't known yet."
          },
          "regulationMark": {
            "examples": [
              "G"
            ],
            "type": "string",
            "description": "The letter in the bottom-left corner of modern cards, e.g. \"G\"."
          },
          "legalities": {
            "description": "Whether the card may be played in each format.",
            "$ref": "#/components/schemas/LegalitiesResponse"
          },
          "rules": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Rule boxes and standard rule lines, in printed order, e.g. \"You may play only 1 Supporter card during your turn.\"."
          },
          "stage": {
            "examples": [
              "Basic"
            ],
            "type": "string",
            "description": "The printed evolution stage, e.g. \"Basic\", \"Stage 1\" or \"VMAX\"."
          },
          "hp": {
            "type": "integer",
            "description": "The printed HP. Also on Trainers played as Pokémon, such as Clefairy Doll.",
            "format": "int32"
          },
          "level": {
            "examples": [
              "34"
            ],
            "type": "string",
            "description": "The printed level, e.g. \"34\" or \"X\"."
          },
          "types": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The Pokémon's energy types, e.g. [\"Water\"]."
          },
          "evolvesFrom": {
            "examples": [
              "Kadabra"
            ],
            "type": "string",
            "description": "The printed \"Evolves from\" name, e.g. \"Kadabra\". It is a game rule (any card with that name), not a Pokédex reference."
          },
          "evolvesInto": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Printed \"Evolves into\" names, only on cards that print them, such as Buried Fossil."
          },
          "abilities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AbilityResponse"
            },
            "description": "Abilities, Poké-Powers and Poké-Bodies, in printed order."
          },
          "attacks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AttackResponse"
            },
            "description": "Attacks, in printed order."
          },
          "weaknesses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModifierResponse"
            },
            "description": "Weaknesses, in printed order."
          },
          "resistances": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModifierResponse"
            },
            "description": "Resistances, in printed order."
          },
          "retreatCost": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The energy it costs to retreat, one type per symbol. Empty for a free retreat."
          },
          "flavorText": {
            "type": "string",
            "description": "The flavor text printed on the card, usually its Pokédex entry."
          },
          "trainerType": {
            "examples": [
              "Item"
            ],
            "type": "string",
            "description": "The printed Trainer subtype, e.g. \"Item\", \"Supporter\", \"Stadium\" or \"Pokémon Tool\". Absent on early cards that only say \"Trainer\"."
          },
          "text": {
            "type": "string",
            "description": "A Trainer's or Energy's own effect, as printed."
          },
          "energyKind": {
            "type": "string",
            "description": "`basic` or `special`."
          },
          "provides": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The energy types an Energy card provides."
          },
          "displayNumbers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DisplayNumberResponse"
            },
            "description": "Every number the card has: its main-set number first, then its subset numbers."
          },
          "pokemon": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FormReferenceResponse"
            },
            "description": "The Pokémon the card names: a Pokémon card's own Pokémon (all of them on a Tag Team or LEGEND card), or the Pokémon in a Trainer's name, such as Rotom Phone. Empty for Energy, most Trainers and Pokémon cards that aren't a species, such as Buried Fossil."
          },
          "illustratedPokemon": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IllustratedReferenceResponse"
            },
            "description": "Every Pokémon drawn in the art, including the background, each marked as a cameo when the card doesn't name it."
          },
          "artists": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NamedReferenceResponse"
            },
            "description": "The artists credited on the card, in printed order. See `/artists`."
          },
          "characters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NamedReferenceResponse"
            },
            "description": "The characters the card names: a Supporter's person, the owner of a Trainer's Pokémon (Erika's Clefable), a possessive Trainer (Brock's Grit). See `/characters`."
          },
          "illustratedCharacters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IllustratedReferenceResponse"
            },
            "description": "Every character drawn in the art, each marked as a cameo when the card doesn't name them. See `/characters`."
          },
          "pictures": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CardPictureResponse"
            },
            "description": "The pictures the card's art forms with other cards, such as the two halves of a Pokémon LEGEND, by id. Empty for most cards."
          },
          "variants": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VariantResponse"
            },
            "description": "The card's physical versions; the first is the default."
          }
        },
        "description": "One card design as printed, filed in the set whose symbol and number it prints. Which fields are present depends on\nthe supertype: Pokémon have stage, HP, types, attacks and retreat cost; Trainers and Energy have text."
      },
      "CardSummaryResponse": {
        "required": [
          "id",
          "setId",
          "name",
          "supertype"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "bs-2"
            ],
            "type": "string",
            "description": "The card id, e.g. `bs-2`."
          },
          "setId": {
            "type": "string",
            "description": "The id of the set whose symbol and number the card prints."
          },
          "number": {
            "examples": [
              "032"
            ],
            "type": "string",
            "description": "The main-set number exactly as printed before the slash, e.g. \"032\". Absent for a card numbered only in a subset."
          },
          "displayNumber": {
            "examples": [
              "032/128"
            ],
            "type": "string",
            "description": "The number as it appears on the card in the set it is filed in, e.g. \"032/128\": its main-set number, or its first subset number for a card numbered only in a subset. Absent when the numbering has no count to show after the slash."
          },
          "name": {
            "type": "string",
            "description": "The card name as printed."
          },
          "supertype": {
            "type": "string",
            "description": "`pokemon`, `trainer` or `energy`."
          },
          "rarity": {
            "examples": [
              "rare-holo"
            ],
            "type": "string",
            "description": "The rarity symbol as an id, e.g. `rare-holo`. Absent when the card has none or it isn't known yet."
          },
          "image": {
            "description": "The image of the card's default variant.",
            "$ref": "#/components/schemas/ImageResponse"
          }
        },
        "description": "A card in a list."
      },
      "ChecklistCardResponse": {
        "required": [
          "id",
          "name",
          "supertype",
          "setId",
          "printed"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "bs-2"
            ],
            "type": "string",
            "description": "The card id, e.g. `bs-2`."
          },
          "name": {
            "type": "string",
            "description": "The card name as printed."
          },
          "supertype": {
            "type": "string",
            "description": "`pokemon`, `trainer` or `energy`."
          },
          "rarity": {
            "examples": [
              "rare-holo"
            ],
            "type": "string",
            "description": "The rarity symbol as an id, e.g. `rare-holo`. Absent when the card has none or it isn't known yet."
          },
          "number": {
            "examples": [
              "032"
            ],
            "type": "string",
            "description": "The card's number in this list, exactly as printed before the slash, e.g. \"032\". Absent for a subset member without its own number, and for a card of another set that this set lists without numbering it."
          },
          "displayNumber": {
            "examples": [
              "032/128"
            ],
            "type": "string",
            "description": "The number as it appears on the card, e.g. \"032/128\" or \"TG01/TG30\", or just the number for cards printed without a slash. A card this set lists without numbering it shows its number in the set it is filed in. Absent when the numbering has no count to show after the slash."
          },
          "setId": {
            "type": "string",
            "description": "The set the card is filed in: this set, or for a card it links, another."
          },
          "image": {
            "description": "The image of the card's default variant.",
            "$ref": "#/components/schemas/ImageResponse"
          },
          "printed": {
            "type": "boolean",
            "description": "False when the numbering is official but not printed on the cards (e.g. the Classic Collection's 1–30, whose cards show their original number): show it as a position, not as the printed number."
          }
        },
        "description": "One line of a checklist: a card at its number in the main set or a subset, or a card of another set the set links."
      },
      "ChecklistResponse": {
        "required": [
          "setId",
          "main",
          "subsets",
          "variants"
        ],
        "type": "object",
        "properties": {
          "setId": {
            "type": "string",
            "description": "The set id."
          },
          "main": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChecklistCardResponse"
            },
            "description": "The set's own cards with a main-set number, in checklist order, then the cards of other sets it links, in the order of its links."
          },
          "subsets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChecklistSubsetResponse"
            },
            "description": "Each subset's cards, in the order the set lists its subsets."
          },
          "variants": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ListedVariantResponse"
            },
            "description": "The variants of other sets' cards the set links, in its order; their cards are in `main`."
          }
        },
        "description": "A set's checklist."
      },
      "ChecklistSubsetResponse": {
        "required": [
          "id",
          "cards"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The subset id."
          },
          "name": {
            "type": "string",
            "description": "The subset's official name. Absent when it has none."
          },
          "cards": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChecklistCardResponse"
            },
            "description": "The subset's cards, in checklist order."
          }
        },
        "description": "A subset's part of a checklist."
      },
      "DisplayNumberResponse": {
        "required": [
          "printed"
        ],
        "type": "object",
        "properties": {
          "subset": {
            "type": "string",
            "description": "The subset id. Absent for the main-set number."
          },
          "number": {
            "examples": [
              "032"
            ],
            "type": "string",
            "description": "The number exactly as printed before the slash, e.g. \"032\". Absent for a subset member without its own number."
          },
          "text": {
            "examples": [
              "032/128"
            ],
            "type": "string",
            "description": "The number as it appears on the card, e.g. \"032/128\", or just the number for cards printed without a slash. Absent when there is no number or no count to show after the slash."
          },
          "printed": {
            "type": "boolean",
            "description": "False when the numbering is official but not printed on the cards (e.g. the Classic Collection's 1–30, whose cards show their original number)."
          }
        },
        "description": "A number the card has, in its set's main numbering or in a subset."
      },
      "FormAbilityResponse": {
        "required": [
          "id",
          "name",
          "description",
          "hidden"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "poison-point"
            ],
            "type": "string",
            "description": "The ability id, e.g. `poison-point`."
          },
          "name": {
            "examples": [
              "Poison Point"
            ],
            "type": "string",
            "description": "The ability's English name, e.g. \"Poison Point\"."
          },
          "description": {
            "examples": [
              "Contact with the Pokémon may poison the attacker."
            ],
            "type": "string",
            "description": "What it does, e.g. \"Contact with the Pokémon may poison the attacker.\""
          },
          "hidden": {
            "type": "boolean",
            "description": "True for the form's hidden ability."
          }
        },
        "description": "An ability a form has in the games."
      },
      "FormReferenceResponse": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "0019"
            ],
            "type": "string",
            "description": "The form id: the National Pokédex number for the base form, e.g. `0019`, with a suffix for other forms, e.g. `0019-alola`."
          },
          "name": {
            "examples": [
              "Alolan Rattata"
            ],
            "type": "string",
            "description": "The form's name, e.g. \"Alolan Rattata\"; the species name for the base form."
          }
        },
        "description": "A Pokédex form a card names."
      },
      "FormResponse": {
        "required": [
          "id",
          "types",
          "weaknesses",
          "flavorText",
          "genderless",
          "abilities"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "0019"
            ],
            "type": "string",
            "description": "The form id: the species id for the base form, e.g. `0019`, with a suffix for other forms, e.g. `0019-alola`."
          },
          "name": {
            "examples": [
              "Alolan Rattata"
            ],
            "type": "string",
            "description": "The form's name, e.g. \"Alolan Rattata\". Absent for the base form, which goes by the species name."
          },
          "types": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The form's video game types (not TCG energy types), e.g. [\"Dark\", \"Normal\"]."
          },
          "weaknesses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WeaknessResponse"
            },
            "description": "The types that deal it more than normal damage in the games, the strongest first, derived from its types."
          },
          "evolvesFrom": {
            "type": "string",
            "description": "The id of the form this one evolves from."
          },
          "category": {
            "examples": [
              "Mouse"
            ],
            "type": "string",
            "description": "The Pokédex category without \"Pokémon\", e.g. \"Mouse\"."
          },
          "flavorText": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The form's Pokédex entries, as pokemon.com shows them; the species' unless the form has its own."
          },
          "gender": {
            "description": "The share of each gender in percent; absent when the form is genderless.",
            "$ref": "#/components/schemas/GenderResponse"
          },
          "genderless": {
            "type": "boolean",
            "description": "True when the form has no gender."
          },
          "height": {
            "type": "number",
            "description": "Height in metres, e.g. 0.3.",
            "format": "double"
          },
          "weight": {
            "type": "number",
            "description": "Weight in kilograms, e.g. 3.8.",
            "format": "double"
          },
          "abilities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FormAbilityResponse"
            },
            "description": "The form's abilities in the games: the regular ones in order, then the hidden one."
          },
          "stats": {
            "description": "The form's base stats in the games.",
            "$ref": "#/components/schemas/StatsResponse"
          },
          "image": {
            "description": "The form's official artwork.",
            "$ref": "#/components/schemas/ImageResponse"
          }
        },
        "description": "A form of a species, such as Alolan Rattata, with what it takes from its base form and species filled in. Cards reference forms, not species."
      },
      "GameAbilityResponse": {
        "required": [
          "id",
          "name",
          "description"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "poison-point"
            ],
            "type": "string",
            "description": "The ability id, e.g. `poison-point`."
          },
          "name": {
            "examples": [
              "Poison Point"
            ],
            "type": "string",
            "description": "The ability's English name, e.g. \"Poison Point\"."
          },
          "description": {
            "examples": [
              "Contact with the Pokémon may poison the attacker."
            ],
            "type": "string",
            "description": "What it does, as pokemon.com describes it, e.g. \"Contact with the Pokémon may poison the attacker.\""
          }
        },
        "description": "A video game ability of Pokédex forms (not a TCG card ability)."
      },
      "GenderResponse": {
        "required": [
          "male",
          "female"
        ],
        "type": "object",
        "properties": {
          "male": {
            "type": "number",
            "description": "Percent male, e.g. 87.5.",
            "format": "double"
          },
          "female": {
            "type": "number",
            "description": "Percent female, e.g. 12.5.",
            "format": "double"
          }
        },
        "description": "The share of each gender, in percent."
      },
      "IllustratedReferenceResponse": {
        "required": [
          "id",
          "name",
          "cameo",
          "boxes"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "0025"
            ],
            "type": "string",
            "description": "The Pokédex form id for a Pokémon, e.g. `0025`; the character id for a character, e.g. `arven`."
          },
          "name": {
            "examples": [
              "Pikachu"
            ],
            "type": "string",
            "description": "The form's or character's name, e.g. \"Pikachu\"."
          },
          "cameo": {
            "type": "boolean",
            "description": "True when the card doesn't name it (it isn't in the card's `pokemon` or `characters`), e.g. Pikachu on Special Delivery Charizard."
          },
          "boxes": {
            "type": "array",
            "items": {
              "type": "array",
              "items": {
                "type": "number",
                "format": "double"
              }
            },
            "description": "Where it is drawn, one box per drawing: `[left, top, right, bottom]` as fractions of the card face from its top-left corner, e.g. `[0.63, 0.6, 0.88, 0.73]`. Approximate, for pointing it out. Empty when not recorded."
          }
        },
        "description": "A Pokémon or character drawn in a card's art."
      },
      "ImageResponse": {
        "required": [
          "source",
          "path"
        ],
        "type": "object",
        "properties": {
          "source": {
            "examples": [
              "pokemontcg"
            ],
            "type": "string",
            "description": "The id of the image source, e.g. `pokemontcg`, `community` (this project's own scans), `community-products` (its product photos), `community-sets` (its set logos), `m-stanley3d` (its set symbols) or `pokeapi` (official Pokédex artwork)."
          },
          "path": {
            "type": "string",
            "description": "The image's path within the source."
          },
          "url": {
            "type": "string",
            "description": "The image URL. Absent while the source is not hosted yet, as with this project's own scans."
          }
        },
        "description": "Where to fetch a card or product variant's image, a set's logo or symbol, or a Pokédex form's artwork."
      },
      "LegalitiesResponse": {
        "type": "object",
        "properties": {
          "unlimited": {
            "type": "string",
            "description": "`legal` or `banned` in the Unlimited format."
          },
          "standard": {
            "type": "string",
            "description": "`legal` or `banned` in the Standard format."
          },
          "expanded": {
            "type": "string",
            "description": "`legal` or `banned` in the Expanded format."
          }
        },
        "description": "Whether the card may be played in each format. A format is absent when its legality isn't recorded."
      },
      "ListedVariantResponse": {
        "required": [
          "variantId",
          "cardId",
          "cardName",
          "fullName",
          "finish"
        ],
        "type": "object",
        "properties": {
          "variantId": {
            "examples": [
              "bs-2:trainer-deck-b"
            ],
            "type": "string",
            "description": "The variant id, e.g. `bs-2:trainer-deck-b`."
          },
          "cardId": {
            "type": "string",
            "description": "The id of the variant's card."
          },
          "cardName": {
            "type": "string",
            "description": "The card name as printed."
          },
          "fullName": {
            "examples": [
              "Trainer Deck B"
            ],
            "type": "string",
            "description": "The variant's readable name, e.g. \"Trainer Deck B\". See the variant's `fullName`."
          },
          "finish": {
            "type": "string",
            "description": "Where the foil is: `normal`, `holo` or `reverse-holo`, or `lenticular` for a ridged lens over the card instead of foil (some jumbos)."
          },
          "count": {
            "type": "integer",
            "description": "Copies of this variant in the product, when known.",
            "format": "int32"
          },
          "image": {
            "description": "The variant's image, or its card's default image when it has none of its own.",
            "$ref": "#/components/schemas/ImageResponse"
          }
        },
        "description": "A variant of another set's card that this set links, such as a Trainer Deck's copy of a Base Set card or a Trainer Gallery card's holo."
      },
      "MetaResponse": {
        "required": [
          "importedAt"
        ],
        "type": "object",
        "properties": {
          "sourceCommit": {
            "type": "string",
            "description": "The commit of the card data repository the data was imported from. Absent when unknown."
          },
          "importedAt": {
            "type": "string",
            "description": "When the data was imported.",
            "format": "date-time"
          },
          "apiCommit": {
            "type": "string",
            "description": "The commit of this API's code that is serving it. Absent when unknown, as in a local build outside git."
          }
        },
        "description": "Which data is being served."
      },
      "ModifierResponse": {
        "required": [
          "type",
          "value"
        ],
        "type": "object",
        "properties": {
          "type": {
            "examples": [
              "Water"
            ],
            "type": "string",
            "description": "The energy type it applies to, e.g. `Water`."
          },
          "value": {
            "examples": [
              "×2"
            ],
            "type": "string",
            "description": "The modifier as printed, e.g. \"×2\", \"-30\" or \"+20\"."
          }
        },
        "description": "A weakness or resistance."
      },
      "NamedReferenceResponse": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "ken-sugimori"
            ],
            "type": "string",
            "description": "The id, e.g. `ken-sugimori`."
          },
          "name": {
            "type": "string",
            "description": "The name."
          }
        },
        "description": "An artist or character a card credits or names."
      },
      "NumberingProgressResponse": {
        "required": [
          "entered"
        ],
        "type": "object",
        "properties": {
          "subset": {
            "type": "string",
            "description": "The subset id. Absent for the main set."
          },
          "name": {
            "type": "string",
            "description": "The subset's official name. Absent for the main set and for subsets without one."
          },
          "entered": {
            "type": "integer",
            "description": "Cards entered in this numbering.",
            "format": "int32"
          },
          "expected": {
            "type": "integer",
            "description": "The numbering's card count, including secret rares; for the main set of a set without one, how many cards of other sets it links. Absent otherwise: it is then not counted.",
            "format": "int32"
          }
        },
        "description": "Cards entered in one numbering of a set: its main set or a subset."
      },
      "PageResponseOfCardSummaryResponse": {
        "required": [
          "items",
          "page",
          "pageSize",
          "total"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CardSummaryResponse"
            },
            "description": "The items on this page; empty past the last page."
          },
          "page": {
            "type": "integer",
            "description": "The page number, from 1.",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "description": "The most items a page holds.",
            "format": "int32"
          },
          "total": {
            "type": "integer",
            "description": "The number of items across all pages.",
            "format": "int32"
          }
        },
        "description": "One page of a long list."
      },
      "PersonResponse": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "ken-sugimori"
            ],
            "type": "string",
            "description": "The id, e.g. `ken-sugimori` or `arven`."
          },
          "name": {
            "type": "string",
            "description": "The name in English."
          },
          "names": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Localized names keyed by language code, e.g. { \"ja\": \"杉森建\" }."
          },
          "description": {
            "type": "string",
            "description": "Who the character is. Only characters have one."
          }
        },
        "description": "An artist, or a character: a person, trainer class or group a card shows or belongs to."
      },
      "PictureCardResponse": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The card id."
          },
          "name": {
            "type": "string",
            "description": "The card name as printed."
          },
          "image": {
            "description": "The image of the card's default variant.",
            "$ref": "#/components/schemas/ImageResponse"
          }
        },
        "description": "A card at its place in a picture."
      },
      "PictureResponse": {
        "required": [
          "id",
          "name",
          "grid"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "hs-lugia-legend"
            ],
            "type": "string",
            "description": "The picture id, e.g. `hs-lugia-legend`."
          },
          "name": {
            "examples": [
              "Lugia LEGEND"
            ],
            "type": "string",
            "description": "The picture's name, e.g. \"Lugia LEGEND\"."
          },
          "description": {
            "type": "string",
            "description": "A description of the picture."
          },
          "grid": {
            "type": "array",
            "items": {
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/components/schemas/PictureCardResponse"
                  }
                ]
              }
            },
            "description": "The layout: rows from top to bottom, cards from left to right, `null` for an empty spot. Two stacked LEGEND halves are [[top], [bottom]]."
          }
        },
        "description": "Cards whose art forms one picture when laid out together, whether they are played together (Pokémon LEGEND,\nV-UNION) or were released years apart. Each card stays its own card."
      },
      "PictureSummaryResponse": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "hs-lugia-legend"
            ],
            "type": "string",
            "description": "The picture id, e.g. `hs-lugia-legend`."
          },
          "name": {
            "examples": [
              "Lugia LEGEND"
            ],
            "type": "string",
            "description": "The picture's name, e.g. \"Lugia LEGEND\"."
          }
        },
        "description": "A picture in a list."
      },
      "ProblemDetails": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "A URI for the kind of problem: the section of RFC 9110 that defines the status."
          },
          "title": {
            "type": "string",
            "description": "The status's name, e.g. \"Not Found\"."
          },
          "status": {
            "type": "integer",
            "description": "The HTTP status code, e.g. 404.",
            "format": "int32"
          },
          "detail": {
            "type": "string",
            "description": "What went wrong, in English, for developers, e.g. \"Card not found.\". Absent when the title says it all, as for a path the API doesn't have."
          },
          "traceId": {
            "type": "string",
            "description": "The request's id in the API's logs, to quote when reporting a problem."
          }
        },
        "description": "Why a request failed: an RFC 9457 problem, sent as `application/problem+json`."
      },
      "ProductArtworkResponse": {
        "required": [
          "id",
          "name",
          "pokemon",
          "artists",
          "characters"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "charizard"
            ],
            "type": "string",
            "description": "The artwork id, unique within the product, e.g. `charizard`. A collection records a sealed copy against the variant id and this id."
          },
          "name": {
            "examples": [
              "Charizard"
            ],
            "type": "string",
            "description": "What collectors call it, e.g. \"Charizard\"."
          },
          "pokemon": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FormReferenceResponse"
            },
            "description": "The Pokémon in the artwork, in the data's order."
          },
          "artists": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NamedReferenceResponse"
            },
            "description": "Everyone credited for the artwork."
          },
          "characters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NamedReferenceResponse"
            },
            "description": "The people in the artwork."
          },
          "image": {
            "description": "The default variant's image in this artwork, or the first variant's that has one.",
            "$ref": "#/components/schemas/ImageResponse"
          }
        },
        "description": "One design a product comes in, such as the Charizard wrapper of a booster pack."
      },
      "ProductArtworkSummaryResponse": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "scyther"
            ],
            "type": "string",
            "description": "The artwork id, unique within the product, e.g. `scyther`."
          },
          "name": {
            "examples": [
              "Scyther"
            ],
            "type": "string",
            "description": "What collectors call it, e.g. \"Scyther\"."
          },
          "image": {
            "description": "The variant's image in this artwork, or another variant's (the default first) when it has none.",
            "$ref": "#/components/schemas/ImageResponse"
          }
        },
        "description": "An artwork a product variant comes in, named in a list of product variants."
      },
      "ProductCardResponse": {
        "required": [
          "variantId",
          "cardId",
          "cardName",
          "fullName",
          "finish"
        ],
        "type": "object",
        "properties": {
          "variantId": {
            "examples": [
              "bs-4:1st-edition"
            ],
            "type": "string",
            "description": "The card variant id, e.g. `bs-4:1st-edition`."
          },
          "cardId": {
            "type": "string",
            "description": "The card id."
          },
          "cardName": {
            "type": "string",
            "description": "The card name as printed."
          },
          "fullName": {
            "examples": [
              "1st Edition Holo"
            ],
            "type": "string",
            "description": "The variant's full name, e.g. \"1st Edition Holo\"."
          },
          "finish": {
            "type": "string",
            "description": "Where the foil is: `normal`, `holo` or `reverse-holo`, or `lenticular` for a ridged lens over the card instead of foil (some jumbos)."
          },
          "image": {
            "description": "The variant's image, or the card's default image when it has none of its own.",
            "$ref": "#/components/schemas/ImageResponse"
          }
        },
        "description": "A card variant a product holds."
      },
      "ProductContentCardsResponse": {
        "required": [
          "count",
          "visible",
          "cards",
          "products"
        ],
        "type": "object",
        "properties": {
          "count": {
            "type": "integer",
            "description": "How many items the product holds from this entry, e.g. 11 cards in a pack, 3 copies of a card in a deck, or 36 packs in a box.",
            "format": "int32"
          },
          "visible": {
            "type": "boolean",
            "description": "The items show through the packaging, e.g. the pack in a blister. A sealed copy is then told apart by which of them it holds, down to a product's artwork, wherever that leaves more than one choice; hidden items, such as the packs in a box, are not."
          },
          "cards": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductCardResponse"
            },
            "description": "The card variants the items are drawn from, in the data's order. Empty when the entry holds products."
          },
          "products": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductVariantSummaryResponse"
            },
            "description": "The product variants the items are drawn from, e.g. the packs in a box. Empty when the entry holds cards."
          }
        },
        "description": "One entry of a product variant's contents, with its card variants: Count items drawn from these card variants or these product variants."
      },
      "ProductContentResponse": {
        "required": [
          "count",
          "visible",
          "cardCount",
          "products"
        ],
        "type": "object",
        "properties": {
          "count": {
            "type": "integer",
            "description": "How many items the product holds from this entry, e.g. 11 cards in a pack or 36 packs in a box.",
            "format": "int32"
          },
          "visible": {
            "type": "boolean",
            "description": "The items show through the packaging, e.g. the pack in a blister. A sealed copy is then told apart by which of them it holds, down to a product's artwork, wherever that leaves more than one choice; hidden items, such as the packs in a box, are not."
          },
          "cardCount": {
            "type": "integer",
            "description": "How many card variants the items are drawn from, e.g. 102 for a pack. 0 when the entry holds products.",
            "format": "int32"
          },
          "products": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductVariantSummaryResponse"
            },
            "description": "The product variants the items are drawn from, e.g. the packs in a box. Empty when the entry holds cards."
          }
        },
        "description": "One entry of a product variant's contents: Count items drawn from card variants or from these product variants.\nThe card variants are listed at `/product-variants/{id}`."
      },
      "ProductResponse": {
        "required": [
          "id",
          "name",
          "kind",
          "set",
          "releaseDate",
          "artworks",
          "variants"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "bs-booster-pack"
            ],
            "type": "string",
            "description": "The product id, e.g. `bs-booster-pack`."
          },
          "name": {
            "examples": [
              "Base Set Booster Pack"
            ],
            "type": "string",
            "description": "The product's name, e.g. \"Base Set Booster Pack\"."
          },
          "kind": {
            "type": "string",
            "description": "What it is: `booster-pack`, `booster-box`, `starter-set` or `theme-deck` (a fixed deck, whose contents list each card with its count), or `blister` (packs sealed on a card)."
          },
          "set": {
            "description": "The set whose cards it sells.",
            "$ref": "#/components/schemas/SetSummaryResponse"
          },
          "releaseDate": {
            "type": "string",
            "description": "The release date, `yyyy-MM-dd`.",
            "format": "date"
          },
          "artworks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductArtworkResponse"
            },
            "description": "The designs it comes in, e.g. the Charizard, Blastoise and Venusaur wrappers. Empty when it has no artwork."
          },
          "image": {
            "description": "The default variant's image.",
            "$ref": "#/components/schemas/ImageResponse"
          },
          "variants": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductVariantResponse"
            },
            "description": "The physical versions, the default first."
          }
        },
        "description": "A sealed product: one item, such as a booster pack, with the artworks it comes in (one per wrapper art), its\nphysical variants and what each holds. A collection records a sealed copy against a variant id and, when the\nproduct has artworks, an artwork id."
      },
      "ProductSummaryResponse": {
        "required": [
          "id",
          "name",
          "kind",
          "setId",
          "releaseDate"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "bs-booster-pack"
            ],
            "type": "string",
            "description": "The product id, e.g. `bs-booster-pack`."
          },
          "name": {
            "examples": [
              "Base Set Booster Pack"
            ],
            "type": "string",
            "description": "The product's name, e.g. \"Base Set Booster Pack\"."
          },
          "kind": {
            "type": "string",
            "description": "What it is: `booster-pack`, `booster-box`, `starter-set` or `theme-deck` (a fixed deck, whose contents list each card with its count), or `blister` (packs sealed on a card)."
          },
          "setId": {
            "type": "string",
            "description": "The id of the set whose cards it sells."
          },
          "releaseDate": {
            "type": "string",
            "description": "The release date, `yyyy-MM-dd`.",
            "format": "date"
          },
          "image": {
            "description": "The default variant's image (see the variant's `image`).",
            "$ref": "#/components/schemas/ImageResponse"
          }
        },
        "description": "A product in a list."
      },
      "ProductVariantDetailResponse": {
        "required": [
          "variant",
          "product",
          "contents"
        ],
        "type": "object",
        "properties": {
          "variant": {
            "description": "The variant, its contents counted as in `/products/{id}`.",
            "$ref": "#/components/schemas/ProductVariantResponse"
          },
          "product": {
            "description": "The variant's product.",
            "$ref": "#/components/schemas/ProductSummaryResponse"
          },
          "contents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductContentCardsResponse"
            },
            "description": "What it holds, entry by entry, with every card variant: its own contents, or those of the variant it shares them with (`contentsOf`)."
          }
        },
        "description": "A product variant with its product and everything it holds."
      },
      "ProductVariantImageResponse": {
        "required": [
          "artwork"
        ],
        "type": "object",
        "properties": {
          "artwork": {
            "type": "string",
            "description": "The artwork id."
          },
          "image": {
            "description": "The variant's image in this artwork, or another variant's (the default first) when it has none. Absent when no variant has one.",
            "$ref": "#/components/schemas/ImageResponse"
          }
        },
        "description": "A product variant's image in one of its artworks, e.g. the 1st Edition pack in the Charizard wrapper."
      },
      "ProductVariantResponse": {
        "required": [
          "id",
          "artworks",
          "images",
          "contents"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "bs-booster-pack:1st-edition"
            ],
            "type": "string",
            "description": "The product variant id: `{product id}:{slug}`, e.g. `bs-booster-pack:1st-edition`."
          },
          "artworks": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The ids of the product's artworks this variant comes in, in the product's order: all of them unless the data limits it."
          },
          "stamps": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Marks printed on the product, e.g. `1st-edition` or `black-triangle`. See `/stamps`."
          },
          "printRun": {
            "examples": [
              "shadowless"
            ],
            "type": "string",
            "description": "The print run it belongs to, e.g. `shadowless` or `1999-2000-copyright`. See `/print-runs`."
          },
          "crimp": {
            "type": "string",
            "description": "How the wrapper is sealed, when that tells the variant apart: `long`, `short` or `hanger`."
          },
          "language": {
            "examples": [
              "de"
            ],
            "type": "string",
            "description": "The language printed on the product, as a language tag, e.g. `de` or `pt-BR`. Absent for English."
          },
          "identification": {
            "type": "string",
            "description": "How to recognise this variant."
          },
          "notes": {
            "type": "string",
            "description": "What else is specific to this variant."
          },
          "image": {
            "description": "One image of the variant: its own, or for a product with artworks its image in the first artwork that has one. As with cards, a variant without one takes the default variant's.",
            "$ref": "#/components/schemas/ImageResponse"
          },
          "images": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductVariantImageResponse"
            },
            "description": "The variant's image in each artwork it comes in, in the order of `artworks`. Empty when the product has no artwork."
          },
          "contentsOf": {
            "type": "string",
            "description": "The product variant whose contents this one shares, e.g. a pack whose cards are the same in every wrapper art. Absent when it lists its own."
          },
          "contents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductContentResponse"
            },
            "description": "What it holds, entry by entry, counting the card variants rather than listing them (`/product-variants/{id}` lists them). Empty when it shares another variant's contents (`contentsOf`)."
          }
        },
        "description": "One physically distinguishable version of a product, such as its 1st Edition or a print run. The first variant of\na product is its default."
      },
      "ProductVariantSummaryResponse": {
        "required": [
          "id",
          "productId",
          "productName",
          "kind",
          "artworks"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "bs-booster-pack:1st-edition"
            ],
            "type": "string",
            "description": "The product variant id: `{product id}:{slug}`, e.g. `bs-booster-pack:1st-edition`."
          },
          "productId": {
            "type": "string",
            "description": "The product's id."
          },
          "productName": {
            "examples": [
              "Base Set Booster Pack"
            ],
            "type": "string",
            "description": "The product's name, e.g. \"Base Set Booster Pack\"."
          },
          "kind": {
            "type": "string",
            "description": "What the product is: `booster-pack`, `booster-box`, `starter-set`, `theme-deck` or `blister`."
          },
          "image": {
            "description": "The variant's image, falling back as the variant's `image` in `/products/{id}` does.",
            "$ref": "#/components/schemas/ImageResponse"
          },
          "artworks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductArtworkSummaryResponse"
            },
            "description": "The artworks the variant comes in, in the product's order, each with the variant's image in it, e.g. the wrapper arts of a pack in a blister. Empty when the product has no artwork."
          }
        },
        "description": "A product variant inside another product's contents, or one a card variant comes in."
      },
      "ProgressResponse": {
        "required": [
          "totals",
          "series"
        ],
        "type": "object",
        "properties": {
          "sourceCommit": {
            "type": "string",
            "description": "The commit of the card data repository the data was imported from. Absent when unknown."
          },
          "importedAt": {
            "type": "string",
            "description": "When the data was imported. Absent before the first import.",
            "format": "date-time"
          },
          "totals": {
            "description": "Counts over every set.",
            "$ref": "#/components/schemas/ProgressTotalsResponse"
          },
          "series": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SeriesProgressResponse"
            },
            "description": "Every series, ordered by the release date of its first set, with its sets."
          }
        },
        "description": "How far the data has come: every series and set with how many of their cards are entered."
      },
      "ProgressTotalsResponse": {
        "required": [
          "sets",
          "complete",
          "partial",
          "stub",
          "entered",
          "expected",
          "cards",
          "cardsWithImage"
        ],
        "type": "object",
        "properties": {
          "sets": {
            "type": "integer",
            "description": "How many sets there are.",
            "format": "int32"
          },
          "complete": {
            "type": "integer",
            "description": "Sets whose every counted numbering is full.",
            "format": "int32"
          },
          "partial": {
            "type": "integer",
            "description": "Sets with some cards entered, but not all.",
            "format": "int32"
          },
          "stub": {
            "type": "integer",
            "description": "Sets with no cards entered yet.",
            "format": "int32"
          },
          "entered": {
            "type": "integer",
            "description": "Cards entered at a number in a numbering the data gives a card count, at most that count.",
            "format": "int32"
          },
          "expected": {
            "type": "integer",
            "description": "Those card counts added up: what `Entered` reaches when everything is in. A gallery's count is part of its main set's, so it adds nothing, and nor does a count inferred from the cards a set links.",
            "format": "int32"
          },
          "cards": {
            "type": "integer",
            "description": "Cards entered, each counted once.",
            "format": "int32"
          },
          "cardsWithImage": {
            "type": "integer",
            "description": "Cards whose default variant has an image.",
            "format": "int32"
          }
        },
        "description": "Counts over a group of sets. Each card counts once, in the set it is filed in: a set that holds cards of other sets, such as a gallery or a Trainer Deck, counts as a set but adds no cards."
      },
      "ReferenceEntryResponse": {
        "required": [
          "id",
          "name",
          "identification",
          "setWide"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "1st-edition"
            ],
            "type": "string",
            "description": "The id variants use, e.g. `1st-edition`, `shadowless`, `energy-symbol` or `cosmos`."
          },
          "name": {
            "examples": [
              "1st Edition"
            ],
            "type": "string",
            "description": "The English name collectors use for it, e.g. \"1st Edition\", \"Shadowless\", \"Energy Symbol Error\" or \"Poké Ball\". Variant names are built from it."
          },
          "category": {
            "examples": [
              "symbol"
            ],
            "type": "string",
            "description": "Groups entries for filtering, e.g. `symbol` for every symbol error."
          },
          "identification": {
            "type": "string",
            "description": "How to recognise it on a card, in English."
          },
          "setWide": {
            "type": "boolean",
            "description": "True when it is how a whole set's variants of that finish look rather than a choice within the set, e.g. the fireworks pattern on every Legendary Collection reverse holo. Variant names leave it out."
          }
        },
        "description": "A stamp, print run, print error or foil pattern that variants point to."
      },
      "SeriesProgressResponse": {
        "required": [
          "id",
          "name",
          "totals",
          "sets"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "original"
            ],
            "type": "string",
            "description": "The series id, e.g. `original`."
          },
          "name": {
            "examples": [
              "Mega Evolution"
            ],
            "type": "string",
            "description": "The series name, e.g. \"Mega Evolution\"."
          },
          "era": {
            "examples": [
              "wotc"
            ],
            "type": "string",
            "description": "A broader grouping for filters such as \"older sets\", e.g. `wotc`."
          },
          "totals": {
            "description": "Counts over the series' sets.",
            "$ref": "#/components/schemas/ProgressTotalsResponse"
          },
          "sets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SetProgressResponse"
            },
            "description": "The series' sets, ordered by release date."
          }
        },
        "description": "A series with its sets' progress."
      },
      "SeriesResponse": {
        "required": [
          "id",
          "name",
          "sets"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "original"
            ],
            "type": "string",
            "description": "The series id, e.g. `original`."
          },
          "name": {
            "examples": [
              "Mega Evolution"
            ],
            "type": "string",
            "description": "The series name, e.g. \"Mega Evolution\"."
          },
          "era": {
            "examples": [
              "wotc"
            ],
            "type": "string",
            "description": "A broader grouping for filters such as \"older sets\", e.g. `wotc`."
          },
          "description": {
            "type": "string",
            "description": "A description of the series."
          },
          "sets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SetSummaryResponse"
            },
            "description": "The series' sets, ordered by release date."
          }
        },
        "description": "A shelf of sets, such as Original, Neo or Mega Evolution."
      },
      "SeriesSummaryResponse": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "original"
            ],
            "type": "string",
            "description": "The series id, e.g. `original`."
          },
          "name": {
            "examples": [
              "Mega Evolution"
            ],
            "type": "string",
            "description": "The series name, e.g. \"Mega Evolution\"."
          },
          "era": {
            "examples": [
              "wotc"
            ],
            "type": "string",
            "description": "A broader grouping for filters such as \"older sets\", e.g. `wotc`."
          }
        },
        "description": "A series in a list."
      },
      "SetProgressResponse": {
        "required": [
          "id",
          "name",
          "releaseDate",
          "status",
          "numberings",
          "cards",
          "cardsWithImage",
          "variants",
          "variantsWithImage"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "bs"
            ],
            "type": "string",
            "description": "The set id, e.g. `bs`."
          },
          "name": {
            "examples": [
              "Base Set"
            ],
            "type": "string",
            "description": "The set name, e.g. \"Base Set\"."
          },
          "code": {
            "examples": [
              "BS"
            ],
            "type": "string",
            "description": "The set's short code, e.g. \"BS\"."
          },
          "releaseDate": {
            "type": "string",
            "description": "The release date.",
            "format": "date"
          },
          "logo": {
            "description": "The set's logo. Absent when there is none yet.",
            "$ref": "#/components/schemas/ImageResponse"
          },
          "status": {
            "type": "string",
            "description": "`complete` (every counted numbering is full), `partial` (some cards entered) or `stub` (no cards entered yet)."
          },
          "numberings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NumberingProgressResponse"
            },
            "description": "The main set, then each subset in the set's order: cards entered against the count. A set without a card count that links cards of other sets counts the cards it links."
          },
          "cards": {
            "type": "integer",
            "description": "Cards on the set's checklist, each counted once: its own and those of other sets it links.",
            "format": "int32"
          },
          "cardsWithImage": {
            "type": "integer",
            "description": "Cards whose default variant has an image.",
            "format": "int32"
          },
          "variants": {
            "type": "integer",
            "description": "Variants of the set's own cards and the variants of other sets' cards it links.",
            "format": "int32"
          },
          "variantsWithImage": {
            "type": "integer",
            "description": "Those variants with an image of their own.",
            "format": "int32"
          },
          "partOf": {
            "examples": [
              "brs"
            ],
            "type": "string",
            "description": "For a gallery, the id of the set whose cards it numbers, e.g. `brs`. Absent for every other set."
          }
        },
        "description": "How far one set has come."
      },
      "SetResponse": {
        "required": [
          "id",
          "name",
          "seriesId",
          "region",
          "releaseDate",
          "subsets",
          "galleries"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "bs"
            ],
            "type": "string",
            "description": "The set id, e.g. `bs`."
          },
          "name": {
            "examples": [
              "Base Set"
            ],
            "type": "string",
            "description": "The set name, e.g. \"Base Set\"."
          },
          "code": {
            "examples": [
              "BS"
            ],
            "type": "string",
            "description": "The set's short code, e.g. \"BS\"."
          },
          "seriesId": {
            "examples": [
              "original"
            ],
            "type": "string",
            "description": "The id of the series the set belongs to, e.g. `original`."
          },
          "region": {
            "examples": [
              "international"
            ],
            "type": "string",
            "description": "Where the set was released, e.g. `international`."
          },
          "releaseDate": {
            "type": "string",
            "description": "The release date.",
            "format": "date"
          },
          "cardCount": {
            "description": "How many cards have a main-set number; for a gallery, how many cards it numbers. Absent for a set that only links cards of other sets; `/progress` then expects the cards it links.",
            "$ref": "#/components/schemas/CardCountResponse"
          },
          "denominator": {
            "examples": [
              "GG70"
            ],
            "type": "string",
            "description": "What the cards print after the slash when it isn't the printed card count, e.g. \"GG70\"; \"none\" for cards printed without a slash, such as promos."
          },
          "description": {
            "type": "string",
            "description": "Text printed on the packaging, such as the booster pack blurb."
          },
          "identification": {
            "type": "string",
            "description": "How to recognise this set's cards or variants, in English."
          },
          "logo": {
            "description": "The set's logo, a gallery's main set's when it has none of its own. Absent when there is none yet.",
            "$ref": "#/components/schemas/ImageResponse"
          },
          "symbol": {
            "description": "The set symbol printed on the set's cards, a gallery's main set's when it has none of its own. Absent when the cards print none (Base Set) or there is none yet.",
            "$ref": "#/components/schemas/ImageResponse"
          },
          "subsets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubsetResponse"
            },
            "description": "Numberings within the set, in checklist order. A card can be in several."
          },
          "partOf": {
            "examples": [
              "brs"
            ],
            "type": "string",
            "description": "For a gallery, the id of the set whose cards it numbers, e.g. `brs`: those cards are filed in that set and counted in its card count too. Absent for every other set."
          },
          "galleries": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The ids of the galleries of this set's cards, e.g. `brs-tg`, by release date."
          }
        },
        "description": "An official release, such as Base Set, a Trainer Deck or a World Championships deck, or a gallery of another set's cards, such as Brilliant Stars (Trainer Gallery)."
      },
      "SetSummaryResponse": {
        "required": [
          "id",
          "name",
          "seriesId",
          "region",
          "releaseDate"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "bs"
            ],
            "type": "string",
            "description": "The set id, e.g. `bs`."
          },
          "name": {
            "examples": [
              "Base Set"
            ],
            "type": "string",
            "description": "The set name, e.g. \"Base Set\"."
          },
          "code": {
            "examples": [
              "BS"
            ],
            "type": "string",
            "description": "The set's short code, e.g. \"BS\"."
          },
          "seriesId": {
            "examples": [
              "original"
            ],
            "type": "string",
            "description": "The id of the series the set belongs to, e.g. `original`."
          },
          "region": {
            "examples": [
              "international"
            ],
            "type": "string",
            "description": "Where the set was released, e.g. `international`."
          },
          "releaseDate": {
            "type": "string",
            "description": "The release date.",
            "format": "date"
          },
          "logo": {
            "description": "The set's logo. Absent when there is none yet.",
            "$ref": "#/components/schemas/ImageResponse"
          },
          "symbol": {
            "description": "The set symbol printed on the set's cards. Absent when the cards print none (Base Set) or there is none yet.",
            "$ref": "#/components/schemas/ImageResponse"
          },
          "partOf": {
            "examples": [
              "brs"
            ],
            "type": "string",
            "description": "For a gallery, such as Brilliant Stars (Trainer Gallery), the id of the set whose cards it numbers, e.g. `brs`. Absent for every other set."
          }
        },
        "description": "A set in a list."
      },
      "SpeciesResponse": {
        "required": [
          "id",
          "name",
          "generation",
          "genderless",
          "flavorText",
          "forms"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "0019"
            ],
            "type": "string",
            "description": "The National Pokédex number, zero-padded to 4 digits, e.g. `0019`."
          },
          "name": {
            "examples": [
              "Rattata"
            ],
            "type": "string",
            "description": "The species name in English, e.g. \"Rattata\"."
          },
          "generation": {
            "type": "integer",
            "description": "The game generation that introduced the species, from 1.",
            "format": "int32"
          },
          "names": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Localized names keyed by language code, e.g. { \"ja\": \"コラッタ\" }."
          },
          "category": {
            "examples": [
              "Mouse"
            ],
            "type": "string",
            "description": "The Pokédex category without \"Pokémon\", e.g. \"Mouse\"."
          },
          "gender": {
            "description": "The share of each gender in percent; absent when the species is genderless.",
            "$ref": "#/components/schemas/GenderResponse"
          },
          "genderless": {
            "type": "boolean",
            "description": "True when the species has no gender."
          },
          "flavorText": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The Pokédex entries pokemon.com shows, in its order (usually two, from recent games); the first is the one it shows first."
          },
          "forms": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FormResponse"
            },
            "description": "The species' forms; the first is the base form."
          }
        },
        "description": "A Pokémon species with its forms."
      },
      "SpeciesSummaryResponse": {
        "required": [
          "id",
          "name",
          "generation",
          "types"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "0019"
            ],
            "type": "string",
            "description": "The National Pokédex number, zero-padded to 4 digits, e.g. `0019`."
          },
          "name": {
            "examples": [
              "Rattata"
            ],
            "type": "string",
            "description": "The species name in English, e.g. \"Rattata\"."
          },
          "generation": {
            "type": "integer",
            "description": "The game generation that introduced the species, from 1.",
            "format": "int32"
          },
          "types": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The base form's video game types, e.g. [\"Normal\"]."
          },
          "image": {
            "description": "The base form's official artwork.",
            "$ref": "#/components/schemas/ImageResponse"
          }
        },
        "description": "A species in a list."
      },
      "StatsResponse": {
        "required": [
          "hp",
          "attack",
          "defense",
          "specialAttack",
          "specialDefense",
          "speed"
        ],
        "type": "object",
        "properties": {
          "hp": {
            "type": "integer",
            "description": "HP, e.g. 30.",
            "format": "int32"
          },
          "attack": {
            "type": "integer",
            "description": "Attack.",
            "format": "int32"
          },
          "defense": {
            "type": "integer",
            "description": "Defense.",
            "format": "int32"
          },
          "specialAttack": {
            "type": "integer",
            "description": "Special Attack.",
            "format": "int32"
          },
          "specialDefense": {
            "type": "integer",
            "description": "Special Defense.",
            "format": "int32"
          },
          "speed": {
            "type": "integer",
            "description": "Speed.",
            "format": "int32"
          }
        },
        "description": "Base stats in the games."
      },
      "SubsetResponse": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The subset id, unique within its set."
          },
          "name": {
            "type": "string",
            "description": "The subset's official name. Absent when it has none; the client then names it from its id."
          },
          "cardCount": {
            "description": "How many cards the subset numbers. Absent for a subset without its own numbering.",
            "$ref": "#/components/schemas/CardCountResponse"
          },
          "denominator": {
            "examples": [
              "TG30"
            ],
            "type": "string",
            "description": "What the cards print after the slash when it isn't the printed card count, e.g. \"TG30\"; \"none\" for cards printed without a slash."
          },
          "identification": {
            "type": "string",
            "description": "How to recognise a card of this subset, in English."
          }
        },
        "description": "A numbering within a set, such as the Classic Collection (27/30) or the Pikachu Collection (10/30)."
      },
      "VariantDetailResponse": {
        "required": [
          "variant",
          "card",
          "listedIn",
          "products"
        ],
        "type": "object",
        "properties": {
          "variant": {
            "description": "The variant.",
            "$ref": "#/components/schemas/VariantResponse"
          },
          "card": {
            "description": "The variant's card.",
            "$ref": "#/components/schemas/CardSummaryResponse"
          },
          "listedIn": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SetSummaryResponse"
            },
            "description": "The sets that list this variant, such as a Trainer Deck or a World Championships deck, ordered by release date. Empty when no set lists it."
          },
          "products": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductVariantSummaryResponse"
            },
            "description": "The sealed product variants it can come in, directly (a pack) or through the products inside them (a box of those packs), ordered by release date, then product. Empty when no product holds it."
          }
        },
        "description": "A variant with its card, the sets that list it and the products it can come in."
      },
      "VariantResponse": {
        "required": [
          "id",
          "fullName",
          "shortName",
          "finish"
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "bs-2:1st-edition"
            ],
            "type": "string",
            "description": "The variant id: `{card id}:{slug}`, e.g. `bs-2:1st-edition`."
          },
          "fullName": {
            "examples": [
              "1st Edition Holo"
            ],
            "type": "string",
            "description": "A readable name that stands on its own, in lists, carts and trade lists, e.g. \"1st Edition Holo\" or \"Poké Ball Reverse Holo\". Built from the variant's facts by the data repository's naming rules (docs/variant-names.md); unique among the card's variants."
          },
          "shortName": {
            "examples": [
              "1st Edition"
            ],
            "type": "string",
            "description": "The full name without what every variant of the card shares, for choosing between the variants on the card's page, e.g. \"1st Edition\" next to \"Shadowless\" and \"Unlimited\" on a card that is holo throughout. Unique among the card's variants."
          },
          "finish": {
            "type": "string",
            "description": "Where the foil is: `normal`, `holo` or `reverse-holo`, or `lenticular` for a ridged lens over the card instead of foil (some jumbos)."
          },
          "printRun": {
            "examples": [
              "shadowless"
            ],
            "type": "string",
            "description": "The print run with its own physical differences, e.g. `shadowless`. See `/print-runs`."
          },
          "pattern": {
            "examples": [
              "cosmos"
            ],
            "type": "string",
            "description": "What the foil looks like, e.g. `cosmos` or `poke-ball`. See `/patterns`."
          },
          "stamps": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Marks printed on this variant, including the 1st Edition symbol, e.g. `1st-edition`. See `/stamps`."
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Print errors every copy of this variant has, e.g. `energy-symbol`. See `/errors`."
          },
          "signature": {
            "type": "string",
            "description": "A printed signature, e.g. the player's on World Championships deck cards."
          },
          "notes": {
            "type": "string",
            "description": "What else is specific to this variant, such as the product it came in or which symbol is wrong."
          },
          "size": {
            "type": "string",
            "description": "`jumbo` for a card printed larger than normal. Absent for the regular size."
          },
          "image": {
            "description": "The variant's image, or the card's default image when it has none of its own.",
            "$ref": "#/components/schemas/ImageResponse"
          }
        },
        "description": "One physically distinguishable version of a card. The first variant of a card is its default. A collection records\nits copies against a variant id."
      },
      "WeaknessResponse": {
        "required": [
          "type",
          "multiplier"
        ],
        "type": "object",
        "properties": {
          "type": {
            "examples": [
              "Fighting"
            ],
            "type": "string",
            "description": "The attacking video game type, e.g. \"Fighting\"."
          },
          "multiplier": {
            "type": "integer",
            "description": "How much damage it deals: 2, or 4 when both of the form's types are weak to it.",
            "format": "int32"
          }
        },
        "description": "A type a form is weak to."
      }
    },
    "securitySchemes": {
      "ApiKey": {
        "type": "apiKey",
        "description": "An API key from the portal, e.g. `cc_4kTb…`.",
        "name": "X-Api-Key",
        "in": "header"
      }
    }
  },
  "security": [
    {
      "ApiKey": [ ]
    }
  ],
  "tags": [
    {
      "name": "Series",
      "description": "Shelves of sets, such as Original, Sword & Shield or Trainer & Deck Kits."
    },
    {
      "name": "Sets",
      "description": "Official releases and galleries. A set holds cards: its own (the cards print its symbol and number), cards of other sets it links, or both. A gallery, such as Brilliant Stars (Trainer Gallery), numbers the cards it links; a Trainer Deck or World Championships deck links variants of them in the product's order."
    },
    {
      "name": "Cards",
      "description": "One card design as printed, filed in the set whose symbol and number it prints: its game text, numbers, the Pokémon and characters it names and draws (cameos marked, with where in the art), artists and physical variants."
    },
    {
      "name": "Variants",
      "description": "Physically distinguishable versions of a card, such as 1st Edition, reverse holo, a stamped promo or a print error. A collection records its copies against a variant id."
    },
    {
      "name": "Pictures",
      "description": "Cards whose art forms one picture when laid out together, such as the two halves of a Pokémon LEGEND or the four pieces of a V-UNION."
    },
    {
      "name": "Products",
      "description": "Sealed products such as booster packs, booster boxes and starter sets: one product per item, the artworks it comes in (each wrapper art), its physical variants (edition, print run, crimp, language) and what each holds. Which products a card variant comes in is on `/variants/{id}`."
    },
    {
      "name": "Pokédex",
      "description": "Pokémon species and their forms, with their video game facts as the official Pokédex has them: category, gender, Pokédex entries, types and weaknesses, height and weight, abilities, base stats and artwork. Cards reference forms (`0019-alola`), not species; `/pokedex/{id}/cards` lists the cards a species is on, cameos marked."
    },
    {
      "name": "Artists",
      "description": "Illustrators credited on cards; `/artists/{id}/cards` lists the cards one is credited on."
    },
    {
      "name": "Characters",
      "description": "People, trainer classes and groups a card names or shows, such as Arven, Fisher or Team Galactic; `/characters/{id}/cards` lists the cards one is on, cameos marked."
    },
    {
      "name": "Reference entries",
      "description": "The stamps, print runs, print errors and foil patterns variants point to, each with how to recognise it on a card."
    },
    {
      "name": "Progress",
      "description": "How far the data has come: every known set with how many of its cards are entered. The page at `/status` shows it, with every set's cards."
    },
    {
      "name": "Meta",
      "description": "Which data is being served."
    }
  ]
}