/api/v1/mystery/collection packs:read One end-user's collection: every item delivered through your fulfilled purchases, newest first — the direct answer to "which cards does this user own?". Before this endpoint the only way to build a collection view was to walk GET /purchases and then call GET /purchase/:id per row; this replaces that O(n+1) reconstruction with one paginated call. Each card item carries the canonical Card Data `card_id`, so it joins straight onto the Card Data API without per-item /price calls or set/number matching. `still_owned` compares the CURRENT on-chain holder against the user's wallet, so a card they sold back, redeemed or transferred away reads false while staying in the delivery history.
GET /api/v1/mystery/collection?external_user_id=demo-explorer&limit=10 These inputs are shared across all docs pages, so an id entered here carries over.
{
"success": false,
"message": "Mystery partner API key required",
"error": "This endpoint requires an API key linked to a mystery partner account"
}curl -X GET 'https://service.rip.fun/api/v1/mystery/collection?external_user_id=demo-explorer&limit=10' \ -H 'X-API-Key: rip_…'
| Field | Type | Required | Description |
|---|---|---|---|
external_user_id / wallet_address | query string | yes | Which end-user — exactly the identity you purchased with |
limit / offset | query int | — | Pagination (limit ≤ 100; response has pagination.has_more) |
data)| Field | Description |
|---|---|
user.external_user_id / user.wallet_address | The resolved end-user the items belong to |
items[].token_id / item_type / category | The delivered NFT; category card | product | unknown |
items[].card_id | Canonical Card Data id — join to /docs card endpoints directly. Null for products and unmapped tokens |
items[].name / image_url / value_usd / rarity / card_number / set_id | Hydrated display metadata (rarity/card_number/set_id null for non-cards) |
items[].purchase_id / tier_id / acquired_at | Which pull delivered it, from which tier, and when it fulfilled |
items[].still_owned | true while the user's wallet still holds the token; false once sold back / redeemed / burned / transferred; null for non-cards or when the user has no known wallet |
| Status | Code | When |
|---|---|---|
| 400 | missing_user_identifier | neither external_user_id nor wallet_address given |
| 400 | invalid_wallet_address | wallet_address is not a 0x-prefixed address |
See Errors for the response envelope and the full code list.