curl --request GET \
--url https://catchbackcards.com/api/partner/v1/catalog/packs/pool \
--header 'Authorization: Bearer <token>'import requests
url = "https://catchbackcards.com/api/partner/v1/catalog/packs/pool"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://catchbackcards.com/api/partner/v1/catalog/packs/pool', 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/catalog/packs/pool",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://catchbackcards.com/api/partner/v1/catalog/packs/pool"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://catchbackcards.com/api/partner/v1/catalog/packs/pool")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://catchbackcards.com/api/partner/v1/catalog/packs/pool")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"pack_type": "bronze",
"name": "Bronze Pack",
"category": "pokemon",
"risk_level": "standard",
"price": 25,
"available": true,
"kind": "slab",
"expected_value": 24.1,
"bands": [
{
"bucket_id": "P1",
"label": "$5-$20",
"min_value": 5,
"max_value": 20,
"odds": 0.72,
"is_consolation": false,
"hittable_cards": 412
},
{
"bucket_id": "P2",
"label": "$20-$50",
"min_value": 20,
"max_value": 50,
"odds": 0.2,
"is_consolation": false,
"hittable_cards": 188
}
],
"chase": null,
"total_cards": 1043,
"cards": [
{
"id": "0e94dc61-…",
"category": "pokemon",
"name": "Charizard ex",
"set": "Pokemon Sv3 En-Obsidian Flames",
"language": "english",
"slab_label": "2023 Obsidian Flames Charizard ex",
"grading_company": "PSA",
"grading_rank": 10,
"cert_number": "84512377",
"market_value": 410,
"front_image": "https://…/0e94dc61-….png",
"back_image": "https://…/0e94dc61-…-back.png",
"render_image": "https://…/0e94dc61-…-render.png",
"image_url": "https://…/0e94dc61-…-render.png",
"bucket_id": "P5"
}
]
}{
"error": "pack_type is required"
}{
"error": "Missing or malformed API key"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}Get a pack's pool
Scope: read:catalog
What a pack can pull right now: its value bands with odds at a risk level, the chase card if one is set, and every hittable card. A band at 0% odds is still listed, but its cards are not.
kind says what the pack pays out. A slab pack pays graded cards, listed in cards. A sealed pack (the Starter and the sealed mystery packs) pays sealed products: every in-stock product is its own band, products lists them, and cards is empty.
The pool is point-in-time: any opening on CatchBack can take a card from it. A sold-out pack still answers 200 with available: false.
curl --request GET \
--url https://catchbackcards.com/api/partner/v1/catalog/packs/pool \
--header 'Authorization: Bearer <token>'import requests
url = "https://catchbackcards.com/api/partner/v1/catalog/packs/pool"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://catchbackcards.com/api/partner/v1/catalog/packs/pool', 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/catalog/packs/pool",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://catchbackcards.com/api/partner/v1/catalog/packs/pool"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://catchbackcards.com/api/partner/v1/catalog/packs/pool")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://catchbackcards.com/api/partner/v1/catalog/packs/pool")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"pack_type": "bronze",
"name": "Bronze Pack",
"category": "pokemon",
"risk_level": "standard",
"price": 25,
"available": true,
"kind": "slab",
"expected_value": 24.1,
"bands": [
{
"bucket_id": "P1",
"label": "$5-$20",
"min_value": 5,
"max_value": 20,
"odds": 0.72,
"is_consolation": false,
"hittable_cards": 412
},
{
"bucket_id": "P2",
"label": "$20-$50",
"min_value": 20,
"max_value": 50,
"odds": 0.2,
"is_consolation": false,
"hittable_cards": 188
}
],
"chase": null,
"total_cards": 1043,
"cards": [
{
"id": "0e94dc61-…",
"category": "pokemon",
"name": "Charizard ex",
"set": "Pokemon Sv3 En-Obsidian Flames",
"language": "english",
"slab_label": "2023 Obsidian Flames Charizard ex",
"grading_company": "PSA",
"grading_rank": 10,
"cert_number": "84512377",
"market_value": 410,
"front_image": "https://…/0e94dc61-….png",
"back_image": "https://…/0e94dc61-…-back.png",
"render_image": "https://…/0e94dc61-…-render.png",
"image_url": "https://…/0e94dc61-…-render.png",
"bucket_id": "P5"
}
]
}{
"error": "pack_type is required"
}{
"error": "Missing or malformed API key"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"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.
Query Parameters
A pack_type from List packs. A pack this key can't buy is a 404.
100The catalog. A catalog that has packs and listings.
pokemon, onepiece, sports, riftbound, watches Odds change with the risk level, and so can which cards are hittable. aggressive is shown as Hot in the app. Use one of the pack's risk_levels; any other is a 400.
chill, standard, aggressive Response
The pool.
Price per pack in USD.
slab, sealed Expected value of one pack in USD at this risk level.
Show child attributes
Show child attributes
A hand-picked card hittable at fixed odds on top of the bands, or null.
Show child attributes
Show child attributes
Every hittable card, highest value first. Empty for a sealed pack.
Show child attributes
Show child attributes
Why the pack is unavailable. Only when a sold-out slab pack's pool is empty.
Sealed packs only.
Sealed packs only. Every in-stock product, highest value first.
Show child attributes
Show child attributes

