> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://tieback.io/docs/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://tieback.io/docs/_mcp/server.

# Product Identifiers in tieback

> How tieback models SKU, GTIN, EAN, and UPC identifiers, including validation, active and retired status, audit history, and resolver interoperability.

This page explains how **tie*back*** models product identifiers for Digital Product Passport and resolver workflows. **tie*back*** supports SKU as the operational product key and standards-based identifiers such as GTIN (including EAN/UPC variants) for interoperability. Identifiers are validated, versioned, and used to resolve products consistently across markets.

## What It Does

**tie*back***

provides a governed identifier system for every product. Each product has an immutable system ID and
supports multiple mutable identifiers (SKU, GTIN, EAN, UPC) with full change history.

## Who It's For

Brand administrators managing product catalogues, supply chain teams scanning barcodes, and API integrators resolving product identifiers.

## How It Works

### Immutable Product ID

Every product receives a system-assigned UUID (`tieback Product ID`) at creation. This ID **never changes** and serves as the permanent system-of-record identifier. All other identifiers are mutable aliases that point to this UUID.

### Identifier Types

| Type     | Cached on Product | Notes                                         |
| -------- | ----------------- | --------------------------------------------- |
| **SKU**  | Yes               | Case-insensitive uniqueness per brand         |
| **GTIN** | Yes               | Digits-only normalisation (8/12/13/14 digits) |
| **EAN**  | No (alias only)   | Digits-only normalisation                     |
| **UPC**  | No (alias only)   | Digits-only normalisation                     |

### Active vs Retired

At any time, a product can have **one active identifier per type**. When an identifier is changed:

* The previous value is **retired** (marked inactive) with a timestamp.
* The new value becomes **active**.
* No data is ever deleted, and the full history is preserved.

This means old printed codes remain resolvable even after identifier changes. See [Resolver & GS1 Digital Link](/product-module/resolver-gs-1-digital-link) for details.

### Where to Edit

Identifiers are edited exclusively in **Product Detail** (Core Fields section). They cannot be changed via bulk edit, by design, because every change creates an auditable history entry.

### Identifier History

Product Detail displays a full history of all identifier changes, partitioned into:

* **SKU History**: every SKU value the product has used, with status and timestamps.
* **Barcode History**: every GTIN, EAN, and UPC value, with type, status, and timestamps.

History is ordered with active identifiers first, then most recently retired.

### Constraints

* **One active per type per product**: only one SKU, one GTIN, one EAN, and one UPC can be active at a time.
* **No concurrent reuse**: an active identifier value cannot be shared across products within the same brand and type.
* **Digits-only**: GTIN, EAN, and UPC values are normalised to digits only on all write paths.
* **Immutable type**: an identifier's type cannot change after creation.

## Limits & Notes

* Identifier edits are not available in bulk workflows; use Product Detail.
* Locked fields can protect identifiers from being overwritten during CSV imports.
* The identifier audit trail records who made each change and when.

## FAQ

#### What happens if I change a SKU or GTIN?

The old value is retired and the new value becomes active. Both are preserved in the identifier
history. Previously printed codes using the old value will still resolve via the public
resolver.

#### Can two products share the same GTIN?

No. Within a brand, only one product can have a given GTIN (or SKU, EAN, UPC) as its active
identifier at any time.

#### Are EAN and UPC stored differently to GTIN?

EAN and UPC are stored as alias-only identifiers (no cached column on the product record).
Functionally they behave the same: full history, active/retired status, and resolver support.

## Related Docs

* [Resolver & GS1 Digital Link](/product-module/resolver-gs-1-digital-link)
* [Products](/product-module/products)
* [API Credentials Guide](/api-reference/api-credentials-guide)
* [API: Identifiers](/api-reference/api-identifiers)