curl -X POST https://catchbackcards.com/api/partner/v1/cards/sell-back/quote \
-H "Authorization: Bearer $CATCHBACK_KEY" \
-H "Content-Type: application/json" \
-d '{ "category": "pokemon", "items": [{ "card_id": "bee48cce-3d1f-4c2a-8b7e-5a9d0c4f1e62" }, { "card_id": "4a51bc92-7e3d-4f1a-9b2c-6d8e0f1a2b3c" }] }'
{
"category": "pokemon",
"quoted_at": "2026-11-02T18:01:00.000Z",
"results": [
{
"card_id": "bee48cce-…",
"pull_id": "873deb80-…",
"purchase_id": null,
"status": "quoted",
"catchback": {
"amount": 18,
"rate": 0.9,
"valid_until": "2026-11-02T18:05:00.000Z",
"schedule": [
{ "amount": 18, "rate": 0.9, "basis": "value_at_acquisition", "basis_value": 20, "fixed": true, "valid_from": "2026-11-02T18:01:00.000Z", "valid_until": "2026-11-02T18:05:00.000Z" },
{ "amount": 16, "rate": 0.8, "basis": "value_at_acquisition", "basis_value": 20, "fixed": true, "valid_from": "2026-11-02T18:05:00.000Z", "valid_until": "2026-11-09T18:00:00.000Z" },
{ "amount": 17.6, "rate": 0.8, "basis": "market_value", "basis_value": 22, "fixed": false, "valid_from": "2026-11-09T18:00:00.000Z", "valid_until": null }
],
"auto_sold_at": null
}
},
{ "card_id": "4a51bc92-…", "pull_id": null, "purchase_id": "e22855d2-…", "status": "not_offered", "reason": "listed" }
]
}
Account & vault
Quote a sell-back
What a sell-back pays for each card you hold, now and at every point after, with the exact UTC time each amount starts and ends.
POST
/
api
/
partner
/
v1
/
cards
/
sell-back
/
quote
curl -X POST https://catchbackcards.com/api/partner/v1/cards/sell-back/quote \
-H "Authorization: Bearer $CATCHBACK_KEY" \
-H "Content-Type: application/json" \
-d '{ "category": "pokemon", "items": [{ "card_id": "bee48cce-3d1f-4c2a-8b7e-5a9d0c4f1e62" }, { "card_id": "4a51bc92-7e3d-4f1a-9b2c-6d8e0f1a2b3c" }] }'
{
"category": "pokemon",
"quoted_at": "2026-11-02T18:01:00.000Z",
"results": [
{
"card_id": "bee48cce-…",
"pull_id": "873deb80-…",
"purchase_id": null,
"status": "quoted",
"catchback": {
"amount": 18,
"rate": 0.9,
"valid_until": "2026-11-02T18:05:00.000Z",
"schedule": [
{ "amount": 18, "rate": 0.9, "basis": "value_at_acquisition", "basis_value": 20, "fixed": true, "valid_from": "2026-11-02T18:01:00.000Z", "valid_until": "2026-11-02T18:05:00.000Z" },
{ "amount": 16, "rate": 0.8, "basis": "value_at_acquisition", "basis_value": 20, "fixed": true, "valid_from": "2026-11-02T18:05:00.000Z", "valid_until": "2026-11-09T18:00:00.000Z" },
{ "amount": 17.6, "rate": 0.8, "basis": "market_value", "basis_value": 22, "fixed": false, "valid_from": "2026-11-09T18:00:00.000Z", "valid_until": null }
],
"auto_sold_at": null
}
},
{ "card_id": "4a51bc92-…", "pull_id": null, "purchase_id": "e22855d2-…", "status": "not_offered", "reason": "listed" }
]
}
Scope:
sell:cards · MCP tool: quote_sell_back
A quote moves no money and reserves nothing. It tells you what Sell back cards would pay for each card right now, and when that changes: for a fresh pull, 90% until 5 minutes after the pull, then 80% of the value at pull until 7 days after it, then 80% of market value. Each phase comes with the exact UTC instant it starts and ends.
A quote holds while the card stays in your vault. The last phase follows the market, so its amount is today’s estimate. To sell at a quoted price and nothing less, send its amount as min_payout on Sell back cards.
string
default:"pokemon"
The catalog the cards are in:
pokemon, onepiece, sports, riftbound, watches, goods, singles or energy (the energy cards from base packs). One category per request, as in Get vault.object[]
required
1–100 cards, each
{ card_id }. An item may also name the pull_id or purchase_id you’ll sell it back by (at most one); it fails if that’s no longer the card’s latest acquisition. The same card can’t be listed twice.Response
string
string
When the quote was made, in UTC.
object[]
One per item, in the order you sent them.
Show result
Show result
string
string | null
The card’s latest acquisition, when it’s a pull. Sell back by this.
string | null
The card’s latest acquisition, when it’s a buy.
string
quoted, not_offered (with reason) or failed (with error, e.g. a card you don’t hold).string
Only on
not_offered: listed (delist it first), or fresh_window_closed for a luxury goods item more than 5 minutes after its pull.object
Only on
quoted.Show catchback
Show catchback
number
What a sell-back pays right now, in USD.
number
string | null
When the current amount ends.
null when it doesn’t.object[]
Every phase from now on, back to back. A sell-back sent between
valid_from and valid_until pays amount.string | null
For a card from a pack that holds its cards, when we sell it back for you.
Special cases
- Energy cards (
category: "energy") have one phase: 100% of their value, with no 5-minute window and no lock. - A card from a pack that holds its cards has one 90% phase, ending at
auto_sold_at, when it’s sold back automatically. - A luxury goods item has only its 5-minute phase; after that it’s
not_offered. - Insurance or a boost bought on the pull raises the first phase’s amount, inside the 5-minute window.
Errors
| Status | When |
|---|---|
400 | The body isn’t JSON, the category is unknown, items is missing, empty or longer than 100, an item lacks a UUID card_id or names both a pull_id and a purchase_id, or the same card is listed twice |
403 | The key lacks sell:cards or isn’t linked to an account |
500 | We couldn’t read the cards or their offers. Nothing changed; retry |
curl -X POST https://catchbackcards.com/api/partner/v1/cards/sell-back/quote \
-H "Authorization: Bearer $CATCHBACK_KEY" \
-H "Content-Type: application/json" \
-d '{ "category": "pokemon", "items": [{ "card_id": "bee48cce-3d1f-4c2a-8b7e-5a9d0c4f1e62" }, { "card_id": "4a51bc92-7e3d-4f1a-9b2c-6d8e0f1a2b3c" }] }'
{
"category": "pokemon",
"quoted_at": "2026-11-02T18:01:00.000Z",
"results": [
{
"card_id": "bee48cce-…",
"pull_id": "873deb80-…",
"purchase_id": null,
"status": "quoted",
"catchback": {
"amount": 18,
"rate": 0.9,
"valid_until": "2026-11-02T18:05:00.000Z",
"schedule": [
{ "amount": 18, "rate": 0.9, "basis": "value_at_acquisition", "basis_value": 20, "fixed": true, "valid_from": "2026-11-02T18:01:00.000Z", "valid_until": "2026-11-02T18:05:00.000Z" },
{ "amount": 16, "rate": 0.8, "basis": "value_at_acquisition", "basis_value": 20, "fixed": true, "valid_from": "2026-11-02T18:05:00.000Z", "valid_until": "2026-11-09T18:00:00.000Z" },
{ "amount": 17.6, "rate": 0.8, "basis": "market_value", "basis_value": 22, "fixed": false, "valid_from": "2026-11-09T18:00:00.000Z", "valid_until": null }
],
"auto_sold_at": null
}
},
{ "card_id": "4a51bc92-…", "pull_id": null, "purchase_id": "e22855d2-…", "status": "not_offered", "reason": "listed" }
]
}

