MostlyQR

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:

text
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:

bash
curl -X POST https://europe-west2-mostly-qr.cloudfunctions.net/verifyUnitCode \
  -H "Content-Type: application/json" \
  -d '{ "data": { "serial": "K0TKPSGN9AB" } }'
json
{ "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):

bash
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