TICKERMINT

To get Pokemon card prices in Python, call GET https://api.tickermint.cards/products/search?q=charizard%20ex%20199/165 with requests: it returns JSON with each match's product_id, set and latest TCGplayer market price ($322.37 for Charizard ex 199/165 on October 8, 2026), and /products/{id}/prices gives the daily history back to February 2024. No key needed, 120 requests a minute per IP, free for personal use.

FOR DEVELOPERS · COPY AND PASTE · NO KEY NEEDED · 120 REQUESTS A MINUTE FREE

Pokemon card price API in Python

NO KEY

pip install requests, then run this. Use requests or httpx: Python's built-in urllib is refused by the API's firewall.

import requests

API = "https://api.tickermint.cards"

# 1. Find the card. No key, no sign-up.
hits = requests.get(f"{API}/products/search",
                    params={"q": "charizard ex 199/165", "game": "pokemon"},
                    timeout=10).json()
card = hits[0]
print(card["product_id"], card["name"], card["set_name"], card["market"])

# 2. Its daily market price per printing, back to February 2024
pid = card["product_id"]
history = requests.get(f"{API}/products/{pid}/prices", timeout=10).json()
for printing, days in history.items():
    print(printing, len(days), "days, latest", days[-1]["snapshot_date"], days[-1]["market"])

WITH A KEY

Create a key at tickermint.cards/developers and send it as the X-API-Key header (or ?key=). A key on a free account keeps the same 120 a minute; the Developer plan ($19 a month) gives that key its own 600 a minute and the bulk endpoints.

import os
import requests

API = "https://api.tickermint.cards"
session = requests.Session()
session.headers["X-API-Key"] = os.environ["TICKERMINT_KEY"]  # from tickermint.cards/developers

r = session.get(f"{API}/products/search", params={"q": "umbreon vmax 215"}, timeout=10)
r.raise_for_status()
card = r.json()[0]
print(card["product_id"], card["name"], card["market"])

A WHOLE SET INTO PANDAS

The CSV endpoints return one row per card with the same price the card page shows. Fetch with requests and hand the text to pandas (pd.read_csv on the URL uses urllib).

import io

import pandas as pd
import requests

API = "https://api.tickermint.cards"

# a whole set, one row per card (set id = the number in tickermint.cards/set/23237)
csv_text = requests.get(f"{API}/sets/23237.csv", timeout=30).text
df = pd.read_csv(io.StringIO(csv_text), dtype={"number": str})
print(df.nlargest(5, "market_price_usd")[["name", "number", "market_price_usd"]])

EXAMPLE OUTPUT

Output of the first snippet (October 8, 2026 prices)
517045 Charizard ex - 199/165 SV: Scarlet & Violet 151 322.37
Holofoil 973 days, latest 2026-10-08 322.37
GET /sets/23237.csv, first rows
date,product_id,name,set,number,printing,market_price_usd,url
2026-10-08,502552,Bulbasaur - 001/165,SV: Scarlet & Violet 151,001/165,Reverse Holofoil,0.32,https://tickermint.cards/card/502552
2026-10-08,502553,Ivysaur - 002/165,SV: Scarlet & Violet 151,002/165,Reverse Holofoil,0.53,https://tickermint.cards/card/502553
2026-10-08,502554,Venusaur ex - 003/165,SV: Scarlet & Violet 151,003/165,Holofoil,1.07,https://tickermint.cards/card/502554
... one row for every card and sealed product in the set

CSV COLUMNS · /products/{id}.csv AND /sets/{id}.csv

  • date: the day of the price (prices update once a day)
  • product_id: TickerMint's id, the number in the card page URL
  • name: card or product name as TCGplayer lists it
  • set: set name
  • number: collector number, empty for sealed product
  • printing: the printing the price is for (Holofoil, Reverse Holofoil, Normal...)
  • market_price_usd: TCGplayer market price in US dollars, the same number the card page shows
  • url: the TickerMint card page (the link back the free plan asks for)

Prices are TCGplayer market prices for the card's main printing, the same number its TickerMint page shows. Full endpoint list and OpenAPI on /developers.

Next step: get a free key. Log in with your email, create a key, and move to the Developer plan when you need 600 requests a minute and the bulk endpoints.
GET A FREE KEY →

QUESTIONS

Is there a free Pokemon card price API for Python?

+

Yes. https://api.tickermint.cards needs no key for reads: /products/search to find a card, /products/{id}/prices for its daily TCGplayer market price per printing since February 2024, /sets/{id} for a whole set. Free for personal projects, research and non-commercial tools with a link back to the TickerMint page the price came from. Showing the prices inside a commercial app, site or tool needs API Pro ($49 a month).

What are the rate limits?

+

120 requests a minute per IP with no key. A key on a free account keeps the same 120 a minute; the Developer plan ($19 a month) gives that key its own 600 a minute and the bulk endpoints. Answers are cached for up to an hour and prices change once a day, so cache on your side too.

Why do I get 403 from Python but not from my browser?

+

Python's built-in urllib (and libraries that use it, like pandas.read_csv on a URL) is refused by the firewall in front of the API. requests, httpx, aiohttp and curl work.

Does it cover other card games?

+

Yes: Pokemon, One Piece, Lorcana, Riftbound, Gundam and Yu-Gi-Oh. Add game=one-piece (or lorcana, riftbound, gundam, yugioh) to the search to stay in one game.

Same data, other tools: Google Sheets · Excel · JavaScript · API, MCP server and embeds · Download all history (CSV)