CIFR

The Identifier

RAI Resolution

How RAIs resolve to descriptors via HTTP content negotiation — the protocol that makes identifiers actionable.

Overview

RAI resolution is the process of turning an identifier into actionable metadata. The resolver at rai.cifr.org.in accepts an RAI in the URL path and returns either a JSON descriptor or an HTML landing page, depending on what the client asks for.

This is the same content-negotiation pattern used by DOI (via doi.org) and by W3C standards (via their namespace URIs).

Resolution URL

https://rai.cifr.org.in/{prefix}/{suffix}

For example:

https://rai.cifr.org.in/18.cifr/2016.chanda.resiliency-pds

Content negotiation

The resolver inspects the Accept header to decide the response format:

Accept header Response
application/json RAI Descriptor (JSON)
text/html Human-readable landing page
Both present JSON takes precedence
No Accept header JSON (default)

JSON resolution

curl -H "Accept: application/json" \
  https://rai.cifr.org.in/18.cifr/2016.chanda.resiliency-pds

Returns the full RAI Descriptor:

{
  "rai": "18.cifr/2016.chanda.resiliency-pds",
  "schema_version": "0.1",
  "identity": {
    "name": "resiliency-pds",
    "version": "2.0.0",
    "version_history": ["2.0.0", "1.0.0"],
    "created_at": "2026-04-10T..."
  },
  "agent": {
    "description": "Composite resiliency of a power distribution system...",
    "inputs": [{"name": "topology", "format": "application/json"}],
    "outputs": [{"name": "resiliency_index", "format": "application/json"}]
  },
  "paper": {
    "title": "Defining and Enabling Resiliency of Electric Distribution Systems...",
    "doi": "10.1109/TSG.2016.2561303",
    "year": 2016
  },
  "trust": {
    "tier": "silver",
    "image_digest": "sha256:abc123..."
  },
  "resolution": {
    "self": "https://rai.cifr.org.in/18.cifr/2016.chanda.resiliency-pds",
    "invoke": "https://api.cifr.org.in/api/agents/.../invoke",
    "landing_page": "https://cifr.org.in/agents/..."
  },
  "status": {
    "visibility": "public",
    "deprecated": false
  }
}

HTML resolution

curl -H "Accept: text/html" \
  https://rai.cifr.org.in/18.cifr/2016.chanda.resiliency-pds

Returns a self-contained HTML landing page showing the agent's identity, paper metadata, trust tier, interface contract, and action links.

Version pinning

Without a version parameter, the resolver returns the latest registered version (highest semver):

https://rai.cifr.org.in/18.cifr/2016.chanda.resiliency-pds
→ returns version 2.0.0 (latest)

With ?version=X.Y.Z, it returns that exact version:

https://rai.cifr.org.in/18.cifr/2016.chanda.resiliency-pds?version=1.0.0
→ returns version 1.0.0

This enables both "follow the latest" (for live composition) and "pin to a specific version" (for reproducibility).

Response codes

Code Meaning
200 OK Identifier resolved. Body contains descriptor or HTML.
302 Found Redirect to canonical URL (e.g., legacy format → v2).
404 Not Found No agent registered for this RAI, or version not found.
410 Gone Agent was removed (abuse, DMCA). May include metadata with removal reason.

Response headers

Every resolution response includes:

Header Example Purpose
X-RAI-Schema-Version 0.1 Descriptor schema version
X-RAI-Agent-Version 2.0.0 Agent version returned
Link <https://rai.cifr.org.in/18.cifr/...>; rel="canonical" Canonical URL

Legacy format support

The older RAI-YYYY-author-slug format is still accepted. Legacy URLs are 302-redirected to their canonical v2 equivalents:

GET /RAI-2016-chanda-resiliency-pds
→ 302 Location: /18.cifr/2016.chanda.resiliency-pds

Resolver metadata

curl https://rai.cifr.org.in/.well-known/rai
{
  "schema_version": "0.1",
  "resolver": "cifr-rai-resolver",
  "supported_prefixes": ["18.cifr"]
}

The /.well-known/rai endpoint lets automated systems discover which prefixes a resolver handles. This is the foundation for federation — multiple resolvers, each handling their own prefixes.