Every tier you can sell, with what it is CALLED and which game it draws from — so you can list only the gachas that belong on your storefront. Price, EV, slot count and active come live from the on-chain pool; name, description, variant and game come from tier metadata; total_purchases and last_active_at are what CardOS has observed. A tier that has never been purchased still appears (it is read from the pool, not from purchase history), so a newly launched tier is sellable immediately. `games` lists every game on offer and is computed BEFORE filtering, so it stays complete as the filter UI you build from it.
Try itGET /api/v1/mystery/catalog
response
4039mspreloaded server-side with the default context
object · 3 keys
{
"success": false,
"message": "Mystery partner API key required",
"error": "This endpoint requires an API key linked to a mystery partner account"
}
tracks the inputs above
curl -X GET 'https://service.rip.fun/api/v1/mystery/catalog' \
-H 'X-API-Key: rip_…'
Request fields
Field
Type
Required
Description
game
query string
—
Filter by game id: pokemon | onepiece | azuki (alias: tcg_type)
variant
query string
—
Filter by what the tier yields, e.g. card
active
query bool
—
true = only tiers the pool is currently selling
fresh
query bool
—
`true` bypasses the shared response cache and recomputes from source. Meant for a manual refresh, not for polling: it carries its own budget of 10 calls per minute per key, and past that you get a 429 while a plain read still answers from cache
Response fields (data)
Field
Description
tiers[].name / slug / description
Display metadata; null when a tier has no metadata row yet
tiers[].game
{ id, label } — e.g. onepiece / One Piece. Null when unclassified
Read live from the pool, with a short-lived last-known-good fallback when the RPC is down. null = temporarily unavailable (never a real price) — re-fetch shortly rather than treating it as free/unsellable
tiers[].total_purchases / last_active_at
Observed volume; 0 / null for a tier nobody has bought yet
games
Every game on offer, unaffected by filters — build your filter UI from this
Errors
Status
Code
When
403
Insufficient permissions
key lacks the read:catalog scope
See Errors for the response envelope and the full code list.