Identity Model
ZeroID models agents as identities, not as anonymous credentials. That distinction is what makes delegation, attribution, and revocation work cleanly across agentic systems.
Tenant Model
Every ZeroID resource belongs to a tenant:
account_idproject_id
Admin APIs are tenant-scoped. In the current server design, tenant context is provided through X-Account-ID and X-Project-ID headers on /api/v1/* routes.
Identity Types
ZeroID supports multiple identity types, so you can model real systems instead of collapsing everything into one generic service account:
agent
Autonomous agents, orchestrators, tool agents, evaluators, assistants
application
Apps that host or invoke agent workflows
mcp_server
MCP servers and tool-serving infrastructure
service
Internal services or non-agent workloads
Agent Sub-Types
When identity_type is agent ZeroID supports sub-types such as:
orchestratorautonomoustool_agenthuman_proxyevaluatorchatbotassistantcode_agentcustom
Use subtypes to preserve the identity's operational role in both registry data and issued tokens.
WIMSE/SPIFFE URI
Each identity gets a stable URI in this shape:
Example:
This URI becomes the canonical machine identity. For most non-human flows, it is also the JWT sub claim.
Important Identity Fields
These fields show up repeatedly across the registry, policies, and JWTs:
external_id
Your stable application-level identifier
name
Human-readable display name
trust_level
How much confidence the platform has in the identity
allowed_scopes
Scopes the identity may request
public_key_pem
Public key for signed assertion flows like jwt_bearer
framework
Optional framework metadata such as langgraph, autogen, or crewai
capabilities
JSON metadata for what the identity can do
labels
Flat key-value labels for indexing and policy context
Owner vs Principal vs Actor
These are easy to mix up. Keep them separate:
owner_user_id
The user who registered or owns the identity
sub
The principal currently authenticated by the token
act.sub
The principal that delegated authority, or the end user on whose behalf the agent is acting
Examples:
A direct autonomous agent token usually has
sub = spiffe://.../agent/fooand noact.A delegated token usually has
sub = sub-agent URIandact.sub = orchestrator URI.A user-context token may have
sub = agent URIandact.sub = end-user ID.
Trust Levels
ZeroID uses trust levels as a compact signal for downstream authorization and issuance policy:
unverifiedverified_third_partyfirst_party
Trust level is not the same thing as authorization. It is an input into policy and a useful claim for downstream systems.
Identity Lifecycle
Identities move through lifecycle states:
activesuspendeddeactivated
Deactivation matters operationally because tokens and keys tied to the identity may need to be rotated or revoked when the identity is no longer usable.
Why This Model Matters
If you only keep a client ID or a service account name, you lose most of the context that agentic systems need:
What kind of workload is acting
Which system owns it
Whether it is allowed to delegate
How much should it be trusted
Who authorized it in a multi-step chain
ZeroID keeps the identity context available at issuance and stores it within the JWT itself.
What's Next?
Read Token Flows to map this identity model onto actual OAuth and delegation patterns.
Read Agent Delegation if you are building orchestrator and sub-agent workflows.
Last updated