Skip to content

GS1 Resolver

GS1 Resolver

The GS1 resolver is the public read surface for a DPP. The canonical URLs look like this:

https://qr3.app/01/{GTIN}
https://qr3.app/01/{GTIN}/10/{LOT}
https://qr3.app/01/{GTIN}/21/{SERIAL}
https://qr3.app/01/{GTIN}/10/{LOT}/21/{SERIAL}

serial and lot must use safe GS1 path segments only: A-Z, a-z, 0-9, ., _, ~, -, with a length of 1 to 20 characters. Reserved URL separators are rejected so the canonical link stays resolvable.

Content negotiation

The same resolver returns different representations depending on the Accept header:

AcceptResponse
text/htmlconsumer HTML
application/ld+jsonJSON-LD
application/jsonraw DPP JSON
application/linkset+jsonlinkset with alternates

Public routes

  • GET /01/... is the canonical resolver
  • GET /dpp/:gtin/:serial?lot=... is an HTML alias
  • GET /v1/dpp/:id/qr.svg serves SVG
  • GET /v1/dpp/:id/qr.png serves PNG
  • GET /v1/dpp/:id/qr.pdf serves PDF
  • GET /v1/dpp/:id/qr.eps serves EPS

QR asset visibility follows the DPP status:

  • live is public without authentication
  • draft and archived require a valid auth context plus workspace access
  • Invalid auth returns 401
  • Non-visible or foreign-workspace passports return 404

Fallback

If qr3.app cannot find a match, the request is forwarded to the upstream GS1 resolver. That keeps printed codes useful even before a product exists locally.

Practical flow

  1. Create the DPP in the dashboard.
  2. Use the GS1 URI as the QR target.
  3. Let consuming systems request the representation they need via Accept.