Search expansions

GET /api/v1/pokemon/expansions read:catalog 1 credit

List every Pokémon Trading Card Game expansion, or filter with `q` (e.g. `series_id:sv`, `release_date:[2024-01-01 TO *]`) and sort with `orderBy`. Wrapped in `{ success, data, page, page_size, total_count, language }`.

Try it GET /api/v1/pokemon/expansions?page_size=10

These inputs are shared across all docs pages, so an id entered here carries over.

response
200 68ms preloaded server-side with the default context
object · 6 keys
{
  "success": true,
  "data": [
    {
      "id": "sv3pt5",
      "name": "151",
      "total": 207,
      "language": "English",
      "language_code": "en",
      "series": "Scarlet & Violet",
      "code": "MEW",
      "printed_total": 165,
      "release_date": "2023/09/22",
      "logo": "https://gjnrvwqtdlspyfpezgox.supabase.co/storage/v1/object/public/tcg/sets/sv3pt5.logo.png",
      "symbol": "https://gjnrvwqtdlspyfpezgox.supabase.co/storage/v1/object/public/tcg/sets/sv3pt5.symbol.png"
    },
    {
      "id": "me55",
      "name": "30th Celebration",
      "total": 161,
      "language": "English",
      "language_code": "en",
      "series": "Mega Evolution",
      "code": "30C",
      "printed_total": 128,
      "release_date": "2026/09/16",
      "logo": "https://api.rip.fun/storage/v1/object/public/tcg/sets/me55.logo.png",
      "symbol": "https://api.rip.fun/storage/v1/object/public/tcg/sets/me55.symbol.png"
    },
    {
      "id": "xy7",
      "name": "Ancient Origins",
      "total": 101,
      "language": "English",
      "language_code": "en",
      "series": "XY",
      "code": "AOR",
      "printed_total": 98,
      "release_date": "2015/08/12",
      "logo": "https://gjnrvwqtdlspyfpezgox.supabase.co/storage/v1/object/public/tcg/sets/xy7.logo.png",
      "symbol": "https://gjnrvwqtdlspyfpezgox.supabase.co/storage/v1/object/public/tcg/sets/xy7.symbol.png"
    },
    {
      "id": "ecard2",
      "name": "Aquapolis",
      "total": 182,
      "language": "English",
      "language_code": "en",
      "series": "E-Card",
      "code": "AQ",
      "printed_total": 147,
      "release_date": "2003/01/15",
      "logo": "https://gjnrvwqtdlspyfpezgox.supabase.co/storage/v1/object/public/tcg/sets/ecard2.logo.png",
      "symbol": "https://gjnrvwqtdlspyfpezgox.supabase.co/storage/v1/object/public/tcg/sets/ecard2.symbol.png"
    },
    {
      "id": "pl4",
      "name": "Arceus",
      "total": 111,
      "language": "English",
      "language_code": "en",
      "series": "Platinum",
      "code": "AR",
      "printed_total": 99,
      "release_date": "2009/11/04",
      "logo": "https://gjnrvwqtdlspyfpezgox.supabase.co/storage/v1/object/public/tcg/sets/pl4.logo.png",
      "symbol": "https://gjnrvwqtdlspyfpezgox.supabase.co/storage/v1/object/public/tcg/sets/pl4.symbol.png"
    },
    {
      "id": "me2pt5",
      "name": "Ascended Heroes",
      "total": 295,
      "language": "English",
      "language_code": "en",
      "series": "Mega Evolution",
      "code": "ASC",
      "printed_total": 217,
      "release_date": "2026/01/30",
      "logo": "https://api.rip.fun/storage/v1/object/public/tcg/sets/me2pt5.logo.png",
      "symbol": "https://api.rip.fun/storage/v1/object/public/tcg/sets/me2pt5.symbol.png"
    },
    {
      "id": "swsh10",
      "name": "Astral Radiance",
      "total": 216,
      "language": "English",
      "language_code": "en",
      "series": "Sword & Shield",
      "code": "ASR",
      "printed_total": 189,
      "release_date": "2022/05/27",
      "logo": "https://gjnrvwqtdlspyfpezgox.supabase.co/storage/v1/object/public/tcg/sets/swsh10.logo.png",
      "symbol": "https://gjnrvwqtdlspyfpezgox.supabase.co/storage/v1/object/public/tcg/sets/swsh10.symbol.png"
    },
    {
      "id": "base1-1st-edition",
      "name": "Base 1st Edition",
      "total": 102,
      "language": "English",
      "language_code": "en",
      "series": "Base",
      "printed_total": 102,
      "release_date": "1999/01/09",
      "logo": "https://gjnrvwqtdlspyfpezgox.supabase.co/storage/v1/object/public/tcg/sets/base1.logo.png",
      "symbol": "https://gjnrvwqtdlspyfpezgox.supabase.co/storage/v1/object/public/tcg/sets/base1.symbol.png"
    },
    {
      "id": "base4",
      "name": "Base Set 2",
      "total": 130,
      "language": "English",
      "language_code": "en",
      "series": "Base",
      "code": "B2",
      "printed_total": 130,
      "release_date": "2000/02/24",
      "logo": "https://gjnrvwqtdlspyfpezgox.supabase.co/storage/v1/object/public/tcg/sets/base4.logo.png",
      "symbol": "https://gjnrvwqtdlspyfpezgox.supabase.co/storage/v1/object/public/tcg/sets/base4.symbol.png"
    },
    {
      "id": "base1-shadowless",
      "name": "Base Set Shadowless",
      "total": 102,
      "language": "English",
      "language_code": "en",
      "series": "Base",
      "printed_total": 102,
      "release_date": "1999/01/09",
      "logo": "https://gjnrvwqtdlspyfpezgox.supabase.co/storage/v1/object/public/tcg/sets/base1.logo.png",
      "symbol": "https://gjnrvwqtdlspyfpezgox.supabase.co/storage/v1/object/public/tcg/sets/base1.symbol.png"
    }
  ],
  "page": 1,
  "page_size": 10,
  "total_count": 205,
  "language": "en"
}
tracks the inputs above
curl -X GET 'https://service.rip.fun/api/v1/pokemon/expansions?page_size=10' \
  -H 'X-API-Key: rip_…'

