# Endpoints

Base URL `https://api.tickermint.cards`. All GET, JSON unless noted. Prices are USD decimal strings (`"300.29"`) or null. `product_id` is the TCGplayer product id. `game` is one of: pokemon, one-piece, lorcana, riftbound, gundam, yugioh. Full schema with examples: https://api.tickermint.cards/openapi.json

| Endpoint | Returns | Key |
|---|---|---|
| `/products/search?q={text}&game={game}` | Products matching a name, number or set (product_id, name, set_name, card_number, rarity, market, tickermint_url) | optional |
| `/products/{product_id}` | One product with the latest market price, printing, image and an `attribution` object | optional |
| `/products/{product_id}/prices?days=90` | Daily history per printing: `{"Holofoil": [{"snapshot_date","low","market"}]}` (30 days no key, 90 free key, full on paid; `days` keeps the last N days, and full history beyond 90 days counts toward the monthly history cap) | optional |
| `/products/{product_id}/ath` | All-time high and low with dates | optional |
| `/products/{product_id}/printings` | Other printings of the same card | optional |
| `/cards/{pokemontcg_io_id}` | Products for a pokemontcg.io id such as `sv3pt5-199` (migration from pokemontcg.io) | optional |
| `/sets?game={game}` | Every set (group_id, name, release date, card count) | optional |
| `/sets/{group_id}` | Every card in a set with today's price | optional |
| `/desk/movers?game={game}&days=7&min_market=5` | Biggest gainers and losers over 1 to 90 days | optional |
| `/desk/most-valuable?game={game}&limit=25` | Most valuable cards now | optional |
| `/desk/highs`, `/desk/lows`, `/desk/sealed`, `/desk/today` | New highs, lows after a fall, sealed product, the day's summary | optional |
| `/desk/index`, `/desk/index/{game}` | The TickerMint index per game (e.g. TickerMint Pokemon 100): level, 1d/7d/30d/YTD change, citation line; per game every daily level since the base day and the constituents with weights | optional |
| `/desk/wire?game={game}&days=7`, `/desk/wire/{fact_id}` | The wire: dated one-sentence facts (index moves, record highs, biggest movers, new-set box vs presale), each with a permalink | optional |
| `/releases?game={game}` | Upcoming and recent sets | optional |
| `/decks/{game}/{slug}` | What a tournament deck costs to build | optional |
| `/products/{product_id}.csv`, `/sets/{group_id}.csv` | CSV rows for spreadsheets | free key |
| `/sheets/price?q={name or id}&field=market` | One plain value for a Google Sheets cell (IMPORTDATA) | optional |
| `/sheets/prices?q=...&q=...` | Up to 50 names or ids as CSV | free key |
| `/v1/bulk/day?day=YYYY-MM-DD&game={game}` | Every price on one day, paged (5,000 rows) | Developer+ |
| `/v1/bulk/history?ids=1,2,3` | Full history for up to 50 products | Developer+ |
| `/v1/bulk/base-rates` | Base rates per set and rarity | Developer+ |
| `/v1/webhooks` | Price-move and new-product webhooks (POST to create) | API Pro+ |

## Response example: GET /products/search?q=charizard%20ex%20199/165&game=pokemon

```json
[
  {
    "product_id": 517045,
    "name": "Charizard ex - 199/165",
    "group_id": 23237,
    "set_name": "SV: Scarlet & Violet 151",
    "card_number": "199/165",
    "rarity": "Special Illustration Rare",
    "game": "pokemon",
    "market": "300.29",
    "card_id": "sv03.5-199",
    "image_url": "https://assets.tcgdex.net/en/sv/sv03.5/199/high.webp",
    "tickermint_url": "https://tickermint.cards/card/517045/charizard-ex-199"
  }
]
```

Search tips: include the collector number (`charizard ex 199/165`) to get one card; filter with `game`; sealed products are products too (`q=151 booster bundle`).
