BYTETOOLS

Scryfall (Magic: The Gathering) API

Free Magic: The Gathering API with no key: every card ever printed with images, prices, rulings, legality and full-text search. Tested curl example.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 19 Aug 2026

What is the Scryfall (Magic: The Gathering) API?

Scryfall is a free, key-free API covering every Magic: The Gathering card ever printed, with high-resolution images, market prices, official rulings, format legality and a powerful full-text search syntax.

Scryfall is one of the best-engineered free APIs in existence, community-run and comprehensive. It covers every card in every printing and language, with card images at multiple resolutions, current market prices and format legality across every sanctioned format.

Its search syntax is the standout feature — the same expressive query language the Scryfall website uses is available through the API, so you can express complex constraints like colour identity, mana value, card type and set in a single query string.

Quick facts

Base URL
https://api.scryfall.com
Authentication
No key required. Scryfall asks for 50-100ms between requests and a descriptive User-Agent.
Rate limit
Roughly 10 requests per second; the maintainers request 50-100ms delays between calls.
Pricing
Free. Card images and data are provided under Scryfall's terms; Wizards of the Coast holds the underlying IP.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the Scryfall (Magic: The Gathering) API

Every request below was executed against the live API on 19 Aug 2026, and the response shown is the real body it returned — not an illustration.

1. Look up a card by exact name

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

curl
curl 'https://api.scryfall.com/cards/named?exact=Black+Lotus'
JavaScript (fetch)
const res = await fetch("https://api.scryfall.com/cards/named?exact=Black+Lotus");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://api.scryfall.com/cards/named?exact=Black+Lotus", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "object": "card",
  "id": "bd8fa327-dd41-4737-8f19-2cf5eb1f7cdd",
  "oracle_id": "5089ec1a-f881-4d55-af14-5d996171203b",
  "multiverse_ids": [
    382866
  ],
  "mtgo_id": 53155,
  "mtgo_foil_id": 53156,
  "name": "Black Lotus",
  "lang": "en",
  "released_at": "2014-06-16",
  "uri": "https://api.scryfall.com/cards/bd8fa327-dd41-4737-8f19-2cf5eb1f7cdd",
  "scryfall_uri": "https://scryfall.com/card/vma/4/black-lotus?utm_source=api",
  "layout": "normal",
  "highres_image": true,
  "image_status": "highres_scan",
  "image_updated_at": "2026-07-13T10:42:12Z",
  "image_uris": {
    "small": "https://cards.scryfall.io/small/front/b/d/bd8fa327-dd41-4737-8f19-2cf5eb1f7cdd.jpg?1783939332",
    "normal": "https://cards.scryfall.io/normal/front/b/d/bd8fa327-dd41-4737-8f19-2cf5eb1f7cdd.jpg?1783939332",
    "large": "https://cards.scryfall.io/large/front/b/d/bd8fa327-dd41-4737-8f19-2cf5eb1f7cdd.jpg?1783939332",
    "png": "https://cards.scryfall.io/png/front/b/d/bd8fa327-dd41-4737-8f19-2cf5eb1f7cdd.png?1783939332",
    "art_crop": "https://cards.scryfall.io/art_crop/front/b/d/bd8fa327-dd41-4737-8f19-2cf5eb1f7cdd.jpg?1783939332",
    "border_crop": "https://cards.scryfall.io/border_crop/front/b/d/bd8fa327-dd41-4737-8f19-2cf5eb1f7cdd.jpg?1783939332",
    "thumb": "https://cards.scryfall.io/thumb/front/b/d/bd8fa327-dd41-4737-8f19-2cf5eb1f7cdd.webp?1783939332",
    "grid": "https://cards.scryfall.io/grid/front/b/d/bd8fa327-dd41-4737-8f19-2cf5eb1f7cdd.webp?1783939332",
    "display": "https://cards.scryfall.io/display/front/b/d/bd8fa327-dd41-4737-8f19-2cf5eb1f7cdd.webp?1783939332",

Parameters

ParameterTypeRequiredDescription
exactqueryOptionalExact card name on /cards/named. Black Lotus
fuzzyqueryOptionalFuzzy name match, tolerant of typos. blk lotus
qqueryOptionalFull Scryfall search syntax on /cards/search. c:red cmc<=3
setqueryOptionalRestrict to a set code. lea

Response fields

name / mana_cost / type_linestring
Card name, casting cost and type line.
oracle_textstring
Current official rules text.
image_urisobject
Card images at several resolutions, including PNG with transparency.
pricesobject
Current market prices in USD, EUR and MTGO tickets.
legalitiesobject
Legality status per format — standard, modern, commander and others.
set / set_namestring
Set code and full set name.

What you can build with the Scryfall (Magic: The Gathering) API

  • Build a deck builder with search, images and format legality checks
  • Create a collection tracker with current market pricing
  • Add card lookup and hover previews to a community site
  • Practise consuming an expressive query-syntax search API

Common errors and how to fix them

404

No card matched the name or query.

Fix: Try `fuzzy` instead of `exact`, which tolerates typos and partial names.

429

Requesting too quickly.

Fix: Add a 50-100ms delay between calls as the maintainers request; there is no burst allowance.

Missing image_uris

Double-faced cards store images per face.

Fix: Check `card_faces` when `image_uris` is absent — layout varies by card type.

Scryfall (Magic: The Gathering) API — frequently asked questions

Is the Scryfall API free?

Yes, completely free with no API key. Scryfall asks that you add a 50-100ms delay between requests and send a descriptive User-Agent.

Does Scryfall provide card prices?

Yes, current market prices in USD, EUR and MTGO tickets are included on every card object, updated regularly.

Can I search using Scryfall's advanced syntax?

Yes. The /cards/search endpoint accepts the same query language as the website, so you can express colour, mana value, type and set constraints in one string.

Why is image_uris missing on some cards?

Double-faced and split cards store their images inside a `card_faces` array instead. Check for that when `image_uris` is absent.

Tools that pair with this API

Alternatives to Scryfall (Magic: The Gathering) API

If Scryfall (Magic: The Gathering) does not fit, these game & anime apis cover similar ground. Every one was called before publishing, and each links to its own reference page with a working curl command and the response it returned.

APIWhat it doesAuthCORSLast verified
PokéAPIFree Pokémon API with no key: stats, types, abilities, moves, evolutions and sprites for 1,000+ species. The most popular API for learning REST. Tested example.No keyYes19 Aug 2026
Rick and Morty APIFree Rick and Morty API with no key: 800+ characters, episodes and locations with images, filtering and pagination. REST and GraphQL. Tested example.No keyYes19 Aug 2026
Jikan (MyAnimeList)Free unofficial MyAnimeList API with no key: anime and manga data, scores, characters, staff and seasonal listings. Tested curl example and live JSON.No keyYes19 Aug 2026
Deck of CardsFree playing card API with no key: shuffle decks, draw cards, manage piles and get card images. Stateful deck ids. Tested curl example and live JSON.No keyYes19 Aug 2026
STAPI (Star Trek)Free Star Trek API with no key: characters, starships, species, episodes, series and planets across the entire franchise. Comprehensive. Tested example.No keyNo20 Aug 2026
Steam StoreFree Steam Store API with no key: featured games, store categories, app details, prices and discounts. Undocumented but widely used. Tested example.No keyNo20 Aug 2026
All Game & Anime APIs

Scryfall (Magic: The Gathering) is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 19 Aug 2026; always check the official documentation before relying on this API in production, as terms and limits can change.