2D Ready

GS1 Digital Link conformance

What this platform implements from the GS1 Digital Link: URI Syntax standard and the GS1-conformant resolver requirements — stated requirement by requirement, and, for §8 compression, proven below by running our test vectors through the exact library we ship, live in your browser.

Resolver redirect conformance

Our resolver at gtin.codes is measured against the GS1 Digital Link redirect requirements (§7). Each row cites the requirement id and states exactly what the resolver does. Supported is implemented and tested; Deferred marks a spec MAY we have consciously not built yet. These behaviours are verified by our resolver's automated conformance suite on every commit (they run server-side, so — unlike the compression checks below — they can't execute in your browser).

RequirementStatusWhat our resolver does
REQ-001 Support GET, HEAD and OPTIONSSupportedGET/HEAD resolve; OPTIONS answers the CORS preflight
REQ-002 Serve over HTTPSSupportedTLS terminated at the edge on the gtin.codes custom domain
REQ-003 CORS header on redirectsSupportedAccess-Control-Allow-Origin: * on every response, redirects included
REQ-010 · 012 307 redirect with an absolute LocationSupportedTemporary Redirect to the stored, absolute target URL
REQ-011 · 061 No 200 error body; unknown key → 404SupportedAn unknown GTIN returns 404 carrying a hosted landing page, never a 200 error
REQ-020 · 021 Path identifiers are the lookup key, never auto-appendedSupportedGTIN/lot/serial resolve the record; only the query string is forwarded
REQ-030 Query-string forwardingSupportedThe entire incoming query string is passed on to the target
REQ-031 linkType forwarded, not strippedSupportedlinkType rides through to the target after it selects the link
REQ-032 Per-target query suppressionDeferred (MAY)We always forward; suppression is a spec MAY we have not yet implemented
REQ-033 · 034 Merge onto a target that already has a query; last value winsSupportedIncoming pairs merge with & and override the template on a key collision
REQ-040 · 041 Link header advertising available linksSupportedEach link carries its href, rel (linkType) and a human-readable title
REQ-042 anchor equals the request URISupportedEvery advertised link is anchored to the canonical request URI
REQ-043 owl:sameAs only for a compressed requestSupportedA compressed scan additionally exposes its uncompressed URI as owl:sameAs
REQ-050 · 051 linkType selection with default fallbackSupportedA matching linkType redirects; otherwise the product's default link
REQ-052 linkType=all is a list; unavailable item → 406Supportedapplication/linkset+json for a known item; 406 when the item is unknown
REQ-060 Invalid syntax → 400, no redirectSupportedA bad GTIN or check digit returns 400 with a pointer to our parser
REQ-062 Optional 303 / 410 responsesDeferred (MAY)Not implemented; unknown keys use 404 (REQ-061) instead

URI syntax & §8 compression

CapabilityStatusScopeWhere
Uncompressed Digital Link URIs — parse & buildSupportedAIs 01, 22, 10, 21 in the path; numeric AIs as query attributesresolver · tools · app
Fully-compressed URIs (§8) — parseSupportedAI vocabulary below; precise error for anything elseresolver · tools
Partially-compressed URIs (§8) — parseSupported/01/{gtin14}/{compressed}resolver · tools
Compressed URI generation (§8)SupportedFully-compressed form onlytools · app
AI vocabulary in compressed dataPartial by design01, 10, 11, 13, 15, 17, 21, 22 — other AIs are rejected with a named error, never mis-readall
Resolver: compressed scans resolve in placeSupportedSame redirect/linkset/fallback outcomes as the uncompressed twinresolver
Resolver: linkset (?linkType=all)Supportedapplication/linkset+jsonresolver
Resolver: malformed-URI hintSupported400 with a pointer to this site's parserresolver

Live test results

The vectors below were generated with GS1's own reference implementation (GS1DigitalLinkToolkit.js). Our encoder must match its output byte for byte, and our decoder must read both compressed forms back to the identical canonical URI. Your browser just ran every check against the same code our resolver and tools use — each one is listed as its own row.

Running…

CheckResult

What §8 compression is

A compressed Digital Link packs the same GS1 Application Identifiers into a short base64url path segment, so the URI is shorter and the QR code carrying it is often more compact (not guaranteed for every value). Compression changes the URI's spelling, not its meaning: a conformant reader extracts identical data from either form. Try both in the builder and parser.

Our compressed-data vocabulary is the set of AIs this platform manages: GTIN (01), CPV (22), lot (10), serial (21) and the date AIs 11/13/15/17. A compressed URI containing any other AI is rejected with an error naming that AI — never silently mis-read.