2026-06-17 · 6 min read · All articles

One Passport, Many Sizes: How dpp.gs Handles Textile GTIN Variants

A single T-shirt design sold in 5 sizes and 3 colours is 15 different GTINs — but it is one product. The fibre composition, the care instructions, the country of origin, the recycled content and the microfibre data are identical across all 15. The ESPR textile passport (delegated act expected 2027) will force every apparel brand to confront this tension. dpp.gs resolves it with a model / variant model.

The GS1 rule, in one line: if two items differ in any characteristic a consumer chooses between — size, colour, flavour — they must carry different GTINs. So variants are not optional; they are mandated by the identifier standard. The question is not "can I use one GTIN for all sizes" (you cannot), but "do I have to duplicate the whole passport 15 times" (you should not).

Why the obvious shortcuts break

Brands typically try one of two things, and both fail:

The model / variant approach

dpp.gs separates the model (the design — where the shared sustainability data lives) from its variants (the saleable SKUs, each with its own GTIN plus its size, colour and optional SKU code). You fill in the passport once, on the model, then register the variant GTINs under it.

ModelVariant
ExampleEcoWear Organic T-ShirtSize M · Navy
GTIN0852…0032 (the design)0852…0117 (this exact SKU)
CarriesFibre composition, care, origin, recycled %, microfibre, documentsJust its size, colour, SKU — and a pointer to the model
You editOnceNever (it inherits everything)

What happens when someone scans a variant

This is where it pays off. A shopper scans the QR on the size M, navy hangtag — a variant GTIN. dpp.gs:

  1. recognises the GTIN as a registered variant,
  2. resolves it to its model passport and renders the full sustainability data,
  3. shows a clear banner — "Variant: M · Navy" — in any of the 28 viewer languages, with a link to the product model,
  4. and keeps the scanned variant's own GTIN on the passport, so the record reflects the exact item in the customer's hand.

One passport to maintain; every SKU resolves correctly.

Machine-readable too (JSON-LD)

The grouping is not just a visual nicety — it is expressed in the passport's JSON-LD data so other systems understand it. A variant's linked-data record carries isVariantOf pointing at the model, plus size and color; the model carries a hasVariant list of every SKU it covers. A recycler's or retailer's system can therefore walk from any single barcode to the whole product family, and back, without guessing.

Why textiles especially: apparel is the variant-heavy category by nature — size grids, colourways, seasonal drops — and it is next in the ESPR queue after batteries. Getting variant handling right now means a fashion brand can publish a 200-SKU collection as a few dozen model passports instead of 200 hand-maintained records.

How you set it up

In the dashboard, open the product that represents your design and use the Product variants section: add each variant's GTIN with its size, colour and optional SKU. That is the whole workflow. The variant GTINs immediately resolve to the model passport, generate their own QR / GS1 DataMatrix codes, and appear in the passport's machine-readable data. The same applies via the API: POST /api/v1/products/{GTIN}/variants.

Publish your collection the smart way

One passport per design, every size and colour resolving correctly. Free for your first 2 GTINs.

Start free →

Related reading: How dpp.gs aligns with the EU DPP standards · A passport for every product category · GS1 Digital Link explained