{
  "id": "mtgjson",
  "displayName": "MTGJSON (prices & identifiers)",
  "sourceId": "mtgjson",
  "sourceName": "MTGJSON",
  "sourceType": "pricing_guide",
  "sourceUrl": "https://mtgjson.com",
  "module": "api/mtgjson",
  "enginePriority": ["api"],
  "categories": ["magic_the_gathering"],
  "regions": ["US", "EU"],
  "languages": ["en"],
  "currency": ["USD", "EUR"],
  "supportsListings": false,
  "supportsSold": false,
  "supportsAuctions": false,
  "supportsImages": false,
  "supportsCatalog": true,
  "supportsPopulation": false,
  "supportsLookup": false,
  "refreshFrequencyMinutes": 1440,
  "priority": "high",
  "trustScore": 0.85,
  "attributionRequired": true,
  "termsUrl": "https://mtgjson.com/faq/",
  "accessNotes": "Open MTG data project (free bulk files, no key). Incremental runs download SetList.json, the newest `maxSetsPerRun` set files (LEA.json… with per-card identifiers: scryfallId, tcgplayerProductId, cardKingdomId, mcmId, cardsphereId, multiverseId) and AllPricesToday.json.gz (~5 MB gz) which carries the latest daily retail/buylist price per printing from TCGplayer, Cardmarket (EUR), Card Kingdom, Cardsphere and ManaPool. Backfill streams AllPrices.json.gz (~150 MB gz, 90 days of daily history) entry by entry. Retail prices are stored as price_observations (priceKind 'market', metadata.provider), buylist prices only in metadata; every point is dated by MTGJSON's own date keys. Variant vocabulary mirrors the scryfall connector (Foil / Etched Foil + treatments) so identifier matches agree.",
  "enabled": true,
  "schemaVersion": "1.0",
  "config": {
    "maxSetsPerRun": 60,
    "providers": ["tcgplayer", "cardmarket", "cardkingdom", "cardsphere", "manapool"],
    "historyDays": 90
  }
}
