Resolver Conformance (myum.net)
This page defines the minimum conformance for a UMID resolver at:
myum.net/{UMID}
The standards/spec/docs site is separate:
universalmanifest.net
This page is written to be implementation-grade: adopters should be able to implement a conforming resolver using only what is published here.
Resolver conformance levels
Section titled “Resolver conformance levels”To claim “resolver conformance”, an implementation MUST satisfy the requirements below.
Required endpoints
Section titled “Required endpoints”1) Health
Section titled “1) Health”GET /health
MUST:
- return
200 - include
Cache-Control: no-store
2) Well-known descriptor
Section titled “2) Well-known descriptor”GET /.well-known/myum-resolver.json
MUST:
- return
200 - include
Cache-Control: no-store - describe how UMIDs are encoded in the path (including the
b64u:escape hatch if supported)
Resolve contract
Section titled “Resolve contract”GET /{UMID_PATH}
MUST support:
GETandHEAD(read-only)OPTIONS(for CORS preflight)
MUST return one of:
200with a manifest payload (JSON or JSON-LD), or307redirect to a canonical URL, or404unknown UMID, or410revoked UMID (if revocation policy is supported)
UMID parsing
Section titled “UMID parsing”If your UMIDs might include / (e.g., DID URLs or HTTPS URLs), you MUST provide a forward-compatible escape hatch.
Recommended rule:
- If the first path segment starts with
b64u:, decode the remainder as base64url UTF‑8 UMID bytes. - Otherwise treat the segment as a URL-decoded UMID.
Required headers (for 200 and 307)
Section titled “Required headers (for 200 and 307)”For successful resolutions (200 and 307), the resolver MUST include:
Access-Control-Allow-Origin(for browser tooling)Cache-Control(short cache recommended; see below)X-UM-Resolver-Contract(a string version so adopters can reason about changes)
If returning a payload (200), the resolver SHOULD include:
ETag(so clients can revalidate viaIf-None-Match)
If redirecting (307), the resolver MUST include:
Location
Caching requirements
Section titled “Caching requirements”Resolvers SHOULD default to conservative HTTP caching (short TTL).
Important:
- Consumers MUST enforce the manifest TTL (
expiresAt) for “use”, regardless of HTTP caching.
Error semantics
Section titled “Error semantics”Errors MUST be deterministic and machine-parseable.
Recommended shape:
{ "error": "not_found", "umid": "..." }What is out of scope here
Section titled “What is out of scope here”This conformance page does not require:
- write APIs (PUT/POST) for resolver storage
- DID key resolution (verification material may be out-of-band)
- private/authenticated resolution (access control is a separate profile)