YGOProDeck APIygoprodeck.com ↗
Access Yu-Gi-Oh! card stats, effects, archetypes, pricing, and images from the YGOProDeck database via 3 structured endpoints.
What is the YGOProDeck API?
The YGOProDeck API exposes 3 endpoints for querying the full Yu-Gi-Oh! card database, returning per-card fields including attack, defense, level, race, archetype, card images, set appearances, and market prices. Use get_cards to filter by type, attribute, or fuzzy name; get_card_details to retrieve a single card by ID or exact name; or list_all_cards to paginate through the entire catalog in alphabetical order.
curl -X GET 'https://api.parse.bot/scraper/44e9e31c-370a-41c1-9755-ba3a36c812ab/get_cards?num=5&fname=Blue-Eyes&offset=0' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace ygoprodeck-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: YGOProDeck SDK — search, filter, and look up Yu-Gi-Oh! cards."""
from parse_apis.ygoprodeck_card_api import YGOProDeck, Attribute, CardNotFound
client = YGOProDeck()
# Search for Dragon-type cards in the Blue-Eyes archetype
for card in client.cards.search(archetype="Blue-Eyes", race="Dragon", num=5, offset=0, limit=5):
print(card.name, card.atk, card.def_, card.level)
# Drill down: get detailed info on one specific card by ID
try:
detail = client.cards.get(id="89631139")
print(detail.name, detail.attribute, detail.race, detail.desc[:80])
for price in detail.card_prices:
print(price.tcgplayer_price, price.cardmarket_price)
for img in detail.card_images:
print(img.image_url)
except CardNotFound as exc:
print(f"Card not found: {exc}")
# List all cards alphabetically (first page)
for card in client.cards.list(offset=0, limit=3):
print(card.name, card.type, card.race)
# Search by attribute enum — LIGHT monsters
first_light = client.cards.search(attribute=Attribute.LIGHT, num=3, offset=0, limit=1).first()
if first_light:
print(first_light.name, first_light.attribute)
if first_light.card_sets:
print(first_light.card_sets[0].set_name, first_light.card_sets[0].set_rarity)
print("exercised: cards.search / cards.get / cards.list + Attribute enum + CardNotFound error")Search for Yu-Gi-Oh! cards using various filters. Supports fuzzy name search, exact name, type, attribute, level, atk, def, archetype, and race. Returns paginated results with metadata. When using num or offset, both must be provided together.
| Param | Type | Description |
|---|---|---|
| atk | integer | Attack value. |
| def | integer | Defense value. |
| num | integer | Number of results per page. Must be used together with offset. |
| name | string | Exact name of the card. |
| race | string | Card race or spell/trap type (e.g. 'Dragon', 'Spellcaster', 'Continuous', 'Quick-Play'). |
| type | string | Card type (e.g. 'Normal Monster', 'Spell Card', 'Effect Monster', 'Fusion Monster'). |
| fname | string | Fuzzy name search keyword (e.g. 'Blue-Eyes'). |
| level | integer | Card level or rank. |
| offset | integer | Pagination offset. Must be used together with num. |
| archetype | string | Card archetype (e.g. 'Blue-Eyes', 'Dark Magician'). |
| attribute | string | Card attribute. |
{
"type": "object",
"fields": {
"data": "array of card objects with id, name, type, desc, race, atk, def, level, attribute, archetype, card_images, card_prices, card_sets",
"meta": "object with pagination info including total_rows, current_rows, rows_remaining, total_pages, pages_remaining, next_page, next_page_offset"
},
"sample": {
"data": {
"data": [
{
"id": 64202399,
"atk": 2500,
"def": 2500,
"desc": "If this card is Special Summoned...",
"name": "Blue-Eyes Abyss Dragon",
"race": "Dragon",
"type": "Effect Monster",
"level": 8,
"archetype": "Blue-Eyes",
"attribute": "LIGHT",
"card_sets": [
{
"set_code": "RA01-EN016",
"set_name": "25th Anniversary Rarity Collection",
"set_price": "0",
"set_rarity": "Super Rare",
"set_rarity_code": "(SR)"
}
],
"frameType": "effect",
"card_images": [
{
"id": 64202399,
"image_url": "https://images.ygoprodeck.com/images/cards/64202399.jpg",
"image_url_small": "https://images.ygoprodeck.com/images/cards_small/64202399.jpg",
"image_url_cropped": "https://images.ygoprodeck.com/images/cards_cropped/64202399.jpg"
}
],
"card_prices": [
{
"ebay_price": "1.25",
"amazon_price": "0.50",
"tcgplayer_price": "0.10",
"cardmarket_price": "0.05",
"coolstuffinc_price": "1.49"
}
]
}
],
"meta": {
"next_page": "https://db.ygoprodeck.com/api/v7/cardinfo.php?fname=Blue-Eyes&num=5&offset=5",
"total_rows": 20,
"total_pages": 4,
"current_rows": 5,
"rows_remaining": 15,
"pages_remaining": 3,
"next_page_offset": 5
}
},
"status": "success"
}
}About the YGOProDeck API
Card Search and Filtering
The get_cards endpoint accepts up to eight filter parameters simultaneously: fname for partial name matching, name for exact match, type (e.g. 'Effect Monster', 'Spell Card'), race (e.g. 'Dragon', 'Quick-Play'), attribute, level, atk, and def. Results are paginated — when using num (results per page) and offset, both parameters must be supplied together. The meta object in the response includes total_rows, total_pages, rows_remaining, and a next_page URL for cursor-based navigation.
Card Detail Fields
Both get_cards and get_card_details return full card objects. Each object carries id, name, type, desc (the card's effect or flavor text), race, atk, def, level, attribute, archetype, card_images (image URLs), card_prices (market price data across vendors), and card_sets (every set the card has appeared in with set code and rarity). get_card_details requires at least one of id or name; supplying the numeric card ID such as '89631139' is the most precise lookup.
Full Catalog Pagination
The list_all_cards endpoint returns every card in the database ordered alphabetically. Use limit and offset together to walk through pages. The meta block mirrors the structure from get_cards, giving current_rows, pages_remaining, and a next_page field so you can build a complete local mirror of the catalog without additional filtering.
The YGOProDeck API is a managed, monitored endpoint for ygoprodeck.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when ygoprodeck.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official ygoprodeck.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a deck-building tool that filters cards by
type,race, andatkthresholds usingget_cards. - Display card price history and vendor comparisons by reading
card_pricesfromget_card_details. - Create a card set completion tracker using the
card_setsfield to list every set a card appears in. - Power an autocomplete search box with fuzzy name matching via the
fnameparameter onget_cards. - Sync a local card database nightly by paginating through
list_all_cardswithlimitandoffset. - Render card galleries in a fan site using image URLs from the
card_imagesfield. - Build an archetype browser by filtering
get_cardson thearchetypeparameter.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does YGOProDeck have an official developer API?+
What does `get_card_details` return that `get_cards` does not?+
card_images, card_prices, and card_sets. The difference is scope: get_card_details is a targeted single-card lookup by id or exact name, while get_cards applies multi-field filters and returns a paginated array. Use get_card_details when you already know the card ID or exact name and want the cleanest response.Is there a limit on how many filter parameters I can combine in `get_cards`?+
fname, name, type, race, attribute, level, atk, def) can be combined in a single request. One pairing quirk applies specifically to pagination: num and offset must always be provided together — supplying one without the other will not return paginated results correctly.Does the API return card rulings or official errata text?+
desc field contains the printed card effect or flavor text as it appears on the card, but official rulings, judge errata, and FAQ entries are not part of the response. You can fork this API on Parse and revise it to add an endpoint that fetches ruling data from a compatible source.