# Official-API connectors Sources with a public, documented API (engine priority `api`, optional `feed` fallback). They provide the **catalog backbone** (canonical printings with deterministic identifiers) plus **price-guide observations** — never transactions. | id | source | catalog | prices | full run | notes | |---|---|---|---|---|---| | `scryfall` | Scryfall bulk `default_cards` (JSONL gz, daily) | ~110k printings × finishes | USD/EUR market (TCGplayer/Cardmarket aggregates), dated with the bulk `updated_at` | 1 listing call + 1 streamed 78 MB download | cursor `{updatedAt}` skips unchanged bulks; `lookup()` for scryfall.com card URLs | | `pokemontcg` | api.pokemontcg.io v2 | ~19k cards / 174 sets (× TCGplayer variants) | TCGplayer USD low/mid/high/market per variant + Cardmarket EUR aggregates, each with its own `updatedAt` | 1 sets call + ~190 card pages at ≤28 req/min ≈ 8 min | API is intermittently 5xx → 5 retries w/ backoff, then GitHub mirror (catalog only) | | `ygoprodeck` | db.ygoprodeck.com v7 `cardinfo.php?misc=yes` | ~14.5k cards / ~44k printings | per-printing `set_price` (USD, `guide_value`) + card-level tcgplayer/cardmarket/ebay/amazon/coolstuffinc | ONE ~21 MB request | no price timestamp → dated at fetch, confidence 0.7 | ## Identifiers for entity resolution - Scryfall: `scryfall_id` (printing, unique) · `oracle_id` (card concept) · `tcgplayer_id` · `cardmarket_id` · `mtgo_id` · `multiverse_id` · `finish` (nonfoil/foil/etched). Canonical printing key ≈ `magic_the_gathering||||`. - Pokémon: `pokemontcg_id` (e.g. `base1-4`) · `pokemontcg_set_id` · `tcgplayer_url`. Variants: null / Holo / Reverse Holo / 1st Edition / 1st Edition Holo (from TCGplayer price keys). Canonical key ≈ `pokemon|||`. - Yu-Gi-Oh!: `ygo_id` (passcode) · `konami_id` · `set_code` (e.g. `LOB-EN001`; same code may exist in several rarities → distinct printings). Canonical key ≈ `yugioh||`. ## Tooling - `pnpm tsx connectors/api/_lib/capture.ts` — refresh fixtures from live responses (small, trimmed). - `pnpm tsx connectors/api/_lib/smoke.ts [id…]` — live probe crawl (limit 5) through the real router/context. - Tests: `pnpm --filter @rareindex/source-connectors run test` (fixture suite + targeted assertions).