Identity Resolver
Please note that this specification is suitable for pre-production pilot implementations.
Artifacts
Linkset Schema
The UNTP linkset schema defines the structure of linkset responses returned by identity resolvers. It is aligned with and extends the GS1 resolver linkset schema which implements RFC 9264. A UNTP linkset that omits the UNTP extension properties (rel, method, encryptionMethod, accessRole) will also validate against the GS1 schema.
| Artifact | Link | See also |
|---|---|---|
| Linkset JSON Schema | LinksetSchema.json | GS1 linkset-schema |
| IDR API Specification (OpenAPI) | idr-api.json | |
| IDR API Documentation | idr-api.html |
Link Relations
The following link relation types are submitted to IANA for review, approval, and inclusion in the IANA Link Relations registry [RFC8288].
| Relation | Description | Reference | See also |
|---|---|---|---|
dpp | A link from a context URI that identifies a product to its digital product passport | IdentityResolver#lr-dpp | GS1 dpp |
dcc | A link from a context URI that identifies a product, manufacturer or facility to an applicable digital conformance credential | IdentityResolver#lr-dcc | |
dfr | A link from a context URI that identifies a facility to an applicable digital facility record | IdentityResolver#lr-dfr |
Overview
Supply chains rely on many types of identifiers for businesses, locations, and products of which each are governed by distinct schemas. These identifiers are essential for maintaining integrity and trust by enabling systems to trace, verify, and link data about physical or digital entities.
UNTP does not attempt to replace these existing identifier systems. Instead, it builds upon them by allowing high-integrity registries and sector-specific schemas to be reused while also supporting self-issued identifiers under the control of the entity itself.
To accommodate this variety, UNTP implementations work with two broad classes of identifiers
-
Registry-managed identifiers are issued or recognized by an authoritative register (e.g., national business registry, product catalogue, or sector-specific scheme). The register defines the rules for identifier issuance and for authorizing identifier usage and management. Implementations can therefore rely on the register as the authoritative source for discovery and verification.
-
Self-assigned identifiers created and controlled by the entity itself. In UNTP this is achieved with Decentralized Identifiers (DIDs), where the controller publishes the resolver information directly via DID Documents. The DID method specifies how identifiers are created, updated, and revoked. The DID Document exposes service endpoints that behave like link-sets and contains cryptographic material that supports proof of control.
| Characteristic | Registry-managed | Self-assigned identifiers |
|---|---|---|
| Issuance | Assigned by an authority or registry | Created and controlled by the entity |
| Governance | Central registry or scheme operator | Decentralized, method-specific rules |
| Discovery | Resolver templates from the registry | DID resolution via DID methods |
| Resolution | Scanner/system maps ID to resolver URL using scheme rules (registry templates, ISO/IEC 18975) | DID string is resolved per DID method, returns DID Document |
| Verification | Trust anchored in the registry (issuance + authorization rules) | Trust anchored in cryptographic keys inside the DID Document |
| Use cases | Leverages existing schemes, interoperability | Autonomy, no reliance on central registry |
The Identity Resolver (IDR) defines how both classes can participate in a consistent discovery and verification workflow.
Conceptual Model
Regardless of identifier class, the UNTP applies a shared workflow:
"Given an ID of a thing, I can find verifiable data about that thing."

