Nouveau: Approbation des agents, red teaming et analyse de modèles. Découvrir
MITRITY
Docs / Administration / Roles & Access Control

Roles & Access Control

MITRITY decides what each person in your organization can do with two settings:

  • Their role (Owner, Manager, Member or Viewer) decides which actions they may take.
  • Their access scope decides what they see: everything in the organization, or only the agents granted to them and the environments they work in.

The API enforces both on every request, for dashboard sessions and API keys alike.

The Four-Role Model

RoleDescriptionTypical User
OwnerFull control of the organization, including its settings, SAML SSO, billing and removing users. An owner always sees everything.CEO, CTO, Head of Security
ManagerManages the team other than owners, approves and denies held actions, resolves reviews and findings, and deletes agents, policies and credentials.Engineering manager, Security lead, DevOps lead
MemberRegisters and configures agents, policies, tools, credentials, DLP patterns and API keys, and generates reports.Engineer, Analyst, Security analyst
ViewerReads dashboards, the audit log and reports.Executive, Auditor, Compliance officer

Permissions Matrix

The tables show what the API allows each role. A scoped user takes these actions only on what they can see, and a few actions on what belongs to the whole organization need full access; see Access Scope. The dashboard offers some actions to fewer roles than the API does: it shows credential management, connected platforms, anomaly-detection models and threat-intelligence settings to owners and managers only.

Agent Management

ActionOwnerManagerMemberViewer
View agentsYesYesYesYes
Register an agentYesYesYesNo
Update an agent, regenerate its key or revoke itYesYesYesNo
Delete an agentYesYesNoNo
Designate a host-observer credentialYesYesNoNo
Change an agent's lifecycle statusYesYes, except to ApprovedNoNo
View tool permissions and destinationsYesYesYesYes
Change tool permissions and destinationsYesYesYesNo

Policy Management

ActionOwnerManagerMemberViewer
View policiesYesYesYesYes
Create or update a policy and its rulesYesYesYesNo
Delete a policy or a ruleYesYesNoNo
Restore an earlier policy versionYesYesNoNo
Create, change or delete DLP patterns and a policy's DLP bindingsYesYesYesNo
Set or remove a policy's LLM budgetYesYesYesNo

Approvals and Governance Reviews

ActionOwnerManagerMemberViewer
View approvalsYesYesYesYes
Approve or deny a held actionYesYesNoNo
Request a governance reviewYesYesYesNo
Resolve a governance reviewYesYes, unless it is assigned to the Owner roleNoNo
Change the governance gate and templatesYesNoNoNo

Tool Catalog

ActionOwnerManagerMemberViewer
View the tool catalogYesYesYesYes
Create or update a custom toolYesYesYesNo
Delete a custom toolYesYesNoNo

Security Features

ActionOwnerManagerMemberViewer
View injection events, delegation chains, threat intelligence and host-observer findingsYesYesYesYes
Mark an injection event as a false positiveYesYesYesNo
Change delegation-chain settingsYesYesYesNo
Change threat-intelligence settingsYesYesYesNo
Override or suppress a threat indicatorYesYesYesNo
Resolve a host-observer findingYesYesNoNo
Create, change, run or delete a red-team campaign, and resolve its findingsYesYesNoNo
Verify the audit trail and read its checkpointsYesYesNoNo

Credential Broker

ActionOwnerManagerMemberViewer
View credential metadata, grants and leasesYesYesYesYes
Create or update a credentialYesYesYesNo
Delete a credentialYesYesNoNo
Grant a credential to an agentYesYesYesNo
Revoke a credential grantYesYesNoNo
Issue or revoke a leaseYesYesYesNo

Compliance & Reporting

