Skip to content
Trading Card Scanner API

Identification that refuses to be confidently wrong.

One REST call scans a card photo and returns name, set, number, year, and language across Pokémon, Magic, Yu-Gi-Oh, Lorcana, One Piece, sports, and more. When we can't be sure, we say so — you get an honest needsReview instead of a wrong card.

Cards indexed
3,411,597+
Cards indexed
Per identify
~2–3s
Per identify
TCGs & sports
12+
TCGs & sports

Free tier, no credit card.

Or try the free card scanner
identify.sh

Request

curl -X POST https://aicardvault.io/api/v1/identify \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -F front=@card.jpg \
  -F category=pokemon

Response

{
  "ok": true,
  "result": {
    "card": {
      "name": "Charizard ex",
      "set": "Obsidian Flames",
      "number": "125/197",
      "year": "2023",
      "rarity": "Double Rare",
      "language": "en"
    },
    "confidence": 0.94,
    "needsReview": false
  }
}

One call. Front image in, structured identity out.

Built for developers at

  • Marketplaces
  • Grading services
  • Collection & portfolio apps
  • Deckbuilders
  • Scanning & inventory tools
  • Local game store software

Card identification that refuses to be confidently wrong.

The only card-ID API built around honest uncertainty. When it can't corroborate a match, it returns needsReview and card:null so your users never see a confidently wrong answer.

The #1 difference

Honest uncertainty, not a confident guess

Most identifiers force-fit the nearest neighbor and report high confidence on the wrong card. We don't. Every result is calibrated to P(correct); below the confidence floor — or when our adjudicator dissents — you get needsReview:true and card:null, with best guesses moved to an alternates array. Confidently wrong is the enemy. An honest 'not sure' keeps your users' trust.

A miss is still a 200 — your fallback path stays clean. We never emit an identity we can't corroborate.

Coverage

A huge, multi-game catalog that grows every day

400,000+ cards indexed and climbing via automated nightly ingest. TCG coverage spans Pokémon (EN + JP), Magic: The Gathering, Yu-Gi-Oh, Lorcana, One Piece, Dragon Ball, Digimon, Weiß Schwarz (JP + EN), Flesh and Blood, Cardfight!! Vanguard, and dozens more.

Own visual index built from licensed open catalogs — Scryfall, TCGdex, Lorcast, YGOPRODeck, apitcg and more.

Beyond TCG

Sports & entertainment cards too

Baseball, basketball, football, hockey, soccer, MMA, racing and more — plus entertainment sets like Marvel/DC, Star Wars, and pop culture — backed by best-in-class vendor recognition and folded into the same single response shape.

One contract for every category. You never juggle multiple providers.

Gets smarter

A self-building index that compounds accuracy

Confident matches and your corrections feed a flywheel that re-indexes nightly. Send a fix to POST /api/v1/feedback and the catalog learns from it. Coverage and accuracy improve on their own — the corrections data is a moat no one else has.

Every 'wrong card? Edit' becomes a labeled row that makes the next match better.

Latency

Answers in about 2–3 seconds

A self-hosted OpenCLIP ViT-L/14 visual fingerprint plus pgvector nearest-neighbor search returns a structured identity in ~2–3s — fast enough to sit inline in a scan flow, not a batch job.

Identical re-submits short-circuit via an exact-image cache for instant repeats.

Developer experience

A simple REST API you can integrate in an afternoon

POST an image file — or just a public image URL — with an optional category hint, and get back typed JSON: card, confidence, needsReview, alternates, and optional pricing. Bearer-token auth, predictable shapes, no SDK required.

multipart/form-data or JSON body with frontImageUrl. Front and optional back. That's the whole surface.

Live catalog

What's actually in our index

Not a promise — a live, own-built visual index of 3,411,597+ cards across 44 games and sports, growing every day via automated ingest.

Trading card games

  • Pokémon128,120
  • Magic: The Gathering112,303
  • Weiß Schwarz95,357
  • Flesh and Blood30,585
  • Cardfight!! Vanguard25,025
  • Battle Spirits15,501
  • Yu-Gi-Oh!14,617
  • Duel Masters12,013
  • Star Wars: Unlimited9,110
  • WIXOSS8,385
  • Dragon Ball Super Card Game (Classic)7,841
  • Digimon Card Game7,735
  • Future Card Buddyfight7,397
  • Shadowverse Evolve7,366
  • Dragon Ball Super: Fusion World7,140
  • Union Arena5,968
  • Grand Archive TCG4,940
  • Final Fantasy TCG4,253
  • Disney Lorcana3,192
  • One Piece Card Game3,048
  • Kayou3,008
  • Star Wars: Destiny2,977
  • Legend of the Five Rings1,878
  • Dragon Ball Super Card Game1,845
  • Gundam Card Game1,816
  • Marvel Champions LCG1,721
  • Hololive Official Card Game1,623
  • Riftbound1,189
  • MetaZoo721
  • Other Tcg3

Sports

  • Soccer697,882
  • Football672,480
  • Hockey362,195
  • Baseball350,999
  • Basketball235,294
  • Wrestling206,677
  • Racing174,196
  • Ufc149,920
  • Tennis19,640
  • Golf12,585
  • Boxing2,769
  • Other Sport272
  • Cricket6
  • Olympics5

Browse the full card database →

From photo to identity in three steps

No pipeline to build. Point a card image at one endpoint.

01

Send a card image

POST the front (and optionally the back) to /api/v1/identify as a file upload or a public image URL, with an optional game or category hint. Authenticate with your API key.

02

We identify — or honestly flag it

The card is cropped, fingerprinted, and matched against our own visual index and vendor recognizers. Calibrated confidence decides whether we return a match or an honest needsReview with alternates.

03

Get structured JSON back

You receive name, set, number, year, rarity, language, a confidence score, and the needsReview flag — ready to render, store, or route to your own review UI.

Why developers trust the result

Calibrated confidence, not a vibe

confidence reflects real P(correct) with a tunable floor. You can set your own threshold on top of ours.

It never 500s on a hard card

Any provider or pipeline fault degrades to an honest 200 miss, so your integration behaves predictably under load.

Server-side and private by design

You call our gateway; we never expose upstream keys, and images are used to answer your request — not sold or resold.

Transparent, published pricing

Flat monthly tiers with clear overage rates. No 'contact sales' wall to find out what an identify costs.

CardVault Identify is a trading card scanner and identification API for developers: send a photo of a Pokémon, Magic: The Gathering, Yu-Gi-Oh, Lorcana, One Piece, or sports card and get back its name, set, number, year, and rarity in one REST call. Unlike identification APIs that force a confident guess on every card, ours returns an honest needsReview when it can't corroborate a match — so the trading card scanner, marketplace listing tool, or collection app you build on it never shows your users a confidently wrong card ID. One API, no SDK, no per-game integration work.

Stop shipping confidently wrong card IDs.

Get an API key, send your first card, and see an honest answer come back in seconds.

Free tier, no credit card. Upgrade only when you scale.