Conformant, and open about how.
A QR code on a label has to work with every scanner, till and app — not just ours. PaqLink builds to the published GS1 standards and documents exactly which parts it implements.
GS1 Digital Link URI syntax
- Uncompressed URIs only — the form retail point-of-sale systems require.
- GTIN as 14 digits, zero-padded, check digit verified before anything is generated.
- Qualifiers in canonical order: consumer product variant (22) → batch/lot (10) → serial (21).
- Attributes as query parameters — expiry (17) and other date AIs validated as real dates, measures and counts validated to their formats.
- Character-set enforcement (GS1 CSET 82) on every text value.
GS1-Conformant Resolver
- 307 redirects to the default destination, forwarding the original AI parameters.
- Linksets (RFC 9264) on request, and a
Linkheader pointing to them on every redirect. - linkType routing — ask for
gs1:sustainabilityInfoand get that link, not the default. - Resolver description at
/.well-known/gs1resolver. - Correct error semantics: 400 for malformed URIs, 404 for unknown GTINs, CORS enabled.
Link types you can publish
Every product carries a default link (its product page or e-label). You can attach these additional GS1 link types to the same code, and any conformant client can request them directly.
Printing specifications
Exports are sized in real millimetres. Module size (X-dimension) is kept within the GS1 general specifications window for retail point-of-sale scanning — 0.396 mm minimum, 0.495 mm target, 0.990 mm maximum — with the four-module quiet zone included in the file. PNG exports are 600 dpi.
Testing
The URI syntax implementation is shared between the app, the resolver and the free tools, and every copy is tested against the same set of vectors. We run GS1's public resolver conformance test suite against the live resolver before every resolver release, and publish the results here.
Live conformance results
27 of 27 tests pass — run 28 August 2026 against
https://paqlink.com/01/… with suite revision 32597c1. Zero failures, zero warnings,
including the optional (SHOULD) checks. Raw request/response logs are kept with the source.
Show all 27 tests
| Test | Conformance statement (from the suite) | Result |
|---|---|---|
isURL | Not listed as a conformance criterion but the DL URI must be a valid URL | PASS |
validDL | Given input must be a GS1 Digital Link URI | PASS |
isHttps | SHALL support HTTP Over TLS (HTTPS) | PASS |
plausibleDL | Following GS1 Digital Link: URI syntax, we can check whether a URL plausibly is, or definitely is not, a DL URI | PASS |
basicWalkUp | For each supported primary key, a resolver SHALL support all its key qualifiers. | PASS |
tlsOK | SHALL support HTTP Over TLS (HTTPS) | PASS |
rdFile | SHALL provide a resolver description file at /.well-known/gs1resolver | PASS |
httpVersion | SHALL support HTTP 1.1 (or higher) | PASS |
corsCheck | SHALL support CORS | PASS |
methodsCheck | SHALL support HTTP 1.1 (or higher) GET, HEAD and OPTIONS requests. | PASS |
reportWith400 | SHALL extract and syntactically validate the URI and report errors with an HTTP response code of 400 | PASS |
noErrorWith200 | A GS1 conformant resolver SHALL NOT use a 200 OK response code with a resource that indicates an error condition | PASS |
trailingSlash | SHOULD tolerate trailing slashes at the end of GS1 Digital Link URIs, i.e. the resolver SHOULD NOT fail if one is present | PASS |
legacyLinkHeaders | The inclusion of all possible links in the HTTP Link header was deprecated in version 1.0.0 of the GS1-Conformant resolver standard, February 2024 | PASS |
qsPassedOn | By default, SHALL pass on all key=value pairs in the query string of the request URI (if present) when redirecting | PASS |
ltLinksetNoRedirect | On receiving a request for the linkset, by setting the linkType parameter to linkset, the resolver SHALL NOT redirect the query and SHALL return the linkset. | PASS |
ltAcceptHeader | On receiving a request for the linkset, by setting the HTTP Accept Header to application/linkset+json, the resolver SHALL NOT redirect the query and SHALL return the linkset. | PASS |
validLinkset | Linkset must be valid according to published JSON schema | PASS |
linksetJsonldCheck | When requesting the linkset the HTTP response headers SHOULD include a Link header pointing to a JSON-LD context file | PASS |
declaredContentType | If the HTTP Accept header is application/linkset+json, the resolver SHALL return the linkset serialised as JSON as defined by RFC9264 | PASS |
defaultLinkExists | For each identified entity there SHALL be exactly one default link, the list of link types for which SHALL include gs1:defaultLink. This default is defined without any of the optional attributes, that is, it SHALL include a title, but SHALL NOT include other attributes. | PASS |
loForgs1pip | If the requested type of link is available, the resolver SHALL redirect to it | PASS |
loForgs1epil | If the requested type of link is available, the resolver SHALL redirect to it | PASS |
singleDefaulLink | For each identified entity there SHALL be exactly one default link, the list of link types for which SHALL include gs1:defaultLink. This default is defined without any of the optional attributes, that is, it SHALL include a title, but SHALL NOT include other attributes. | PASS |
defaultTarget | One of the links SHALL be recognised by the resolver as the default and the resolver SHALL redirect to that URL unless there is information supplied within the query to the contrary. | PASS |
linkTypesDefined | Link types SHOULD be given as a URI defined in the GS1 Web vocabulary | PASS |
specificLinkTypeNotFound | If the requested type of link is not available, the resolver SHALL return a 404 Not Found message. | PASS |
What conformance means — and doesn't
- Anyone may operate a resolver that conforms to the GS1 standard on their own domain; no GS1 approval is required and the standards are royalty-free.
- There is no GS1 certification programme for resolver software. Any vendor claiming to be "GS1 certified" is describing something that doesn't exist. PaqLink conforms to the published standards; it is not certified, endorsed by, or affiliated with GS1.
- Your GTINs are licensed from your GS1 member organisation (GS1 South Africa / CGCSA locally). PaqLink never issues identifiers — it only encodes the ones you already own.
GS1® is a registered trademark of GS1 AISBL. QR Code® is a registered trademark of Denso Wave Incorporated.
See it for yourself.
Paste any QR's contents into the checker, or generate a conformant code free.