The Resolver provides public endpoints that map product identifiers to the correct Digital Product Passport destination. It powers the GS1 Digital Link scan path and is the entry point for all QR, NFC, and RFID scans.
Systems that need to resolve a barcode or identifier to a tieback product reference without authentication.
Resolves a product identifier to a destination URL and optionally activates a token on first scan.
Authentication: None required. The resolver is a public endpoint.
Inputs
Resolution Strategy
First-Scan Activation
If the resolved token has first-scan activation enabled and has not yet been scanned, it is activated on its first valid scan. This is idempotent — repeated scans do not re-trigger activation. Concurrency is handled safely to prevent duplicate activations.
Response
Error responses return { "ok": false, "outcome": "brand_not_found" | "not_found" }.
Cache-Control Semantics
The edge layer uses the cache policy to set HTTP headers:
no_store → Cache-Control: no-store, max-age=0 (used after activation or when a token is pending activation)cache_public_3600 → Cache-Control: public, max-age=3600 (used for already-active or standard resolutions)Scan events are recorded asynchronously after each resolution. Telemetry does not block or delay the consumer redirect.
Recorded data includes:
Traffic classification. Each resolved scan is classified into a traffic class so that human activity, link-preview unfurlers, and search crawlers can be reported separately. Classification is conservative and based on the request’s user agent. Unknown traffic is treated as non-bot for activation, but is reported distinctly in analytics.
Privacy. IP addresses are truncated before storage. The parsed user-agent summary contains only coarse browser, OS, and device fields. No personally identifiable information is retained beyond what is required for aggregate analytics.
The original resolution endpoint remains available for backward compatibility. It resolves a product identifier to a product reference using the brand’s platform subdomain.
Inputs:
Returns: The product reference on match, or null if not found.
The resolver returns only a destination URL or product reference. No product name, description, pricing, or other data is exposed. This is by design — the resolver is a routing primitive, not a data endpoint.
not_found.No. Only the destination URL is returned. All product data access requires authentication via separate APIs.
The resolver falls back to the most recently retired match. Previously issued codes remain resolvable.
The public resolver currently supports GTIN only for GS1 paths. Non-GS1 fallback paths resolve by internal ID.
Telemetry is recorded asynchronously after each scan. It does not delay the consumer redirect. IP addresses are truncated for GDPR compliance, and no personally identifiable information is retained.