Games & Comics — entry 075 of 75

Yu-Gi-Oh!

Verified Aug 2026

YGOPRODeck's API covers the full Yu-Gi-Oh! TCG/OCG card pool — stats, card text, archetypes, banlist status, and images at multiple resolutions — backing the same database that powers the ygoprodeck.com deck-building site. It's fully keyless with no registration or paid tier; the old `db.ygoprodeck.com` docs subdomain now redirects to the current `ygoprodeck.com/api-guide/` reference.

YGOPRODeck's API covers the full Yu-Gi-Oh! TCG/OCG card pool, queryable by exact name. A live GET this run against /cardinfo.php?name=Dark%20Magician returned a genuine 11,215 B card object at HTTP 200, content-type: application/json, access-control-allow-origin: * — no key or signup of any kind.

trading-card-gamecard-datakeylessdeck-building
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score88out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs14/20Documentation URL provided
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 88 on greatapis.com
<a href="https://greatapis.com/api/yu-gi-oh/"><img src="https://greatapis.com/badge/yu-gi-oh.svg" alt="Scored 88 on greatapis.com"></a>

Auth quickstart

  1. No API key, signup, or credit card required — the live GET above returned real card data with no auth header attached, and the docs ask only that callers cache results rather than re-querying identical lookups.
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Look up a card by exact name

GEThttps://db.ygoprodeck.com/api/v7/cardinfo.php?name=Dark%20Magician

200 application/json

{
  "data": [
    {
      "id": 46986414,
      "name": "Dark Magician",
      "typeline": ["Spellcaster", "Normal"],
      "type": "Normal Monster",
      "humanReadableCardType": "Normal Monster",
      "frameType": "normal",
      "desc": "''The ultimate wizard in terms of attack and defense.''",
      "race": "Spellcaster",
      "atk": 2500,
      "def": 2100,
      "level": 7,
      "attribute": "DARK",
      "archetype": "Dark Magician",
      "ygoprodeck_url": "https://ygoprodeck.com/card/dark-magician-4003",
      "...": "card_sets (dozens of printings), card_images, card_prices omitted -- full object is 11,215 B"
    }
  ]
}

A live GET this run against /cardinfo.php?fname=Blue-Eyes&num=1&offset=0 (fuzzy-name search) returned a real card ("Blue-Eyes Abyss Dragon") at HTTP 200 — num requires offset to be present alongside it, confirmed live, or the fuzzy search parameters are rejected.

Try it

Developer reference

Base URLhttps://db.ygoprodeck.com/api/v7
Rate limit

20 requests/second per IP; a 1-hour block follows if exceeded -- per ygoprodeck.com/api-guide/.

Key endpoints
  • GET/cardinfo.php
  • GET/cardsets.php
  • GET/checkDBVer.php

Gotchas & limits

  • The live API is served from db.ygoprodeck.com, not the entry's own url host — a live GET this run against https://ygoprodeck.com/api/v7/cardinfo.php?name=Dark%20Magician returned 404 with an 80,329 B HTML page, not a redirect. The docs subdomain itself is different: a live probe this run found db.ygoprodeck.com/ and db.ygoprodeck.com/api-guide/ both 301-redirect to their ygoprodeck.com equivalents — only the /api/v7/... path stays put on db..
  • A no-match query is HTTP 400, not 404 — a live GET this run against ?name=NotACard returned 400, application/json, 136 B: {"error":"No card matching your query was found in the database. Please see https://db.ygoprodeck.com/api-guide/ for syntax usage."}.
  • Flavor text wrapped in doubled apostrophes is not a systematic rule — Dark Magician's desc above reads ''The ultimate wizard...'' live this run, but two other classic Normal Monsters checked the same way this run, Mystical Elf and Baby Dragon, came back with plain unwrapped desc text and no apostrophes at all. Don't strip or unwrap apostrophes from every card's flavor text.
  • typeline (array) and type (string) carry different information on the same object, confirmed live above: Dark Magician's typeline is ["Spellcaster", "Normal"] while type is the plain string "Normal Monster". Treating them as duplicates loses data.
  • GET /randomcard.php is not itself a data endpoint — a live probe this run returned HTTP 301, redirecting to /cardinfo.php?num=1&offset=0&sort=random&cachebust (a plain cardinfo.php query with a random sort). Following it live returned a real single-card object (200, 3,212 B this run), but a client that doesn't follow redirects only sees the 301.

Availability

Uptime100%
Median latency123 ms
Last checkUp · 200 · Sep 2026

3 checks since Aug 2026. A person runs this check by hand, not an automated monitor.