curl --request POST \
--url https://catchbackcards.com/api/partner/v1/cards/sell-back \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"items": [
{
"card_id": "0e94dc61-5a2f-4b1e-9c3d-7f8a1b2c3d4e",
"pull_id": "873deb80-0000-4000-8000-000000000001",
"min_payout": 18
}
]
}
'import requests
url = "https://catchbackcards.com/api/partner/v1/cards/sell-back"
payload = { "items": [
{
"card_id": "0e94dc61-5a2f-4b1e-9c3d-7f8a1b2c3d4e",
"pull_id": "873deb80-0000-4000-8000-000000000001",
"min_payout": 18
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
items: [
{
card_id: '0e94dc61-5a2f-4b1e-9c3d-7f8a1b2c3d4e',
pull_id: '873deb80-0000-4000-8000-000000000001',
min_payout: 18
}
]
})
};
fetch('https://catchbackcards.com/api/partner/v1/cards/sell-back', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://catchbackcards.com/api/partner/v1/cards/sell-back",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'items' => [
[
'card_id' => '0e94dc61-5a2f-4b1e-9c3d-7f8a1b2c3d4e',
'pull_id' => '873deb80-0000-4000-8000-000000000001',
'min_payout' => 18
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://catchbackcards.com/api/partner/v1/cards/sell-back"
payload := strings.NewReader("{\n \"items\": [\n {\n \"card_id\": \"0e94dc61-5a2f-4b1e-9c3d-7f8a1b2c3d4e\",\n \"pull_id\": \"873deb80-0000-4000-8000-000000000001\",\n \"min_payout\": 18\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://catchbackcards.com/api/partner/v1/cards/sell-back")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"items\": [\n {\n \"card_id\": \"0e94dc61-5a2f-4b1e-9c3d-7f8a1b2c3d4e\",\n \"pull_id\": \"873deb80-0000-4000-8000-000000000001\",\n \"min_payout\": 18\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://catchbackcards.com/api/partner/v1/cards/sell-back")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"items\": [\n {\n \"card_id\": \"0e94dc61-5a2f-4b1e-9c3d-7f8a1b2c3d4e\",\n \"pull_id\": \"873deb80-0000-4000-8000-000000000001\",\n \"min_payout\": 18\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"total_paid": 16.2,
"remaining_balance": 189937,
"results": [
{
"card_id": "bee48cce-…",
"pull_id": "873deb80-…",
"status": "sold",
"transaction_id": "93727497-…",
"payout_amount": 16.2,
"payout_rate": 0.9
},
{
"card_id": "e3d7148d-…",
"pull_id": "e9d27918-…",
"status": "already_sold",
"transaction_id": "2fa30a7d-…",
"payout_amount": 18
},
{
"card_id": "4a51bc92-…",
"purchase_id": "e22855d2-…",
"status": "failed",
"error": "No purchase of this card by this account with that purchase_id"
}
]
}{
"error": "The same card is listed twice"
}{
"error": "Missing or malformed API key"
}{
"error": "<string>",
"code": "<string>"
}Sell back cards
Scope: sell:cards (needs a linked account). Moves money.
CatchBack up to 10 cards for CatchCoins, at the same rate a customer gets. A pulled card: the pull’s fresh rate (90%) within 5 minutes of the pull, then 80% of the value at pull for 7 days, then 80% of market value. A bought card: 80% of the lower of the price you paid and its market value at purchase for 7 days, then 80% of market value.
An energy card from a base pack pays 100% of its value. A card from a pack with a hold pays 90% until the hold ends. To see every amount and when it changes before you sell, use Quote a sell-back.
Items run in order, and one failing doesn’t stop the rest. A pull or purchase pays out only once: selling it again returns already_sold with the earlier sale, so a retry is always safe. A sealed pack can’t be sold back through the API.
curl --request POST \
--url https://catchbackcards.com/api/partner/v1/cards/sell-back \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"items": [
{
"card_id": "0e94dc61-5a2f-4b1e-9c3d-7f8a1b2c3d4e",
"pull_id": "873deb80-0000-4000-8000-000000000001",
"min_payout": 18
}
]
}
'import requests
url = "https://catchbackcards.com/api/partner/v1/cards/sell-back"
payload = { "items": [
{
"card_id": "0e94dc61-5a2f-4b1e-9c3d-7f8a1b2c3d4e",
"pull_id": "873deb80-0000-4000-8000-000000000001",
"min_payout": 18
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
items: [
{
card_id: '0e94dc61-5a2f-4b1e-9c3d-7f8a1b2c3d4e',
pull_id: '873deb80-0000-4000-8000-000000000001',
min_payout: 18
}
]
})
};
fetch('https://catchbackcards.com/api/partner/v1/cards/sell-back', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://catchbackcards.com/api/partner/v1/cards/sell-back",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'items' => [
[
'card_id' => '0e94dc61-5a2f-4b1e-9c3d-7f8a1b2c3d4e',
'pull_id' => '873deb80-0000-4000-8000-000000000001',
'min_payout' => 18
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://catchbackcards.com/api/partner/v1/cards/sell-back"
payload := strings.NewReader("{\n \"items\": [\n {\n \"card_id\": \"0e94dc61-5a2f-4b1e-9c3d-7f8a1b2c3d4e\",\n \"pull_id\": \"873deb80-0000-4000-8000-000000000001\",\n \"min_payout\": 18\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://catchbackcards.com/api/partner/v1/cards/sell-back")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"items\": [\n {\n \"card_id\": \"0e94dc61-5a2f-4b1e-9c3d-7f8a1b2c3d4e\",\n \"pull_id\": \"873deb80-0000-4000-8000-000000000001\",\n \"min_payout\": 18\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://catchbackcards.com/api/partner/v1/cards/sell-back")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"items\": [\n {\n \"card_id\": \"0e94dc61-5a2f-4b1e-9c3d-7f8a1b2c3d4e\",\n \"pull_id\": \"873deb80-0000-4000-8000-000000000001\",\n \"min_payout\": 18\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"total_paid": 16.2,
"remaining_balance": 189937,
"results": [
{
"card_id": "bee48cce-…",
"pull_id": "873deb80-…",
"status": "sold",
"transaction_id": "93727497-…",
"payout_amount": 16.2,
"payout_rate": 0.9
},
{
"card_id": "e3d7148d-…",
"pull_id": "e9d27918-…",
"status": "already_sold",
"transaction_id": "2fa30a7d-…",
"payout_amount": 18
},
{
"card_id": "4a51bc92-…",
"purchase_id": "e22855d2-…",
"status": "failed",
"error": "No purchase of this card by this account with that purchase_id"
}
]
}{
"error": "The same card is listed twice"
}{
"error": "Missing or malformed API key"
}{
"error": "<string>",
"code": "<string>"
}Authorizations
Your API key, sent as a bearer token. Keep it on your server. See Authentication. A request from a location we refuse gets a 403 with Access denied, whether or not it has a valid key: where you can call from.
Body
Each item needs a card_id and exactly one of pull_id and purchase_id, all UUIDs. Get vault has them, and so do Buy packs and Buy a card. The same pull or purchase of a card can't be listed twice.
1 - 10 elements- A pulled card
- A bought card
Show child attributes
Show child attributes
Response
One result per item, in the order you sent them. A 200 can carry failed items: check each status.

