/api/v1/instant/purchase/:purchase_id packs:read Poll this after buying an instant pack: PENDING → RESERVED → SUBMITTING → SUBMITTED → FULFILLED (or REFUNDED / FAILED). Delivery usually takes a few seconds and up to ~90 seconds while Chainlink VRF settles. Once FULFILLED it includes the opened pack and its cards with full metadata (name, images, value_usd).
GET /api/v1/instant/purchase/0 These inputs are shared across all docs pages, so an id entered here carries over.
Not run yet. Press Run to make a live call against https://service.rip.fun (through this demo's server-side proxy; the API key never reaches the browser).
curl -X GET 'https://service.rip.fun/api/v1/instant/purchase/0' \ -H 'X-API-Key: rip_…'
data)| Field | Description |
|---|---|
status | PENDING → RESERVED → SUBMITTING → SUBMITTED → FULFILLED, or REFUNDED / FAILED (failure_reason set when FAILED) |
packet_type_id / set_id / product_id / quantity | What was bought |
price / price_usdc | Amount charged (micros string + decimal display) |
onchain_request_id / transaction_hash | VRF request + purchase tx, once on-chain |
purchaser_address / recipient_address | The CardOS relayer that paid, and the wallet the cards were delivered to |
pack | Once FULFILLED: the delivered pack (unique_id, set_id, name, image_url, opened_at) |
cards[] | Once FULFILLED: token_id, unique_id, card_id, name, card_number, rarity, is_chase, small/large/front image urls, value_usd, set_id. `token_id` is the only one guaranteed — a token we have not finished indexing comes back with every other field null, so render from `token_id` and treat the rest as optional |
memo | "{partner-slug}-instant-{id}" per-key attribution tag |
reserved_at / submitted_at / fulfilled_at / created_at | Lifecycle timestamps |
| Status | Code | When |
|---|---|---|
| 404 | not_found | purchase_id does not belong to this partner |
See Errors for the response envelope and the full code list.