| Internet-Draft | LinkID URI | October 2026 |
| Nyffenegger | Expires 11 April 2027 | [Page] |
This document specifies the "linkid" URI scheme and a resolution model for persistent, location-independent identifiers. A LinkID consists of the scheme name followed by a UUID and identifies a resource independently of its current network location. Resolution maps the LinkID to a current actionable URI using one or more resolvers. Resource names, locations, versions and operator relationships are associated data, not part of the identifier. The document defines syntax, comparison, resolution semantics and an HTTPS binding, and requests an update of the existing IANA URI scheme registration.¶
This note is to be removed before publishing as an RFC.¶
This is an individual submission. Discussion takes place on the DISPATCH mailing list (dispatch@ietf.org). Source and issue tracking: https://github.com/Link-Genetic-Inc/lid.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 11 April 2027.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
Hyperlinks commonly couple resource identity to a current network location. When domains, paths, repositories, content-management systems or hosting infrastructure change, references fail even though the referenced resource may still exist.¶
LinkID separates persistent identity from mutable location. The core invariant is: identity is persistent, location is mutable, and resolution is the controlled mapping between the two.¶
Persistence is not a purely technical property. HTTP(S) URIs can be highly persistent when managed responsibly, and any persistent identifier system can fail if the organization behind it disappears. This document therefore does not claim that indirection alone guarantees persistence. It aims to ensure that a LinkID and its authorized mapping survive changes of custody and hosting, by separating identifier syntax from resolver operation.¶
LinkID does not replace HTTP(S) or existing persistent identifier systems; see Section 8.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
The syntax is specified using ABNF [RFC5234]; HEXDIG is imported from that specification. The UUID text representation is defined by [RFC9562].¶
linkid-URI = "linkid:" uuid
uuid = 8HEXDIG "-" 4HEXDIG "-" 4HEXDIG "-"
4HEXDIG "-" 12HEXDIG
¶
A LinkID URI has no authority, namespace, path, query or fragment component. Whitespace, percent-encoded characters, braces and suffixes are not permitted.¶
The scheme name is case-insensitive [RFC3986], and UUID hexadecimal text is case-insensitive [RFC9562]. Producers MUST emit the complete URI in lowercase. Consumers MUST accept either case. Two LinkIDs are equivalent if and only if their UUID values are equal. Lowercasing a conforming LinkID yields its canonical form. Canonicalization MUST NOT turn a non-conforming string into a LinkID by discarding characters.¶
Matching the grammar does not establish that the UUID was allocated, that a resource exists, or who controls it.¶
The UUID is opaque. Clients MUST NOT infer a resource type, name, location, owner or resolver from it.¶
linkid:00c538ea-846b-47a6-a3d4-70a9ebd29d7c¶
An associated target could be https://example.org/handbook/2026/section-3; after an authorized migration, https://example.org/manual/section-3. The LinkID remains unchanged. Independently identified resources, such as a document, a passage of it, or an image, each have their own UUID. Names are metadata, not identifier suffixes. Query parameters or fragments needed by a target belong to the target URI.¶
A LinkID identifies a resource; it does not encode the resource's network location. Once assigned, a LinkID MUST NOT be reassigned to an unrelated resource. The actionable URI associated with a LinkID MAY change without changing the LinkID.¶
One LinkID has one persistent identity. Multiple target addresses, historical addresses, language or format variants, and authorized fallback addresses can be associated with it without creating alternative identifier forms. Changing an address or transferring stewardship does not create a new identity; a resource version that is identified separately receives its own UUID.¶
A resolver MUST NOT select an unrelated resource merely because it is reachable. Automatic recovery does not override the authority governing the original mapping.¶
Successful resolution establishes the currently authorized mapping. It does not establish that destination content is safe, correct, trustworthy or unchanged.¶
A client resolves a LinkID by validating it against Section 3, selecting a resolver, requesting the resolution result, validating that result, applying local policy, and returning or navigating to the actionable URI.¶
A LinkID MUST NOT depend semantically on a single resolver operator: the meaning of a LinkID does not change when the resolver that serves it changes.¶
Clients use trusted resolvers designated by local, enterprise or application configuration. The UUID does not indicate an operator or resolver. Implementations MAY ship with default resolvers but MUST allow users or administrators to configure alternatives.¶
A change of resolver MUST NOT change an assigned UUID or authorize a new mapping. Use of an alternative resolver does not prove that it holds an authoritative record for a LinkID. Interoperable discovery of the authoritative resolver for a given LinkID is not defined in this revision; see Appendix B.¶
A resolution result conveys at least the LinkID, its lifecycle status (Section 6) and, where applicable, the actionable URI. A client MUST verify that the returned identifier matches the requested UUID before using a target. A client MUST NOT treat a mapping as active merely because a response was successful or a target is present; it MUST check the status and local policy before navigation. Unrecognized members MUST be ignored and MUST NOT grant authority.¶
A resolver exposes a resolution endpoint identified by a URI Template [RFC6570] using the "https" scheme and containing the variable "identifier", for example:¶
https://resolver.example/resolve/{identifier}
¶
The client expands the template with the complete LinkID and issues an HTTP GET request [RFC9110] with "Accept: application/json". On success the resolver returns 200 (OK) and a JSON object [RFC8259] with the following members:¶
{
"id": "linkid:00c538ea-846b-47a6-a3d4-70a9ebd29d7c",
"status": "active",
"target_url": "https://example.org/resource"
}
¶
Unsuccessful responses are JSON objects with an "error" member that names the reason. Resolvers SHOULD use the following status codes and error values:¶
| HTTP status | error | Condition |
|---|---|---|
| 400 | invalid_identifier | Input does not conform to Section 3. |
| 403 | policy_denied | policy-denied |
| 404 | not_found | unknown |
| 404 | no_target | Known LinkID without an authorized or reachable target (inactive) |
| 410 | gone | revoked or tombstoned |
| 503 | temporarily_unavailable | temporarily-unavailable |
Resolvers MAY use more specific error values and other 4xx status codes. Clients MUST treat only 404 with "not_found" as the unknown condition; any other error for a known LinkID MUST NOT be interpreted as unknown and MUST NOT lead to navigation.¶
Clients MUST NOT interpret an HTML page, a transport failure or an intermediary error as a resolution result. A server error is not evidence that a LinkID is unknown.¶
Resolvers MAY offer separate interactive endpoints that redirect browsers to an actionable URI. LinkID resolution MUST NOT be defined solely as an HTTP redirect service, and an HTTPS resolver URI MUST NOT be treated as the LinkID itself.¶
Public resolvers MUST use HTTPS with validation of the server identity. This does not imply that public lookup requires user authentication.¶
Resolvers SHOULD distinguish the following conditions where applicable.¶
| State | Meaning | Navigation |
|---|---|---|
| active | Current mapping is valid. | Use an authorized target. |
| unknown | No record for the LinkID. | Do not guess a target. |
| inactive | Assigned, no current location. | None. |
| deprecated | Identity superseded. | Only an explicitly authorized mapping. |
| revoked | Withdrawn by the identifier authority. | None. |
| tombstoned | Resource no longer exists; identity preserved. | No replacement assumed. |
| temporarily-unavailable | Resolution currently not possible. | Do not infer unknown. |
| policy-denied | Refused by policy. | Do not bypass policy. |
| integrity-failure | Record failed validation. | Do not use the record. |
An unknown LinkID MUST NOT be redirected to unrelated content. A revoked or tombstoned LinkID MUST NOT be reassigned.¶
New LinkIDs MUST use UUID version 4 as defined in Section 5.4 of [RFC9562], with the random bits generated by a cryptographically secure random source. Random generation allows allocation by independent parties without coordination. Implementations MUST NOT knowingly allocate an assigned UUID to an unrelated resource; a detected collision MUST NOT overwrite the existing identity. Previously assigned identifiers MUST NOT be renumbered to satisfy this rule.¶
Registration agencies, enterprises and resolver operators can have separate responsibilities and allocation policies. These are administrative relationships associated with records, not subdivisions of the identifier.¶
A transfer of stewardship or hosting MUST NOT change an assigned UUID. It requires authorization and preservation of mapping provenance; changing a resolver address alone does not transfer control. Where continuity cannot be established, resolution fails safely rather than granting an unrelated operator authority. A service interruption does not prove that the resource has ceased to exist.¶
DOI, ARK, URN and Handle identifiers retain their own syntax and governance. An association with them is held in metadata or targets, not embedded in the LinkID.¶
Accreditation of resolver operators, service levels and dispute resolution are outside the scope of this document.¶
The string "LinkId" is used in existing specifications independently of this scheme. For example, [MS-ASDOC] defines a "LinkId" XML element that carries a document link, such as a UNC file path. Such uses are unrelated to the "linkid" URI scheme.¶
A LinkID is recognized by the scheme component (Section 3.1 of [RFC3986]) and validated against Section 3. The string "LinkId" in any non-scheme position does not constitute a LinkID and MUST NOT be interpreted as one.¶
Because scheme names are case-insensitive, a field label followed by a value (for example "LinkId: 4711") can be mistaken for a linkid URI by a generic parser. Therefore:¶
Documentation and user interfaces SHOULD refer to "LinkID URIs" or "linkid: URIs".¶
A conforming client needs a URI validator, resolver configuration, an HTTPS client and a JSON parser. A conforming resolver needs authorized records and the binding in Section 5.3. Neither requires a particular operator's hostname, SDK or software. Technical compatibility does not confer authority over existing LinkIDs.¶
Use cases include Web and domain migration; long-lived documents (PDF, office formats) with embedded references; enterprise knowledge systems; government, legal and public-record references; scientific publications and datasets; archives and custody transfer; machine-to-machine references; and tombstoning of resources that no longer exist.¶
Resolution results MAY be cached according to HTTP caching [RFC9111]. Cached results MUST NOT be treated as authoritative after their freshness lifetime. HTTP freshness is not an assertion about identifier lifetime or destination health.¶
Clients and resolvers MUST detect and bound resolution and redirect loops. Failures MUST fail safely: a client MUST NOT guess a destination for an unknown LinkID.¶
LinkID resolution introduces an indirection layer. Unauthorized modification of a mapping redirects every reference using the affected LinkID. Interfaces for updating records MUST be strongly authenticated and access controlled, and changes SHOULD be auditable.¶
Public resolvers MUST protect against resolver impersonation, mapping hijacking, open redirects, phishing, malicious destination schemes, denial of service, replay of stale records, identifier enumeration and resolution loops. Clients SHOULD restrict the schemes of actionable URIs they follow (for example to "https").¶
Resolvers that fetch or inspect destinations MUST defend against server-side request forgery, including requests to loopback, link-local, cloud metadata and internal addresses, and MUST account for redirects and DNS rebinding.¶
Misconfigured or compromised resolver configuration can misdirect lookups even though the LinkID is unchanged. Discovering an endpoint or a public key does not establish authority over an identifier. High-assurance deployments SHOULD protect the integrity of resolution results cryptographically; a common format is an open issue (Appendix B).¶
Resolution requests reveal interest in particular resources. Resolver operators SHOULD minimize collection and retention of personal data and SHOULD publish their logging and retention policies. Public resolution SHOULD NOT require user authentication unless required by the resource or applicable policy.¶
A LinkID contains no credentials or resource names, but can become a correlatable reference when linked to personal information. Operators SHOULD NOT place secrets in public metadata or unnecessarily forward client information to targets.¶
The "linkid" URI scheme is registered in the "Uniform Resource Identifier (URI) Schemes" registry with Provisional status. This document requests that IANA update the registration as follows, in accordance with [RFC7595]. The syntax below narrows the previously registered syntax to the UUID form.¶
No other IANA action is requested.¶
This section is to be removed before publishing as an RFC.¶
This section records the status of known implementations at the time of posting, following [RFC7942]. The description is provided for the information of reviewers; inclusion does not imply endorsement by the IETF.¶
Coverage and maturity:¶
The author seeks community input on:¶
This section is to be removed before publishing as an RFC.¶
The author thanks Ted Hardie for the URI review, and the participants in the uri-review and DISPATCH discussions and in the W3C TPAC 2025 breakout session for their feedback.¶