Trading TCG Endpoint Curl Report

Verification for Phantom-native TCG endpoints and the wallet kant Collector Crypt-compatible aliases.

Generated: 2026-06-12T17:44:49.364Z Base URL: http://127.0.0.1:4030 Mode: Collector Crypt client integration API key available to report runner: yes Live execution guard: enabled
CheckMethodPathStatusSourceTime
List Phantom packs GET /tcg/packs 200 Live Collector Crypt 977 ms
Get Phantom pack detail GET /tcg/packs/pokemon_50 200 Live Collector Crypt 584 ms
Get purchased pack counts GET /tcg/packs/purchased?wallet=AzZtQzZYHYPNrntcCeCrAg4LnWLzLc8icrmnWfvfymUv 200 Live Collector Crypt 269 ms
Create pack transaction POST /tcg/packs/create 201 Live Collector Crypt 404 ms
Open generated pack POST /tcg/packs/open SKIP Live Collector Crypt 0 ms
Build buyback transaction POST /tcg/packs/buyback SKIP Live Collector Crypt 0 ms
Submit signed transaction POST /tcg/packs/submit-transaction SKIP Live Collector Crypt 0 ms
Missing auth validation POST /tcg/packs/create 401 Real validation/auth 21 ms

Phantom-native TCG endpoints

List Phantom packs

Native Phantom endpoint returning { packs } for the TCG pack catalog.

Live Collector Crypt 200

Response Source

CollectorCryptClient.getMachines() -> Collector Crypt /api/machines

curl

curl -sS -i -X GET 'http://127.0.0.1:4030/tcg/packs'

Response Headers

HTTP/1.1 200 OK
Content-Security-Policy: default-src 'self';style-src 'self' 'unsafe-inline';img-src 'self' data: validator.swagger.io;script-src 'self' https: 'unsafe-inline';report-uri https://rt.phantom.app/csp;base-uri 'self';font-src 'self' https: data:;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none';upgrade-insecure-requests
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Resource-Policy: same-origin
Origin-Agent-Cluster: ?1
Referrer-Policy: no-referrer
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
X-DNS-Prefetch-Control: off
X-Download-Options: noopen
X-Frame-Options: SAMEORIGIN
X-Permitted-Cross-Domain-Policies: none
X-XSS-Protection: 0
access-control-allow-origin: *
cache-control: public, max-age=60
content-type: application/json; charset=utf-8
content-length: 22575
Date: Fri, 12 Jun 2026 17:44:50 GMT
Connection: keep-alive
Keep-Alive: timeout=75

Response Body

