the camera front door — no account, no upload
Scan it. Right here.
Point your camera at any barcode — a can from the kitchen, a pallet label, a door jamb — and this page reads it, checks it, and names it. On your device.
What this page does with your camera, exactly: frames are decoded in this page's memory, on this device, and discarded. Nothing is uploaded. Nothing is stored. Nothing is logged. The reading stops the moment two frames agree. Anything shown or shared afterwards is a re-rendered barcode built from the decoded characters — never your photo. A driver's license barcode answers with a refusal: parsed, verified, nothing kept, nothing shown.
With scripts off you still get the full specimens gallery below and every machine form — the decoder island is the only thing that needs script, and it loads from this origin only.
Camera
on-device; stops on the first agreed reading
A photo
decoded here in the page, then dropped — the file never leaves this tab
Type it
the round-trip ritual: type a number, watch it become a barcode, scan it back off the screen
Specimens to scan — rendered by the same engine that reads them.
Every barcode below was drawn by this site's own encoder at build time and decoded back through an independent decoder before it was allowed to ship: resolve(generate(x)) === x, gated in the build. Scan them off this screen or a printout; hold ⌥ (long-press on touch) for the machine form of any one of them.
a product barcode (EAN-13) — the shelf form — thirteen digits, the last one a check
machine form — hold ⌥/Alt anywhere to flip (long-press on touch); ⌥⏎/Alt+⏎ copies
# the API door (same registry, same envelope)
curl -s https://api.barcoding.dev/resolve -H 'content-type: application/json' -d '{"payload":"4006381333931"}'
{
"scheme": "gs1.gtin",
"carrier": "GTIN-13 (EAN-13)",
"canonical": "04006381333931",
"check": "mod10 pass",
"computed": "computed from the digits · nothing was looked up",
"handoff": "read here · resolved by id.org.ai",
"address": "/01/04006381333931"
}
# the MCP door — one tool call, byte-identical envelope
{"method":"tools/call","params":{"name":"resolve","arguments":{"payload":"4006381333931"}}}
# the CLI door
barcoding resolve '4006381333931' --json
a GS1 label strip (GS1-128) — product + expiry + batch in one strip
machine form — hold ⌥/Alt anywhere to flip (long-press on touch); ⌥⏎/Alt+⏎ copies
# the API door (same registry, same envelope)
curl -s https://api.barcoding.dev/resolve -H 'content-type: application/json' -d '{"payload":"(01)09506000134352(17)260930(10)LOT42"}'
{
"scheme": "gs1.element-string",
"carrier": "element-string (bracket)",
"canonical": "(01)09506000134352(10)LOT42(17)260930",
"check": "mod10 pass",
"computed": "computed from the digits · nothing was looked up",
"handoff": "read here · resolved by id.org.ai",
"ambiguity": [
{
"scheme": "udi.gs1",
"carrier": "udi (GS1 issuing agency)",
"canonical": "DI 09506000134352",
"check": "mod10 pass",
"note": "the same element string read at the FDA UDI grain: DI = AI (01), PI = the production identifiers",
"di": "09506000134352",
"pi": {
"10": "LOT42",
"17": "260930"
}
}
],
"ais": [
{
"ai": "01",
"value": "09506000134352",
"label": "GTIN"
},
{
"ai": "10",
"value": "LOT42",
"label": "batch/lot"
},
{
"ai": "17",
"value": "260930",
"label": "expiration date",
"iso": "2026-09-30"
}
],
"element_string": {
"bracket": "(01)09506000134352(10)LOT42(17)260930",
"raw_has_fnc1": true
},
"digital_link": {
"canonical": "https://id.gs1.org/01/09506000134352/10/LOT42?17=260930",
"compressed": "https://id.gs1.org/ARFKk4XBoCDClnJ8bC5_aE",
"compression_note": "DL 1.1.4 structure; GS1 optimisation tables not applied this run — round-trip gated in CI, toolkit interop pending (P0-1 delta)"
},
"epc": {
"status": "company-prefix length required",
"hint": "an EPC URN splits the GTIN at the GS1 company prefix — a licensed allocation fact; pass gcpLength to derive (TDS 2.3 §7)"
},
"address": "/01/09506000134352"
}
# the MCP door — one tool call, byte-identical envelope
{"method":"tools/call","params":{"name":"resolve","arguments":{"payload":"(01)09506000134352(17)260930(10)LOT42"}}}
# the CLI door
barcoding resolve '(01)09506000134352(17)260930(10)LOT42' --json
a pallet label (SSCC on GS1-128) — one logistic unit, serialized by construction
machine form — hold ⌥/Alt anywhere to flip (long-press on touch); ⌥⏎/Alt+⏎ copies
# the API door (same registry, same envelope)
curl -s https://api.barcoding.dev/resolve -H 'content-type: application/json' -d '{"payload":"395060000000001235"}'
{
"scheme": "gs1.sscc",
"carrier": "sscc-18 digits",
"canonical": "395060000000001235",
"check": "mod10 pass",
"computed": "computed from the digits · nothing was looked up",
"handoff": "read here · resolved by id.org.ai",
"segments": {
"extension": "3",
"serial_reference_with_prefix": "9506000000000123",
"check": "5"
},
"address": "/00/395060000000001235"
}
# the MCP door — one tool call, byte-identical envelope
{"method":"tools/call","params":{"name":"resolve","arguments":{"payload":"395060000000001235"}}}
# the CLI door
barcoding resolve '395060000000001235' --json
a vehicle number (VIN on Code 39) — the door-jamb form
machine form — hold ⌥/Alt anywhere to flip (long-press on touch); ⌥⏎/Alt+⏎ copies
# the API door (same registry, same envelope)
curl -s https://api.barcoding.dev/resolve -H 'content-type: application/json' -d '{"payload":"1HGCM82633A004352"}'
{
"scheme": "vin",
"carrier": "vin (17 characters)",
"canonical": "1HGCM82633A004352",
"check": "iso3779 mod11 pass (pos 9 = 3)",
"computed": "computed from the digits · nothing was looked up",
"handoff": "read here · resolved by id.org.ai — via auto.dev, the vertical authority",
"segments": {
"wmi": "1HG",
"vds": "CM826",
"check": "3",
"vis": "3A004352"
},
"delegate": "decomposed by the vehicle authority",
"address": "/vin/1HGCM82633A004352"
}
# the MCP door — one tool call, byte-identical envelope
{"method":"tools/call","params":{"name":"resolve","arguments":{"payload":"1HGCM82633A004352"}}}
# the CLI door
barcoding resolve '1HGCM82633A004352' --json
a book (ISBN as EAN-13) — books live inside the GTIN space
machine form — hold ⌥/Alt anywhere to flip (long-press on touch); ⌥⏎/Alt+⏎ copies
# the API door (same registry, same envelope)
curl -s https://api.barcoding.dev/resolve -H 'content-type: application/json' -d '{"payload":"9780306406157"}'
{
"scheme": "isbn",
"carrier": "ISBN-13 (Bookland EAN-13)",
"canonical": "9780306406157",
"check": "mod10 pass",
"computed": "computed from the digits · nothing was looked up",
"handoff": "read here · resolved by id.org.ai",
"ambiguity": [
{
"scheme": "gs1.gtin",
"carrier": "GTIN-13 (EAN-13)",
"canonical": "09780306406157",
"check": "mod10 pass",
"note": "the same 13 digits verify as a GTIN-13 — Bookland is a GS1 prefix range leased to ISBN"
}
],
"address": "/isbn/9780306406157"
}
# the MCP door — one tool call, byte-identical envelope
{"method":"tools/call","params":{"name":"resolve","arguments":{"payload":"9780306406157"}}}
# the CLI door
barcoding resolve '9780306406157' --json
What happens after a reading, honestly.
The card you get names the thing plainly, shows the check verdict computed from the characters alone, and shows the anatomy — the same blow-out the barcode registry pages teach.
What the record says is not wired on this page yet. No lookup happens here; when the enrichment rails open, that leg lands with per-attribute provenance — source, license class, fetch time — and not before. Resolution — the identifier answered with its live doors — is id.org.ai's; this page reads, checks and hands off.
The photo path and the camera path carry the same promise, in code: decode-and-discard. The hosted door's twin (POST /decode on api.barcoding.dev) is bound by the same contract — frames decoded in memory, and what a barcode said excluded from logs by type.