Skip to content
Prepaid, no subscription trap. Top up a balance and we draw the monthly fee from it.
tcggraph

Bandai · 11,766 printings

Dragon Ball Super card scanner API

Two lines that look alike, double-faced Leaders, and parallels sharing a number.

11,766
Matchable printings
1
Languages
450 ms
Median match
$0
Charged for a miss

The problem

Why Dragon Ball Super is hard to identify

Dragon Ball Super is two card games under one brand, and the two lines borrow the same art. A Son Goku from Fusion World and a Son Goku from Masters can share the illustration and differ in frame, number and rules text, so the match reads the card number's prefix — FB, FS, SB and FP against BT, EX, TB, SD and P — as well as the art before it names a printing.

Bandai's house pattern applies here as it does in One Piece and Digimon: parallel and special-rare printings keep the base card's number and carry the value. Leaders have a second face, the awakened back, which the catalogue holds as data and an image on the same printing; recognition is keyed on the front face, so a Leader should be scanned front-side up.

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

    A replayed transcript of Dragon Ball Super 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 Dragon Ball Super 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 numberThe FB01-001 or BT1-001 code fixes line, set and position.
    Parallel treatmentAlternate art and SPR printings share the number and multiply the price.
    LineShared art between Fusion World and Masters is told apart by frame and number prefix.

    Where scanners fail

    Dragon Ball Super 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.

    Same art, different line

    Fusion World reused illustrations from Masters for many characters. The number's prefix, not the picture, says which game the card belongs to.

    Awakened Leaders

    A Leader stored back-side up shows a different name, power and art. The index holds the front face, so a back-side scan comes back unresolved rather than as a guess; the awakened stats are on the printing's back field once the front is matched.

    Integrate it

    Scanning Dragon Ball Super 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=dragon-ball-super returns, including the Dragon Ball Super-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 Dragon Ball Super scanning
    const { ticket } = await fetch("https://api.tcggraph.com/v1/scan/tickets", {
      method: "POST",
      headers: { authorization: `Bearer ${process.env.TCGGRAPH_KEY}` },
    }).then((r) => r.json());
    
    const socket = new WebSocket(`wss://api.tcggraph.com/v1/scan?ticket=${ticket}`);
    
    socket.onopen = () => {
      socket.send(
        JSON.stringify({
          type: "config",
          games: ["dragon-ball-super"],
          minConfidence: 0.92,
        }),
      );
      // A JPEG straight off the camera, 1280 px across at quality 70.
      socket.send(camera.latestJpeg());
    };
    
    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 — and
        // printingResolved says whether those are settled or still in alternatives.
        intake.add(match.card, match.printingResolved, match.alternatives);
      }
    
      // Unresolved frames arrive too, and cost nothing.
      for (const miss of frame.unresolved ?? []) showHint(miss.reason);
    
      // Every frame is answered. One in flight at a time: the next goes now.
      if (frame.type === "match" || frame.type === "unresolved" || frame.type === "error") {
        socket.send(camera.latestJpeg());
      }
    };
    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
          },
          "corners": [
            {
              "x": 0.183,
              "y": 0.064
            },
            {
              "x": 0.829,
              "y": 0.071
            },
            {
              "x": 0.817,
              "y": 0.936
            },
            {
              "x": 0.171,
              "y": 0.928
            }
          ],
          "distance": 21,
          "printingResolved": true,
          "card": {
            "id": "dbs_bt27_139",
            "game": "dragon-ball-super",
            "name": "Son Goku, Adventure",
            "set": {
              "code": "BT27",
              "name": "History of Z"
            },
            "rarity": "SCR",
            "prices": [
              {
                "source": "tcgplayer",
                "region": "NA",
                "currency": "USD",
                "market": 361.45
              },
              {
                "source": "cardmarket",
                "region": "EU",
                "currency": "EUR",
                "market": 856.4,
                "trend": 856.4,
                "avg7": 739.99
              }
            ]
          },
          "alternatives": []
        }
      ],
      "scans": {
        "billed": 1,
        "remaining": 5842
      }
    }

    FAQ

    Scanning Dragon Ball Super

    Start with Dragon Ball Super, 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 Dragon Ball Super, Pokémon and Magic mixed together resolves card by card without you sorting it first.

    Other games