{
  "packs": [
    {
      "code": "pokemon_50",
      "name": "Elite Pokémon Gacha Pack",
      "price": 50,
      "shortName": "PKMN 50",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/pokemon_50.png",
      "videoSrc": "https://gacha.collectorcrypt.com/pokemon_50.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/pokemon_50.hevc.mp4",
      "contains": 1,
      "public": true,
      "instantBuyback": 85,
      "freeSpins": true,
      "turboMode": true,
      "pointsMultiplier": 1,
      "odds": {
        "common": 0.8,
        "uncommon": 0.15,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 154,
        "uncommon": 182,
        "rare": 98,
        "epic": 761
      },
      "tierRanges": {
        "common": {
          "start": 30,
          "end": 60
        },
        "uncommon": {
          "start": 60,
          "end": 110
        },
        "rare": {
          "start": 110,
          "end": 250
        },
        "epic": {
          "start": 250,
          "end": 5001
        }
      },
      "ev": 55.092700028524135
    },
    {
      "code": "pokemon_2500",
      "name": "Mythic Pokémon Gacha Pack",
      "price": 2500,
      "shortName": "PKMN 2500",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/pokemon_2500.png",
      "videoSrc": "https://gacha.collectorcrypt.com/pokemon_2500.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/pokemon_2500.hevc.mp4",
      "contains": 1,
      "public": true,
      "instantBuyback": 93,
      "freeSpins": false,
      "turboMode": true,
      "pointsMultiplier": 50,
      "odds": {
        "common": 0.75,
        "uncommon": 0.2,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 187,
        "uncommon": 202,
        "rare": 90,
        "epic": 60
      },
      "tierRanges": {
        "common": {
          "start": 1250,
          "end": 2500
        },
        "uncommon": {
          "start": 2500,
          "end": 5000
        },
        "rare": {
          "start": 5000,
          "end": 10000
        },
        "epic": {
          "start": 10000,
          "end": 150000
        }
      },
      "ev": 2538.6083611508207
    },
    {
      "code": "pokemon_250",
      "name": "Legendary Pokémon Gacha Pack",
      "price": 250,
      "shortName": "PKMN 250",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/pokemon_250.png",
      "videoSrc": "https://gacha.collectorcrypt.com/pokemon_250.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/pokemon_250.hevc.mp4",
      "contains": 1,
      "public": true,
      "instantBuyback": 90,
      "freeSpins": true,
      "turboMode": true,
      "pointsMultiplier": 5,
      "odds": {
        "common": 0.75,
        "uncommon": 0.2,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 330,
        "uncommon": 610,
        "rare": 660,
        "epic": 175
      },
      "tierRanges": {
        "common": {
          "start": 150,
          "end": 250
        },
        "uncommon": {
          "start": 250,
          "end": 400
        },
        "rare": {
          "start": 400,
          "end": 2000
        },
        "epic": {
          "start": 2000,
          "end": 50000
        }
      },
      "ev": 261.34185785909074
    },
    {
      "code": "onepiece_50",
      "name": "One Piece Ocean Blue Pack",
      "price": 50,
      "shortName": "ONEPIECE 50",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/onepiece_50.png",
      "videoSrc": "https://gacha.collectorcrypt.com/onepiece_50.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/onepiece_50.hevc.mp4",
      "contains": 1,
      "public": true,
      "instantBuyback": 85,
      "freeSpins": true,
      "turboMode": true,
      "pointsMultiplier": 1,
      "odds": {
        "common": 0.8,
        "uncommon": 0.15,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 24,
        "uncommon": 18,
        "rare": 16,
        "epic": 201
      },
      "tierRanges": {
        "common": {
          "start": 30,
          "end": 60
        },
        "uncommon": {
          "start": 60,
          "end": 110
        },
        "rare": {
          "start": 110,
          "end": 250
        },
        "epic": {
          "start": 250,
          "end": 5001
        }
      },
      "ev": 53.77914179104478
    },
    {
      "code": "pokemon_1000",
      "name": "Grail Pokémon Gacha Pack",
      "price": 1000,
      "shortName": "PKMN 1000",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/pokemon_1000.png",
      "videoSrc": "https://gacha.collectorcrypt.com/pokemon_1000.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/pokemon_1000.hevc.mp4",
      "contains": 1,
      "public": true,
      "instantBuyback": 93,
      "freeSpins": true,
      "turboMode": true,
      "pointsMultiplier": 20,
      "odds": {
        "common": 0.75,
        "uncommon": 0.2,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 283,
        "uncommon": 84,
        "rare": 204,
        "epic": 31
      },
      "tierRanges": {
        "common": {
          "start": 600,
          "end": 1000
        },
        "uncommon": {
          "start": 1000,
          "end": 1600
        },
        "rare": {
          "start": 1600,
          "end": 8000
        },
        "epic": {
          "start": 8000,
          "end": 50000
        }
      },
      "ev": 1013.40719882208
    },
    {
      "code": "onepiece_250",
      "name": "One Piece Gacha Pack",
      "price": 250,
      "shortName": "ONEPIECE 250",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/onepiece_250.png",
      "videoSrc": "https://gacha.collectorcrypt.com/onepiece_250.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/onepiece_250.hevc.mp4",
      "contains": 1,
      "public": true,
      "instantBuyback": 90,
      "freeSpins": true,
      "turboMode": true,
      "pointsMultiplier": 5,
      "odds": {
        "common": 0.75,
        "uncommon": 0.2,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 48,
        "uncommon": 4,
        "rare": 355,
        "epic": 185
      },
      "tierRanges": {
        "common": {
          "start": 150,
          "end": 250
        },
        "uncommon": {
          "start": 250,
          "end": 400
        },
        "rare": {
          "start": 400,
          "end": 2000
        },
        "epic": {
          "start": 2000,
          "end": 50000
        }
      },
      "ev": 257.1466309002665
    },
    {
      "code": "pokemon_25",
      "name": "Starter Pokémon Gacha Pack",
      "price": 25,
      "shortName": "PKMN 25",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/pokemon_25.png",
      "videoSrc": "https://gacha.collectorcrypt.com/pokemon_25.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/pokemon_25.hevc.mp4",
      "contains": 1,
      "public": true,
      "instantBuyback": 85,
      "freeSpins": false,
      "turboMode": true,
      "pointsMultiplier": 0.5,
      "odds": {
        "common": 0.75,
        "uncommon": 0.2,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 49,
        "uncommon": 175,
        "rare": 64,
        "epic": 17
      },
      "tierRanges": {
        "common": {
          "start": 13,
          "end": 30
        },
        "uncommon": {
          "start": 30,
          "end": 55
        },
        "rare": {
          "start": 55,
          "end": 125
        },
        "epic": {
          "start": 125,
          "end": 500
        }
      },
      "ev": 27.73046968787515
    },
    {
      "code": "comic_25",
      "name": "Comic 25",
      "price": 25,
      "shortName": "COMIC 25",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/comic_25.png",
      "videoSrc": "https://gacha.collectorcrypt.com/comic_25.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/comic_25.hevc.mp4",
      "contains": 1,
      "public": false,
      "instantBuyback": 85,
      "freeSpins": false,
      "turboMode": true,
      "pointsMultiplier": 0.5,
      "odds": {
        "common": 0.75,
        "uncommon": 0.2,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 53,
        "uncommon": 5,
        "rare": 13,
        "epic": 27
      },
      "tierRanges": {
        "common": {
          "start": 13,
          "end": 30
        },
        "uncommon": {
          "start": 30,
          "end": 55
        },
        "rare": {
          "start": 55,
          "end": 125
        },
        "epic": {
          "start": 125,
          "end": 500
        }
      },
      "ev": 27.823223136053326
    },
    {
      "code": "sns_25",
      "name": "Sns 25",
      "price": 25,
      "shortName": "SNS 25",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/sns_25.png",
      "videoSrc": "https://gacha.collectorcrypt.com/sns_25.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/sns_25.hevc.mp4",
      "contains": 1,
      "public": false,
      "instantBuyback": 85,
      "freeSpins": false,
      "turboMode": true,
      "pointsMultiplier": 0.5,
      "odds": {
        "common": 0.75,
        "uncommon": 0.2,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 0,
        "uncommon": 0,
        "rare": 0,
        "epic": 0
      },
      "tierRanges": {
        "common": {
          "start": 13,
          "end": 30
        },
        "uncommon": {
          "start": 30,
          "end": 55
        },
        "rare": {
          "start": 55,
          "end": 125
        },
        "epic": {
          "start": 125,
          "end": 500
        }
      },
      "ev": 0
    },
    {
      "code": "comic_50",
      "name": "Comic 50",
      "price": 50,
      "shortName": "COMIC 50",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/comic_50.png",
      "videoSrc": "https://gacha.collectorcrypt.com/comic_50.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/comic_50.hevc.mp4",
      "contains": 1,
      "public": false,
      "instantBuyback": 85,
      "freeSpins": true,
      "turboMode": true,
      "pointsMultiplier": 1,
      "odds": {
        "common": 0.8,
        "uncommon": 0.15,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 16,
        "uncommon": 75,
        "rare": 20,
        "epic": 85
      },
      "tierRanges": {
        "common": {
          "start": 30,
          "end": 60
        },
        "uncommon": {
          "start": 60,
          "end": 110
        },
        "rare": {
          "start": 110,
          "end": 250
        },
        "epic": {
          "start": 250,
          "end": 5001
        }
      },
      "ev": 57.67494117647059
    },
    {
      "code": "football_50",
      "name": "Football Gacha Pack",
      "price": 50,
      "shortName": "FOOTBALL 50",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/football_50.png",
      "videoSrc": "https://gacha.collectorcrypt.com/football_50.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/football_50.hevc.mp4",
      "contains": 1,
      "public": true,
      "instantBuyback": 85,
      "freeSpins": true,
      "turboMode": true,
      "pointsMultiplier": 1,
      "odds": {
        "common": 0.8,
        "uncommon": 0.15,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 0,
        "uncommon": 0,
        "rare": 0,
        "epic": 0
      },
      "tierRanges": {
        "common": {
          "start": 30,
          "end": 60
        },
        "uncommon": {
          "start": 60,
          "end": 110
        },
        "rare": {
          "start": 110,
          "end": 250
        },
        "epic": {
          "start": 250,
          "end": 5001
        }
      },
      "ev": 0
    },
    {
      "code": "basketball_50",
      "name": "Basketball Gacha Pack",
      "price": 50,
      "shortName": "BASKETBALL 50",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/basketball_50.png",
      "videoSrc": "https://gacha.collectorcrypt.com/basketball_50.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/basketball_50.hevc.mp4",
      "contains": 1,
      "public": true,
      "instantBuyback": 85,
      "freeSpins": true,
      "turboMode": true,
      "pointsMultiplier": 1,
      "odds": {
        "common": 0.8,
        "uncommon": 0.15,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 0,
        "uncommon": 0,
        "rare": 0,
        "epic": 0
      },
      "tierRanges": {
        "common": {
          "start": 30,
          "end": 60
        },
        "uncommon": {
          "start": 60,
          "end": 110
        },
        "rare": {
          "start": 110,
          "end": 250
        },
        "epic": {
          "start": 250,
          "end": 5001
        }
      },
      "ev": 0
    },
    {
      "code": "baseball_50",
      "name": "Baseball Gacha Pack",
      "price": 50,
      "shortName": "BASEBALL 50",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/baseball_50.png",
      "videoSrc": "https://gacha.collectorcrypt.com/baseball_50.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/baseball_50.hevc.mp4",
      "contains": 1,
      "public": true,
      "instantBuyback": 85,
      "freeSpins": true,
      "turboMode": true,
      "pointsMultiplier": 1,
      "odds": {
        "common": 0.8,
        "uncommon": 0.15,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 0,
        "uncommon": 0,
        "rare": 0,
        "epic": 0
      },
      "tierRanges": {
        "common": {
          "start": 30,
          "end": 60
        },
        "uncommon": {
          "start": 60,
          "end": 110
        },
        "rare": {
          "start": 110,
          "end": 250
        },
        "epic": {
          "start": 250,
          "end": 5001
        }
      },
      "ev": 0
    },
    {
      "code": "gachopia_50",
      "name": "Elite Gachopia Pack",
      "price": 50,
      "shortName": "GACHOPIA 50",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/gachopia_50.png",
      "videoSrc": "https://gacha.collectorcrypt.com/gachopia_50.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/gachopia_50.hevc.mp4",
      "contains": 1,
      "public": true,
      "instantBuyback": 85,
      "freeSpins": false,
      "turboMode": true,
      "pointsMultiplier": 1,
      "odds": {
        "common": 0.8,
        "uncommon": 0.15,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 0,
        "uncommon": 5,
        "rare": 19,
        "epic": 15
      },
      "tierRanges": {
        "common": {
          "start": 30,
          "end": 60
        },
        "uncommon": {
          "start": 60,
          "end": 110
        },
        "rare": {
          "start": 110,
          "end": 250
        },
        "epic": {
          "start": 250,
          "end": 5001
        }
      },
      "ev": 23.739333333333335
    },
    {
      "code": "pikachu_50",
      "name": "Pikachu Gacha Pack",
      "price": 50,
      "shortName": "PIKACHU 50",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/pikachu_50.png",
      "videoSrc": "https://gacha.collectorcrypt.com/pikachu_50.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/pikachu_50.hevc.mp4",
      "contains": 1,
      "public": false,
      "instantBuyback": 85,
      "freeSpins": false,
      "turboMode": true,
      "pointsMultiplier": 1,
      "odds": {
        "common": 0.8,
        "uncommon": 0.15,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 3,
        "uncommon": 63,
        "rare": 24,
        "epic": 18
      },
      "tierRanges": {
        "common": {
          "start": 30,
          "end": 60
        },
        "uncommon": {
          "start": 60,
          "end": 110
        },
        "rare": {
          "start": 110,
          "end": 250
        },
        "epic": {
          "start": 250,
          "end": 5001
        }
      },
      "ev": 74.25896825396825
    },
    {
      "code": "charizard_50",
      "name": "Charizard Gacha Pack",
      "price": 50,
      "shortName": "CHARIZARD 50",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/charizard_50.png",
      "videoSrc": "https://gacha.collectorcrypt.com/charizard_50.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/charizard_50.hevc.mp4",
      "contains": 1,
      "public": false,
      "instantBuyback": 85,
      "freeSpins": false,
      "turboMode": true,
      "pointsMultiplier": 1,
      "odds": {
        "common": 0.8,
        "uncommon": 0.15,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 0,
        "uncommon": 53,
        "rare": 11,
        "epic": 22
      },
      "tierRanges": {
        "common": {
          "start": 30,
          "end": 60
        },
        "uncommon": {
          "start": 60,
          "end": 110
        },
        "rare": {
          "start": 110,
          "end": 250
        },
        "epic": {
          "start": 250,
          "end": 5001
        }
      },
      "ev": 24.06403087478559
    },
    {
      "code": "gengar_50",
      "name": "Gengar Gacha Pack",
      "price": 50,
      "shortName": "GENGAR 50",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/gengar_50.png",
      "videoSrc": "https://gacha.collectorcrypt.com/gengar_50.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/gengar_50.hevc.mp4",
      "contains": 1,
      "public": false,
      "instantBuyback": 85,
      "freeSpins": false,
      "turboMode": true,
      "pointsMultiplier": 1,
      "odds": {
        "common": 0.8,
        "uncommon": 0.15,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 0,
        "uncommon": 34,
        "rare": 5,
        "epic": 4
      },
      "tierRanges": {
        "common": {
          "start": 30,
          "end": 60
        },
        "uncommon": {
          "start": 60,
          "end": 110
        },
        "rare": {
          "start": 110,
          "end": 250
        },
        "epic": {
          "start": 250,
          "end": 5001
        }
      },
      "ev": 31.427058823529407
    },
    {
      "code": "anime_75",
      "name": "Anime Pop Culture Gacha",
      "price": 75,
      "shortName": "ANIME 75",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/anime_75.png",
      "videoSrc": "https://gacha.collectorcrypt.com/anime_75.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/anime_75.hevc.mp4",
      "contains": 1,
      "public": true,
      "instantBuyback": 85,
      "freeSpins": false,
      "turboMode": true,
      "pointsMultiplier": 1.5,
      "odds": {
        "common": 0.8,
        "uncommon": 0.15,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 140,
        "uncommon": 133,
        "rare": 405,
        "epic": 208
      },
      "tierRanges": {
        "common": {
          "start": 40,
          "end": 80
        },
        "uncommon": {
          "start": 80,
          "end": 150
        },
        "rare": {
          "start": 150,
          "end": 375
        },
        "epic": {
          "start": 375,
          "end": 5001
        }
      },
      "ev": 84.4691698682247
    },
    {
      "code": "sealed_80",
      "name": "Sealed Gacha Pack",
      "price": 80,
      "shortName": "SEALED 80",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/sealed_80.png",
      "videoSrc": "https://gacha.collectorcrypt.com/sealed_80.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/sealed_80.hevc.mp4",
      "contains": 1,
      "public": true,
      "instantBuyback": 90,
      "freeSpins": false,
      "turboMode": true,
      "pointsMultiplier": 1.6,
      "odds": {
        "common": 0.8,
        "uncommon": 0.15,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 48,
        "uncommon": 96,
        "rare": 16,
        "epic": 61
      },
      "tierRanges": {
        "common": {
          "start": 40,
          "end": 80
        },
        "uncommon": {
          "start": 80,
          "end": 160
        },
        "rare": {
          "start": 160,
          "end": 400
        },
        "epic": {
          "start": 400,
          "end": 5001
        }
      },
      "ev": 82.81642076502733
    },
    {
      "code": "basketball_100",
      "name": "Basketball 100 Gacha Pack",
      "price": 100,
      "shortName": "BASKSETBALL 100",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/basketball_100.png",
      "videoSrc": "https://gacha.collectorcrypt.com/basketball_100.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/basketball_100.hevc.mp4",
      "contains": 1,
      "public": false,
      "instantBuyback": 90,
      "freeSpins": false,
      "turboMode": true,
      "pointsMultiplier": 2,
      "odds": {
        "common": 0.75,
        "uncommon": 0.2,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 32,
        "uncommon": 58,
        "rare": 93,
        "epic": 111
      },
      "tierRanges": {
        "common": {
          "start": 50,
          "end": 100
        },
        "uncommon": {
          "start": 100,
          "end": 200
        },
        "rare": {
          "start": 200,
          "end": 500
        },
        "epic": {
          "start": 500,
          "end": 5001
        }
      },
      "ev": 114.61578147077833
    },
    {
      "code": "firegrass_100",
      "name": "Fire & Grass Pack",
      "price": 100,
      "shortName": "FIREGRASS 100",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/firegrass_100.png",
      "videoSrc": "https://gacha.collectorcrypt.com/firegrass_100.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/firegrass_100.hevc.mp4",
      "contains": 1,
      "public": true,
      "instantBuyback": 90,
      "freeSpins": false,
      "turboMode": true,
      "pointsMultiplier": 2,
      "odds": {
        "common": 0.75,
        "uncommon": 0.2,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 8,
        "uncommon": 29,
        "rare": 18,
        "epic": 18
      },
      "tierRanges": {
        "common": {
          "start": 50,
          "end": 100
        },
        "uncommon": {
          "start": 100,
          "end": 200
        },
        "rare": {
          "start": 200,
          "end": 500
        },
        "epic": {
          "start": 500,
          "end": 15001
        }
      },
      "ev": 107.98053639846742
    },
    {
      "code": "dragonite_100",
      "name": "Dragonite + Friends",
      "price": 100,
      "shortName": "DRAGON 100",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/dragonite_100.png",
      "videoSrc": "https://gacha.collectorcrypt.com/dragonite_100.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/dragonite_100.hevc.mp4",
      "contains": 1,
      "public": false,
      "instantBuyback": 90,
      "freeSpins": false,
      "turboMode": true,
      "pointsMultiplier": 2,
      "odds": {
        "common": 0.75,
        "uncommon": 0.2,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 18,
        "uncommon": 15,
        "rare": 2,
        "epic": 2
      },
      "tierRanges": {
        "common": {
          "start": 50,
          "end": 100
        },
        "uncommon": {
          "start": 100,
          "end": 200
        },
        "rare": {
          "start": 200,
          "end": 500
        },
        "epic": {
          "start": 500,
          "end": 5001
        }
      },
      "ev": 105.71499999999999
    },
    {
      "code": "baseball_100",
      "name": "Baseball 100 Gacha Pack",
      "price": 100,
      "shortName": "BASEBALL 100",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/baseball_100.png",
      "videoSrc": "https://gacha.collectorcrypt.com/baseball_100.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/baseball_100.hevc.mp4",
      "contains": 1,
      "public": false,
      "instantBuyback": 90,
      "freeSpins": false,
      "turboMode": true,
      "pointsMultiplier": 2,
      "odds": {
        "common": 0.75,
        "uncommon": 0.2,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 44,
        "uncommon": 91,
        "rare": 96,
        "epic": 99
      },
      "tierRanges": {
        "common": {
          "start": 50,
          "end": 100
        },
        "uncommon": {
          "start": 100,
          "end": 200
        },
        "rare": {
          "start": 200,
          "end": 500
        },
        "epic": {
          "start": 500,
          "end": 5001
        }
      },
      "ev": 116.70866910866911
    },
    {
      "code": "sports_100",
      "name": "Sports Gacha Pack",
      "price": 100,
      "shortName": "SPORTS 100",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/sports_100.png",
      "videoSrc": "https://gacha.collectorcrypt.com/sports_100.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/sports_100.hevc.mp4",
      "contains": 1,
      "public": true,
      "instantBuyback": 90,
      "freeSpins": false,
      "turboMode": true,
      "pointsMultiplier": 2,
      "odds": {
        "common": 0.75,
        "uncommon": 0.2,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 117,
        "uncommon": 201,
        "rare": 246,
        "epic": 326
      },
      "tierRanges": {
        "common": {
          "start": 50,
          "end": 100
        },
        "uncommon": {
          "start": 100,
          "end": 200
        },
        "rare": {
          "start": 200,
          "end": 500
        },
        "epic": {
          "start": 500,
          "end": 10001
        }
      },
      "ev": 105.94969003181012
    },
    {
      "code": "football_100",
      "name": "Football 100 Gacha Pack",
      "price": 100,
      "shortName": "FOOTBALL 100",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/football_100.png",
      "videoSrc": "https://gacha.collectorcrypt.com/football_100.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/football_100.hevc.mp4",
      "contains": 1,
      "public": false,
      "instantBuyback": 90,
      "freeSpins": false,
      "turboMode": true,
      "pointsMultiplier": 2,
      "odds": {
        "common": 0.75,
        "uncommon": 0.2,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 50,
        "uncommon": 111,
        "rare": 132,
        "epic": 198
      },
      "tierRanges": {
        "common": {
          "start": 50,
          "end": 100
        },
        "uncommon": {
          "start": 100,
          "end": 200
        },
        "rare": {
          "start": 200,
          "end": 500
        },
        "epic": {
          "start": 500,
          "end": 5001
        }
      },
      "ev": 109.7207562107562
    },
    {
      "code": "water_100",
      "name": "Water Pack",
      "price": 100,
      "shortName": "WATER 100",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/water_100.png",
      "videoSrc": "https://gacha.collectorcrypt.com/water_100.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/water_100.hevc.mp4",
      "contains": 1,
      "public": true,
      "instantBuyback": 90,
      "freeSpins": false,
      "turboMode": true,
      "pointsMultiplier": 2,
      "odds": {
        "common": 0.75,
        "uncommon": 0.2,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 86,
        "uncommon": 44,
        "rare": 33,
        "epic": 62
      },
      "tierRanges": {
        "common": {
          "start": 50,
          "end": 100
        },
        "uncommon": {
          "start": 100,
          "end": 200
        },
        "rare": {
          "start": 200,
          "end": 500
        },
        "epic": {
          "start": 500,
          "end": 10001
        }
      },
      "ev": 107.08197663052128
    },
    {
      "code": "comic_250",
      "name": "Comic 250",
      "price": 250,
      "shortName": "COMIC 250",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/comic_250.png",
      "videoSrc": "https://gacha.collectorcrypt.com/comic_250.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/comic_250.hevc.mp4",
      "contains": 1,
      "public": false,
      "instantBuyback": 90,
      "freeSpins": true,
      "turboMode": true,
      "pointsMultiplier": 5,
      "odds": {
        "common": 0.75,
        "uncommon": 0.2,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 102,
        "uncommon": 457,
        "rare": 644,
        "epic": 19
      },
      "tierRanges": {
        "common": {
          "start": 150,
          "end": 250
        },
        "uncommon": {
          "start": 250,
          "end": 400
        },
        "rare": {
          "start": 400,
          "end": 2000
        },
        "epic": {
          "start": 2000,
          "end": 50000
        }
      },
      "ev": 259.73712415892857
    },
    {
      "code": "mew_250",
      "name": "Mew + Friends",
      "price": 250,
      "shortName": "MEW 250",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/mew_250.png",
      "videoSrc": "https://gacha.collectorcrypt.com/mew_250.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/mew_250.hevc.mp4",
      "contains": 1,
      "public": false,
      "instantBuyback": 90,
      "freeSpins": false,
      "turboMode": true,
      "pointsMultiplier": 5,
      "odds": {
        "common": 0.75,
        "uncommon": 0.2,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 0,
        "uncommon": 1,
        "rare": 7,
        "epic": 2
      },
      "tierRanges": {
        "common": {
          "start": 150,
          "end": 250
        },
        "uncommon": {
          "start": 250,
          "end": 400
        },
        "rare": {
          "start": 400,
          "end": 2000
        },
        "epic": {
          "start": 2000,
          "end": 50000
        }
      },
      "ev": 131.585
    },
    {
      "code": "basketball_250",
      "name": "Basketball 250 Pack",
      "price": 250,
      "shortName": "BASKETBALL 250",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/basketball_250.png",
      "videoSrc": "https://gacha.collectorcrypt.com/basketball_250.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/basketball_250.hevc.mp4",
      "contains": 1,
      "public": false,
      "instantBuyback": 90,
      "freeSpins": true,
      "turboMode": true,
      "pointsMultiplier": 5,
      "odds": {
        "common": 0.75,
        "uncommon": 0.2,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 35,
        "uncommon": 41,
        "rare": 58,
        "epic": 35
      },
      "tierRanges": {
        "common": {
          "start": 150,
          "end": 250
        },
        "uncommon": {
          "start": 250,
          "end": 400
        },
        "rare": {
          "start": 400,
          "end": 2000
        },
        "epic": {
          "start": 2000,
          "end": 50000
        }
      },
      "ev": 258.01432944851615
    },
    {
      "code": "football_250",
      "name": "Football 250 Pack",
      "price": 250,
      "shortName": "FOOTBALL 250",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/football_250.png",
      "videoSrc": "https://gacha.collectorcrypt.com/football_250.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/football_250.hevc.mp4",
      "contains": 1,
      "public": false,
      "instantBuyback": 90,
      "freeSpins": true,
      "turboMode": true,
      "pointsMultiplier": 5,
      "odds": {
        "common": 0.75,
        "uncommon": 0.2,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 77,
        "uncommon": 26,
        "rare": 122,
        "epic": 45
      },
      "tierRanges": {
        "common": {
          "start": 150,
          "end": 250
        },
        "uncommon": {
          "start": 250,
          "end": 400
        },
        "rare": {
          "start": 400,
          "end": 2000
        },
        "epic": {
          "start": 2000,
          "end": 50000
        }
      },
      "ev": 261.3964431451972
    },
    {
      "code": "baseball_250",
      "name": "Baseball 250 Gacha Pack",
      "price": 250,
      "shortName": "BASEBALL 250",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/baseball_250.png",
      "videoSrc": "https://gacha.collectorcrypt.com/baseball_250.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/baseball_250.hevc.mp4",
      "contains": 1,
      "public": false,
      "instantBuyback": 90,
      "freeSpins": true,
      "turboMode": true,
      "pointsMultiplier": 5,
      "odds": {
        "common": 0.75,
        "uncommon": 0.2,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 49,
        "uncommon": 15,
        "rare": 54,
        "epic": 28
      },
      "tierRanges": {
        "common": {
          "start": 150,
          "end": 250
        },
        "uncommon": {
          "start": 250,
          "end": 400
        },
        "rare": {
          "start": 400,
          "end": 2000
        },
        "epic": {
          "start": 2000,
          "end": 50000
        }
      },
      "ev": 258.094724111867
    },
    {
      "code": "sf_2500",
      "name": "Mythic Pokémon Gacha Pack",
      "price": 2500,
      "shortName": "PKMN 2500",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/sf_2500.png",
      "videoSrc": "https://gacha.collectorcrypt.com/sf_2500.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/sf_2500.hevc.mp4",
      "contains": 1,
      "public": false,
      "instantBuyback": 93,
      "freeSpins": true,
      "turboMode": true,
      "pointsMultiplier": 0,
      "odds": {
        "common": 0.75,
        "uncommon": 0.2,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 228,
        "uncommon": 202,
        "rare": 90,
        "epic": 61
      },
      "tierRanges": {
        "common": {
          "start": 1250,
          "end": 2500
        },
        "uncommon": {
          "start": 2500,
          "end": 5000
        },
        "rare": {
          "start": 5000,
          "end": 10000
        },
        "epic": {
          "start": 10000,
          "end": 150000
        }
      },
      "ev": 2542.0878892614455
    },
    {
      "code": "pokemon_5000",
      "name": "Celestial Pokémon Gacha Pack",
      "price": 5000,
      "shortName": "PKMN 5000",
      "image": "",
      "thumbnailUrl": "https://gacha.collectorcrypt.com/pokemon_5000.png",
      "videoSrc": "https://gacha.collectorcrypt.com/pokemon_5000.webm",
      "videoHevc": "https://gacha.collectorcrypt.com/pokemon_5000.hevc.mp4",
      "contains": 1,
      "public": false,
      "instantBuyback": 93,
      "freeSpins": true,
      "turboMode": true,
      "pointsMultiplier": 20,
      "odds": {
        "common": 0.75,
        "uncommon": 0.2,
        "rare": 0.04,
        "epic": 0.01
      },
      "stock": {
        "common": 0,
        "uncommon": 0,
        "rare": 0,
        "epic": 0
      },
      "tierRanges": {
        "common": {
          "start": 2500,
          "end": 5000
        },
        "uncommon": {
          "start": 5000,
          "end": 10000
        },
        "rare": {
          "start": 10000,
          "end": 20000
        },
        "epic": {
          "start": 20000,
          "end": 200000
        }
      },
      "ev": 0
    }
  ]
}

