---
title: "The GS1 Digital Link Resolver, Explained (with a live example) — qr3.app Blog"
description: "A DPP QR code is not a link to a web page — it is a GS1 Digital Link, and the resolver turns one identifier into many context-aware responses. Here is how it works, with a live passport you can curl right now."
canonical: "https://qr3.app/en/blog/gs1-digital-link-resolver/"
lang: "en"
robots: "index,follow,max-image-preview:large,max-snippet:-1"
---

# The GS1 Digital Link Resolver, Explained (with a live example) — qr3.app Blog

> A DPP QR code is not a link to a web page — it is a GS1 Digital Link, and the resolver turns one identifier into many context-aware responses. Here is how it works, with a live passport you can curl right now.

Canonical: <https://qr3.app/en/blog/gs1-digital-link-resolver/>

[← Blog](/en/blog/) [Tutorials](/en/blog/category/tutorials/)

May 30, 2026 4 min read [Tutorials](/en/blog/category/tutorials/) [gs1-digital-link](/en/blog/tag/gs1-digital-link/)[resolver](/en/blog/tag/resolver/)[dpp](/en/blog/tag/dpp/)[gtin](/en/blog/tag/gtin/)[json-ld](/en/blog/tag/json-ld/)

# The GS1 Digital Link Resolver, Explained (with a live example)

A DPP QR code is not a link to a web page — it is a GS1 Digital Link, and the resolver turns one identifier into many context-aware responses. Here is how it works, with a live passport you can curl right now.

by **QR3 Redaktion**

![The GS1 Digital Link Resolver, Explained (with a live example)](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/gs1-digital-link-resolver/hero.png)

Most explainers about Digital Product Passport QR codes stop at "scan the code, open a website." That misses the interesting part. The QR code on a compliant product encodes a **GS1 Digital Link**, and the component that makes it useful is the **resolver** — the service that turns one product identifier into many different, context-aware responses.

This article shows what the resolver actually does, with a **live passport you can call right now** (no signup, no key).

## What a GS1 Digital Link actually is

A GS1 Digital Link is a normal HTTPS URL that embeds GS1 identifiers as path segments, each tagged with an **Application Identifier (AI)**:

```
https://id.gs1.org/01/09520000000011/21/DEMO-BAT-01
                   └─01─┘ └──GTIN───┘ └21┘ └─serial─┘
```

- `01` → GTIN (Global Trade Item Number) — *which product*

- `21` → serial — *which individual unit*

- `10` → batch/lot (alternative to serial)

Because it is a plain URL, any phone camera opens it. Because it is *structured*, machines can parse it. That dual nature is the whole point.

## The resolver: one URI, many answers

A dumb QR code returns one fixed page. A **resolver** inspects the request and returns the representation that fits the caller:

- a **consumer** with a phone browser gets a human-readable HTML page;

- a **recycler's** system asks for JSON-LD and gets machine-readable structured data;

- an **authority** can request the full *linkset* — every typed link the product exposes.

Same URL, different responses, decided by the `Accept` header (or a `?format=` override).

## A live resolver you can call right now

qr3.app hosts a public demo battery passport. Open it in a browser:

