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:
| Accept | Response |
|---|---|
text/html | consumer HTML |
application/ld+json | JSON-LD |
application/json | raw DPP JSON |
application/linkset+json | linkset with alternates |
Public routes
GET /01/...is the canonical resolverGET /dpp/:gtin/:serial?lot=...is an HTML aliasGET /v1/dpp/:id/qr.svgserves SVGGET /v1/dpp/:id/qr.pngserves PNGGET /v1/dpp/:id/qr.pdfserves PDFGET /v1/dpp/:id/qr.epsserves EPS
QR asset visibility follows the DPP status:
liveis public without authenticationdraftandarchivedrequire 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
- Create the DPP in the dashboard.
- Use the GS1 URI as the QR target.
- Let consuming systems request the representation they need via
Accept.