Overview

The DeckCheck API provides read-only access to public deck data and search. All endpoints live under:

https://deckcheck.co/api/external

Responses are returned as JSON. All requests use the GET method.

Authentication

Authenticate by including your API key in the X-Api-Key header:

Request Header
X-Api-Key: your_api_key_here

The /deck endpoint is open to everyone and does not require an API key. The /deck-search endpoint requires a valid API key on every request.

Providing an API key on any endpoint unlocks higher rate-limit tiers. To request an API key, contact me at contact@deckcheck.co.

Permitted Use

The DeckCheck API is provided for read-only integrations that display, reference, or search public DeckCheck deck data in a user-facing product or partner workflow. API access is subject to the DeckCheck Terms of Service, these docs, and any written agreement that applies to your key.

You may not use the API or DeckCheck public pages to scrape, bulk download, mirror, resell, redistribute, sublicense, train models on, create commercial datasets from, or build a competing deck database, search engine, recommendation system, analytics product, or similar service without express written permission from ANTHOS.

Do not share API keys, embed them in public client-side code, bypass rate limits, call undocumented endpoints, or combine API usage with scraping or browser automation. If your use case needs higher volume, caching, redistribution, model training, or commercial dataset rights, contact contact@deckcheck.co first.

Rate Limits

Rate limits are applied per API key (or per IP for unauthenticated requests).

Tier Limit Description
Tier 1 10 requests/s Default for all API keys and unauthenticated callers
Tier 2 100 requests/s Available on request for higher-volume partners
Tier 3 Unlimited Reserved for trusted integrations

When the limit is exceeded, the API returns a 429 status code. Back off and retry after the rate window resets.

Error Handling

The API returns standard HTTP status codes with a JSON error body:

Error Response
{
  "error": "Description of the error"
}
Status Meaning
400Bad request — missing or invalid parameters
401Unauthorized — invalid API key
403Forbidden — deck is private
404Not found — deck does not exist
429Rate limit exceeded
500Internal server error

GET /api/external/deck

Pass any shareable DeckCheck deck link or deck ID and this endpoint will parse it and return the matching deck data.

Parameters

Parameter Type Required Description
deck_id string * A DeckCheck deck identifier. This can be either a deckview ID for a scanned/published deck, or a builder share ID for a shared builder/decklist deck.
deck_url string * Any shareable DeckCheck deck URL, including /app/deckview/<id>, /app/decklist/<id>, or /app/builder/<id>.

* Provide either deck_id or deck_url. At least one is required.

deckview links/IDs represent the published scanned version of a deck and return the simpler published deck list.

builder and decklist links both refer to the same shared builder deck. For non-owners that deck is viewed as a decklist, while owners may land in the builder. Sending either one here returns the shared builder deck data.

Builder/decklist responses are richer than deckview responses. They return the current shared deck state and can include fields like sideboard, considering, updatedAtUtc, and deckviewId/deckviewUrl when that builder deck is also linked to a published scan.

Example Request

cURL
curl -H "X-Api-Key: YOUR_KEY" \
  "https://deckcheck.co/api/external/deck?deck_id=a7ab43314200e984b056e6467f0ae184"

Response