Get Phantom pack detail

Native Phantom endpoint returning a single pack by Collector Crypt machine code.

Live Collector Crypt 200

Response Source

CollectorCryptClient.getMachines() -> Collector Crypt /api/machines, filtered by pack code

curl

curl -sS -i -X GET 'http://127.0.0.1:4030/tcg/packs/pokemon_50'

Response Headers

HTTP/1.1 200 OK
Content-Security-Policy: default-src 'self';style-src 'self' 'unsafe-inline';img-src 'self' data: validator.swagger.io;script-src 'self' https: 'unsafe-inline';report-uri https://rt.phantom.app/csp;base-uri 'self';font-src 'self' https: data:;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none';upgrade-insecure-requests
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Resource-Policy: same-origin
Origin-Agent-Cluster: ?1
Referrer-Policy: no-referrer
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
X-DNS-Prefetch-Control: off
X-Download-Options: noopen
X-Frame-Options: SAMEORIGIN
X-Permitted-Cross-Domain-Policies: none
X-XSS-Protection: 0
access-control-allow-origin: *
cache-control: public, max-age=60
content-type: application/json; charset=utf-8
content-length: 684
Date: Fri, 12 Jun 2026 17:44:50 GMT
Connection: keep-alive
Keep-Alive: timeout=75

