{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/trimble/json-schema/trimble-issue-permissions-schema.json",
  "title": "IssuePermissions",
  "description": "Issue permissions resource. Contains the explicit ACL stored on the issue and optionally the inherited ACL derived from creator/assignee relationships.\n\n**GET** returns the stored explicit ACL plus `updatedAt`/`updatedBy` metadata. The `inheritedAcl` field is included only when `?fields=inheritedAcl` is passed.\n\n**PATCH** fully replaces the explicit ACL (last-write-wins). Only `\"edit\"` and `\"view\"` bucket keys are accepted; `\"full\"` causes 400.\n\nAvailable only for PROJECT context issues — returns 404 for FILE context.",
  "x-generated": "2026-11-11",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/trimble-connect-issues-openapi.yml#/components/schemas/IssuePermissions",
  "type": "object",
  "properties": {
    "acl": {
      "type": "object",
      "additionalProperties": {
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "description": "Explicit ACL buckets stored on this issue. Keys are `\"edit\"` and `\"view\"` only (`\"full\"` is an internal bucket and is never returned).\n\n**Bucket → actions mapping:**\n- `\"edit\"` → `issue:Read`, `issue:Update`, `issue:AddLinks`, `issue:DeleteLinks`, `issue:ReadLinks`, `issue:UpdatePermissions` (does NOT include `issue:Delete`)\n- `\"view\"` → `issue:Read`, `issue:ReadLinks`\n\n**Identity formats:**\n- `users:{tid}` — specific Trimble Identity user\n- `tc-groups:{groupId}` — specific Connect project group\n- `tc-groups:*` — all project members (wildcard; valid in `\"view\"` bucket)\n\nMaximum 100 identities across all buckets combined.",
      "enum": [
        "edit",
        "view"
      ]
    },
    "inheritedAcl": {
      "type": "object",
      "additionalProperties": {
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "description": "Inherited ACL based on issue creator and assignees — only present when `?fields=inheritedAcl` is requested. Keys are `\"edit\"` and `\"view\"` only. Creator and assignees always inherit the `edit` bucket floor. This field is read-only and cannot be modified via PATCH."
    },
    "updatedAt": {
      "type": "string",
      "format": "date-time",
      "description": "When the permissions were last patched — null before the first PATCH"
    },
    "updatedBy": {
      "type": "string",
      "description": "Who last patched the permissions — null before the first PATCH"
    }
  }
}