Skip to main content

How to Verify a GS1-Conformant Resolver

By Diljit Ramachandran · LinkedIn · /about

Published August 21, 2026 · 12 min read

A GS1 Digital Link on packaging is only as trustworthy as the resolver behind it. Regulators, scanners, and brand IT teams do not take “we put a GTIN in the URL” at face value — they probe a discovery protocol defined by the GS1-Conformant Resolver standard.

This guide walks through the checks you can run yourself, using QRCodeStack’s live description file at https://qrcodestack.com/.well-known/gs1resolver as a concrete example. It pairs with our GS1 Digital Link tool page and the comparison of Digital Link vs a normal QR code.

What “conformant resolver” means

A resolver is not “any HTTPS redirect that contains digits.” The standard expects:

  • A Resolver Description File at /.well-known/gs1resolver so a client can discover the service at all.
  • Resolution of Digital Link URIs such as /01/{gtin} (with optional path prefixes permitted by URI Syntax §4.11).
  • Support for linkType selection, a full linkset, and correct handling of unknown types.
  • HTTP Link headers so a client that follows a redirect still learns what else exists.
  • Content negotiation for linksets (for example application/linkset+json per RFC 9264).

If your stack only 302s shoppers to a campaign page, it fails the discovery test even when the QR looks professional.

Step 1 — Open the well-known description file

In a browser or with curl, request:

GET https://qrcodestack.com/.well-known/gs1resolver

You should receive a JSON (or JSON-LD) description that identifies the resolver and how it is reached. GS1 URI Syntax names this location as the discovery test — if the file is missing, clients should not treat the origin as a conformant resolver.

Custom domains: when packaging prints https://brand.com/01/{gtin}, checkers probe https://brand.com/.well-known/gs1resolver, not the SaaS vendor’s apex. Your white-label / scan domain must expose the file on the brand origin.

Step 2 — Resolve a GTIN path

For a registered GTIN, GET /01/{gtin} (or /gs1/01/{gtin} where that prefix is used) should return a redirect to the default link type — typically a product information page (pip) — usually as HTTP 307.

Confirm:

  • GET, HEAD, and OPTIONS are allowed (CORS preflight matters for browser clients).
  • Responses expose Link headers advertising related resources.
  • Query parameters other than linkType are passed through on redirect when the standard requires it.

Step 3 — Exercise linkType behaviour

  • ?linkType=pip (or another published type) → redirect to that specific link.
  • ?linkType=linkset → the full link set as JSON (not a silent HTML dump).
  • ?linkType=unknown404. Falling back to the default destination would hand the client the wrong resource; resolver standard 1.2 made this explicit.

Also try content negotiation: Accept: application/linkset+json or application/ld+json on the GTIN URI should reach the linkset without relying only on the query string.

Step 4 — Check URI syntax, not just the redirect

Resolver conformance assumes the Digital Link URI itself is conformant: 14-digit GTINs, application identifiers in the mandated path order, attributes such as expiry in the query string where URI Syntax 1.7.0 places them. Generate codes from a tool that validates against the ratified text — the GS1 Digital Link generator on QRCodeStack is built for that.

For EU packaging that must stay open and editable after print, pair the resolver with a dynamic destination and review EU Digital Product Passport requirements so the same URI can later point at a DPP record.

Quick checklist

  1. GET /.well-known/gs1resolver returns a description file on the origin printed on pack.
  2. GET /01/{gtin} redirects to the default link with useful Link headers.
  3. linkType selects specific links; linkset returns the set; unknown types 404.
  4. CORS allows GET/HEAD/OPTIONS for public resolver data.
  5. Generated URIs match GS1 Digital Link URI Syntax (not an ad-hoc GTIN query string).
  6. Brand custom domains serve their own well-known file — checkers do not follow the SaaS apex instead.

How QRCodeStack implements this

QRCodeStack mounts a GS1-conformant resolver at the origin root and under /gs1, publishes the description file at /.well-known/gs1resolver, and supports linkType, linksets, and custom-domain resolution scoped to the brand that owns the hostname.

Try the generator on /gs1-digital-link. Paid plans (public on /pricing) add editable destinations, analytics, and custom domains. Trial fact (SSOT): 7-day free trial, no credit card — 5 dynamic QR codes, 0 static, 25 short links. Static QR creates require a paid plan.

Frequently Asked Questions

What is a GS1-conformant resolver?

An HTTPS endpoint that resolves Digital Link URIs per the GS1 resolver standard — discovered via /.well-known/gs1resolver, with linkType, linksets, and Link headers — not a GTIN-shaped marketing redirect.

Where is the Resolver Description File?

At https://your-domain/.well-known/gs1resolver. Live example: https://qrcodestack.com/.well-known/gs1resolver.

What should linkType=unknown return?

HTTP 404 — not a fallback to the default product page.

Is a marketing QR redirect enough for Sunrise 2027?

No. Packaging that must identify products at POS needs conformant URI syntax plus a discoverable resolver. See Digital Link vs normal QR and the Sunrise 2027 guide.

Build on a conformant resolver

Generate Digital Link QR codes, verify /.well-known/gs1resolver, and use editable destinations. 7-day free trial, no credit card — 5 dynamic, 0 static, 25 short links. From $5/mo.