Response Body

{
  "code": "pokemon_50",
  "name": "Elite Pokémon Gacha Pack",
  "price": 50,
  "shortName": "PKMN 50",
  "image": "",
  "thumbnailUrl": "https://gacha.collectorcrypt.com/pokemon_50.png",
  "videoSrc": "https://gacha.collectorcrypt.com/pokemon_50.webm",
  "videoHevc": "https://gacha.collectorcrypt.com/pokemon_50.hevc.mp4",
  "contains": 1,
  "public": true,
  "instantBuyback": 85,
  "freeSpins": true,
  "turboMode": true,
  "pointsMultiplier": 1,
  "odds": {
    "common": 0.8,
    "uncommon": 0.15,
    "rare": 0.04,
    "epic": 0.01
  },
  "stock": {
    "common": 154,
    "uncommon": 182,
    "rare": 98,
    "epic": 761
  },
  "tierRanges": {
    "common": {
      "start": 30,
      "end": 60
    },
    "uncommon": {
      "start": 60,
      "end": 110
    },
    "rare": {
      "start": 110,
      "end": 250
    },
    "epic": {
      "start": 250,
      "end": 5001
    }
  },
  "ev": 55.092700028524135
}

Get purchased pack counts

Authenticated Phantom endpoint returning purchased/gifted pack counts keyed by pack code.

