CardMind API
CardMind API
OverviewAuthenticationEndpointsRate LimitsWebhooksMCP ProtocolCode Examples
Get API Key
CardMind API

api.cardmind.app

OverviewAuthenticationEndpointsRate LimitsWebhooksMCP ProtocolCode Examples
Get API Key

Code Examples

Copy-and-paste examples for integrating CardMind into Python scripts, JavaScript applications, and AI tools via MCP. Replace cm_live_YOUR_KEY with your actual API key throughout.

  • Python
  • JavaScript
  • Claude Desktop MCP

Python

These examples use the requests library. Install it with pip install requests.

Search for cards

python

import requests

API_KEY = "cm_live_YOUR_KEY"
BASE_URL = "https://api.cardmind.app"

headers = {"Authorization": f"Bearer {API_KEY}"}

response = requests.get(
    f"{BASE_URL}/api/cards/search",
    headers=headers,
    params={"q": "lightning bolt", "limit": 5},
)
response.raise_for_status()

data = response.json()["data"]
for card in data:
    print(f"{card['name']} ({card['set'].upper()}) — ${card.get('price_usd', 'N/A')}")

Get a card by Scryfall ID

python

import requests

API_KEY = "cm_live_YOUR_KEY"
BASE_URL = "https://api.cardmind.app"

# Lightning Bolt (Magic 2010)
CARD_ID = "e3285e6b-3e79-4d7c-bf96-d920f973b122"

headers = {"Authorization": f"Bearer {API_KEY}"}

response = requests.get(
    f"{BASE_URL}/api/cards/{CARD_ID}",
    headers=headers,
)
response.raise_for_status()

result = response.json()["data"]
card = result["card"]
history = result["price_history"]

print(f"Card: {card['name']}")
print(f"Current price: ${card.get('price_usd', 'N/A')}")
print(f"Price history entries: {len(history)}")

Get price movers

python

import requests

API_KEY = "cm_live_YOUR_KEY"
BASE_URL = "https://api.cardmind.app"

headers = {"Authorization": f"Bearer {API_KEY}"}

response = requests.get(
    f"{BASE_URL}/api/prices/movers",
    headers=headers,
    params={"period": "7d", "limit": 5},
)
response.raise_for_status()

movers = response.json()["data"]

print("Top gainers this week:")
for card in movers["gainers"]:
    pct = card.get("change_pct", 0)
    print(f"  {card['name']} +{pct:.1f}%")

print("\nTop losers this week:")
for card in movers["losers"]:
    pct = card.get("change_pct", 0)
    print(f"  {card['name']} {pct:.1f}%")

Bulk card lookup

python

import requests

API_KEY = "cm_live_YOUR_KEY"
BASE_URL = "https://api.cardmind.app"

headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json",
}

card_names = ["Black Lotus", "Lightning Bolt", "Brainstorm", "Force of Will"]

response = requests.post(
    f"{BASE_URL}/api/cards/bulk-lookup",
    headers=headers,
    json={"names": card_names},
)
response.raise_for_status()

cards = response.json()["data"]
print(f"Found {len(cards)} of {len(card_names)} cards:")
for card in cards:
    print(f"  {card['name']} — ${card.get('price_usd', 'N/A')}")

Get recent signals

python

import requests

API_KEY = "cm_live_YOUR_KEY"
BASE_URL = "https://api.cardmind.app"

headers = {"Authorization": f"Bearer {API_KEY}"}

response = requests.get(
    f"{BASE_URL}/api/signals/recent",
    headers=headers,
    params={"type": "BUY", "limit": 10},
)
response.raise_for_status()

signals = response.json()["data"]
for signal in signals:
    print(
        f"[{signal['signal_type']}] {signal['card_name']} — "
        f"{signal['reason'][:60]}..."
    )

JavaScript

These examples use the native fetch API — available in Node.js 18+, browsers, and edge runtimes with no dependencies.

Search for cards

javascript

const API_KEY = 'cm_live_YOUR_KEY'
const BASE_URL = 'https://api.cardmind.app'

const params = new URLSearchParams({ q: 'lightning bolt', limit: '5' })

const response = await fetch(`${BASE_URL}/api/cards/search?${params}`, {
  headers: { Authorization: `Bearer ${API_KEY}` },
})

if (!response.ok) {
  throw new Error(`CardMind API error: ${response.status}`)
}

const { data } = await response.json()

for (const card of data) {
  console.log(`${card.name} (${card.set.toUpperCase()}) — $${card.price_usd ?? 'N/A'}`)
}

