CardShowData Python SDK
Official Python client for the CardShowData TCG pricing API.
Install
pip install cardshowdata
Quick Start
from cardshowdata import CardShowData
client = CardShowData(api_key="csd_live_...")
# Get a card by pretty ID
card = client.cards.get("pk_bs_004_holofoil")
print(card.name) # "Charizard"
print(card.image) # "https://images.cardshowdata.com/..."
# Search cards
page = client.cards.search(tcg="pk", q="name:charizard")
for card in page.data:
print(f"{card.name} — {card.expansion.name}")
# v4 pricing — variants[].raw[] keyed by (condition, currency)
price = client.pricing.get("aaaa-bbbb-cccc-dddd")
for variant in price.variants:
for row in variant.raw: # row = RawPriceRow
print(row.condition, row.currency, # "NM" "USD"
row.reference_prices.market_cents) # 12500
# Per-vertical recommended sell prices
if row.recommended_sell.online:
print("online:", row.recommended_sell.online.price_cents)
if row.recommended_sell.show:
print("show:", row.recommended_sell.show.price_cents)
if row.recommended_sell.lcs:
print("lcs:", row.recommended_sell.lcs.price_cents)
# Per-grader graded data (population, listings, recent sales)
for grader_slug, block in price.variants[0].graded.items():
if block.population:
print(grader_slug, "total pop:", block.population.total)
# Bulk pricing
prices = client.pricing.bulk(["uuid1", "uuid2", "uuid3"])
# Browse the catalog
tcgs = client.catalog.list_tcgs()
sets = client.catalog.list_sets("pk")
Async
from cardshowdata import AsyncCardShowData
async with AsyncCardShowData(api_key="csd_live_...") as client:
card = await client.cards.get("pk_bs_004_holofoil")
async for product in client.catalog.list_products_all("pk"):
print(product.product_name)
Auto-Pagination
Endpoints with pagination have _all() methods that automatically fetch every page:
# Offset-paginated (cards)
for card in client.cards.search_all(tcg="pk", q="name:pikachu"):
print(card.name)
# Cursor-paginated (catalog products, pricing changes)
for product in client.catalog.list_products_all("pk"):
print(product.pretty_id)
for change in client.pricing.changes_all(since="2026-04-01T00:00:00Z"):
print(f"{change.pretty_id}: {change.pct_change}%")
Resources
| Resource | Methods |
|---|---|
client.cards |
get(), search(), search_all(), list_by_expansion(), get_ebay_sales() |
client.pricing |
get(), bulk(), history(), changes(), changes_all() |
client.catalog |
list_tcgs(), list_sets(), get_taxonomy(), list_products(), list_products_all(), export_csv(), resolve(), search() |
client.grading |
get(), history(), changes(), changes_all() |
client.lifecycle |
get() |
client.usage |
get() |
client.sales |
submit(), submit_batch(), submit_csv() |
client.feedback |
submit() |
client.onboarding |
quickstart() |
Error Handling
from cardshowdata import NotFoundError, RateLimitError
try:
card = client.cards.get("nonexistent")
except NotFoundError:
print("Card not found")
except RateLimitError as e:
print(f"Rate limited — retry after {e.retry_after}s")
Errors: AuthenticationError (401), PermissionError (403), NotFoundError (404), RateLimitError (429), ApiError (5xx).
Configuration
client = CardShowData(
api_key="csd_live_...", # or set CSD_API_KEY env var
base_url="https://api.cardshowdata.com", # default
timeout=30, # seconds
max_retries=3, # auto-retry on 429/5xx
)
Rate limit info is available after any request:
print(client.rate_limit.remaining) # requests left this minute
Requirements
- Python 3.10+
- httpx 0.27+
Metadata
Release files for cardshowdata 4.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| cardshowdata-4.0.2.tar.gz | 38.5 kB | Without provenance | Details for cardshowdata-4.0.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| cardshowdata-4.0.2-py3-none-any.whl | Python 3 | none | any | Details for cardshowdata-4.0.2-py3-none-any.whl |
Total release size: 63.7 kB
Release files / cardshowdata-4.0.2.tar.gz
| Download URL | cardshowdata-4.0.2.tar.gz |
|---|---|
| Size | 38.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cd042a81e90ad725d40dcc8a4f00a737dfb3cde89283222d51aa207082792038
|
|
BLAKE2b-256 checksum How to use checksums |
920898f6e73dd76bac5b777dc8c8416248d1d6726d243969466642e0a997846c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Release files / cardshowdata-4.0.2-py3-none-any.whl
| Download URL | cardshowdata-4.0.2-py3-none-any.whl |
|---|---|
| Size | 25.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e48d686ec8a967b084a21d7c1065a42da7499236e37e7897c53b938bd2996ba6
|
|
BLAKE2b-256 checksum How to use checksums |
e95c969fe77743c73de3ff597f84c0620ac98f4e20399618731a0fae103ca584
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Security for cardshowdata 4.0.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.