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.
| Field | Why it decides the price |
|---|---|
| Card number | The FB01-001 or BT1-001 code fixes line, set and position. |
| Parallel treatment | Alternate art and SPR printings share the number and multiply the price. |
| Line | Shared 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 plansconst { 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());
}
};{
"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.