{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/stormmcp/json-schema/stormmcp-replace-app-approvals-request-schema.json",
  "title": "ReplaceAppApprovalsRequest",
  "description": "The app-approval replace-set (MCPG-1649, PRD SM2): the full principal set the Server\nManagement permissions modal submits, diffed server-side. Principals added receive the D7\ndefault grant (`ToolMode = All`); retained principals are untouched (a modal save\nnever resets a tool narrowing); removed principals lose their row; bool ReplaceAppApprovalsRequest.AllUsers\ntransitions follow the everyone-revoke lifecycle.",
  "x-generated": "2026-11-10",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/stormmcp-approvals-api-openapi.yml#/components/schemas/ReplaceAppApprovalsRequest",
  "required": [
    "allUsers"
  ],
  "type": "object",
  "properties": {
    "allUsers": {
      "type": "boolean",
      "description": "Gets a value indicating whether the library is approved for everyone (the D6\napp-approved population is then tenant-wide)."
    },
    "userIds": {
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid"
      },
      "description": "Gets the individually approved Platform user ids (never the Identity token\n`sub`). Duplicates and Guid Guid.Empty are rejected."
    },
    "groupIds": {
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid"
      },
      "description": "Gets the approved Platform group ids (never Keycloak group ids or paths).\nDuplicates and Guid Guid.Empty are rejected."
    }
  }
}