Get a card by Scryfall ID

javascript

const API_KEY = 'cm_live_YOUR_KEY'
const BASE_URL = 'https://api.cardmind.app'

// Lightning Bolt (Magic 2010)
const CARD_ID = 'e3285e6b-3e79-4d7c-bf96-d920f973b122'

const response = await fetch(`${BASE_URL}/api/cards/${CARD_ID}`, {
  headers: { Authorization: `Bearer ${API_KEY}` },
})

if (!response.ok) throw new Error(`API error ${response.status}`)

const { data } = await response.json()
console.log('Card:', data.card.name)
console.log('Price:', data.card.price_usd)
console.log('History entries:', data.price_history.length)

Get price movers

javascript

const API_KEY = 'cm_live_YOUR_KEY'
const BASE_URL = 'https://api.cardmind.app'

const params = new URLSearchParams({ period: '7d', limit: '5' })

const response = await fetch(`${BASE_URL}/api/prices/movers?${params}`, {
  headers: { Authorization: `Bearer ${API_KEY}` },
})

if (!response.ok) throw new Error(`API error ${response.status}`)

const { data } = await response.json()

console.log('Top gainers:')
data.gainers.forEach(card => {
  console.log(`  ${card.name} +${card.change_pct.toFixed(1)}%`)
})

console.log('Top losers:')
data.losers.forEach(card => {
  console.log(`  ${card.name} ${card.change_pct.toFixed(1)}%`)
})

Bulk card lookup

javascript

const API_KEY = 'cm_live_YOUR_KEY'
const BASE_URL = 'https://api.cardmind.app'

const cardNames = ['Black Lotus', 'Lightning Bolt', 'Brainstorm', 'Force of Will']

const response = await fetch(`${BASE_URL}/api/cards/bulk-lookup`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ names: cardNames }),
})

if (!response.ok) throw new Error(`API error ${response.status}`)

const { data } = await response.json()
console.log(`Found ${data.length} of ${cardNames.length} cards`)
data.forEach(card => {
  console.log(`  ${card.name} — $${card.price_usd ?? 'N/A'}`)
})

TypeScript helper with error handling

typescript

interface ApiResponse<T> {
  data: T
  error: { message: string; code: string } | null
}

interface Card {
  id: string
  name: string
  set: string
  price_usd: string | null
  price_usd_foil: string | null
  image_uri: string
}

async function searchCards(
  query: string,
  options: { set?: string; format?: string; limit?: number } = {}
): Promise<Card[]> {
  const API_KEY = process.env.CARDMIND_API_KEY
  if (!API_KEY) throw new Error('CARDMIND_API_KEY env var not set')

  const params = new URLSearchParams({ q: query })
  if (options.set) params.set('set', options.set)
  if (options.format) params.set('format', options.format)
  if (options.limit) params.set('limit', String(options.limit))

  const response = await fetch(
    `https://api.cardmind.app/api/cards/search?${params}`,
    { headers: { Authorization: `Bearer ${API_KEY}` } }
  )

  const json: ApiResponse<Card[]> = await response.json()

  if (!response.ok || json.error) {
    throw new Error(json.error?.message ?? `HTTP ${response.status}`)
  }

  return json.data
}

// Usage
const bolts = await searchCards('lightning bolt', { format: 'modern', limit: 10 })
console.log(`Found ${bolts.length} Lightning Bolt printings legal in Modern`)

Claude Desktop MCP Config

Premium Only

Get natural-language access to CardMind directly inside Claude Desktop. Once configured, you can ask Claude to search cards, analyze card market data, and track market signals without writing any code.

1. Add to your config file

Open your claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json) and add the cardmind entry:

json

{
  "mcpServers": {
    "cardmind": {
      "url": "https://api.cardmind.app/mcp",
      "headers": {
        "Authorization": "Bearer cm_live_YOUR_KEY"
      }
    }
  }
}

2. Restart Claude Desktop

Quit and reopen Claude Desktop to load the updated config. You should see CardMind listed under connected tools.

3. Try it out

“What are the top price gainers this week in Magic: The Gathering?”

“Search CardMind for Jace, the Mind Sculptor and show me its price history.”

“Are there any BUY signals on the market right now?”

“Analyze Black Lotus for market potential.”

MCP access requires a Premium API key. See MCP Protocol → for the full tool reference and additional MCP client setup instructions.

Ready to get started?

Create a free CardMind account and generate your API key in Settings. Free accounts include 1,000 API calls per month — no credit card required.

Get API Key →