Skip to content

Access Grants

Access grants are individual permissions given to a user or team on a specific resource. They complement org roles by providing granular control.

POST /access-grants
{
"subject_type": "user",
"subject_id": "user-uuid",
"verb": "write",
"resource_type": "project",
"resource_id": "project-uuid"
}

The operation is idempotent — creating a duplicate grant returns 200 with the existing grant.

VerbWhat it allows
readView the resource
writeModify the resource
deleteRemove the resource
manage_membersAdd/remove members
manage_grantsCreate/revoke access grants
useUse the resource

org, project, team, tool_config, notification.

A user can only grant a verb they already hold. You cannot give permissions you don’t have yourself. This prevents privilege escalation through the grant system.

  • Org admin/owner can grant anything
  • Otherwise, the caller must have manage_grants on the target resource AND must already hold the verb they’re granting
  • Org admin/owner can revoke any grant
  • Otherwise, the caller can revoke grants they created OR if they have manage_grants on the grant’s resource
GET /access-grants?subject_type=user&resource_type=project

Non-admin callers can only list their own grants — their query params are overridden to force subject_type=user and subject_id=caller.

  • POST /access-grants — Create a grant
  • GET /access-grants — List grants visible to you
  • DELETE /access-grants/{id} — Revoke a grant
  • GET /access-events — Query the audit trail