ActionOwnerManagerMemberViewer
View the audit log, ML insights, compliance frameworks, the risk register and AI policy statementsYesYesYesYes
See changes to people, their access and API keys in the audit logYesYesNoNo
Generate a reportYesYesYesNo
Download a reportYesYesYesYes
Export a report bundleYesYesYesNo
Share a report, schedule reports or delete a reportYesYesNoNo
Recompute compliance postureYesYesYesNo
Override a control or set its ownerYesYesNoNo
Add or update a riskYesYesYesNo
Accept or remove a riskYesYesNoNo
Draft an AI policy statementYesYesNoNo
Publish, retire or delete an AI policy statementYesNoNoNo
Attest to a published AI policy statementYesYesYesYes

Administration

ActionOwnerManagerMemberViewer
View the teamYesYesYesYes
Invite a userYesYes, not as OwnerNoNo
Change a user's roleYesYes, not an Owner's and not to OwnerNoNo
Set a user's access scope, agent grants and environment accessYesYes, not an Owner's access scopeNoNo
Reset a user's MFAYesYes, not a Manager's or an Owner'sNoNo
Remove a userYesNoNoNo
View environmentsYesYesYesYes
Create or update an environmentYesYesNoNo
Delete an environmentYesNoNoNo
Configure SAML SSO and the organization's settingsYesNoNoNo
Configure notification channelsYesYesNoNo
Manage SIEM destinationsYesYesNoNo
Create, change or revoke API keysYesYesYesNo
Connect or remove a SaaS platformYesYesYesNo
Sync a SaaS platform or change its enforcementYesYesYesNo
View the plan and subscriptionYesYesYesYes
Change the plan or open the billing portalYesNoNoNo
Delete the organizationYesNoNoNo

API Keys Bound to an Environment

An API key bound to an environment works in that environment only, and it never takes an action that only an Owner may take, even when an Owner created it. Every action in the Owner-only rows above answers 403 Forbidden to such a key, and so does the Owner's part of the shared ones: making someone an Owner, changing an Owner's role, profile, access or MFA, resetting a Manager's MFA, resolving a review assigned to Owners, and approving an agent directly. Below that line, a key created by an Owner does what a Manager's key could, in its environment. See API Keys.

Access Scope

Every user has an access scope, all or scoped:

ScopeWhat the user sees
allEvery agent and every environment in the organization.
scopedOnly the agents granted to them and the environments they have access to.

An owner is never scoped: owners see everything, whatever their access scope says. A manager, member or viewer can be scoped. New users start with all, except invitations sent by a scoped manager, which start scoped.

Agent Grants and Environment Access

A scoped user's view is made of two separate lists:

DecidesDoes not decide
Agent grantsWhich agents the user sees, and with them the records about those agentsWhich environments the user works in
Environment accessWhich environments the user works in: the environments themselves and the policies in them, with their DLP bindings and budgets. The user registers agents and creates policies only there.Which agents the user sees

The two lists are independent. Environment access on its own shows no agents, so grant the agents as well. A granted agent is visible even when the user has no access to its environment.

An agent a scoped user registers is granted to them at once, and so is an environment a scoped manager creates.

Example: to let a user look after the sales agents and the Staging policies, set their access scope to scoped, grant them the sales agents, and give them access to Staging.

What a Scoped User Sees

AreaWhat a scoped user sees
AgentsOnly their granted agents, in every list and count. Any other agent answers 404 Not Found, the answer an unknown agent gets, whether they read it or try to change it.
An agent's configurationFor a granted agent: its tool permissions and destinations, credential grants and leases, and the response actions of a connected platform.
Activity and oversightRecords about their granted agents only: the audit log and its summaries, approvals and the pending count, governance reviews, injection events, ML insights, host-observer events and findings, red-team campaigns that name only granted agents with those campaigns' runs, red-team findings, delegation chains whose agents are all granted, LLM usage, threat-intelligence matches and the findings of connected platforms. A record about no agent is not shown.
NotificationsA notification that names agents appears only when every agent it names is granted. A notification about the organization appears too, except the notice that an organization report is ready.
ReportsOnly the AI assessments of their granted agents. Organization reports (every other report type) are not shown, and asking to generate or schedule one answers 403 Forbidden.
Risk registerOrganization-level risks appear for everyone. A risk about an agent appears only when the agent is granted, and a scoped user adds agent risks only for granted agents.
InventoriesThe AI bill of materials and the model inventory list every entry. The agents named on an entry are the granted ones only; usage totals count the whole organization.
EnvironmentsOnly the environments they have access to, the policies in them, and those policies' DLP bindings and budgets. Any other environment or policy answers 404 Not Found.
The same for everyoneThe team, the tool catalog, DLP patterns, credential definitions, connected platforms, the threat indicator catalog, compliance frameworks, AI policy statements and organization-wide analytics totals.
Full access onlySome things belong to the whole organization and are for Owners and users whose access scope is all: organization reports, the organization's usage of governed actions, creating, changing or deleting a credential, and connecting, syncing or disconnecting a SaaS platform or changing its enforcement. A scoped user gets 403 Forbidden for them. Granting or leasing a credential to a granted agent, and the response actions on a granted agent of a connected platform, stay open to them.

