Verification
Anyone — a shopper or a reseller — can check whether a serialized unit is genuine. Verification is public: the printed serial is the credential, so no API key is needed. It reads the unit’s real scan history + the clone-detection result.
# The verify page
Point a unit’s code (or its GS1 Digital Link) at:
https://mostlyqr.com/Verify?s=<serial>
Scanning it with any phone camera (no app) shows a genuine / flagged / not-found result, the product, batch, and any passport attributes. The page can also read QR, DataMatrix, and Code 128 / EAN-13 with its built-in camera scanner.
# Programmatic check (callable)
The verify surface is a public Firebase callable (not a Bearer-key REST route), so it can be called from a browser with no key:
curl -X POST https://europe-west2-mostly-qr.cloudfunctions.net/verifyUnitCode \
-H "Content-Type: application/json" \
-d '{ "data": { "serial": "K0TKPSGN9AB" } }'
{ "result": {
"serial": "K0TKPSGN9AB",
"status": "genuine",
"reason": "ok",
"public": { "product": "Spring Roast 250g", "batch": "L-2027-04",
"attributes": [ { "label": "Model", "value": "Single-origin Ethiopia" } ] } } }
status is one of:
| Status | Meaning |
|---|---|
genuine |
Minted, active, not flagged. |
flagged |
Clone heuristic tripped, or the unit/campaign was revoked. reason/detail explain. |
unknown |
Not a serial we issued (never minted, or mistyped) — treat with caution. |
The public payload is a privacy-safe projection: product, batch, coarse region, scan
count, and brand attributes only — never account, destination, or raw scan logs.
# Reseller bulk verify
Distributors can check a whole stock list at once on the verify page (“Verify many”) or via the bulk callable (up to 200 serials, deduped; entries can be bare serials, verify URLs, or Digital Links):
curl -X POST https://europe-west2-mostly-qr.cloudfunctions.net/verifyUnitsBulkCode \
-H "Content-Type: application/json" \
-d '{ "data": { "serials": ["K0TKPSGN9AB", "https://mostlyqr.com/Verify?s=ABCDEFGHJK7"] } }'
Returns a per-serial verdict array plus counts — spot duplicated or un-issued stock before accepting a pallet. The page offers a CSV export of the results.
# Digital product passport
A brand can attach attributes to a campaign (or per batch) — Model, Release year, Material, Origin… — that render on the verify result, turning authenticity into a provenance page (aligned with GS1 Digital Link / the EU DPP direction). Set them in the dashboard’s Serialized tab, or via the campaign API. Batch attributes override campaign attributes by label.
# Certificate of authenticity
A genuine result offers a downloadable certificate (a branded image generated in the browser). A server-side / bulk PDF version (via MostlyRender) is on the roadmap.
# Next
- Serialized codes — how to mint the units this checks.
- The full API reference.