Live Collector Crypt 200

Response Source

CollectorCryptClient.getPurchasedPacks() -> Collector Crypt /api/purchasedPacks

curl

curl -sS -i -X GET -H 'x-forwarded-user: 550e8400-e29b-41d4-a716-446655440000' 'http://127.0.0.1:4030/tcg/packs/purchased?wallet=AzZtQzZYHYPNrntcCeCrAg4LnWLzLc8icrmnWfvfymUv'

Response Headers

HTTP/1.1 200 OK
Content-Security-Policy: default-src 'self';style-src 'self' 'unsafe-inline';img-src 'self' data: validator.swagger.io;script-src 'self' https: 'unsafe-inline';report-uri https://rt.phantom.app/csp;base-uri 'self';font-src 'self' https: data:;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none';upgrade-insecure-requests
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Resource-Policy: same-origin
Origin-Agent-Cluster: ?1
Referrer-Policy: no-referrer
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
X-DNS-Prefetch-Control: off
X-Download-Options: noopen
X-Frame-Options: SAMEORIGIN
X-Permitted-Cross-Domain-Policies: none
X-XSS-Protection: 0
access-control-allow-origin: *
content-type: application/json; charset=utf-8
content-length: 2496
Date: Fri, 12 Jun 2026 17:44:51 GMT
Connection: keep-alive
Keep-Alive: timeout=75

