jq to read the purchase response.
Before you start
You need a CatchBack account with a funded CatchCoins balance and an API key linked to it, with at least theread:catalog, read:account, rip:packs and sell:cards scopes. We create the key and credit your balance when your wire lands. To get set up, or to talk funding, pricing or revenue share, contact us.
Keep the key in an environment variable, never in code:
1
Check which account your key acts as
Who am I works with any valid key.You want
"linked": true and the scopes above in key.scopes. Quote account.id whenever you contact us.2
Check your balance and limits
Get account shows your balance, how many packs you can still open today, and
next_purchase_at, the earliest you can buy.3
Pick a pack
List packs returns exactly the packs you can buy, cheapest first, at the price you’ll be charged.Note a
pack_type with "available": true. This guide uses bronze.4
Look inside it (optional)
Get a pack’s pool shows the value bands, their odds at your risk level, and every card a pull can produce right now.
5
Open the pack
Buy packs needs an The pack is charged at list price and every pull is already in your vault. Each entry in
Idempotency-Key: your own id for this order. Make one per order, and keep it until you have a response, because it’s what makes a retry safe.pulls has its pull_id, the card as item, its value, and its CatchBack offer: catchback.amount if you sell it back before catchback.valid_until (5 minutes after the pull), and catchback.after once that window closes. Its proof lets you check the draw: Verify a pull.If the request times out or fails with a 5xx, run the same curl again with the same $ORDER_ID. If the order went through you get it back; if it didn’t, it runs again. Either way it’s never charged twice. If you get a 409 IDEMPOTENCY_IN_PROGRESS, or a 500 with needs_review: true, stop and follow the order with Get an order. A 429 RATE_LIMITED tells you how many seconds to wait. See Idempotency and Rate limits.6
Sell the pull back
To take the fresh rate, sell within 5 minutes of the pull. Sell back cards takes the card’s id and its Each item comes back
pull_id, both from the purchase response:sold, with payout_amount and payout_rate, and total_paid is credited to your balance. Selling the same pull again returns already_sold with the earlier sale, so this call is safe to retry. If your pull was a sealed pack ("kind": "sealed_pack"), ITEMS is empty: sealed packs can’t be sold back through the API.7
See what you hold
Get vault lists the cards you still hold, each with its sell-back offer right now.
Next steps
Buy a card
Search the shop and user listings, then buy one card with a price guard.
How it works
The whole lifecycle, and what each sell-back pays.
Errors
Every status and error code, and what to do about it.
Connect an AI agent
The same flow as MCP tools, with the same key.
Test accounts
Try packs on a test balance, and how to test everything else.
Webhooks
Hear when an order finishes or a listing sells, instead of polling.