The role still decides what a scoped user may do with what they see. A scoped manager approves only the held actions of their granted agents; a scoped member edits only their granted agents and the policies of their environments.

Setting Access Scope

Owners and managers set a user's access scope, agent grants and environment access, in Settings > Team or through the API. A manager cannot change an owner's access scope.

In Settings > Team, the button next to every other user who is not an owner shows their current access. While it reads Full Access, selecting it scopes the user. While it reads Scoped Access, selecting it opens the agents and environments granted to them, where you grant or revoke them, or switch the user back to full access. You can scope a pending invitation before it is accepted.

Through the API:

curl -X PUT https://api.mitrity.com/api/v1/users/user_jdoe/access-scope \
  -H "Authorization: Bearer mk_your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "access_scope": "scoped"
  }'

Response: the updated user:

{
  "id": "user_jdoe",
  "tenant_id": "tnt_4f9a",
  "email": "jdoe@company.com",
  "display_name": "Jane Doe",
  "role": "manager",
  "access_scope": "scoped",
  "mfa_method": "totp",
  "mfa_enrolled": true,
  "onboarding_completed": true,
  "auth_provider": "password",
  "status": "active",
  "last_login_at": "2026-03-01T09:00:00Z",
  "created_at": "2026-02-15T10:00:00Z",
  "updated_at": "2026-03-01T10:00:00Z"
}
  • access_scope is all or scoped; any other value is refused with 400.
  • A manager whose own access is scoped can scope other users but cannot set anyone to all, themselves included (403). They grant only the agents they see and the environments they have access to, and in another user's grants and environment access they see and revoke only those.
  • Setting a user back to all removes their agent grants. Their environment access is kept, and applies again if they are scoped later.
  • An invitation sent by a manager whose own access is scoped starts scoped, with nothing granted; the manager then grants what they see.
  • Changes take effect on the user's next request.
  • An API key acts with the current role and access scope of the user who created it.

Agent Grants

Owners and managers grant a scoped user one agent per request.

Creating an Agent Grant

curl -X POST https://api.mitrity.com/api/v1/users/user_jdoe/grants \
  -H "Authorization: Bearer mk_your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "resource_type": "agent",
    "resource_id": "agt_sales-bot"
  }'

resource_type is agent. An agent the caller cannot see answers 404 Not Found.

Response (201 Created):

{
  "id": "grant_8k2m",
  "user_id": "user_jdoe",
  "tenant_id": "tnt_4f9a",
  "resource_type": "agent",
  "resource_id": "agt_sales-bot",
  "created_at": "2026-03-01T10:05:00Z"
}

Listing Agent Grants

curl https://api.mitrity.com/api/v1/users/user_jdoe/grants \
  -H "Authorization: Bearer mk_your-api-key"

The response lists the user's grants under grants, each in the shape above. Owners, managers and the user themselves can read a user's grants.

Revoking an Agent Grant

curl -X DELETE https://api.mitrity.com/api/v1/users/user_jdoe/grants/grant_8k2m \
  -H "Authorization: Bearer mk_your-api-key"

Environment Access

Owners and managers give a scoped user access to one environment per request.

Granting Environment Access