200 OK
{
  "id": "a7ab43314200e984b056e6467f0ae184",
  "publicId": "a7ab43314200e984b056e6467f0ae184",
  "name": "Hearthhull, the Worldseed",
  "performanceIndex": 6.25,
  "bracket": 3,
  "format": "commander",
  "visibility": "public",
  "publicUrl": "https://deckcheck.co/app/deckview/a7ab43314200e984b056e6467f0ae184",
  "colorIdentity": ["B", "G", "R"],
  "colors": ["B", "G", "R"],
  "createdAtUtc": "2025-07-09T20:06:38.022409",
  "creator": {
    "username": "WotC",
    "displayName": "WotC"
  },
  "authors": [
    {
      "username": "WotC",
      "displayName": "WotC"
    }
  ],
  "mainCommander": {
    "deckCardId": "com0_HearthhulltheWor",
    "scryfallId": "6b913e79-a9f6-44d4-bb37-c4f6f66b8151",
    "name": "Hearthhull, the Worldseed",
    "manaCost": "{1}{B}{R}{G}",
    "typeLine": "Legendary Artifact — Spacecraft",
    "colors": ["B", "G", "R"],
    "colorIdentity": ["B", "G", "R"],
    "cmc": 4.0,
    "power": "6",
    "toughness": "7",
    "rarity": "mythic"
  },
  "boards": {
    "commanders": {
      "count": 1,
      "cards": {
        "com0_HearthhulltheWor": {
          "quantity": 1,
          "board": "commanders",
          "finish": "nonFoil",
          "isFoil": false,
          "card": {
            "deckCardId": "com0_HearthhulltheWor",
            "scryfallId": "6b913e79-a9f6-44d4-bb37-c4f6f66b8151",
            "name": "Hearthhull, the Worldseed",
            "setCode": "eoc",
            "setName": "Edge of Eternities Commander",
            "collectorNumber": "1",
            "manaCost": "{1}{B}{R}{G}",
            "cmc": 4.0,
            "typeLine": "Legendary Artifact — Spacecraft",
            "oracleText": "Station (Tap another creature you control: ...)\n2+ | {1}, {T}, Sacrifice a land: Draw two cards...\n8+ | Flying, vigilance, haste\nWhenever you sacrifice a land, each opponent loses 2 life.",
            "power": "6",
            "toughness": "7",
            "loyalty": null,
            "colors": ["B", "G", "R"],
            "colorIdentity": ["B", "G", "R"],
            "rarity": "mythic",
            "reserved": false,
            "reprint": false,
            "cardFaces": [],
            "prices": {
              "usd": 2.2,
              "usd_foil": 0.57,
              "eur": 1.06,
              "eur_foil": 0.62,
              "tix": 11.15,
              "ck": 2.49,
              "ck_foil": 0.99,
              "mp": 0.37,
              "mp_foil": 0.18,
              "cm": 0.21,
              "cm_foil": 0.44
            },
            "imageUrl": null
          }
        }
      }
    },
    "mainboard": {
      "count": 99,
      "cards": {
        "mai11_BalothPrime": {
          "quantity": 1,
          "board": "mainboard",
          "finish": "nonFoil",
          "isFoil": false,
          "card": {
            "deckCardId": "mai11_BalothPrime",
            "scryfallId": "2c723fc9-d5c9-4126-a9a6-f80c247a4b6b",
            "name": "Baloth Prime",
            "setCode": "eoc",
            "setName": "Edge of Eternities Commander",
            "collectorNumber": "13",
            "manaCost": "{3}{G}",
            "cmc": 4.0,
            "typeLine": "Creature — Beast",
            "oracleText": "This creature enters tapped with six stun counters on it...",
            "power": "10",
            "toughness": "10",
            "loyalty": null,
            "colors": ["G"],
            "colorIdentity": ["G"],
            "rarity": "rare",
            "reserved": false,
            "reprint": false,
            "cardFaces": [],
            "prices": {
              "usd": 0.32,
              "eur": 0.45,
              "tix": 3.05,
              "ck": 0.49,
              "mp": 0.15,
              "cm": 0.11
            },
            "imageUrl": null
          }
        },
        "...": "97 more cards"
      }
    }
  }
}

Card Object

Each card entry in a board contains a card object with the following fields:

FieldTypeDescription
deckCardIdstringUnique key for this card entry
scryfallIdstringScryfall UUID
namestringCard name
setCodestringSet code (e.g. "cmm")
setNamestringFull set name
collectorNumberstringCollector number
manaCoststringMana cost string (e.g. "{2}{U}{B}")
cmcnumberConverted mana cost
typeLinestringFull type line
oracleTextstringOracle rules text
powerstringPower (creatures only)
toughnessstringToughness (creatures only)
loyaltystringStarting loyalty (planeswalkers only)
colorsarrayCard colors (e.g. ["U", "B"])
colorIdentityarrayColor identity
raritystringcommon, uncommon, rare, or mythic
reservedbooleanOn the Reserved List
reprintbooleanWhether this printing is a reprint
cardFacesarrayFace data for double-faced cards
pricesobjectPrice data (USD, CardKingdom, ManaPool, CardMarket)
imageUrlstringCard image URL when available