Skip to content
pokemontcgapi.com
Documentation

List series

The blocks that group sets — Base, EX, Sword & Shield, Scarlet & Violet — with the number of sets in each.

GET/v1/series1 creditfree plan

Cache-Control: public, max-age=86400

Objects returned

Seventeen rows, so the whole list fits in one page. id is the slug, and it is the value GET /v1/sets?series= accepts — as does the name, because whichever one you stored should work.

Query parameters

Query parameters
NameTypeDefaultDescription
orderBystring-set_countset_count, name or slug, with a leading - for descending. Every order ends on slug as the tiebreaker.
limitinteger50Rows per page, 1 to 250. Above 250 you get LIMIT_EXCEEDED — follow links.next instead of raising it.
cursorstringOpaque keyset cursor from links.next. Never construct one; it carries the sort order it was issued for and is rejected if orderBy changes mid-run.

Headers

Headers
NameTypeDefaultDescription
X-Api-Key requiredstringYour API key. Authorization: Bearer <key> is accepted as an alias.
If-None-MatchstringSend back the ETag you stored. The API returns a strong ETag on every catalogue response, and a 304 is a header exchange: no body, no database row read.

Example request

curl -s -G "https://api.pokemontcgapi.com/v1/series" \
  --data-urlencode "limit=3" \
  -H "X-Api-Key: $PTCG_API_KEY"

Example response

200 OK · Cache-Control: public, max-age=86400

response.json
{
  "data": [
    {
      "id": "sword-shield",
      "slug": "sword-shield",
      "name": "Sword & Shield",
      "set_count": 22
    },
    {
      "id": "ex",
      "slug": "ex",
      "name": "EX",
      "set_count": 20
    },
    {
      "id": "scarlet-violet",
      "slug": "scarlet-violet",
      "name": "Scarlet & Violet",
      "set_count": 18
    }
  ],
  "meta": {
    "limit": 3,
    "count": 3,
    "total_count": 17,
    "has_more": true
  },
  "links": {
    "next": "https://api.pokemontcgapi.com/v1/series?cursor=eyJrIjpbMThdLCJpZCI6InNjYXJsZXQtdmlvbGV0IiwicyI6InNldF9jb3VudDpkZXNjLHNsdWc6YXNjIn0&limit=3"
  }
}

Errors

Every error body carries error.code, error.message and error.request_id. Switch on the code, never on the message.

Errors returned by this endpoint
StatusCodeWhen
401MISSING_API_KEYNo X-Api-Key header and no bearer token on a route that requires one.
401INVALID_API_KEYThe key does not match any account.
400INVALID_CURSORThe cursor is malformed, or was issued for a different orderBy than the one on this request.
400INVALID_PARAMETERA query parameter has the wrong type or an unsupported value — a non-integer limit, an unknown lang, an unknown region, a sort key that is not sortable.
400LIMIT_EXCEEDEDlimit is above 250, or a batch request carries more than 100 ids.

The full taxonomy, with what to do about each code, is on the errors page.

view this page as markdown