Skip to content
Crypto-only, prepaid. Top up a balance and we draw from it monthly — nothing is ever charged automatically.
tcggraph

Weebs of the Shore · 3,240 printings

Grand Archive card scanner API

A small catalog, and almost all of its value in foil and alternate treatments.

3,240
Matchable printings
3
Languages
38 ms
Median match
$0
Charged for a miss

The problem

Why Grand Archive is hard to identify

Grand Archive is the smallest catalog on this list, which makes recognition unusually reliable — there are simply fewer cards to confuse. What there is instead is treatment depth: foil, alternate art and promotional printings of the same card, sharing a number and differing substantially in price.

Because the print runs are small, availability moves prices faster than in the larger games, which is the argument for returning the price on the match rather than letting a cached number stand in for it.

wss://api.tcggraph.com/v1/scanidle
    0
    Frames
    0
    Matched
    0
    Unbilled

    A replayed transcript of Grand Archive cards from the public demo catalog, including a frame that does not resolve and is not billed. Nothing is being inferred in your browser.

    What settles it

    The fields a match is decided on

    Read in the order a person grading Grand Archive would read them. The match returns all of them, so you never have to infer a printing from a card name.

    FieldWhy it decides the price
    Card numberFixes set and position in a small, consistently laid out catalog.
    TreatmentFoil, alternate art and promo printings share a number.
    EditionEarly print runs are separately priced.

    Where scanners fail

    Grand Archive traps that return the wrong printing

    Each of these is a case where the artwork is right and the answer is still wrong. A confident wrong match costs more than a refused one, which is why an unresolved frame is free.

    Thin markets move fast

    Small print runs mean a price from last week can be badly wrong. The match carries a current quote rather than relying on your cache.

    Integrate it

    Scanning Grand Archive in about fifteen lines

    Pin the socket to one game and matching gets both faster and more certain, because there are fewer near-identical candidates to rule out.

    The card inside a match is the same object /v1/cards?game=grand-archive returns, including the Grand Archive-specific fields. If you already read this API, a scanner is a new input to code you have written rather than a second integration.

    Scanning is metered separately from data, so pointing a camera at a stack all morning cannot spend the credits your repricer needs at midnight.

    Scan pricing

    $29/mo · 6,000 matched cards

    Or $0.012 per matched card with no plan at all. Down to $0.0025 at volume, and a frame we cannot place is never billed.

    Compare scan plans
    Live Grand Archive scanning
    const socket = new WebSocket("wss://api.tcggraph.com/v1/scan", [
      "tcggraph.v1",
      `bearer.${process.env.TCGGRAPH_KEY}`,
    ]);
    
    socket.onopen = () =>
      socket.send(
        JSON.stringify({
          type: "config",
          games: ["grand-archive"],
          minConfidence: 0.92,
          prices: ["cardmarket", "tcgplayer"],
        }),
      );
    
    socket.onmessage = (event) => {
      const frame = JSON.parse(event.data);
    
      for (const match of frame.matches ?? []) {
        // The printing, not just the card: set, number, language, finish.
        intake.add(match.printing, match.card.prices);
      }
    
      // Unresolved frames arrive too, and cost nothing.
      for (const miss of frame.unresolved ?? []) showHint(miss.reason);
    };
    
    for await (const jpeg of camera.frames()) socket.send(jpeg);
    A match, with both price feeds
    {
      "requestId": "scan_01K5Z8P4XQJ7YB3M",
      "latencyMs": 41,
      "matches": [
        {
          "confidence": 0.9962,
          "billed": true,
          "box": {
            "x": 0.171,
            "y": 0.064,
            "w": 0.658,
            "h": 0.872
          },
          "printing": {
            "id": "ga_mdwbkuhtjm",
            "language": "en",
            "finish": "holofoil",
            "edition": "unlimited",
            "collectorNumber": "004"
          },
          "card": {
            "id": "ga_mdwbkuhtjm",
            "game": "grand-archive",
            "name": "Silvie, Slime Sovereign",
            "set": {
              "code": "ReC-SLM",
              "name": "Re:Collection Slime Sovereign"
            },
            "rarity": "4",
            "prices": []
          },
          "alternatives": []
        }
      ],
      "scans": {
        "billed": 1,
        "remaining": 5842
      }
    }

    FAQ

    Scanning Grand Archive

    Start with Grand Archive, add the rest for nothing

    One key covers every game we carry, and scans are pooled across all of them. There is no per-game surcharge and no separate model to enable — a stack with Grand Archive, Pokémon and Magic mixed together resolves card by card without you sorting it first.

    Other games