curl -X POST https://api.mitrity.com/api/v1/users/user_jdoe/environment-access \
  -H "Authorization: Bearer mk_your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "environment_id": "env_production"
  }'

An environment the caller has no access to answers 404 Not Found.

Response (201 Created):

{
  "id": "acc_3k9m",
  "user_id": "user_jdoe",
  "tenant_id": "tnt_4f9a",
  "environment_id": "env_production",
  "environment_name": "",
  "environment_slug": "",
  "created_at": "2026-03-01T10:05:00Z"
}

Listing Environment Access

curl https://api.mitrity.com/api/v1/users/user_jdoe/environment-access \
  -H "Authorization: Bearer mk_your-api-key"

The response lists the entries under environment_access, in the shape above, with environment_name and environment_slug filled in. Owners, managers and the user themselves can read a user's environment access.

Revoking Environment Access

Revoke by the entry's id, not the environment's:

curl -X DELETE https://api.mitrity.com/api/v1/users/user_jdoe/environment-access/acc_3k9m \
  -H "Authorization: Bearer mk_your-api-key"

User Management API

List Users

Every role can list the team.

curl https://api.mitrity.com/api/v1/users \
  -H "Authorization: Bearer mk_your-api-key"

Response:

{
  "data": [
    {
      "id": "user_jsmith",
      "tenant_id": "tnt_4f9a",
      "email": "jsmith@company.com",
      "display_name": "John Smith",
      "role": "owner",
      "access_scope": "all",
      "mfa_method": "totp",
      "mfa_enrolled": true,
      "onboarding_completed": true,
      "auth_provider": "google",
      "status": "active",
      "last_login_at": "2026-03-01T08:00:00Z",
      "created_at": "2026-01-15T10:00:00Z",
      "updated_at": "2026-02-01T10:00:00Z"
    },
    {
      "id": "user_jdoe",
      "tenant_id": "tnt_4f9a",
      "email": "jdoe@company.com",
      "display_name": "Jane Doe",
      "role": "manager",
      "access_scope": "scoped",
      "mfa_method": "totp",
      "mfa_enrolled": true,
      "onboarding_completed": true,
      "auth_provider": "password",
      "status": "active",
      "last_login_at": "2026-03-01T09:00:00Z",
      "created_at": "2026-02-15T10:00:00Z",
      "updated_at": "2026-03-01T10:00:00Z"
    }
  ],
  "total": 2,
  "limit": 50,
  "offset": 0
}

limit (default 50, max 200), offset and search page and filter the list. An invited user who has not signed in yet has status pending.

Update User Role

curl -X PUT https://api.mitrity.com/api/v1/users/user_jdoe \
  -H "Authorization: Bearer mk_your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "role": "manager"
  }'

The same request updates display_name; send only the fields to change. Owners and Managers change roles; Managers cannot change an Owner's role or make anyone an Owner. The last Owner cannot be demoted (409 Conflict): make someone else an Owner first. When two Owners demote or remove each other at the same moment, one change goes through and the other is refused, so the organization always keeps an Owner. Members and Viewers change only their own display name. A role change applies on the user's next request. Access scope has its own request; see Setting Access Scope.

Invite a New User

Invitations are made on the tenant. Your tenant's ID is the tenant.id that GET /api/v1/tenants returns.

curl -X POST https://api.mitrity.com/api/v1/tenants/tnt_4f9a/invite \
  -H "Authorization: Bearer mk_your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "newuser@company.com",
    "role": "member"
  }'

Response (202 Accepted):

{
  "user_id": "user_n3w8",
  "tenant_id": "tnt_4f9a",
  "email": "newuser@company.com",
  "role": "member",
  "message": "invitation created; email delivery is pending"
}

Owners and Managers invite; Managers cannot invite an Owner, and the plan's user limit applies. The invited user receives an email with a link to set up their account and configure MFA. The new user starts with access scope all, unless the invitation comes from a manager whose own access is scoped: then it starts scoped, with nothing granted. To scope the new user, set their access scope, agent grants and environment access; you can do this before they accept.

