How the RRF and RCAN
Work Together
Two independent standards designed to compose. Use either alone or both together for globally identifiable, cryptographically verifiable robot identity.
Two Different Things, Designed to Compose
The Registry
- → Assigns permanent RRNs
- → Any robot can register
- → No software required
- → Neutral, independent governance
The Protocol
- → Defines how robots identify, sign, and prove behavior
- → Any language or runtime
- → Ed25519 message signing
- → Hierarchical URIs (RURIs)
- → Current spec: v1.3
Used together: a robot becomes globally identifiable via its RRN and cryptographically verifiable via its RCAN keys. Anyone can look up the robot, resolve its RURI, and verify that its signed messages are authentic.
The Identifier Relationship
RRN-00000001 Opaque, permanent, registry-assigned. Stable across renames, re-deployments, ownership transfers.
rcan://rcan.dev/continuonai/opencastor-rpi5/bob Hierarchical, protocol-level address. Human-readable. Scoped to an organization and model.
A registered robot can associate its RURI with its RRN. The registry stores the mapping.
GET /api/v1/resolve?ruri=rcan://... Returns the RRN if the RURI is registered.
Ownership Proof Flow
The challenge/sign/verify handshake from RCAN §21. A robot proves it holds the private key for its RURI without transmitting that key.
POST /api/v1/challenge
{ "ruri": "rcan://rcan.dev/myorg/mybot/unit1" } { "nonce": "a3f8...", "expires_at": "2026-03-12T00:05:00Z" } # Same key used for RCAN message signing signature = ed25519_sign(private_key, nonce)
POST /api/v1/verify
{ "ruri": "...", "nonce": "...", "signature": "...", "public_key": "..." } { "status": "verified", "rrn": "RRN-00000005", "verified_at": "2026-03-12T00:00:42Z" } Using rcan-py
from rcan import RCANClient, MessageSigner signer = MessageSigner(private_key_path="~/.rcan/key.pem") client = RCANClient(ruri="rcan://rcan.dev/myorg/mybot/unit1") # Register with the Robot Registry Foundation result = client.registry_register( registry_url="https://robotregistryfoundation.org/api/v1", metadata={"name": "My Robot", "manufacturer": "MyOrg"} ) print(result.rrn) # "RRN-000XXXXX"
rcan-py handles the full challenge/verify handshake automatically
Choose Your Path
Without RCAN
Submit the form, get an RRN. No software to install, no keys to manage. Works for any robot — commercial, research, homebrew.
Verification tier: community — suitable for most use cases. The robot is registered and globally identifiable.
Register now →With RCAN
If your robot runs RCAN, prove ownership cryptographically and automatically upgrade to verified or manufacturer tier.
The registry stores your public key. Anyone can verify your robot's signed messages without contacting you directly.
Get RCAN →