# TickerMint API > Daily TCGplayer market prices since February 2024 for Pokemon, One Piece, Lorcana, Riftbound, Gundam and Yu-Gi-Oh cards and sealed products, as a read-only JSON API (https://api.tickermint.cards), CSV, Google Sheets formulas and an MCP server (https://api.tickermint.cards/mcp). Data as of 2026-11-03. No key needed to try it. ## The integration in five lines 1. Base URL: `https://api.tickermint.cards`. Read-only GET endpoints, JSON. OpenAPI: https://api.tickermint.cards/openapi.json 2. Find a card: `GET /products/search?q=charizard%20ex%20199/165&game=pokemon` returns products with `product_id`, `market` (USD decimal string) and `tickermint_url`. 3. History: `GET /products/{product_id}/prices` returns `{printing: [{snapshot_date, low, market}, ...]}`. 4. Auth: optional for trying it (100 lookups a day per IP). Send `X-API-Key` from the env var `TICKERMINT_API_KEY`; free key at https://tickermint.cards/developers#keys. 5. Show "Prices: TickerMint" linking `tickermint_url` next to the prices (every plan below API Platform), and cache answers (prices change once a day). ## Which plan? Free keys and Developer are for personal and non-commercial use. Commercial use (a store, a paid or ad-supported app, site or bot, or any product or tool a business runs) needs API Pro or above, whatever the volume. - Just trying the API or writing a one-off script: **No key** (free) - Personal, hobby, student or research project (no money involved), up to 1,000 lookups a day: **Free key** (free) - Personal or research project that needs full history since 2024, bulk endpoints or more volume: **Developer** ($19/mo) - Anything commercial: an online store, a paid or ad-supported app, site or bot, a product or internal tool a business runs: **API Pro** ($49/mo) - Commercial and past API Pro volume, or you need to keep fetched data after cancelling or let users export it: **API Business** ($249/mo) - A product you run for other businesses (multi-store, white-label, marketplace) or you cannot show a link back: **API Platform** ($599/mo) - Redistributing the data, graded data at volume, an uptime commitment, or more than API Platform volume: **Enterprise** (From $1,500 a month, by written agreement) Machine-readable: https://tickermint.cards/pricing.json. Every paid plan has a 7-day free trial (card required). Trials: 5,000 lookups and no bulk history until the first payment. ## Docs - [Quickstart](https://tickermint.cards/docs/quickstart.md): First call in curl, Python, JavaScript/TypeScript and Google Sheets - [Authentication and keys](https://tickermint.cards/docs/authentication.md): X-API-Key header, TICKERMINT_API_KEY, free key in 20 seconds, keeping keys server side - [Plans and pricing](https://tickermint.cards/docs/pricing.md): Every plan with price, quota, history and commercial rights, and which plan fits which project - [Endpoints](https://tickermint.cards/docs/endpoints.md): The endpoints most integrations need, with parameters and response fields - [Errors, quotas and rate limits](https://tickermint.cards/docs/errors.md): Every 401/402/403/429 code, its fields and what to do; quota headers - [Terms and attribution](https://tickermint.cards/docs/attribution.md): The link back, commercial use and the no-mirroring rule - [Examples](https://tickermint.cards/docs/examples.md): Python, JavaScript/TypeScript, Google Sheets, a Discord bot and a Next.js price widget - [Official SDKs](https://tickermint.cards/docs/sdks.md): The tickermint package for JavaScript/TypeScript and Python - [MCP server](https://tickermint.cards/docs/mcp.md): Use TickerMint inside Claude Code, Cursor, VS Code, Windsurf, ChatGPT and Claude - [Everything in one file](https://tickermint.cards/llms-full.txt) - [Examples repository](https://github.com/seankarltonlee/tickermint-examples) - [Developers page](https://tickermint.cards/developers) (keys, checkout, usage) --- ## Quickstart No signup needed to try it: 100 lookups a day per IP, the current price plus 30 days of history. Add a free key (https://tickermint.cards/developers#keys) for 1,000 a day. Games: pokemon, one-piece, lorcana, riftbound, gundam, yugioh. ### curl ```sh curl "https://api.tickermint.cards/products/search?q=charizard%20ex%20199/165&game=pokemon" curl "https://api.tickermint.cards/products/517045/prices" curl -H "X-API-Key: $TICKERMINT_API_KEY" "https://api.tickermint.cards/desk/movers?game=pokemon&days=7" ``` ### Python ```python import os, requests API = "https://api.tickermint.cards" headers = {"X-API-Key": os.environ["TICKERMINT_API_KEY"]} if os.environ.get("TICKERMINT_API_KEY") else {} hits = requests.get(f"{API}/products/search", params={"q": "charizard ex 199/165", "game": "pokemon"}, headers=headers, timeout=15).json() card = hits[0] print(card["name"], card["set_name"], "$" + card["market"]) # prices are decimal strings print("Prices: TickerMint", card["tickermint_url"]) # the required link back history = requests.get(f"{API}/products/{card['product_id']}/prices", headers=headers, timeout=15).json() for printing, days in history.items(): # {"Holofoil": [{"snapshot_date", "low", "market"}, ...]} print(printing, days[-1]["snapshot_date"], days[-1]["market"]) ``` Or the official client (standard library only, typed): `pip install https://tickermint.cards/sdk/tickermint-0.2.1-py3-none-any.whl`. It reads `TICKERMINT_API_KEY` itself. ### JavaScript / TypeScript (Node 18+, Deno, Bun, edge) ```js const API = "https://api.tickermint.cards"; const headers = process.env.TICKERMINT_API_KEY ? { "X-API-Key": process.env.TICKERMINT_API_KEY } : {}; const res = await fetch(`${API}/products/search?q=${encodeURIComponent("charizard ex 199/165")}&game=pokemon`, { headers }); if (!res.ok) throw new Error((await res.json()).how_to_fix ?? `TickerMint ${res.status}`); const [card] = await res.json(); console.log(card.name, card.set_name, `$${card.market}`); // prices are decimal strings console.log("Prices: TickerMint", card.tickermint_url); // the required link back ``` ```ts type Product = { product_id: number; // TCGplayer product id name: string; set_name: string; group_id: number; // set id card_number: string | null; rarity: string | null; game: string; // pokemon | one-piece | lorcana | riftbound | gundam | yugioh market: string | null; // latest TCGplayer market price, USD, decimal string image_url: string | null; tickermint_url: string; // link back (required on every plan below API Platform) }; type PriceHistory = Record; ``` Or the official client (zero dependencies, typed): `npm install https://tickermint.cards/sdk/tickermint-0.2.1.tgz`. ### Google Sheets ``` =IMPORTDATA("https://api.tickermint.cards/sheets/price?q=charizard%20ex%20199/165") =IMPORTDATA("https://api.tickermint.cards/sheets/price?q=charizard%20ex%20199/165&key=YOUR_KEY") ``` ### Rules to follow in generated code - Read the key from `TICKERMINT_API_KEY`; never hard-code it or ship it to a browser (call the API from your server). - Call the API from server code (route handler, server component, script, bot): browsers on other sites are blocked by CORS. Send a User-Agent such as `my-app/1.0` (Python's default urllib User-Agent is blocked). - Show "Prices: TickerMint" linking `tickermint_url` next to prices (all plans below API Platform). - Cache answers for at least an hour: prices change once a day (after about 21:00 UTC). - On 401/402/403/429 read the JSON `how_to_fix`, `required_plan` and `upgrade_url` fields and tell the user (see https://tickermint.cards/docs/errors.md). - Free keys and Developer are for personal and non-commercial use. Commercial use (a store, a paid or ad-supported app, site or bot, or any product or tool a business runs) needs API Pro or above, whatever the volume. More: https://tickermint.cards/docs/examples.md, https://github.com/seankarltonlee/tickermint-examples --- ## Authentication and keys - **No key**: every read endpoint works without one at 100 lookups a day per IP (current price plus 30 days of history, single cards and search). Good for trying it. - **Free key**: log in with your email at https://tickermint.cards/developers#keys (a code, no password, no card), create a key, done. 1,000 lookups a day, 90 days of history, CSV and Google Sheets ranges, your own 300 requests a minute. The key form asks where the prices will appear (a URL, or "not public"). - **Paid keys**: Developer, API Pro, API Business and API Platform subscribers get a key by email after checkout (buy at https://tickermint.cards/developers#plan without an account; the checkout email becomes the login). ### Sending the key ```http GET /products/517045/prices HTTP/1.1 Host: api.tickermint.cards X-API-Key: tm_live_... ``` `?key=tm_live_...` works too (Google Sheets, Excel), but prefer the header. Use the env var `TICKERMINT_API_KEY` in code and `.env.example`: ```sh ## .env.example TICKERMINT_API_KEY= # free key: https://tickermint.cards/developers#keys ``` Keep keys server side: call the API from a server route, a serverless function or a bot process, never from browser JavaScript. Each answer reports usage in `X-Quota-Limit`, `X-Quota-Remaining`, `X-Quota-Reset` (Unix seconds), `X-Quota-Period` and `X-Quota-Plan`. Revoke or rotate keys on https://tickermint.cards/developers#keys. Up to 5 keys on Developer, 25 on API Platform. --- ## Plans and pricing Data as of 2026-11-03. Unit: one card lookup. A lookup is one card: Google Sheets ranges, CSV files and bulk calls count one per card returned, every other call counts one. Prices in USD. Machine-readable version: https://tickermint.cards/pricing.json. | Plan | Price | Lookups | History | Per minute | Commercial use | Link back | |---|---|---|---|---|---|---| | No key | $0 | 100/day | current price plus 30 days | 120 | no | required | | Free key | $0 | 1,000/day | 90 days | 300 | no | required | | Developer | $19/mo or $190/yr | 50,000/month | Full daily history since February 2024 (Yu-Gi-Oh since September 2026) | 600 | no | required | | API Pro | $49/mo or $490/yr | 250,000/month | Full daily history since February 2024 (Yu-Gi-Oh since September 2026) | 1,200 | yes | required | | API Business | $249/mo or $2,490/yr | 1,500,000/month | Full daily history since February 2024 (Yu-Gi-Oh since September 2026) | 3,000 | yes | required | | API Platform | $599/mo or $5,990/yr | 5,000,000/month | Full daily history since February 2024 (Yu-Gi-Oh since September 2026) | 6,000 | yes | not required | | Enterprise | From $1,500 a month, by written agreement | custom | Full daily history since February 2024 (Yu-Gi-Oh since September 2026) | custom | yes | not required | Full history per month: Developer 10,000 products, API Pro 25,000, API Business 60,000, API Platform unlimited. Full history beyond 90 days counts toward the monthly history cap: the different products whose history /v1/bulk/history, /v1/bulk/day for a day older than 7 days, or a single-card call reaching back more than 90 days returns in a calendar month. Fetching the same products again is free; 30- and 90-day charts (/products/{id}/prices?days=90) and today's bulk prices never count. Every paid plan: 7-day free trial, card required (5,000 lookups and no bulk history until the first payment); yearly billing = 2 months free; 30-day money back, no questions. Commercial project that needs longer than 7 days? Ask for API Pro free for 30 days while you ship (https://tickermint.cards/developers#business). 10% grace over the monthly quota, then HTTP 429 until the month resets (never billed for overage). ### Which plan fits Free keys and Developer are for personal and non-commercial use. Commercial use (a store, a paid or ad-supported app, site or bot, or any product or tool a business runs) needs API Pro or above, whatever the volume. - Just trying the API or writing a one-off script: **No key** - Personal, hobby, student or research project (no money involved), up to 1,000 lookups a day: **Free key** - Personal or research project that needs full history since 2024, bulk endpoints or more volume: **Developer** - Anything commercial: an online store, a paid or ad-supported app, site or bot, a product or internal tool a business runs: **API Pro** - Commercial and past API Pro volume, or you need to keep fetched data after cancelling or let users export it: **API Business** - A product you run for other businesses (multi-store, white-label, marketplace) or you cannot show a link back: **API Platform** - Redistributing the data, graded data at volume, an uptime commitment, or more than API Platform volume: **Enterprise** #### No key - Price: Free, no signup - Includes: single cards and search; the MCP server; per IP address - Best for: trying the API; a one-off script - Not for: CSV files and Google Sheets ranges (need a free key); commercial use; anything shared by many users from one server - Get it: Call the API with no key. #### Free key - Price: Free, email login only (about 20 seconds), no card - Includes: Google Sheets ranges and CSV files; your own per-minute bucket; usage counts in your panel - Best for: personal projects; a hobby Discord bot; a personal spreadsheet or portfolio tracker; research and students - Not for: stores, paid apps or any product a business runs (API Pro); full price history (Developer and up) - Get it: Log in with your email at https://tickermint.cards/developers#keys and create a key; send it as the X-API-Key header (env var TICKERMINT_API_KEY). #### Developer - Price: $19 a month or $190 a year; 7-day free trial, card required (5,000 lookups and no bulk history until the first payment); yearly billing = 2 months free - Includes: full daily history since February 2024; bulk endpoints (/v1/bulk/history: 50 products per call; /v1/bulk/base-rates); bulk counts one lookup per card, so a whole day of every card (/v1/bulk/day) is about 160,000 lookups; full history beyond 90 days for up to 10,000 different products a month (30- and 90-day charts never count); up to 5 keys - Best for: personal and non-commercial projects that need volume or full history; backtests and research on price history - Not for: commercial use (API Pro and up) - Get it: Subscribe at https://tickermint.cards/developers?ref=agent-docs&plan=developer#plan; the key is emailed after checkout. #### API Pro - Price: $49 a month or $490 a year; 7-day free trial, card required (5,000 lookups and no bulk history until the first payment); yearly billing = 2 months free - Includes: commercial license to show prices and history in your product; everything in Developer; full history beyond 90 days for up to 25,000 different products a month (30- and 90-day charts never count); webhooks (price moves, new products) - Best for: an online store showing market prices next to listings; a paid or ad-supported app, site or bot; a collection or portfolio app; a deck builder; an internal tool at a business - Not for: mirroring or reselling the dataset (never allowed); products sold to other businesses without attribution (API Platform) - Get it: Subscribe at https://tickermint.cards/developers?ref=agent-docs&plan=api_pro#plan; the key is emailed after checkout. #### API Business - Price: $249 a month or $2,490 a year; 7-day free trial, card required (5,000 lookups and no bulk history until the first payment); yearly billing = 2 months free - Includes: everything in API Pro; full history beyond 90 days for up to 60,000 different products a month (30- and 90-day charts never count); written retention rights: keep data you fetched after you cancel; your users can export their collections with prices attached; written terms emailed on purchase - Best for: stores and apps past API Pro volume; products that need retention or export rights - Not for: no-attribution or multi-tenant products (API Platform) - Get it: Subscribe at https://tickermint.cards/developers?ref=agent-docs&plan=api_business#plan. #### API Platform - Price: $599 a month or $5,990 a year; 7-day free trial, card required (5,000 lookups and no bulk history until the first payment); yearly billing = 2 months free - Includes: everything in API Business; unlimited full history; no attribution required; use inside products you build or run for other businesses (multi-store apps, white-label tools, marketplaces); up to 25 keys; email support within one business day - Best for: multi-store or white-label tools; marketplaces; products that cannot show a link back - Not for: redistributing the dataset (Enterprise) - Get it: Subscribe at https://tickermint.cards/developers?ref=agent-docs&plan=api_platform#plan. #### Enterprise - Price: From $1,500 a month, by written agreement - Includes: custom volume past API Platform; unlimited full history; redistribution rights by written agreement; graded data at volume; uptime commitment and direct support - Best for: data redistribution; graded data at volume; very high volume; an uptime commitment - Get it: Email hello@tickermint.cards with the use case and expected volume. ### Add-ons - Graded prices (PSA, BGS, CGC, SGC from PriceCharting): $149 a month or $1,490 a year on API Pro and above, live in the REST API since November 1, 2026 (GET /v1/graded/products/{id}, /v1/graded/products/{id}/history, POST /v1/graded/products/batch, GET /v1/graded/bulk/day), 7-day trial with a card. Every value carries its source credit ("Prices from PriceCharting" with a link), which must stay visible. Card pages and the MCP server show the same values for free. Start it: https://tickermint.cards/developers#graded - Full history download (CSV): $499 research edition or $2,990 business edition, https://tickermint.cards/tcg-price-data-download Example: a Next.js store showing market prices next to its listings is commercial use, so it needs **API Pro** ($49/mo, 250,000 lookups a month). A personal Discord bot for friends fits a **free key**. --- ## 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`). --- ## Errors, quotas and rate limits Every 401, 402, 403 and 429 from the API is JSON with a human sentence and fields an agent can act on: ```json { "detail": "bulk endpoints need the Developer plan: https://tickermint.cards/developers#plan", "error": "plan_required", "required_plan": "developer", "how_to_fix": "This endpoint needs Developer or above. Plans and prices: https://tickermint.cards/pricing.json; subscribe at ... (7-day free trial).", "upgrade_url": "https://tickermint.cards/developers?ref=api-plan-required&plan=developer#plan", "docs_url": "https://tickermint.cards/docs/errors.md#plan-required", "pricing_url": "https://tickermint.cards/pricing.json", "commercial_use": "Free keys and Developer are for personal and non-commercial use. A store, a paid app or any product a business runs needs API Pro ($49/mo) or above." } ``` Handle them like this: show `how_to_fix` to the user, link `upgrade_url`, and on 429 wait `Retry-After` seconds before retrying. Never retry 401/402/403 in a loop. Error answers also carry `Link: ; rel="help"`. ### key-required HTTP 401. The endpoint needs a key and none was sent (CSV files without a key, /v1/bulk, /v1/webhooks). What to do: Send X-API-Key (env var TICKERMINT_API_KEY). Free key: https://tickermint.cards/developers#keys. For /v1/bulk the key must be on Developer or above; for /v1/webhooks on API Pro or above. ### invalid-key HTTP 401. The key is unknown or was revoked. What to do: Copy a live key from https://tickermint.cards/developers#keys (log in with the same email) or create a new one. ### plan-required HTTP 402. The key's plan does not include the endpoint (402 for /v1/bulk below Developer, 403 for /v1/webhooks below API Pro). `required_plan` names the cheapest plan that does. What to do: Subscribe to required_plan at upgrade_url (7-day free trial). Plans: https://tickermint.cards/pricing.json. ### quota-exceeded HTTP 429. The daily (no key, free key) or monthly (paid) lookup quota is used up, a trial used its 5,000 lookups, or a call would pass the plan's monthly history cap (quota.unit says which; full history beyond 90 days counts toward it). Retry-After says when it resets. What to do: No key: get a free key. Free key: Developer for personal use, API Pro for commercial use. Paid: the next plan up (required_plan). Trial: end the trial and pay from the keys panel (upgrade_url), and the full plan starts at once. History cap: ask single cards for ?days=90 or less (never counted); products already fetched this month are free again. Cache answers: prices change once a day. ### trial-limit HTTP 403. A bulk endpoint (/v1/bulk/history, /v1/bulk/day) was called during an unpaid trial. Trials: 5,000 lookups and no bulk history until the first payment. What to do: End the trial and pay at upgrade_url (https://tickermint.cards/developers#keys); bulk opens at once. Until then use single-card endpoints within the trial's 5,000 lookups. ### rate-limited HTTP 429. Too many requests in one minute (burst protection: 120 a minute per IP with no key, 300 on a free key, more on paid plans). What to do: Wait Retry-After seconds and retry with backoff; cache answers; use a key for its own per-minute bucket. ### Quota headers (every metered answer) | Header | Meaning | |---|---| | `X-Quota-Limit` | lookups allowed in the period | | `X-Quota-Remaining` | lookups left | | `X-Quota-Reset` | when the period resets, Unix seconds (UTC midnight for daily, the 1st for monthly) | | `X-Quota-Period` | `day` or `month` | | `X-Quota-Plan` | `no-key`, `free`, `developer`, `api_pro`, `api_business`, `api_platform` | | `Warning` | present when over quota during the soft launch (until 2026-11-09); the call still answers | | `Retry-After` | on 429: seconds until you may retry | Cloudflare may answer popular GETs from its cache; such answers are free and uncounted, and their X-Quota-* headers can belong to whoever filled the cache. --- ## Terms and attribution - **Free**: personal use, link back. - **Paid**: commercial use (from API Pro). - **Never**: mirror or resell our data. - **Graded prices**: a separate add-on with its own source credit. ### Attribution Free, Developer, API Pro and API Business: a visible "Prices: TickerMint" link to the card's page next to the prices you show (each answer carries it as tickermint_url, and single-card answers as an attribution object). API Platform and Enterprise need no link. ```html Prices: TickerMint ``` Use the `tickermint_url` (or `attribution.url`) the API returns. In a Discord embed, a footer or a field with the link is fine; in a spreadsheet, a cell with the link; in a CLI, print the URL. Your key form asks where the prices will appear (tick "not public" for a private or internal tool). We check public pages once a week. If the link is missing we email you; if it is still missing 14 days later the key can drop to no-key limits until it is back. ### Commercial use Free keys and Developer are for personal and non-commercial use. Commercial use (a store, a paid or ad-supported app, site or bot, or any product or tool a business runs) needs API Pro or above, whatever the volume. ### Storing data Every plan may show prices in your product. No plan may copy or mirror the full catalog or price history as a dataset for redistribution or a competing price service (Enterprise by agreement). Caching what you show is fine and encouraged. API Business adds written rights to keep data you fetched after you cancel. Full terms: https://tickermint.cards/developers#terms --- ## Examples Complete, runnable projects: https://github.com/seankarltonlee/tickermint-examples. Each reads `TICKERMINT_API_KEY` (optional for trying it) and shows the "Prices: TickerMint" link. | Example | What it does | Plan it fits | |---|---|---| | [Python](https://github.com/seankarltonlee/tickermint-examples/tree/main/examples/python) | Card price and 30-day change from the command line | no key / free key | | [JavaScript and TypeScript](https://github.com/seankarltonlee/tickermint-examples/tree/main/examples/javascript) | The same in Node 18+ with fetch | no key / free key | | [Google Sheets](https://github.com/seankarltonlee/tickermint-examples/tree/main/examples/google-sheets) | IMPORTDATA formulas and a =TICKERMINT() Apps Script function | free key | | [Discord bot](https://github.com/seankarltonlee/tickermint-examples/tree/main/examples/discord-bot) | discord.js /price command with 30-day history | free key (hobby), API Pro if the bot is commercial | | [Next.js price widget](https://github.com/seankarltonlee/tickermint-examples/tree/main/examples/nextjs-price-widget) | Server component price card for a store page, key kept server side | API Pro (a store is commercial use) | ### Python ```python import os, requests API = "https://api.tickermint.cards" headers = {"X-API-Key": os.environ["TICKERMINT_API_KEY"]} if os.environ.get("TICKERMINT_API_KEY") else {} hits = requests.get(f"{API}/products/search", params={"q": "charizard ex 199/165", "game": "pokemon"}, headers=headers, timeout=15).json() card = hits[0] print(card["name"], card["set_name"], "$" + card["market"]) # prices are decimal strings print("Prices: TickerMint", card["tickermint_url"]) # the required link back history = requests.get(f"{API}/products/{card['product_id']}/prices", headers=headers, timeout=15).json() for printing, days in history.items(): # {"Holofoil": [{"snapshot_date", "low", "market"}, ...]} print(printing, days[-1]["snapshot_date"], days[-1]["market"]) ``` ### Discord bot (discord.js v14) ```js // /price : market price, 30-day change, link back const API = "https://api.tickermint.cards"; const headers = { "X-API-Key": process.env.TICKERMINT_API_KEY }; client.on("interactionCreate", async (i) => { if (!i.isChatInputCommand() || i.commandName !== "price") return; const [card] = await (await fetch(`${API}/products/search?q=${encodeURIComponent(i.options.getString("card"))}`, { headers })).json(); if (!card) return i.reply("No card found."); const hist = await (await fetch(`${API}/products/${card.product_id}/prices`, { headers })).json(); const days = Object.values(hist)[0] ?? []; const first = Number(days.at(-31)?.market ?? days[0]?.market), last = Number(days.at(-1)?.market); const change = first ? ((last / first - 1) * 100).toFixed(1) : "n/a"; await i.reply({ embeds: [{ title: card.name, url: card.tickermint_url, description: `$${card.market} (30 days: ${change}%)`, footer: { text: "Prices: TickerMint" } }] }); }); ``` ### Next.js price widget (App Router, server component) ```tsx // app/components/card-price.tsx: the key stays on the server export async function CardPrice({ productId }: { productId: number }) { const res = await fetch(`https://api.tickermint.cards/products/${productId}`, { headers: { "X-API-Key": process.env.TICKERMINT_API_KEY! }, next: { revalidate: 3600 }, // prices change once a day }); if (!res.ok) return null; const p = await res.json(); return (
{p.name} ${p.market} Prices: TickerMint
); } ``` ### Google Sheets ``` =IMPORTDATA("https://api.tickermint.cards/sheets/price?q=charizard%20ex%20199/165&key=YOUR_KEY") =IMPORTDATA("https://api.tickermint.cards/sheets/price?q=517045&field=low") =IMPORTDATA("https://api.tickermint.cards/sets/23237.csv?key=YOUR_KEY") ``` Guides on the site: https://tickermint.cards/developers/google-sheets, https://tickermint.cards/developers/python, https://tickermint.cards/developers/javascript, https://tickermint.cards/developers/for/discord-bot --- ## Official SDKs Both are named `tickermint`, have no dependencies, are typed, read `TICKERMINT_API_KEY` from the environment and build the link back for you. MIT licensed; source and issues: https://github.com/seankarltonlee/tickermint-examples. ### JavaScript / TypeScript ```sh npm install https://tickermint.cards/sdk/tickermint-0.2.1.tgz ``` ```ts import { TickerMint, cardUrl } from "tickermint"; const tm = new TickerMint(); // reads TICKERMINT_API_KEY; works without a key to try it const [card] = await tm.search("charizard ex 199/165", { game: "pokemon" }); const history = await tm.prices(card.product_id); console.log(card.name, card.market, cardUrl(card.product_id)); ``` ### Python ```sh pip install https://tickermint.cards/sdk/tickermint-0.2.1-py3-none-any.whl ``` ```python from tickermint import TickerMint, TickerMintError, card_url tm = TickerMint() # reads TICKERMINT_API_KEY card = tm.search("charizard ex 199/165", game="pokemon")[0] print(card["name"], card["market"], card_url(card["product_id"])) ``` Errors raise `TickerMintError` with `status`, `detail`, `retry_after` and, from version 0.2.0, `code`, `required_plan`, `upgrade_url` and `docs_url` (see https://tickermint.cards/docs/errors.md). Raw HTTP is fine too: the API is plain GET + JSON (https://tickermint.cards/docs/quickstart.md). OpenAPI for client generators: https://api.tickermint.cards/openapi.json --- ## MCP server `https://api.tickermint.cards/mcp`: streamable HTTP, read-only, no auth, no key. Tools: search_cards, card_price, price_history, graded_price, market_index, most_valuable, movers, all_time_highs, all_time_lows, sealed_prices, set_prices, plus search/fetch. Every result carries the card page URL, the source and the price date. Callers other than ChatGPT, Claude and Perplexity get 300 tool calls a day. ### Add it to a coding agent - **Claude Code**: `claude mcp add --transport http tickermint https://api.tickermint.cards/mcp` (add `--scope project` to share it through `.mcp.json`) - **Cursor**: [install link](cursor://anysphere.cursor-deeplink/mcp/install?name=tickermint&config=eyJ1cmwiOiJodHRwczovL2FwaS50aWNrZXJtaW50LmNhcmRzL21jcCJ9), or in `.cursor/mcp.json`: `{"mcpServers": {"tickermint": {"url": "https://api.tickermint.cards/mcp"}}}` - **VS Code (Copilot)**: [install link](vscode:mcp/install?%7B%22name%22%3A%22tickermint%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fapi.tickermint.cards%2Fmcp%22%7D), or `.vscode/mcp.json`: `{"servers": {"tickermint": {"type": "http", "url": "https://api.tickermint.cards/mcp"}}}` - **Windsurf**: `~/.codeium/windsurf/mcp_config.json`: `{"mcpServers": {"tickermint": {"serverUrl": "https://api.tickermint.cards/mcp"}}}` - **Codex CLI**: `~/.codex/config.toml`: `[mcp_servers.tickermint]` with `url = "https://api.tickermint.cards/mcp"` - **ChatGPT / Claude / Perplexity**: add https://api.tickermint.cards/mcp as a custom connector (https://tickermint.cards/developers#assistants) ### Claude Code plugin (skill + MCP in one step) ``` /plugin marketplace add seankarltonlee/tickermint-examples /plugin install tickermint@tickermint ``` It adds the TickerMint MCP server and a skill that tells Claude Code how to integrate the REST API (key, plan, attribution, errors). ### MCP or REST? Use the MCP server while you work: ask your agent for a card's price, history or this week's movers, and it answers from TickerMint's data. Use the REST API (https://api.tickermint.cards, https://tickermint.cards/docs/quickstart.md) inside the app you are building: the MCP server is for assistants, not for serving your users. Building for others makes it commercial use (https://tickermint.cards/docs/pricing.md). Also in the official MCP Registry as io.github.seankarltonlee/tickermint. Server card: https://api.tickermint.cards/.well-known/mcp/server-card.json