Remove a User

curl -X DELETE https://api.mitrity.com/api/v1/users/user_jdoe \
  -H "Authorization: Bearer mk_your-api-key"

Only Owners remove users, and not with an API key bound to an environment (403 Forbidden). An Owner cannot remove themselves, and the last Owner cannot be removed (400 Bad Request). Removing a user deletes their account, their API keys, their agent grants and their environment access at once. The compliance reports they generated stay, without their name. If their sign-in account cannot be deleted, or the removal meets another change to the organization's users or environments at the same moment, nothing is removed (409 Conflict) and you can try again.

MFA Management

All MITRITY users are required to have MFA enabled. Owners and Managers can reset a user's MFA if they lose access to their MFA device; resetting a Manager's or an Owner's takes an Owner.

Reset User MFA

curl -X POST https://api.mitrity.com/api/v1/users/user_jdoe/reset-mfa \
  -H "Authorization: Bearer mk_your-api-key"

After resetting, the user is prompted to configure a new MFA method on their next login.

Dashboard Management

User Management Page

Navigate to Settings > Team to manage users. The page displays:

  • Every user with their role, and pending invitations
  • For users you manage: their role and access, MFA reset, and removal if you are an Owner
  • For a scoped user: the agents granted to them and the environments they have access to

Role Change History

Every change to who may do what is recorded on your organization's audit trail as a governance change:

EventWritten whenAlso records
user.role_changedA user's role changes. A change of display name alone writes nothing.The old and the new role
user.access_scope.changedA user's access scope changesThe old and the new access scope
user.invitation.createdSomeone is invited, to the platform or to the AcademyThe address, the role and the access scope
user.invitation.acceptedAn invitation is takenThe address, the role and the access scope
user.invitation.revokedA pending invitation is removedThe address and the role
user.removedA user is removed, by someone else or by deleting their own accountThe address and the role
user.mfa.resetAn Owner or Manager resets a user's MFA, or a user resets their ownWhether it was their own
access.agent.granted, access.agent.revokedAn agent grant is added or removed, including the grant a scoped user receives on an agent they registerThe agent
access.environment.granted, access.environment.revokedEnvironment access is added or removed, including the access a scoped Manager receives on an environment they createThe environment

Each entry names the person who made the change and the person it is about, and the API key it was made with, if any. No invitation token is ever recorded.

In the dashboard, open Audit Log and choose the source Governance Changes. Through the API, filter by source and event type:

curl "https://api.mitrity.com/api/v1/audit?source=control_plane&event_type=user.role_changed" \
  -H "Authorization: Bearer mk_your-api-key"

These entries name people by email address and role, so only Owners and Managers see them. Members and Viewers, Academy learners included, see the rest of the audit log without them: the entries are left out of the list, its total and the audit summaries, and opening one by ID answers 404 Not Found. Reports never include them. The entries stay on the audit trail: verifying the trail covers them, and a SIEM destination receives them.

A scoped Manager sees the grant entries for the agents granted to them, and no entry about a person or an environment.

Best Practices

Follow the Principle of Least Privilege

Assign the most restrictive role that allows the user to perform their duties. Most team members should be Members, not Managers.

Use Scoped Access for Large Teams

For organizations with several teams, scope each person to their team's agents: grant them those agents, and give them access to the environments whose policies they maintain.

Require MFA for All Users

MFA is mandatory in MITRITY and cannot be disabled. This is a deliberate security decision — governance platforms must be protected against account compromise.

Review Access Quarterly

Schedule quarterly access reviews. Remove users who no longer need access and adjust scopes for users whose responsibilities have changed.

Limit the Number of Owners

A tenant should have 2-3 Owners for redundancy, not more. Owners have unrestricted access including billing and SAML configuration.

Audit Role Changes

Review the Governance Changes in the audit log regularly. Look for a user.role_changed to Manager or Owner that nobody expected, a user.access_scope.changed to all, or grants to people who should not hold them: any of these may indicate account compromise or unauthorized access.