> 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.

# Resolver Domain Flow

> How tieback resolves Digital Product Passport scan requests across platform subdomains and custom hostnames, from QR scan through redirect to passport.

When a consumer scans a QR code on a product, the tieback Identity Resolver processes the request and redirects to the correct Digital Product Passport.

## What Happens on Scan

### What the Consumer Sees

1. **Consumer scans** a QR code printed on the product
2. The QR code encodes a URL such as `https://mybrand.tieback.io/01/5060999100032`
3. The scan URL is matched to the product identity it encodes, including any lot or serial
4. The consumer is taken to the public passport page for that product (e.g., `/p/<product-id>`)
5. The passport renders on the same domain the consumer scanned, with no app or account required

### Custom Hostname Flow

If the brand uses a custom hostname:

1. **Consumer scans** a QR code with URL `https://passport.mybrand.com/01/5060999100032`
2. DNS resolves the custom hostname via CNAME to `mybrand.tieback.io`
3. The **original hostname** (`passport.mybrand.com`) is preserved throughout
4. The consumer is taken to `https://passport.mybrand.com/p/<product-id>`
5. The passport renders on the brand's custom domain

## Two-Step Public Flow

tieback uses a deliberate two-step flow for scan resolution:

| Step                 | URL Pattern              | Purpose                                                 |
| -------------------- | ------------------------ | ------------------------------------------------------- |
| **1. Scan URL**      | `/01/<GTIN>/21/<serial>` | Standards-compatible entry point (GS1 Digital Link)     |
| **2. Passport Page** | `/p/<product-id>`        | Clean rendering destination for the passport experience |

This separation ensures that:

* QR codes remain **GS1-compatible** for long-term interoperability
* The passport page uses a **clean, stable URL** optimised for rendering
* The redirect is **transparent to the consumer**: it happens instantly

For more details, see [Resolver & Passport Rendering](/domains-custom-hostnames/resolver-passport-rendering).

## Supported Resolver Paths

### GS1 Digital Link

```
/01/<GTIN>
/01/<GTIN>/10/<lot>
/01/<GTIN>/21/<serial>
/01/<GTIN>/10/<lot>/21/<serial>
```

**Examples:**

```
https://mybrand.tieback.io/01/5060999100032
https://mybrand.tieback.io/01/5060999100032/10/BATCH2024A
https://mybrand.tieback.io/01/5060999100032/21/SN00001
```

### Fallback Identifiers

```
/mu/<mint-unit-id>
/mb/<mint-batch-id>
/ml/<mint-lot-id>
```

These paths resolve individual minted units, batches, or lots directly by their tieback identifier.

## Response Behaviour

### Successful Resolution

* **Status:** `302 Found`
* **Location:** The public passport page URL (e.g., `/p/<product-id>`)
* **Cache-Control:** Determined by the resolver (typically `public, max-age=3600` or `no-store`)

### Not Found

* **Status:** `404 Not Found`
* Returned when the GTIN, serial, or identifier cannot be matched to a known product

### Bot Detection

Social media bots (WhatsApp, Slack, Twitter, Discord, Facebook, LinkedIn, Telegram, Google) receive an HTML response with Open Graph meta tags instead of a redirect. This ensures proper link unfurling when passport links are shared.

## Query Parameters

Any query parameters appended to the scan URL are preserved and forwarded to the destination passport URL. This supports analytics tracking, campaign attribution, and other use cases.

```
https://mybrand.tieback.io/01/5060999100032?utm_source=packaging
→ redirects to passport URL with ?utm_source=packaging appended
```

## Related Docs

* [Domain Architecture](/domains-custom-hostnames/domain-architecture)
* [Resolver and Passport Rendering](/domains-custom-hostnames/resolver-passport-rendering)
* [Resolver and GS1 Digital Link](/product-module/resolver-gs-1-digital-link)
* [DNS Setup Guide](/domains-custom-hostnames/dns-setup-guide)