Scryfall MTG Card Search
Search for Magic: The Gathering cards using the Scryfall API.
API Overview
Base URL: https://api.scryfall.com
Required Headers:
headers = {
"User-Agent": "OpenClawMTGSkill/1.0",
"Accept": "application/json"
}
Rate Limiting: Insert 50-100ms delay between requests (max 10 req/sec).
Core Endpoints
Search Cards
GET /cards/search?q={query}
Parameters:
q (required): Fulltext search query
unique: cards|art|prints (default: cards)
order: name|set|released|rarity|color|usd|tix|eur|cmc|power|toughness|edhrec|penny|artist|review
dir: auto|asc|desc
page: Page number for pagination
Named Card Lookup
GET /cards/named?exact={name}
GET /cards/named?fuzzy={name}
Use fuzzy for partial matches (e.g., "jac bele" → "Jace Beleren").
Add &set={code} to limit to specific set.
Random Card
GET /cards/random
GET /cards/random?q={query}
Card by ID
GET /cards/{id}
GET /cards/{set_code}/{collector_number}
Autocomplete
GET /cards/autocomplete?q={partial_name}
Returns up to 20 card name suggestions.
Search Syntax Reference
See references/search_syntax.md for the complete search syntax guide.
Quick examples:
c:red pow=3 - Red cards with power 3
t:merfolk t:legend - Legendary merfolk
o:"draw a card" - Cards with "draw a card" in text
cmc=3 r:rare - 3-mana rares
e:dom - Cards from Dominaria
f:standard - Standard legal cards
usd<1 - Cards under $1
Implementation
Use the provided script for common operations:
python3 scripts/scryfall_search.py search "lightning bolt"
python3 scripts/scryfall_search.py named --exact "Black Lotus"
python3 scripts/scryfall_search.py random
python3 scripts/scryfall_search.py random --query "t:dragon"
Or make direct API calls with proper headers and rate limiting.
Card Object Key Fields
When displaying card info, prioritize these fields:
name, mana_cost, type_line
oracle_text, power, toughness
image_uris.normal (for card image)
prices.usd, prices.usd_foil
legalities (format legality)
set_name, rarity
For double-faced cards, check card_faces array.
Error Handling
- 404: Card not found
- 422: Invalid search query
- 429: Rate limited (wait and retry)
Always validate responses have object field; if object: "error", check details for message.