Skip to content

Permissions

The authorization rules of the platform, generated from mapi_spec.tenancy and mapi_spec.tokens by scripts/gen_docs_platform.py. Every component (the API, the web app through OpenAPI, the tests) checks the same table. The Administration guide explains how to use it.

Roles

Roles are ordered viewer < editor < runner < admin; each includes the one before it. tenant-wide means only a tenant-wide membership grants it; otherwise the effective role in the project counts (the higher of the tenant-wide and the project grant). A pair that is not listed is denied to everyone.

Resource Action viewer editor runner admin Operator
tenant read ✓ tenant-wide ✓ tenant-wide ✓ tenant-wide ✓ tenant-wide ✓
update ✓ tenant-wide
create ✓
delete ✓
manage (tier, status, residency, identity verification) ✓
tenant_member read ✓ tenant-wide ✓ tenant-wide ✓ tenant-wide ✓ tenant-wide ✓
create ✓ tenant-wide
update ✓ tenant-wide
delete ✓ tenant-wide
project read ✓ ✓ ✓ ✓ ✓
create ✓ tenant-wide
update ✓
delete ✓ tenant-wide
member read ✓ ✓ ✓ ✓ ✓
create ✓
update ✓
delete ✓
token read ✓ ✓ ✓ ✓ ✓
create ✓ ✓ ✓ ✓
delete (own tokens; manage covers everyone's) ✓ ✓ ✓ ✓
manage (list and revoke other members' tokens) ✓
catalog read ✓ ✓ ✓ ✓ ✓
dataset read ✓ ✓ ✓ ✓
create ✓ ✓ ✓
update ✓ ✓ ✓
delete ✓
spec read ✓ ✓ ✓ ✓
create ✓ ✓ ✓
update ✓ ✓ ✓
delete ✓
run read ✓ ✓ ✓ ✓ ✓
create ✓ ✓
cancel ✓ ✓
update ✓ ✓
model read ✓ ✓ ✓ ✓
run (score) ✓ ✓
delete ✓
validate (submit, resubmit or cancel a governance validation) ✓ ✓
approve (needs the reviewer capability; never the submitter, never a token) ✓ with reviewer ✓ with reviewer ✓
update (deprecate a validated version) ✓
endpoint read ✓ ✓ ✓ ✓
run (score) ✓ ✓
create ✓
update ✓
promote ✓
delete ✓
manage (override a promotion gate; sessions only) ✓
plot read ✓ ✓ ✓ ✓
create ✓ ✓ ✓
run (render) ✓ ✓
delete (saved plots) ✓ ✓ ✓
embed read ✓ ✓ ✓ ✓
create ✓ ✓ ✓
delete ✓ ✓ ✓
webhook read ✓
create ✓
update (includes rotating the secret and replaying deliveries) ✓
delete ✓
plugin read ✓ ✓ ✓ ✓
create ✓
delete ✓
usage read ✓ ✓ ✓ ✓ ✓
billing read ✓ tenant-wide ✓
audit read ✓ tenant-wide ✓
quota read ✓
update ✓
delete ✓
kill_switch read ✓
update ✓
executor read ✓
update ✓
event create — — — — internal services only
tenant_deletion read ✓ tenant-wide ✓
create ✓ tenant-wide
cancel (within the grace period) ✓ tenant-wide
manage (purge, retry) ✓
tenant_export read ✓ tenant-wide
create ✓ tenant-wide
workflow read ✓ ✓ ✓ ✓
create ✓ ✓ ✓
update ✓ ✓ ✓
delete ✓
run ✓ ✓
cancel ✓ ✓
policy read ✓ ✓ ✓ ✓
create ✓
update ✓
delete ✓
tenant_policy read ✓ tenant-wide ✓ tenant-wide ✓ tenant-wide ✓ tenant-wide
create ✓ tenant-wide
update ✓ tenant-wide
delete ✓ tenant-wide

Operators

Platform operators (verified e-mails in MAPI_OPERATOR_EMAILS, signed in; never through an API token) hold exactly these permissions, on every tenant: audit read, billing read, catalog read, executor read, executor update, kill_switch read, kill_switch update, member read, project read, quota delete, quota read, quota update, run read, tenant_deletion manage, tenant_deletion read, tenant_member read, tenant create, tenant delete, tenant manage, tenant read, token read, usage read. None of them reads tenant content: datasets, specs, models or plots.

Capabilities

A capability is granted on top of a role, per project membership; project admins hold every capability implicitly. A rule that needs one says so in the roles table ("✓ with reviewer").

Capability Needed for What it allows
reviewer model approve Approve or reject model validations that wait for a second person (POST /v1/validations/{id}/approvals), never the member's own submissions (SELF_APPROVAL_FORBIDDEN) and never through an API token. Granted per project membership (capabilities on the membership, or the Reviewer column of Members); viewers cannot hold it.

Token scopes

A token acts as its owner, narrowed by its scopes: both the owner's role and a scope must allow an action. admin covers everything the owner's role allows; score:<alias> covers one endpoint (score:* every endpoint of the project).

Resource Action models:read runs:create score:* plugins:publish datasets:write endpoints:promote webhooks:manage workflows:write workflows:run models:validate policies:manage runs:write
project read ✓ ✓ ✓
catalog read ✓ ✓ ✓ ✓
dataset read ✓ ✓ ✓ ✓ ✓
create ✓
update ✓
spec read ✓ ✓ ✓
run read ✓ ✓ ✓ ✓ ✓
create ✓ ✓ ✓
cancel ✓ ✓
update ✓
model read ✓ ✓ ✓ ✓ ✓
run ✓ ✓ ✓
validate ✓
endpoint read ✓ ✓ ✓ ✓ ✓
run ✓ ✓
create ✓
update ✓
promote ✓
delete ✓
plot read ✓ ✓ ✓
run ✓
webhook read ✓
create ✓
update ✓
delete ✓
plugin read ✓
create ✓
delete ✓
usage read ✓ ✓ ✓
workflow read ✓ ✓ ✓ ✓ ✓
create ✓
update ✓ ✓
run ✓
cancel ✓
policy read ✓ ✓ ✓ ✓ ✓
create ✓
update ✓
delete ✓

Trust tiers

Tier Executor must provide vCPU-s / day vCPU-s / month Concurrent runs Fan-out tasks Largest class Storage Egress / month Requests / min
internal isolation ≥ process — — 100 1,000 — — — 6,000
self-hosted-trusted isolation ≥ process — — — — — — — —
verified isolation ≥ gvisor, egress and DNS enforced 86,400 1,000,000 20 256 L 100 GiB 100 GiB 600
public isolation ≥ gvisor, egress and DNS enforced 3,600 36,000 2 16 S 2 GiB 5 GiB 60

Platform-wide (global) defaults: concurrent_runs = 700. A dash means no limit at that level.