User collection

GET /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.

Try it 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.

response
403 15ms preloaded 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/collection?external_user_id=demo-explorer&limit=10' \
  -H 'X-API-Key: rip_…'

Request fields

FieldTypeRequiredDescription
external_user_id / wallet_addressquery stringyesWhich end-user — exactly the identity you purchased with
limit / offsetquery intPagination (limit ≤ 100; response has pagination.has_more)

Response fields (data)

FieldDescription
user.external_user_id / user.wallet_addressThe resolved end-user the items belong to
items[].token_id / item_type / categoryThe delivered NFT; category card | product | unknown
items[].card_idCanonical 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_idHydrated display metadata (rarity/card_number/set_id null for non-cards)
items[].purchase_id / tier_id / acquired_atWhich pull delivered it, from which tier, and when it fulfilled
items[].still_ownedtrue 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

Errors

StatusCodeWhen
400missing_user_identifierneither external_user_id nor wallet_address given
400invalid_wallet_addresswallet_address is not a 0x-prefixed address

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