Request fields

FieldTypeRequiredDescription
qstringAdvanced search, e.g. `name:char*`, `(subtypes:mega OR subtypes:vmax)`, `-types:water`, `hp:[150 TO *]`, `expansion.id:sv1`; on One Piece, the gameplay fields too — `colors:Black cost:[1 TO 3] type:Character`. Capped at 512 characters, 20 terms and 5 levels of parentheses — a generated filter reaches those long before a hand-typed one does. Unknown fields return 400 with a suggestion. Full grammar + field list: see the Search & filtering guide.
languagestringLanguage code, or a comma list. **Defaults to `en`**: every card exists once per printed language, so an unfiltered list interleaves two catalogs. Pass `language=all` for every language, or `language=ja`. The applied value comes back in the envelope. A `language:`, `id:` or `expansion.id:` term in `q` already pins the language, so the default steps aside.
orderBystringComma list; `-` prefix = DESC, e.g. `-release_date`. Max 3 keys. Cards sort on `name`, `number`, `rarity`, `raw_price`/`market_price`, `release_date`, `expansion.id`, `id` (plus `hp` on Pokémon and `cost`, `power`, `counter`, `life` on One Piece). Missing values sort LAST in both directions, and every sort carries a unique `id` tiebreak, so paging a sorted result set can neither skip nor repeat a row.
page / page_sizenumberPagination. `page` ≥ 1 (default 1), `page_size` 1–100 (default 100, `pageSize` also accepted). Out-of-range values are rejected, never clamped. `page × page_size` capped at 10,000, so narrow with `q` to go deeper. Always compare `total_count` against the rows you received — 100 is a cap, not a promise, and a truncated page looks identical to a complete one. Collections you might assume fit in a single call do not: there are more than 100 One Piece expansions, so an unpaginated `/expansions` omits the newest sets and everything you would have walked from them.
selectstringComma list of top-level fields to keep (`id` always included). Trims response size and does not change the credit cost.

Response fields (data)

FieldDescription
data[].id / name / series / codeExpansion identity
data[].total / printed_totalCard counts (incl. secret rares vs printed)
data[].language / language_codeCanonicalized language + ISO code
data[].release_dateRelease date, `YYYY/MM/DD`
data[].logo / symbolArtwork URLs
data[].translationEnglish name under `translation.en.name` for non-English sets

Errors

StatusCodeWhen
400parse_errormalformed `q` syntax: an unclosed quote or parenthesis, a missing term, a stray operator. `details.position` is the 0-based character offset of the offending token.
400unknown_fielda `q` term names a field this resource does not register (`subtype:` for `subtypes:`, a card field on `/sealed`), or `orderBy` names a field you cannot sort on. The message carries a did-you-mean suggestion and `details.position` points at it. Unknown fields are rejected, never ignored — an empty page would be the more expensive answer.
400invalid_valuethe field exists but the value does not fit it: a range on a field that has no ordering, a non-numeric bound, a value outside a closed vocabulary.
400query_too_complex`q` exceeds 512 characters, 20 terms or 5 levels of parenthesis nesting, `orderBy` names more than 3 keys, or a value breaks the wildcard guardrails (a leading `*`, more than 3 per value, fewer than 2 literal characters). Filter builders hit this before people do — count terms as you assemble, and fall back to several narrower calls rather than one wide one.
400invalid_pagination`page`/`page_size` non-numeric, out of range, or `page × page_size` > 10,000
400invalid_language`language` is not a language code — expected `en`, `ja`, a comma list of codes, or `all`
400invalid_distinct`distinct` is anything other than `code`
400invalid_select`select` names more than 40 fields. Names that do not exist are ignored rather than rejected, so a typo silently drops the field — check the response, not just the status.
400invalid_include`include` carries a value this endpoint does not offer. Cards and sealed accept `prices`; the expansion endpoints accept none at all.
404not_foundno such object for this game (a Pokémon id on `/onepiece` is "not found")

See Errors for the response envelope and the full code list.