Games & Comics — entry 062 of 75

Scryfall

Verified Aug 2026

Scryfall is the most complete and actively maintained Magic: The Gathering card database, covering every printing, ruling, legality, and price point (TCGplayer/Cardmarket/Cardhoarder) across the game's full history, alongside bulk data downloads for offline use. It's entirely keyless and free, with a courtesy rate limit of roughly 10 requests/second rather than a paid tier.

Scryfall is a keyless JSON database of every Magic: The Gathering card printing, queryable by exact or fuzzy name, ID, or a full search-query syntax. A live GET this run against /cards/named?exact=Black+Lotus returned a genuine 4,821 B card object at HTTP 200, with content-type: application/json; charset=utf-8 and access-control-allow-origin: * — no key or signup of any kind.

trading-card-gamecard-datapricing-datakeyless
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/scryfall/"><img src="https://greatapis.com/badge/scryfall.svg" alt="Scored 88 on greatapis.com"></a>

Auth quickstart

  1. No API key, signup, or credit card required — but Scryfall's own error response proves it insists on request hygiene: a live GET this run against /cards/named?exact=Black+Lotus with an empty User-Agent header returned HTTP 400 (not a 403), with body {"object":"error","code":"bad_request","status":400,"details":"You submitted an invalid request. HTTP requests to api.scryfall.com must contain a User-Agent and Accept header. More info: https://scryfall.com/docs/api"}. Send a descriptive User-Agent and you're in.
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 its exact name

GEThttps://api.scryfall.com/cards/named?exact=Black+Lotus

200 application/json; charset=utf-8

{
  "object": "card",
  "id": "bd8fa327-dd41-4737-8f19-2cf5eb1f7cdd",
  "name": "Black Lotus",
  "released_at": "2014-06-16",
  "set": "vma",
  "set_name": "Vintage Masters",
  "mana_cost": "{0}",
  "cmc": 0.0,
  "type_line": "Artifact",
  "oracle_text": "{T}, Sacrifice this artifact: Add three mana of any one color.",
  "rarity": "bonus",
  "digital": true,
  "games": [
    "mtgo"
  ],
  "prices": {
    "usd": null,
    "usd_foil": null,
    "eur": null,
    "tix": "45.73"
  },
  "...": "multiverse_ids, image_uris, legalities (23 formats), related_uris, purchase_uris omitted -- full object is 4,821 B"
}

A live GET this run against /cards/search?q=lotus returned HTTP 200 with total_cards: 26 and has_more: false — all 26 matches in one 130,961 B page, from Black Lotus itself down to reprint-adjacent cards like Blacker Lotus. /cards/search paginates via has_more + a next_page URL once a query's total_cards exceeds one page.

Try it

Developer reference

Base URLhttps://api.scryfall.com
Rate limit

10 requests/second (2/second on /cards/search, /cards/named, /cards/random, /cards/collection) -- per scryfall.com/docs/api/rate-limits, with a 429 and a 30-second lockout on violation.

Key endpoints
  • GET/cards/named
  • GET/cards/search
  • GET/cards/{id}

Gotchas & limits

  • A name that matches no card is a real HTTP 404 with a typed error body, not a 200 — a live GET this run against /cards/named?exact=Notacard+Xyz returned exactly {"object":"error","code":"not_found","status":404,"details":"No cards found matching “Notacard Xyz”"} (122 B), curly quotes and all, inside details.
  • /cards/named?exact= returns exactly one print, and it is not necessarily the card's original or most iconic printing — a live GET this run against /cards/search?q=!"Black Lotus"&unique=prints found 5 total prints (vma, 2ed, leb, lea, prm), yet the plain exact=Black+Lotus lookup above resolved to vma (2014's digital-only Vintage Masters), not the 1993 Alpha (lea) paper original.
  • prices mixes nullable fiat fields with a separate MTGO-only tix field, and digital-exclusive prints carry real tix pricing with null usd/eur — confirmed live on the Black Lotus response above, where usd, usd_foil, and eur are all null while tix is the genuine string "45.73". Code that assumes a card always has a USD price will get null for any digital-only print.
  • Every request needs both a User-Agent and an Accept header or it's rejected before it reaches card data — confirmed live above via the empty-User-Agent 400. This is stricter than a typical keyless API: no key is required, but the two headers are not optional.

Availability

Uptime100%
Median latency825 ms
Last checkUp · 400 · Sep 2026

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