> **[https://qr3.app/dpp/09520000000011/DEMO-BAT-01](https://qr3.app/dpp/09520000000011/DEMO-BAT-01)**

You will see the consumer page for *EcoMax 5000 (Demo)* by GreenPower GmbH. Now ask the **same URL** for machine-readable JSON-LD:

```
curl "https://qr3.app/dpp/09520000000011/DEMO-BAT-01?format=jsonld"
```

```
{
  "@context": ["https://schema.org", "https://gs1.org/voc/"],
  "@type": "Product",
  "gtin": "09520000000011",
  "name": "EcoMax 5000 (Demo)"
}
```

That is the resolver doing its job: one identifier, a human page **and** a JSON-LD document built on `schema.org` + the GS1 web vocabulary. Other representations are available the same way — `?format=json` (raw passport), `?format=linkset` (all typed links), `?format=dcat-ap` — or via standard `Accept` negotiation (`Accept: application/ld+json`).

## Validate identifiers before you mint links

A resolver is only as trustworthy as the identifiers behind it. Validate a GTIN before you build a Digital Link for it:

```
import { QR3 } from "@qr3/sdk";

const client = new QR3({ apiKey: process.env.QR3_API_KEY! });

const result = await client.gs1.validateGs1({
  identifier_type: "gtin",
  value: "09520000000011",
});

console.log(result.valid);   // true
console.log(result.detail);  // "Valid GTIN-14"
```

## Register your GTINs

Keep the identifiers you use under management so every Digital Link traces back to a known product:

```
const gtin = await client.gs1.createGs1Identifier({
  identifier_type: "gtin", // or "gln" | "company_prefix"
  value: "09520000000011",
  label: "EcoMax 5000",
});
```

## Using qr3 as your resolver

You do not have to build and operate a resolver yourself. Point your product QR code at the Digital Link, host the passport on qr3.app, and the resolver serves the right representation per request. The GTIN/serial in the URL stay **stable forever** (so printed labels never break), while the data behind them stays updatable.

## FAQ

**Is the QR code itself different from a normal one?**
No — it is a standard QR (or Data Matrix) carrying a GS1 Digital Link URL. Any camera opens it; the intelligence is in the resolver, not the symbol.

**Do consumers and recyclers really get different content?**
Yes — that is content negotiation. The browser gets HTML; a system requesting `application/ld+json` (or `?format=jsonld`) gets structured data from the same URL.

**Can I keep my own product page and still be compliant?**
Yes. The Digital Link can expose multiple typed links (a `linkset`) — your marketing page, the official passport, a recycling datasheet — each tagged with a link type.

## Sources

- [GS1 Digital Link standard](https://www.gs1.org/standards/gs1-digital-link)

- [GS1 Digital Link: Resolver](https://www.gs1.org/standards/resolver)

- [ESPR — Regulation (EU) 2024/1781](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32024R1781)

**Try the live passport** above, then [start for free](https://app.qr3.app/sign-up) and resolve your own.

These are working demos with fictitious product data and example GTINs from GS1 prefix 952. They do not represent assigned product identifiers, a registry entry or a certification.

## Related posts

- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/dpp-json-ld-epcis/hero.png) Tutorials JSON-LD for Digital Product Passports (and where EPCIS 2.0 fits) A DPP is only useful to machines if it is machine-readable. This guide shows the real JSON-LD a qr3 passport exposes via the live resolver, how one URL serves both humans and machines through content negotiation, and where the complementary EPCIS 2.0 event standard fits.](/en/blog/dpp-json-ld-epcis/)
- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/gs1-resolver-test-suite-dpp-links/hero.png) Tutorials GS1 Resolver Test Suite: Reliably Test DPP Links Before Go-Live The stable GS1 test suite makes Resolver 1.2 testable. Verify redirects, linksets, CORS, languages, and error handling before go-live.](/en/blog/gs1-resolver-test-suite-dpp-links/)
- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/dpp-battery-passport-2027-20260715/hero.png) Industry News BatteryPass-Ready Launches Test Environment for the Digital Battery Passport The BatteryPass-Ready consortium launched a public test environment for the Digital Battery Passport on June 24, 2026 — ahead of the EU mandate taking effect in February 2027.](/en/blog/dpp-battery-passport-2027-20260715/)
- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/sector-20260713/hero.png) Industry News Digital Battery Passport 2027: What Manufacturers Need to Know Now Webinars, open-source tools, and new standards: the EU Battery Passport is gaining momentum. A July 2026 status overview and the open questions ahead of the February 2027 deadline.](/en/blog/sector-20260713/)

[← All articles](/en/blog/) [Start for free](https://app.qr3.app/sign-up)