Response Body

{
  "pokemon_50": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "pokemon_2500": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "pokemon_250": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "onepiece_50": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "pokemon_1000": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "onepiece_250": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "pokemon_25": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "comic_25": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "sns_25": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "comic_50": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "football_50": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "basketball_50": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "baseball_50": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "gachopia_50": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "pikachu_50": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "charizard_50": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "gengar_50": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "anime_75": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "sealed_80": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "basketball_100": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "firegrass_100": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "dragonite_100": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "baseball_100": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "sports_100": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "football_100": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "water_100": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "comic_250": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "mew_250": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "basketball_250": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "football_250": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "baseball_250": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "sf_2500": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  },
  "pokemon_5000": {
    "purchased": 0,
    "gifted": 0,
    "used_purchased": 0,
    "used_gifted": 0
  }
}

Create pack transaction

Authenticated Phantom endpoint generating the pack purchase transaction the wallet signs.

Live Collector Crypt 201

Response Source

CollectorCryptClient.generatePack() -> Collector Crypt /api/generatePack

curl

curl -sS -i -X POST -H 'content-type: application/json' -H 'x-forwarded-user: 550e8400-e29b-41d4-a716-446655440000' --data '{"playerAddress":"AzZtQzZYHYPNrntcCeCrAg4LnWLzLc8icrmnWfvfymUv","packType":"pokemon_50","turbo":false}' 'http://127.0.0.1:4030/tcg/packs/create'