This workflow is described in terms of Discover-Resolve-Verify (D-R-V)
- Registry-managed identifiers delegate resolution rules to the registry, which may be governed or audited by a third party.
- Self-issued identifiers (DIDs) embed resolution logic within the DID method and DID Document, giving the controller direct control but also the responsibility to ensure availability.
Implementors should select the approach that best fits their governance model, subject to existing identification schemas and identity resolver capabilities for their sector or geography.
To fulfill the D–R–V workflow, all identifiers in UNTP MUST support four essential features. Where an existing scheme lacks one or more, UNTP provides a framework to uplift it:
- Unique - no risk of collision across schemas. See Identifier Representation for identifier representation conventions.
- Discoverable — retrievable as structured data in documents, or machine-readable (barcode, QR, RFID). See the implementation guidance for Registry-Managed and Self-Issued identifiers.
- Resolvable — dereferencing an identifier to obtain structured data. See Resolution and Linksets for the shared resolution model.
- Verifiable — claims made by the identifier's controller can be distinguished from third-party statements. See Verification for verification processes.
Requirements
This section defines the formal requirement statements for Identity Resolver implementations.
- Scheme means an identifier scheme such as a national business identifier scheme.
- Carrier means a machine readable device such as a barcode, QR code, RAIN or NFC tag that encodes an identifier issued under a scheme.
- Link means a URL that points to a page or document or credential that contains further information related to the identifier.
- Target means the document or credential that the link references.
- link-set means a collection of links with meta-data that describe each link.
- Resolver means an implementation of this specification that returns a link-set about a given identifier.
| ID | Short name | Requirement | Solution Mapping |
|---|---|---|---|
| IDR-01 | Global uniqueness | All identifiers, whether for products, assets, facilities, or businesses used in UNTP credentials MUST be globally unique so that they can be unambiguously referenced and resolved. | Identifier Representation |
| IDR-02 | One carrier, many links | One data carrier on a physical product or asset MUST be able to reference any amount of linked data or documents so that user or system confusion from multiple carriers on products can be avoided | Linkset Format |
| IDR-03 | Leverage existing schemes | Existing identifier schemes MUST be usable for UNTP IDR functions so that existing investments can be leveraged and UNTP rollout can be accelerated because there is no need to re-tool existing identifier infrastructure. | This specification supports any identifier scheme. |
| IDR-04 | Leverage existing carriers | Existing data carriers, whether 1D barcodes on products or RFID tags on livestock are entrenched and unlikely to change quickly. Therefore identity resolvers MUST be able to work with existing carriers so that digitalisation can proceed at pace without the need to re-tool existing physical scanning infrastructure. | Data Carriers |
| IDR-05 | Seamless transition to 2D | As industry transitions from 1D barcodes to 2D/QR codes, the UNTP identity resolver process MUST work equally well with either so that implementers can transition at their own pace | Mapping Carriers to URIs - either create a resolver query from a 1D barcode / 2D matrix or embed the query into a QR. |
| IDR-06 | Understanding link-sets | When a link-set is returned by a resolver, each link MUST include sufficient meta-data so that user systems can understand the purpose and usage of each link as well as the relationship between links | Linkset Format |
| IDR-07 | Filtering link-sets | Resolvers MUST allow users to request specific links, all links, or (if unspecified) then receive a default link - so that user experience can be optimised. | IDR Query URL |
| IDR-08 | Responsive links | Resolvers SHOULD leverage available user information such as language preferences to return tailored link-sets and default links - so that user experience is optimised. | Defaults and Automatically returning the right language |
| IDR-09 | Logical grouping of links | Link-set meta-data SHOULD provide an ability to group related link targets such as a product passport and related traceability events - so that user experience can be optimised. | |
| IDR-10 | Versioning of link targets | When multiple version of link targets exist (eg multiple version of a product passport) then resolvers MUST include version information in link metadata and MUST ensure that any defaults reference the latest version - so that users receive current information and can audit historical data | Versioned targets |
| IDR-11 | Resolver redirection | Resolvers SHOULD, where available, include links that reference secondary resolvers so that product/facility owners can maintain additional document and credential links in their own resolvers. A typical example is the case where a global scheme maintains identifiers only at product class level but the manufacturer manages identifiers and related data at serialised item level. In such cases the primary resolver would say "here's what I know about the product and here's a link to another resolver that can tell you about the serialised item" | Secondary resolvers |
| IDR-12 | Self-issued product identifiers | This specification MUST support self-issued identifiers so long as they are equally discoverable, resolvable, and verifiable - so that each value chain actor is free to make their own choice between third party product registers and self-managed product registers without any lock-in. | DID Documents as Resolvers and DID Discovery |
| IDR-13 | Existing standards | This specification SHOULD use existing standards such as ISO/IEC 18975 and IETF RFC 9264 so that implementers can maximise re-use of existing infrastructure and maintain interoperability. | ISO/IEC 18975 is the basis for mapping an ID to a query. IETF RFC 9264 is the bases for the structure of the linkset response. |
| IDR-14 | Domain sovereignty awareness | Implementers MUST recognize that domain owners have complete authority over their URI space (IETF BCP 190). Clients MUST validate actual content after dereferencing and MUST NOT assume URL patterns guarantee specific services or content types. Resolver operators SHOULD declare services via /.well-known/resolver per ISO/IEC 18975. | Domain Sovereignty |
Identifier Representation
Linked data architectures, of which UNTP is an example, depend on unique and consistent identifiers of entities such as products and facilities so that they can be matched across different credentials. For this reason URIs are heavily used as identifiers of entities throughout UNTP credential types. But without consistency in the way globally unique identifiers are constructed, there is a high risk that valuable links are not made. For example, consider the same product identified in two credentials:
- A digital product passport issued by a manufacturer with a sustainability claim about product
http://product.sample-register.example/123456789 - A digital conformity credential with a third party sustainability assessment about product
urn:example:sample-register:product:123456789
Although these are the same product, the construction of the ID is different and so a validation that attempts to confirm that a product passport claim is genuinely supported by third party assessment may fail.
There are thousands of identifier schemes in active use around the world and only a few have well defined conventions for consistent representation of their identifiers as globally unique URIs. To address these challenges, in this section, we define conventions for the consistent representation of identifiers that can be leveraged by any existing or new identifier scheme, whether the identifiers are managed by an issuing authority or self-managed.
These conventions support the D-R-V workflow by ensuring identifiers can be consistently discovered, resolved, and verified across different schemes.
Uniform Resource Name (URN)
URNs are a type of URI that are designed to be used as globally unique and persistent identifiers that remain available long after a specific resource that they identify ceases to exist or becomes unavailable. URNs MAY be used for any identifier and SHOULD be used as persistent identifiers for long lived entities such as organisations, facilities and long-lived products.
In patterns below:
{identifier-scheme}is any string of characters permitted in URN Namespace Specific Scheme (alphanumeric characters, hyphen, period, underscore, colon).{identifier-value}is the string of characters after the last colon (limited to alphanumeric characters, hyphen, period, underscore).
For existing IANA registered URN namespaces
Use your IANA registered URN namespace.
- pattern:
urn:{ns}:{identifier-scheme}:{identifier-value}
For all other schemes
Either register your own scheme with IANA or use the UN global trust register gtr URN namespace (IANA registration pending).
- pattern:
urn:gtr:{identifier-scheme}:{identifier-value}wheregtrrepresents the UN global trust register namespace. - examples:
urn:gtr:register.business.gov.xx:90664869327- representing any typical national business registration numberurn:gtr:nlis.com.au:QDBH0132XBS01234- representing an Australian livestock identifier
The gtr namespace represents identifier schemes that are listed in the UN global trust register (GTR). When the gtr namespace is used, the {identifier-scheme} MUST be a DNS domain name comprising URN allowed or percent-encoded characters (i.e. no / unless encoded as %2F).
Uniform Resource Locator (URL)
URLs are a type of URI that represent addressable web locations. URLs as identifiers have the advantage that they are immediately resolvable but the disadvantage that they may become dead/broken links whenever a document is moved or a web site is restructured or a domain name changes.
IDR URLs as identifiers
When URLs are used as identifiers in UNTP credentials they SHOULD be Identity Resolver URLs that conform to the ISO/IEC 18975 structured path syntax without parameters.
- pattern:
https://{identifier-scheme}/{identifier-value}where{identifier-scheme}is a DNS domain name (without/characters unless%2Fencoded) and{identifier-value}is a valid ISO/IEC 18975 path (which can include/characters to separate class, sub-class, and instance id as defined in ISO-18975) - examples:
https://products.sample-company.example/1234567https://facilities-register.example/ABC123456https://example.com/01/733240226591https://example.com/01/733240226591/21/1234
When a given identifier scheme uses both URN and URL mechanisms to represent identifiers as URIs then the {identifier-scheme} part SHOULD be the same for both. If the identifier scheme is registered in the UN global trust register then the {identifier-scheme} MUST match the corresponding scheme ID in the trust register.
Universally Unique Identifier (UUID)
As an alternative to being issued by an issuing agency, identifiers can be algorithm-generated. The best-known example of this is the Universally-Unique Identifier (UUID). This relies on it being extremely unlikely, but not impossible, that the same identifier will be generated twice. For many practical applications, that can be "good enough" although there are some instances where duplicates have arisen (known as "collisions").
UUIDs as the complete identifier
When using a UUID as the identifier for an entity, the syntax would be
- pattern:
uuid:{UUID} - example:
uuid:709f3df6-4cdf-4bda-94d9-ce0ec9428616
Such identifiers have no scheme information which could be used for resolvability and verifiability. Therefore usage SHOULD be limited to cases where there is no need for discovery of further data.
UUIDs as the scheme specific identifier value
UUIDs can be useful as scheme specific identifiers, particularly when there is value in the identifier being un-guessable. For example as a means to limit visibility of item specific data to the genuine holder of the goods - as described in the UNTP Decentralised Access Control specification.
- pattern:
{uri-scheme}:{identifier-scheme}[:or/]{UUID} - examples:
urn:gtr:products.sample-register.example:709f3df6-4cdf-4bda-94d9-ce0ec9428616https://products.sample-register.example/709f3df6-4cdf-4bda-94d9-ce0ec9428616
Decentralised Identifiers (DID)
Decentralised Identifiers (DIDs) are a type of URI that are resolvable and verifiable by design. They are self-issued by any party and do not depend on any central register or issuing authority. The general structure of a DID is defined by the W3C Decentralised Identifiers recommendation.
DIDs are particularly suited for self-issued identifiers and provide a different approach to global uniqueness compared to URNs and URLs. They achieve uniqueness through cryptographic methods and decentralized resolution rather than centralized registry management.
Important: DIDs do not require any specific path structure or hierarchical organization. While examples in this specification may show organizational path components (such as :products: or :facilities:), these are purely illustrative. Organizations are free to structure their DIDs in any way that ensures global uniqueness and complies with their chosen DID method specification. Simple flat structures (e.g., did:web:example.com:ABCD1234) are equally valid as hierarchical structures (e.g., did:web:example.com:products:123456789).
For DID-specific resolution processes and implementation examples, see Implementation Guidance: Self-Issued Identifiers (DIDs).
Resolution and Linksets
Once an identifier has been normalized to a URI, the next step is resolution: dereferencing the URI to obtain structured data describing the identified entity and related resources. This section covers the shared resolution model that applies to both registry-managed and self-issued identifiers.
IDR Query URL
IDR queries are URLs that take the general form:
https://{domain}/{path}?{query} where
domainis the web domain of the resolver service, usually operated by the identifier scheme register (e.g.,resolver.sample-register.example)pathcarries the specific ID of the product or facility being queried and may include qualifiers (e.g.,products/ABCD9876/items/1234)querycontains a list of URL parameters that are used to filter the response (e.g.,linkType=dpp&language=ento override the HTTP client's Accept-Language header)
A typical IDR query might be:
https://resolver.sample-register.example/products/ABCD9876/items/1234?linkType=linkset
which is requesting:
- the complete link-set
- about a product class
ABCD9876 - issued using an identifier scheme supported by
sample-register.example - with specific serial number
1234
To get a different response, the query might be modified as follows:
https://resolver.sample-register.example/products/ABCD9876?linkType=linkset→ get data about the product class only, not a specific serialized itemhttps://resolver.sample-register.example/products/ABCD9876/items/1234?linkType=dpp→ get only the DPP for the itemhttps://resolver.sample-register.example/products/ABCD9876/items/1234?linkType=all&language=de→ get all links to German language targetshttps://resolver.sample-register.example/products/ABCD9876/items/1234→ get a redirect to the target of the default link
Linkset Format
The response to an IDR query is an IETF linkset which contains one or more contexts, each of which contain one or more targets.
- A context describes what the links are about using the
anchorproperty. Often there is only one anchor that represents the requested identifier. But as described in the resolver workflow, a resolver may return links about related entities. For example, a query about a specific serialized item may return some links about the item, and some links about the product class, and even some links about the manufacturer or brand that sells the product. - A target describes a specific link identified with the
hrefproperty together with other properties that provide useful meta-data about the link.
A typical response to the sample query https://resolver.sample-register.example/products/ABCD9876/items/1234?linkType=linkset might be as shown below:
- There are two contexts: one at serialized item level
"anchor": "https://resolver.sample-register.example/products/ABCD9876/items/1234"and one at product class level"anchor": "https://resolver.sample-register.example/products/ABCD9876" - The first context has two targets, both of which have a linkType
"dpp"(UNTP digital product passports) and MIME typeapplication/vc+jwtbut one is rendered in German and the other in English - The second context is at product level and has one target which points to the manufacturer's product information web page. This highlights that link resolvers can return all kinds of relevant links, only some of which point to UNTP credentials
{
"linkset": [
{
"anchor": "https://resolver.sample-register.example/products/ABCD9876/items/1234",
"dpp": [
{
"href": "https://sample-credential-store.example/credentials/dpp/90664869327.json",
"type": "application/vc+jwt",
"title": "Digital Product Passport",
"hreflang":["en"]
},
{
"href": "https://sample-credential-store.example/credentials/dpp/90664869311.json",
"title": "Digitaler Produktpass",
"hreflang":["de"],
"type": "application/vc+jwt"
}
]
},
{
"anchor": "https://resolver.sample-register.example/products/ABCD9876",
"pip": [
{
"href": "https://sample-company.example/productInformation/ABCD9876",
"type": "text/html",
"title": "Product Information"
}
]
}
]
}
Linksets MUST use IANA-registered link relation types, UNTP-defined link relation types, or link types that, as defined in RFC 8288, can be expressed as URLs; and IANA Media Types to describe the semantics and formats of linked resources.
Link type (e.g., dpp) and media type (e.g., application/vc+jwt) indicate the intended content. However, due to domain sovereignty principles, actual content can only be verified by dereferencing and validating.
Linkset Response Patterns
This section covers specific linkset use cases that SHOULD be supported by conforming link resolvers. The general approach to solving linkset specific needs is:
- Where possible, always use IETF linkset standard properties and IANA standard link types.
- Where necessary, use custom link types and linkset properties but always define them in a public vocabulary and reference them using a profile link type.
Defaults
Default link types allow a resolver to return just the target URL of the default link - which means that client applications (including just a camera on a mobile phone) need not have any knowledge of link resolvers and how they work.
Link resolver services SHOULD define DEFAULT link type for each anchor which defines the href target to which a client will be redirected when no linkType is specified in the matching query URL. In the previous IDR example, calling the resolver URL without a linkType parameter:
https://resolver.sample-register.example/products/ABCD9876/items/1234?linkType=linkset
Would redirect the client directly to the target href of the default link type:
https://sample-credential-store.example/credentials/dpp-90664869327.json
Automatically Returning The Right Language
HTTP headers often contain accept header properties that can be useful hints for link resolver behaviour. For example browsers will normally include a language accept header that matches the users configured preference. This can be used to return only those links that match the users language even if the IDR query string does not specify a preference. For example, consider an IDR that:
- defines a default link type as
dpp - maintains DPP links in a dozen languages
- and receives the following HTTP query URL
GET /products/123456789 HTTP/1.1
Host: resolver.sample-company.example
Accept-Language: de
Even though there are a dozen DPP links maintained by the IDR service, only one of them is in German and so the IDR can again redirect the client to the specific target URL of the German language DPP:
https://sample-credential-store.example/credentials/dpp-90664869311.json
Secondary Resolvers
There are some cases where an identifier scheme owner manages identifiers at a coarse granularity by issuing globally unique prefixes but allows the subject to manage more fine grained identifiers themselves. For example:
- A product register maintains product identifiers in a single global register but management of serialised items is left to the owner of the GTIN.
- IATA issues 3 character carrier identifiers but allows each carrier to add the 7 digit suffix for each cargo consignment to make a globally unique 11 digit consignment number.
- Australian government manages 8 alpha-numeric character farm identifications codes such as
QDBH0132and allows each farmer to add a unique suffix to identify each unique livestock animal born on the farm.
and many more examples exist.
The result is that a client may construct an IDR query to the genuine scheme operator's IDR service but that service may not hold information at the requested granularity. In such cases, a conformant IDR SHOULD return links relevant to the more coarse grained item and, if available, a link to a secondary resolver service (eg hosted by the serialised product manufacturer) that can return more fine grained information. For example the following query to a link resolver about a serialised item:
https://resolver.sample-register.example/products/ABCD9876/items/1234
May return a link to a secondary resolver that maintains data at serialised item level as well as a link to a DPP at product class level.
{
"linkset": [
{
"anchor": "https://resolver.sample-register.example/products/ABCD9876/items/1234",
"idr": [
{
"href": "https://resolver.sample-company.example/products/ABCD9876/items/1234",
"title": "Secondary Identity Resolver",
"hreflang":["en"],
"type": "application/linkset+json"
}
]
},
{
"anchor": "https://resolver.sample-register.example/products/ABCD9876",
"dpp": [
{
"href": "https://sample-credential-store.example/credentials/dpp/90664869327.json",
"title": "Digital Product Passport",
"hreflang":["en"],
"type": "application/vc+jwt"
}
]
}
]
}
Versioned Targets
In some cases, a publisher may wish to maintain multiple versions of a credential as available links in a linkset. The recommended method is to add the relevant IANA version link relation to the rel value array as shown in the example below. In this case there are two links for the same anchor, both include dpp as a link relation value but one also has the IANA link relation predecessor-version:
{
"linkset": [
{
"anchor": "https://resolver.sample-register.example/products/ABCD9876",
"dpp": [
{
"href": "https://sample-credential-store.example/credentials/dpp/90664869327.json",
"title": "Digital Product Passport",
"hreflang":["en"],
"type": "application/vc+jwt"
},
{
"href": "https://sample-credential-store.example/credentials/dpp/90664869111.json",
"rel":["predecessor-version"],
"title": "Digital Product Passport",
"hreflang":["en"],
"type": "application/vc+jwt"
}
]
}
]
}
Creating New Links
In some cases, an identity resolver service may wish to accept updates such as creation of new links from appropriately authorised users. For example, adding a maintenance event to a battery passport record after the battery has been sold into the market. An identity resolver SHOULD accommodate this possibility by including a link in the linkset for the given product that specifies how to POST an event to the resolver. In the example below, an anchor representing product https://resolver.sample-register.example/products/ABCD9876 has two links. The first is a simple link to a DPP describing the product. The second describes a method to create a new maintenance event.
- The standard IANA link relation
editindicates that the target resource is used to edit the link's context. - The custom link relation
dteindicates that the target expects a digital traceability event. - The custom property
methodindicates that the HTTP header requires a POST method and a secret key in the X-API-Key HTTP header property.
{
"linkset": [
{
"anchor": "https://resolver.sample-register.example/products/ABCD9876",
"dpp": [
{
"href": "https://sample-credential-store.example/credentials/dpp/90664869327.json",
"title": "Digital Product Passport",
"hreflang":["en"],
"type": "application/vc+jwt"
}],
"dte": [
{
"href": "https://sample-credential-store.example/credentials/dte",
"rel":["edit"],
"title": "Create Maintenance Event",
"method":["POST","X-API-Key"],
"type": "application/vc+jwt"
}
]
}
]
}
Secure Targets
In some cases the target of a link contains sensitive data that is not generally accessible to the public. In such cases, as described by the decentralised access control specification, the target of the link is encrypted and requires a decryption key or proof of authorised role to decrypt. The corresponding link in the resolver linkset SHOULD specify the encryption method and allowed list of access roles.
{
"linkset": [
{
"anchor": "https://resolver.sample-register.example/products/ABCD9876",
"dte": [
{
"href": "https://sample-credential-store.example/credentials/dpp/90664869327.json",
"title": "Product Traceability",
"encryptionMethod": "AES-128",
"accessRole":["untp:accessRole#Owner"],
"hreflang":["en"],
"type": "application/vc+jwt"
}
]
}
]
}
Resolver Workflow
The internal workflow of an identity resolver service is not defined by this specification. However, there are some common conditions that a link resolver service SHOULD manage consistently. For example
- When a query URL is not valid
- When there is no data for the requested entity ID.
- When there is no data for an item level ID but there are available links for product class level ID
- When a requested link type does not exist.
These cases are shown in the example resolver workflow diagram below.