/api/v1/pokemon/expansions read:catalog 1
creditList 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 }`.
GET /api/v1/pokemon/expansions?page_size=10 These inputs are shared across all docs pages, so an id entered here carries over.
{
"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"
}curl -X GET 'https://service.rip.fun/api/v1/pokemon/expansions?page_size=10' \ -H 'X-API-Key: rip_…'
| Field | Type | Required | Description |
|---|---|---|---|
q | string | — | Advanced 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. |
language | string | — | Language 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. |
orderBy | string | — | Comma 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_size | number | — | Pagination. `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. |
select | string | — | Comma list of top-level fields to keep (`id` always included). Trims response size and does not change the credit cost. |
data)| Field | Description |
|---|---|
data[].id / name / series / code | Expansion identity |
data[].total / printed_total | Card counts (incl. secret rares vs printed) |
data[].language / language_code | Canonicalized language + ISO code |
data[].release_date | Release date, `YYYY/MM/DD` |
data[].logo / symbol | Artwork URLs |
data[].translation | English name under `translation.en.name` for non-English sets |
| Status | Code | When |
|---|---|---|
| 400 | parse_error | malformed `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. |
| 400 | unknown_field | a `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. |
| 400 | invalid_value | the 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. |
| 400 | query_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. |
| 400 | invalid_pagination | `page`/`page_size` non-numeric, out of range, or `page × page_size` > 10,000 |
| 400 | invalid_language | `language` is not a language code — expected `en`, `ja`, a comma list of codes, or `all` |
| 400 | invalid_distinct | `distinct` is anything other than `code` |
| 400 | invalid_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. |
| 400 | invalid_include | `include` carries a value this endpoint does not offer. Cards and sealed accept `prices`; the expansion endpoints accept none at all. |
| 404 | not_found | no 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.