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}When creating a DPP (POST /v1/dpp), the following rules apply: 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
Without a local match, the GS1 resolver redirects with 307 to https://id.gs1.org. For the GTIN alias /dpp/:gtin/:serial?lot=..., this also applies to an invalid GTIN check digit: gtin, lot, and serial are encoded individually as URL path segments, including reserved separators. The redirect confirms neither GTIN validity nor data availability at GS1.
Exception: if a decoded identifier is only . or .., the alias without a local match responds with 422, application/problem+json, type https://docs.qr3.app/errors/validation, and the affected field in errors[], without a redirect. URL parsers normalize these segments even in encoded form. Values such as LOT.1 and ... remain eligible for delegation. This exception concerns only this alias without a match; creation validation, the canonical resolver, and existing matches remain unchanged.
GET /dpp/{GTIN}/UNKNOWN?lot=LOT%2F1307 Location: https://id.gs1.org/01/{GTIN}/10/LOT%2F1/21/UNKNOWN
GET /dpp/{GTIN}/UNKNOWN?lot=.422 Content-Type: application/problem+jsonPractical 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.