Request Body

{
  "playerAddress": "AzZtQzZYHYPNrntcCeCrAg4LnWLzLc8icrmnWfvfymUv",
  "packType": "pokemon_50",
  "turbo": false
}

Response Headers

HTTP/1.1 201 Created
Content-Security-Policy: default-src 'self';style-src 'self' 'unsafe-inline';img-src 'self' data: validator.swagger.io;script-src 'self' https: 'unsafe-inline';report-uri https://rt.phantom.app/csp;base-uri 'self';font-src 'self' https: data:;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none';upgrade-insecure-requests
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Resource-Policy: same-origin
Origin-Agent-Cluster: ?1
Referrer-Policy: no-referrer
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
X-DNS-Prefetch-Control: off
X-Download-Options: noopen
X-Frame-Options: SAMEORIGIN
X-Permitted-Cross-Domain-Policies: none
X-XSS-Protection: 0
access-control-allow-origin: *
content-type: application/json; charset=utf-8
content-length: 712
Date: Fri, 12 Jun 2026 17:44:51 GMT
Connection: keep-alive
Keep-Alive: timeout=75

Response Body

{
  "memo": "phantom-452dafcd-9b0a-4e3d-b18d-14afdc8e10e3",
  "transaction": "AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABs/yyBkxQflmr3lksA2QqvAxzOT+SltH5jKpJFv7Nr6HNvudBmQQhZfk7R7t7z90LEpPN20OlGo1OCedlb92ENAgEDB5R4eShzeAb6DeIpml9KUkDh9NVbZWlaaGAfwRqIBBrD53vWE3CfH8/Yy2QxY+m59WiXVQxtqqNSDj0ZCHa+/P60ZZixMVlRqHnYNISHKdTl580S6MkAGrPXlw7oTWukD+RtZuzk2DIcRV4kTK7iruc9oLwc/QSdoQfGo3LNBHnxAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAFSlNamSkhBk0k6HFg2jh8fDW13bySu4HkH6hAQQVEjQbd9uHXZaGT2cvhRs7reawctIXtX1s3kTqM9YV+/wCpiU36Rtokip/KG8albZev8BVl8yjMkQSZuRAG4zrxxM4EBAAFAlDDAAAFAQExcGhhbnRvbS00NTJkYWZjZC05YjBhLTRlM2QtYjE4ZC0xNGFmZGM4ZTEwZTM6b3BlbgYEAwIAAAkDgPD6AgAAAAAEAAkDECcAAAAAAAA="
}

