Scope format, built-in endpoint permissions, and custom route policies.
Scopes are permission strings carried by the caller's credential: the JWT scopes claim, or the stored scopes of a service account token. Protected operations with insufficient scopes usually return 403 Forbidden. Agent, team, and workflow listings can instead return a filtered or empty list. Unmapped custom routes have no automatic scope requirement.
Scopes are enforced at two layers. Control plane scopes are enforced by the AgentOS control plane at os.agno.com. AgentOS scopes are enforced by your deployed AgentOS service on every API request.
Any agents:action, teams:action, or workflows:action scope also accepts a resource:<id>:action form to limit access to a specific resource. For example, agents:web-agent:run grants run access only to the web-agent. Use * as the id (agents:*:run) to match every resource of that type. See Scope Format.
Per-resource scoping applies to agents, teams, and workflows only. All other resource types (sessions, memories, knowledge, traces, etc.) use global scopes only. The resource:<id>:action form is not honored for them.
The agent_os:admin scope grants full access to every AgentOS endpoint below.
Legacy system:read and system:write scopes are accepted as aliases for config:read and config:write, so tokens issued before the rename keep working. Use config:read and config:write in new tokens; action wildcards such as config:* are not supported.
Scope
Endpoint
Description
registry:read
GET /registry
View the code-defined registry (tools, models, databases)
Scope
Endpoint
Description
components:read
GET /components
List components
components:read
GET /components/*
View a component
components:read
GET /components/*/configs
List a component's configs
components:read
GET /components/*/configs/*
View a component config
components:read
GET /components/*/configs/current
View the current component config
components:write
POST /components
Create a component
components:write
POST /components/*/configs
Create a component config
components:write
POST /components/*/configs/*/set-current
Mark a config as current
components:write
PATCH /components/*
Update a component
components:write
PATCH /components/*/configs/*
Update a component config
components:delete
DELETE /components/*
Delete a component
components:delete
POST /components/*/restore
Restore an archived component
components:delete
DELETE /components/*/configs/*
Delete a component config
Scope
Endpoint
Description
agents:read
GET /agents
List agents
agents:read
GET /agents/*
View an agent
agents:write
POST /agents
Create an agent
agents:write
PATCH /agents/*
Update an agent
agents:delete
DELETE /agents/*
Delete an agent
agents:run
POST /agents/*/runs
Run an agent
agents:run
POST /agents/*/runs/*/continue
Continue a paused run
agents:run
POST /agents/*/runs/*/cancel
Cancel a run
agents:read and agents:run
GET /agents/*/runs, GET /agents/*/runs/*
List or poll runs
agents:read and agents:run
GET /agents/*/runs/*/checkpoints, GET /agents/*/runs/*/checkpoints/*
Read checkpoints
agents:run
POST /agents/*/runs/*/resume
Resume a run
agents:run
POST /agents/*/sessions/*/fork
Fork a session
Scope
Endpoint
Description
teams:read
GET /teams
List teams
teams:read
GET /teams/*
View a team
teams:write
POST /teams
Create a team
teams:write
PATCH /teams/*
Update a team
teams:delete
DELETE /teams/*
Delete a team
teams:run
POST /teams/*/runs
Run a team
teams:run
POST /teams/*/runs/*/continue
Continue a paused run
teams:run
POST /teams/*/runs/*/cancel
Cancel a run
teams:read and teams:run
GET /teams/*/runs, GET /teams/*/runs/*
List or poll runs
teams:read and teams:run
GET /teams/*/runs/*/checkpoints, GET /teams/*/runs/*/checkpoints/*
Read checkpoints
teams:run
POST /teams/*/runs/*/resume
Resume a run
teams:run
POST /teams/*/sessions/*/fork
Fork a session
Scope
Endpoint
Description
workflows:read
GET /workflows
List workflows
workflows:read
GET /workflows/*
View a workflow
workflows:write
POST /workflows
Create a workflow
workflows:write
PATCH /workflows/*
Update a workflow
workflows:delete
DELETE /workflows/*
Delete a workflow
workflows:run
POST /workflows/*/runs
Run a workflow
workflows:run
POST /workflows/*/runs/*/continue
Continue a paused run
workflows:run
POST /workflows/*/runs/*/cancel
Cancel a run
workflows:read and workflows:run
GET /workflows/*/runs, GET /workflows/*/runs/*
List or poll runs
workflows:run
POST /workflows/*/runs/*/resume
Resume a run
Scope
Endpoint
Description
sessions:read
GET /sessions
List sessions
sessions:read
GET /sessions/*
View a session
sessions:write
POST /sessions
Create a session
sessions:write
POST /sessions/*/rename
Rename a session
sessions:write
PATCH /sessions/*
Update a session
sessions:delete
DELETE /sessions
Delete sessions in bulk
sessions:delete
DELETE /sessions/*
Delete a session
Scope
Endpoint
Description
memories:read
GET /memories
List memories
memories:read
GET /memories/*
View a memory
memories:read
GET /memory_topics
List memory topics
memories:read
GET /user_memory_stats
View user memory stats
memories:write
POST /memories
Create a memory
memories:write
PATCH /memories/*
Update a memory
memories:write
POST /optimize-memories
Optimize memories
memories:delete
DELETE /memories
Delete memories in bulk
memories:delete
DELETE /memories/*
Delete a memory
Scope
Endpoint
Description
learnings:read
GET /learnings
List learnings
learnings:read
GET /learnings/*
View a learning
learnings:write
POST /learnings
Create a learning
learnings:write
PATCH /learnings/*
Update a learning
learnings:delete
DELETE /learnings/*
Delete a learning
Scope
Endpoint
Description
knowledge:read
GET /knowledge/content
List knowledge content
knowledge:read
GET /knowledge/content/*
View knowledge content
knowledge:read
GET /knowledge/config
View knowledge config
knowledge:read
GET /knowledge/*/sources
List knowledge sources
knowledge:read
GET /knowledge/*/sources/*/files
List files in a source
knowledge:read
POST /knowledge/search
Search knowledge
knowledge:write
POST /knowledge/content
Add knowledge content
knowledge:write
POST /knowledge/remote-content
Add remote knowledge content
knowledge:write
PATCH /knowledge/content/*
Update knowledge content
knowledge:delete
DELETE /knowledge/content
Delete knowledge content in bulk
knowledge:delete
DELETE /knowledge/content/*
Delete knowledge content
Scope
Endpoint
Description
metrics:read
GET /metrics
View metrics
metrics:read
GET /metrics/refresh/status
View metrics refresh status
metrics:write
POST /metrics/refresh
Refresh metrics
Scope
Endpoint
Description
evals:read
GET /eval-runs
List eval runs
evals:read
GET /eval-runs/*
View an eval run
evals:write
POST /eval-runs
Create an eval run
evals:write
PATCH /eval-runs/*
Update an eval run
evals:delete
DELETE /eval-runs
Delete eval runs in bulk
Scope
Endpoint
Description
traces:read
GET /traces
List traces
traces:read
GET /traces/*
View a trace
traces:read
GET /trace_session_stats
View trace session stats
traces:read
POST /traces/search
Search traces
Scope
Endpoint
Description
service_accounts:read
GET /service-accounts
List service accounts
service_accounts:write
POST /service-accounts
Mint a service account token
service_accounts:delete
DELETE /service-accounts/*
Revoke a service account
All service_accounts scopes are privileged when granted to a token because they govern token management. Read lists accounts, write mints tokens, and delete revokes accounts.
Scope
Endpoint
Description
schedules:read
GET /schedules
List schedules
schedules:read
GET /schedules/*
View a schedule
schedules:read
GET /schedules/*/runs
List schedule runs
schedules:read
GET /schedules/*/runs/*
View a schedule run
schedules:write
POST /schedules
Create a schedule
schedules:write
PATCH /schedules/*
Update a schedule
schedules:write
POST /schedules/*/enable
Enable a schedule
schedules:write
POST /schedules/*/disable
Disable a schedule
schedules:write
POST /schedules/*/trigger
Trigger a schedule
schedules:delete
DELETE /schedules/*
Delete a schedule
Scope
Endpoint
Description
approvals:read
GET /approvals
List approval requests
approvals:read
GET /approvals/count
Count approval requests
approvals:read
GET /approvals/*
View an approval request
approvals:read
GET /approvals/*/status
View approval status
approvals:write
POST /approvals/*/resolve
Resolve an approval request
approvals:delete
DELETE /approvals/*
Delete an approval request
A2A routes reuse the agents, teams, and workflows scopes. Under the default /a2a prefix, per-resource scopes such as agents:my-agent:run work. A custom A2A(prefix=...) remains protected but currently requires a global or wildcard family grant, such as agents:run or agents:*:run; a specific-agent grant does not pass the custom-prefix scope check. The table below uses the default prefix.
Scope
Endpoint
Description
agents:read
GET /a2a/agents/*/.well-known/agent-card.json
Fetch an agent card
agents:run
POST /a2a/agents/*/v1/message:send
Send a message to an agent
agents:run
POST /a2a/agents/*/v1/message:stream
Stream a message to an agent
agents:read
POST /a2a/agents/*/v1/tasks:get
Get an agent task
agents:run
POST /a2a/agents/*/v1/tasks:cancel
Cancel an agent task
teams:read
GET /a2a/teams/*/.well-known/agent-card.json
Fetch a team card
teams:run
POST /a2a/teams/*/v1/message:send
Send a message to a team
teams:run
POST /a2a/teams/*/v1/message:stream
Stream a message to a team
teams:read
POST /a2a/teams/*/v1/tasks:get
Get a team task
teams:run
POST /a2a/teams/*/v1/tasks:cancel
Cancel a team task
workflows:read
GET /a2a/workflows/*/.well-known/agent-card.json
Fetch a workflow card
workflows:run
POST /a2a/workflows/*/v1/message:send
Send a message to a workflow
workflows:run
POST /a2a/workflows/*/v1/message:stream
Stream a message to a workflow
Run polling, history, and checkpoint reads require both scopes shown above: middleware checks the resource's read permission and the run handler checks its run permission. Equivalent per-resource grants can target a specific component. A default service-account token has run permissions but lacks agent, team, and workflow read permissions, so add the relevant read grant before polling protected REST run endpoints.
AG-UI's POST /agui route requires a global or wildcard run grant for its target family, such as agents:run or agents:*:run, or the corresponding team grants. A specific-agent or specific-team grant does not pass this route's scope check. Custom AG-UI prefixes use the same family requirement.
A few scopes gate access in the control plane. Without them, finer-grained scopes have no effect because the user cannot reach the resources they apply to.
Scope
Without it, the user cannot
org:read
Access the organization at all
os:read
List AgentOS instances in the organization
config:read
Load AgentOS configuration in the control-plane UI (GET /config on startup)
Direct API calls need the scopes of their own operations; config:read is not a prerequisite for every endpoint.
Custom scope mappings are additive to the defaults. To override a default, specify the same route pattern with your custom scopes.
An empty scope list removes the permission requirement for that mapping but does not bypass authentication. Unmapped custom REST handlers and arbitrary MCP callable tools need an explicit policy if access requires finer permissions. Built-in MCP tools retain their native scope mappings even when you customize REST mappings.
Built-in routes preserve their native resource namespace. Handlers for /agents, /teams, and /workflows re-check scopes against their native namespace (agents:, teams:, workflows:). Mapping GET /agents to custom:read won't grant access because the handler still requires agents:read. Full freedom applies only to new routes you define yourself.