Discover
Machine-readable auth metadata (this page is the prose mirror):- Authorization-server metadata (RFC 8414): /.well-known/oauth-authorization-server — carries the
agent_authextension block:register_uri,claim_uri,verification_uri,revocation_uri,key_register_uri, andidentity_types_supported. - Protected-resource metadata (RFC 9728): /.well-known/oauth-protected-resource
- Full manifest (scope catalog, endpoints, rate limits): /.well-known/ai-agent.json
- A2A agent card: /.well-known/agent-card.json
API 401s do not yet carry a
WWW-Authenticate: Bearer resource_metadata="..." hint — start from this page or the well-known documents above rather than probing for the header.Pick a method
identity_types_supported is ["anonymous"]: the agent holds no prior identity of its own; a signed-in human authorizes it. Identity chaining via identity_assertion (e.g. id-jag / urn:ietf:params:oauth:token-type:id-jag) is NOT offered. The credential issued is an api_key-style bearer token.
Two registration paths:
- Device-code flow (RFC 8628, agent-driven — recommended). No human credentials ever reach the agent. Steps in Register + Claim below.
- Browser mint (human-driven). The human signs in at /floor10/agent-console, picks scopes, clicks Mint, and pastes the plaintext token into the agent’s environment.
Register
Theagent_auth.register_uri is https://www.immersivecommons.com/api/agent/signup/start.
POST https://www.immersivecommons.com/api/agent/signup/startBody:{ "scopes": ["read:public", "membership:read"], "client_name": "Your Agent" }Returns:{ device_code, user_code, verify_url, verify_url_complete, expires_in, interval }.scopesis REQUIRED and non-empty; pick the narrowest set for your workflow.- Show the human
verify_url_complete(orverify_urlplus theuser_code). They approve at /signup-with-agent while signed in.
Claim
Theagent_auth.claim_uri is https://www.immersivecommons.com/api/agent/signup/poll.
- Poll
GET https://www.immersivecommons.com/api/agent/signup/poll?device_code=<device_code>everyintervalseconds. Returns{ "status": "pending" }until approval, then ONCE{ "status": "completed", agent_token, tier, granted_scopes, next_steps }. Storeagent_tokenimmediately — it is delivered exactly once; subsequent polls return410.
Use the credential
Beareragt_<base64url-32bytes>, sent as Authorization: Bearer agt_.... The server stores only a SHA-256 of the token; the plaintext is shown once at mint time and is individually revocable.
Connect it to any of the three equivalent surfaces:
- MCP (Streamable HTTP):
https://www.immersivecommons.com/api/mcp. Add the URL to your client, pasteagt_...in the Authorization header. - A2A (JSON-RPC 2.0):
https://www.immersivecommons.com/api/a2a - REST: per-endpoint docs in llms.txt and /.well-known/ai-agent.json
/.well-known/ai-agent.json (auth.schemes[0].scopes). Starter sets:
- Read only:
read:public,membership:read - Events and RSVP: add
events:read_upcoming,events:rsvp - Submit a highlight: add
events:submit_recap,directory:search
Scopes cannot be added to an existing token — call the
ic_capabilities MCP tool to learn what a NEW token needs, then re-register.Optional: signed requests (RFC 9421)
Upgrade a bearer token to bearer plus Ed25519 signature so a leaked bearer alone is useless. Bind a public key (Clerk session required, so a leaked bearer cannot bind its own key):- Register:
POST https://www.immersivecommons.com/api/agent/keys/register - Revoke:
POST https://www.immersivecommons.com/api/agent/keys/revoke - Enforce toggle:
POST https://www.immersivecommons.com/api/agent/keys/enforce-toggle
/.well-known/ai-agent.json (signed_requests block).
Errors
400 { "error": "missing_scopes" }— registration POST without a non-emptyscopesarray; the response includes a usable example body.- Over-scoped registration fails cleanly with structured
denied_scopes(requested scopes above the human’s tier). 401/403— missing, malformed, unknown, or revoked bearer (noWWW-Authenticatechallenge yet; see Discover).410— device code already consumed or expired; restart at Register.429— per-token daily write limits; back off until the next UTC day.
https://www.immersivecommons.com/api/agent/feedback (kinds: broken_url, schema_mismatch, stale_doc, endpoint_404, other). Out-of-band: admin@immersivecommons.com.
Revocation
- Self-revoke (agent-driven):
POST https://www.immersivecommons.com/api/agent/token/revokewith the bearer to revoke — a token can kill only ITSELF (no Clerk session needed; cross-token revoke is deliberately not possible from a token). Returns200 { ok: true, revoked: true, prefix }. Idempotent. - Console revoke (human-driven): the advertised
agent_auth.revocation_uri— /floor10/agent-console — where the signed-in human can revoke ANY of their tokens. - Key rotation:
POST https://www.immersivecommons.com/api/agent/keys/revokeclears an Ed25519 binding (then re-register a fresh key).