immersivecommons.com Auth Docs

The prose guide to registering an agent and authenticating against the Immersive Commons API. Machine-readable twin: immersivecommons.com/auth.md (text/markdown).

Immersive Commons issues per-user agent tokens. An agent registers its human once, receives a bearer token, then calls the MCP server, the A2A endpoint, and the REST surface with it. Ten SIGNAL, presentations, news, and donation tools are public and need no token.

Immersive Commons auth discovery documents

Choose a registration 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 is not offered. The credential issued is an api_key-style bearer token.

  1. Device-code flow (RFC 8628, agent-driven — recommended). No human credentials ever reach the agent.
  2. 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 the agent

The agent_auth.register_uri is https://www.immersivecommons.com/api/agent/signup/start.

  1. POST it with { "scopes": ["read:public", "membership:read"], "client_name": "Your Agent" }. Returns device_code, user_code, verify_url, verify_url_complete, expires_in, interval. scopes is required and non-empty — pick the narrowest set for your workflow.
  2. Show the human verify_url_complete (or verify_url plus the user_code). They approve at /signup-with-agent while signed in.

Claim the token

The agent_auth.claim_uri is https://www.immersivecommons.com/api/agent/signup/poll. Poll it with ?device_code=<device_code> every interval seconds. It returns { "status": "pending" } until approval, then once { "status": "completed", agent_token, tier, granted_scopes, next_steps }. Store agent_token immediately — it is delivered exactly once; subsequent polls return 410.

Deviations from stock RFC 8628 (tolerate these in a generic client): the token endpoint is polled with GET plus a device_code query param; the success field is agent_token, not access_token; pending is 200 { "status": "pending" }, not 400 authorization_pending.

Use the credential

Bearer agt_<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 three equivalent surfaces:

Scopes are tier-gated; the full catalog (id, description, tier) lives in /.well-known/ai-agent.json. 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. Binding a public key requires a Clerk session, so a leaked bearer cannot bind its own key. Register at /api/agent/keys/register, revoke at /api/agent/keys/revoke, toggle enforcement at /api/agent/keys/enforce-toggle. Covered components, freshness window, and header examples are in the signed_requests block of /.well-known/ai-agent.json; skill: ic-signed-agent.

Errors

Revocation

If a documented surface doesn't match deployed behavior, POST a structured report to /api/agent/feedback (kinds: broken_url, schema_mismatch, stale_doc, endpoint_404, other). Out-of-band: admin@immersivecommons.com. See also the immersivecommons.com API Documentation hub and the immersivecommons.com Developer Portal.