Intramedial is in restricted beta. At sign up or sign in, you have to provide the beta tester password you received or request one at preview@intramedial.com. Thank you.
Loading…
identity.enrollModule 12
Plane module
Agent identity registry
Give each agent its own identity before it acts, so every admitted action traces back to one agent and never to a shared account.
identity.enroll records an agent in the workspace registry by its DID, a display name and a kind. Where an identity runtime is bound it also issues the agent's own DID, and each agent starts with a trust profile at the baseline score of 50. SPIFFE IDs and SCIM users attach to the same registry.
Agents act when the plane says yes, and the record says why.
Put admission in front of your MCP servers, repositories, SaaS tools and cloud accounts. Every agent gets a lease or a reason – and you keep the lever to stop any of them.
The DID the identity runtime issued for this agent, when one was issued.
spiffeId
The SPIFFE ID bound with identity/spiffe, once bound.
owner
The account notified when the agent's autonomy tier changes. Optional.
enrolledAt
When the agent was enrolled, as an ISO timestamp.
shadow
true when the agent is tracked but not yet sanctioned, the mark mcp.shadow offers.
skipped
true when no DID was issued, which happens only on a worker with no identity runtime.
Mechanism
Step by step
How it works
Name the agent
Post did and displayName. kind is customer, partner or house and defaults to customer. owner names the account to notify when the agent's trust tier changes.
An identity is issued
When the identity runtime is bound it issues a DID for the agent, returned as issuedDid. If the runtime refuses or cannot be reached, the enrollment is refused and nothing is recorded.
The record and a profile are written
The agent joins the workspace registry, and its DID and its issued DID each get a trust profile at score 50.
Other identities attach
A SPIFFE ID is bound with identity/spiffe, SCIM users arrive through identity/scim, and A2A trusted roots and delegations go through identity/a2a.
Try it
Live demo
Run it from this page
GET/api/v1/acp/identity/list
// No body: this is a GET. Press Run.
Runs in a shared demo workspace with a demo key: anyone can see what it holds, so send nothing private. identity.enroll docs
Responses
Press Run to send the request on the left to the shared demo workspace.
Runs in a shared demo workspace with a demo key: anyone can see what it holds, so send nothing private.
Code
Live example
A real request
A request in the shape the API accepts, and an example response in the shape the module returns.
A billing agent enrolls once. Every later admission, lease and approval names its DID, never a shared service account.
Bringing a directory across
SCIM resources become customer agents. A deprovision with active: false drops the linked agent and takes its issued DID back.
Two agents, one binary
A new DID is a new agent even for the same code. It gets a trust score of its own and no history carried over.
Sanctioning a stray
An agent seen at the MCP gateway but never enrolled is enrolled with shadow: true to track it, or without to sanction it.
When to use something else
Deciding what an agent may do. Enrollment gives an identity, not a grant; grants come from mandates compiled in mandates.compile.
Reading how far an agent is trusted. Enrollment starts the score at the baseline; trust.get shows where it stands now.
Importing a whole fleet from an export. Use onramp.sources to plan and apply many agents in one pass.
Evidence
Guarantees
What it does, and what it does not
A module is a strong claim about a narrow thing. Rely on it for exactly what it is.
It does
Each enrolled DID has one registry record in its workspace, and one workspace never resolves another's agents.
With an identity runtime bound, an enrollment it cannot issue a DID for is refused rather than recorded without one.
The runtime never reissues a deactivated DID. The agent gets the next fresh id derived from its own and an issued DID of its own.
Deprovisioning through SCIM resets the agent's trust profile to the baseline, so a recycled DID inherits no score.
It does not
That the caller controls the key behind the DID. Enrollment records the DID that was presented and runs no challenge.
Who is accountable. owner is whatever account the enroller names, and it is optional.
That the agent behaves. A new agent starts at the baseline score of 50, which says nothing about its conduct.
A history of key changes. The registry stores none; rotation belongs to the identity runtime.
Details
Build notes
Before you build
Who may enroll
Enrolling needs the agents.create permission. The matrix gives it to owners and admins, and a token carries it only when its scopes do.
Plan limits
When the organization already holds the agents its plan includes, the identity runtime refuses the DID with a 402 and the enrollment is refused with it.
Offboarding is retried safely
If the identity runtime misses a step of a SCIM deprovision, the request fails with every agent still enrolled. Each step is idempotent, so the identity provider's retry finishes it.
Limits and metering
A successful enroll or SCIM call counts against the identity_active_agents meter.
displayName is required, and the MCP action caps it at 200 characters.
When an issued DID was deactivated, enrollment tries up to 8 derived agent ids before it gives up.
Access
API & MCP
REST and MCP
Authenticate with a workspace API key as a Bearer token. The base URL is https://api.intramedial.com.
REST endpoints
POST/api/v1/acp/identity/enrollEnroll one agent and return its record.
GET/api/v1/acp/identity/listList the workspace's enrolled agents.
MCP actions
MCPcoordination.identity.enrollEnroll one agent as an MCP action.
MCPcoordination.identity.listList the workspace's enrolled agents as an MCP action.