Open generated pack

Authenticated Phantom endpoint opening the generated memo and returning the won NFT payload.

Live Collector Crypt SKIP

Response Source

CollectorCryptClient.openPack() -> Collector Crypt /api/openPack

Execution

Not executed in live-key report mode because opening a generated pack can advance the pack flow.

curl

curl -sS -i -X POST -H 'content-type: application/json' -H 'x-forwarded-user: 550e8400-e29b-41d4-a716-446655440000' --data '{"memo":"phantom-452dafcd-9b0a-4e3d-b18d-14afdc8e10e3"}' 'http://127.0.0.1:4030/tcg/packs/open'

Request Body

{
  "memo": "phantom-452dafcd-9b0a-4e3d-b18d-14afdc8e10e3"
}

Build buyback transaction

Authenticated Phantom endpoint building a sell-back transaction for a won NFT.

Live Collector Crypt SKIP

Response Source

CollectorCryptClient.buyback() -> Collector Crypt /api/buyback

Execution

Not executed in live-key report mode because buyback builds a transaction against an NFT address.

curl

curl -sS -i -X POST -H 'content-type: application/json' -H 'x-forwarded-user: 550e8400-e29b-41d4-a716-446655440000' --data '{"playerAddress":"AzZtQzZYHYPNrntcCeCrAg4LnWLzLc8icrmnWfvfymUv","nftAddress":"J3LVMQMrnSW1xdo3b8hZBXYPAQ95Xhgkv2SnaGxDibpE"}' 'http://127.0.0.1:4030/tcg/packs/buyback'

Request Body

{
  "playerAddress": "AzZtQzZYHYPNrntcCeCrAg4LnWLzLc8icrmnWfvfymUv",
  "nftAddress": "J3LVMQMrnSW1xdo3b8hZBXYPAQ95Xhgkv2SnaGxDibpE"
}

Submit signed transaction

Authenticated Phantom endpoint submitting a wallet-signed Collector Crypt transaction.

Live Collector Crypt SKIP

Response Source

CollectorCryptClient.submitTransaction() -> Collector Crypt /api/submitTransaction

Execution

Not executed in live-key report mode because submitTransaction sends a signed transaction payload upstream.

curl

curl -sS -i -X POST -H 'content-type: application/json' -H 'x-forwarded-user: 550e8400-e29b-41d4-a716-446655440000' --data '{"signedTransaction":"mock-signed-transaction"}' 'http://127.0.0.1:4030/tcg/packs/submit-transaction'

Request Body

{
  "signedTransaction": "mock-signed-transaction"
}

Missing auth validation

Confirms authenticated Phantom write endpoints reject callers without x-forwarded-user.

Real validation/auth 401

Response Source

Real AuthGuard response; this does not depend on Collector Crypt or local mock data.

curl

curl -sS -i -X POST -H 'content-type: application/json' --data '{"playerAddress":"AzZtQzZYHYPNrntcCeCrAg4LnWLzLc8icrmnWfvfymUv","packType":"pokemon_50","turbo":false}' 'http://127.0.0.1:4030/tcg/packs/create'

Request Body

{
  "playerAddress": "AzZtQzZYHYPNrntcCeCrAg4LnWLzLc8icrmnWfvfymUv",
  "packType": "pokemon_50",
  "turbo": false
}

Response Headers

HTTP/1.1 401 Unauthorized
Content-Security-Policy: default-src 'self';style-src 'self' 'unsafe-inline';img-src 'self' data: validator.swagger.io;script-src 'self' https: 'unsafe-inline';report-uri https://rt.phantom.app/csp;base-uri 'self';font-src 'self' https: data:;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none';upgrade-insecure-requests
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Resource-Policy: same-origin
Origin-Agent-Cluster: ?1
Referrer-Policy: no-referrer
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
X-DNS-Prefetch-Control: off
X-Download-Options: noopen
X-Frame-Options: SAMEORIGIN
X-Permitted-Cross-Domain-Policies: none
X-XSS-Protection: 0
access-control-allow-origin: *
content-type: application/json; charset=utf-8
content-length: 43
Date: Fri, 12 Jun 2026 17:44:51 GMT
Connection: keep-alive
Keep-Alive: timeout=75

Response Body

{
  "message": "Unauthorized",
  "statusCode": 401
}