{
  "openapi": "3.1.0",
  "info": {
    "title": "Veyora partner integration contract",
    "version": "1.15.0",
    "description": "Additive partner contract for rooms, iframe, portable sessions, administrator webhooks and tenant-bound course management. Specification version is independent of SDK/package versions. Availability requires migrations and explicit server activation. Existing issuer integrations use their scoped management key. Portal applications use one hashed, scoped application key and persistent exact origins. No browser or mobile client may hold server credentials."
  },
  "servers": [
    {
      "url": "/"
    }
  ],
  "paths": {
    "/api/partner/sessions": {
      "post": {
        "summary": "Backend only: verify signed linked identity and create a room-scoped session",
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "assertion",
                  "roomId"
                ],
                "properties": {
                  "assertion": {
                    "$ref": "#/components/schemas/Assertion"
                  },
                  "roomId": {
                    "type": "string",
                    "format": "uuid"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Session"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Unavailable or feature disabled",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "operationId": "issueNativeSession",
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/session/renew": {
      "post": {
        "summary": "Renew the current room session; native requests need no Origin header",
        "security": [
          {
            "OpaqueSession": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "roomId"
                ],
                "properties": {
                  "roomId": {
                    "type": "string",
                    "format": "uuid"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Renewal"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Unavailable or feature disabled",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "operationId": "renewSession",
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/session/logout": {
      "post": {
        "summary": "Revoke API session; client must disconnect its media connection separately",
        "security": [
          {
            "OpaqueSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "ok"
                  ],
                  "properties": {
                    "ok": {
                      "const": true
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Unavailable or feature disabled",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "operationId": "logoutSession",
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/rooms/{roomId}/opaque-meeting-token": {
      "post": {
        "summary": "Get a LiveKit grant after admission and host-start checks",
        "security": [
          {
            "OpaqueSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaGrant"
                }
              }
            }
          },
          "202": {
            "description": "Waiting for host or admission; no media token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "string"
                    },
                    "error": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Unavailable or feature disabled",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "operationId": "getMediaCredentials",
        "x-stability": "compatibility-baseline-v1"
      },
      "parameters": [
        {
          "in": "path",
          "name": "roomId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/api/rooms/{roomId}/opaque-waiting-room/request": {
      "post": {
        "summary": "Request or read own admission",
        "security": [
          {
            "OpaqueSession": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "maxProperties": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Admission"
                }
              }
            }
          },
          "202": {
            "description": "Admission pending",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Admission"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Unavailable or feature disabled",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "operationId": "requestAdmission",
        "x-stability": "compatibility-baseline-v1"
      },
      "parameters": [
        {
          "in": "path",
          "name": "roomId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/api/rooms/{roomId}/opaque-waiting-room/decision": {
      "post": {
        "summary": "Host only: admit or deny a pending participant",
        "security": [
          {
            "OpaqueSession": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "identity",
                  "decision"
                ],
                "properties": {
                  "identity": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "decision": {
                    "enum": [
                      "admitted",
                      "denied"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Admission"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Unavailable or feature disabled",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "operationId": "decideAdmission",
        "x-stability": "compatibility-baseline-v1"
      },
      "parameters": [
        {
          "in": "path",
          "name": "roomId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/api/rooms/{roomId}/opaque-waiting-room": {
      "get": {
        "summary": "Host only: list pending admission records",
        "security": [
          {
            "OpaqueSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "Admission list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "requests": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "user_id": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "status": {
                            "enum": [
                              "pending",
                              "admitted",
                              "denied"
                            ]
                          }
                        },
                        "required": [
                          "user_id",
                          "status"
                        ]
                      }
                    },
                    "status": {
                      "const": 200
                    }
                  },
                  "required": [
                    "status",
                    "requests"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "operationId": "listAdmissions",
        "x-stability": "compatibility-baseline-v1"
      },
      "parameters": [
        {
          "in": "path",
          "name": "roomId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/api/session/me": {
      "get": {
        "summary": "Read identity from verified opaque session",
        "security": [
          {
            "OpaqueSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "Identity",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "tenantId",
                    "userId"
                  ],
                  "properties": {
                    "tenantId": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "userId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "operationId": "getSessionIdentity",
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/v1/rooms": {
      "get": {
        "operationId": "listRooms",
        "summary": "List rooms in the API key organization",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "after",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "UUID cursor page",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "rooms": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Room"
                      }
                    },
                    "nextCursor": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "rooms",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/InvalidCredentials"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "$ref": "#/components/responses/MethodNotAllowed"
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "x-stability": "compatibility-baseline-v1"
      },
      "post": {
        "operationId": "createRoom",
        "summary": "Create a room with safe request replay",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "description": "Stable for retries, scoped to this API key. Changed content gives 409. Changing API keys changes this scope.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{8,128}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateRoom"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Existing room returned",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "room": {
                      "$ref": "#/components/schemas/Room"
                    },
                    "replayed": {
                      "const": true
                    }
                  },
                  "required": [
                    "room",
                    "replayed"
                  ]
                }
              }
            }
          },
          "201": {
            "description": "Room created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "room": {
                      "$ref": "#/components/schemas/Room"
                    },
                    "replayed": {
                      "const": false
                    }
                  },
                  "required": [
                    "room",
                    "replayed"
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/InvalidCredentials"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "$ref": "#/components/responses/MethodNotAllowed"
          },
          "409": {
            "description": "Idempotency-Key reused with different content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/developer/v1/organizations/{organizationId}/webhook": {
      "parameters": [
        {
          "name": "organizationId",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "operationId": "getWebhookConfiguration",
        "security": [
          {
            "UserSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "Webhook configuration; secret is returned once on configure only",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "configured",
                    "url",
                    "enabled",
                    "events"
                  ],
                  "properties": {
                    "configured": {
                      "type": "boolean"
                    },
                    "url": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "enabled": {
                      "type": "boolean"
                    },
                    "events": {
                      "type": "array",
                      "items": {
                        "enum": [
                          "room.created",
                          "room.ended",
                          "document.ready",
                          "session.stats_final",
                          "period.closed"
                        ]
                      }
                    }
                  },
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      },
      "post": {
        "operationId": "configureWebhook",
        "security": [
          {
            "UserSession": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "url"
                ],
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "maxLength": 2048
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Webhook configuration; secret is returned once on configure only",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "configured",
                    "url",
                    "enabled",
                    "events",
                    "secret"
                  ],
                  "properties": {
                    "configured": {
                      "type": "boolean"
                    },
                    "url": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "enabled": {
                      "type": "boolean"
                    },
                    "events": {
                      "type": "array",
                      "items": {
                        "enum": [
                          "room.created",
                          "room.ended",
                          "document.ready",
                          "session.stats_final",
                          "period.closed"
                        ]
                      }
                    },
                    "secret": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_-]{43}$"
                    }
                  },
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      },
      "delete": {
        "operationId": "disableWebhook",
        "security": [
          {
            "UserSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "Webhook configuration; secret is returned once on configure only",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "configured",
                    "url",
                    "enabled",
                    "events"
                  ],
                  "properties": {
                    "configured": {
                      "type": "boolean"
                    },
                    "url": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "enabled": {
                      "type": "boolean"
                    },
                    "events": {
                      "type": "array",
                      "items": {
                        "enum": [
                          "room.created",
                          "room.ended",
                          "document.ready",
                          "session.stats_final",
                          "period.closed"
                        ]
                      }
                    }
                  },
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/partner/v1/issuers/{issuer}/identities": {
      "parameters": [
        {
          "name": "issuer",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{1,159}$"
          }
        }
      ],
      "post": {
        "operationId": "provisionIdentity",
        "security": [
          {
            "PartnerManagementKey": []
          }
        ],
        "x-required-management-scope": "identities:write",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "subject",
                  "display_name"
                ],
                "properties": {
                  "subject": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "display_name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 60
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "user_id",
                    "linked"
                  ],
                  "properties": {
                    "user_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "linked": {
                      "const": true
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stable occurrence identifier reused with a different definition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/partner/v1/issuers/{issuer}/occurrences": {
      "parameters": [
        {
          "name": "issuer",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{1,159}$"
          }
        }
      ],
      "post": {
        "operationId": "ensureOccurrence",
        "security": [
          {
            "PartnerManagementKey": []
          }
        ],
        "x-required-management-scope": "occurrences:write",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "external_id",
                  "name",
                  "starts_at",
                  "ends_at",
                  "timezone",
                  "max_participants",
                  "waiting_room_enabled"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$"
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "starts_at": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "ends_at": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "timezone": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "max_participants": {
                    "type": "integer",
                    "minimum": 2,
                    "maximum": 100
                  },
                  "waiting_room_enabled": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "room_id"
                  ],
                  "properties": {
                    "room_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "replayed": {
                      "type": "boolean"
                    },
                    "cancelled": {
                      "type": "boolean"
                    },
                    "user_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "removed": {
                      "type": "boolean"
                    },
                    "enforcement_pending": {
                      "type": "boolean"
                    },
                    "media_enforcement": {
                      "enum": [
                        "pending",
                        "complete"
                      ]
                    },
                    "retry_after": {
                      "const": 5
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stable occurrence identifier reused with a different definition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/partner/v1/issuers/{issuer}/participants": {
      "parameters": [
        {
          "name": "issuer",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{1,159}$"
          }
        }
      ],
      "post": {
        "operationId": "setOccurrenceParticipant",
        "security": [
          {
            "PartnerManagementKey": []
          }
        ],
        "x-required-management-scope": "participants:write",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "object",
                    "required": [
                      "external_id",
                      "subject",
                      "role",
                      "permissions"
                    ],
                    "properties": {
                      "external_id": {
                        "type": "string",
                        "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$"
                      },
                      "subject": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      },
                      "role": {
                        "enum": [
                          "host",
                          "participant"
                        ]
                      },
                      "permissions": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "microphone": {
                            "type": "boolean"
                          },
                          "camera": {
                            "type": "boolean"
                          },
                          "screen": {
                            "type": "boolean"
                          },
                          "chat": {
                            "type": "boolean"
                          },
                          "files": {
                            "type": "boolean"
                          },
                          "hands": {
                            "type": "boolean"
                          },
                          "board": {
                            "type": "boolean"
                          },
                          "rename": {
                            "type": "boolean"
                          },
                          "recording": {
                            "type": "boolean"
                          },
                          "captions": {
                            "type": "boolean"
                          },
                          "notes": {
                            "type": "boolean"
                          },
                          "apps": {
                            "type": "boolean"
                          },
                          "assistant": {
                            "type": "boolean"
                          }
                        }
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "required": [
                      "external_id",
                      "subject",
                      "remove"
                    ],
                    "properties": {
                      "external_id": {
                        "type": "string",
                        "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$"
                      },
                      "subject": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      },
                      "remove": {
                        "const": true
                      }
                    },
                    "additionalProperties": false
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "room_id"
                  ],
                  "properties": {
                    "room_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "replayed": {
                      "type": "boolean"
                    },
                    "cancelled": {
                      "type": "boolean"
                    },
                    "user_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "removed": {
                      "type": "boolean"
                    },
                    "enforcement_pending": {
                      "type": "boolean"
                    },
                    "media_enforcement": {
                      "enum": [
                        "pending",
                        "complete"
                      ]
                    },
                    "retry_after": {
                      "const": 5
                    }
                  }
                }
              }
            }
          },
          "202": {
            "description": "Removal or permission update committed; media enforcement pending",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "room_id"
                  ],
                  "properties": {
                    "room_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "replayed": {
                      "type": "boolean"
                    },
                    "cancelled": {
                      "type": "boolean"
                    },
                    "user_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "removed": {
                      "type": "boolean"
                    },
                    "enforcement_pending": {
                      "type": "boolean"
                    },
                    "media_enforcement": {
                      "enum": [
                        "pending",
                        "complete"
                      ]
                    },
                    "retry_after": {
                      "const": 5
                    }
                  },
                  "description": "Database access is revoked immediately; media removal is attempted now and retried durably. 202 does not certify completed disconnection. Existing self-hosted media JWTs have a bounded replay window; see docs/INTEGRATION-3-6.md."
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stable occurrence identifier reused with a different definition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/partner/v1/issuers/{issuer}/identity-revocations": {
      "parameters": [
        {
          "name": "issuer",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{1,159}$"
          }
        }
      ],
      "post": {
        "operationId": "revokePartnerIdentity",
        "security": [
          {
            "PartnerManagementKey": []
          }
        ],
        "x-required-management-scope": "identities:revoke",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "subject"
                ],
                "properties": {
                  "subject": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Idempotent replay with media enforcement completed, or no affected media connection",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "revoked",
                    "enforcement_pending",
                    "media_enforcement"
                  ],
                  "properties": {
                    "revoked": {
                      "const": true
                    },
                    "enforcement_pending": {
                      "type": "boolean"
                    },
                    "media_enforcement": {
                      "enum": [
                        "pending",
                        "complete"
                      ]
                    },
                    "retry_after": {
                      "const": 5
                    }
                  },
                  "description": "Database access is revoked immediately; media removal is attempted now and retried durably. 202 does not certify completed disconnection. Existing self-hosted media JWTs have a bounded replay window; see docs/INTEGRATION-3-6.md."
                }
              }
            }
          },
          "202": {
            "description": "Revocation committed; durable media enforcement pending",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "revoked",
                    "enforcement_pending",
                    "media_enforcement"
                  ],
                  "properties": {
                    "revoked": {
                      "const": true
                    },
                    "enforcement_pending": {
                      "type": "boolean"
                    },
                    "media_enforcement": {
                      "enum": [
                        "pending",
                        "complete"
                      ]
                    },
                    "retry_after": {
                      "const": 5
                    }
                  },
                  "description": "Database access is revoked immediately; media removal is attempted now and retried durably. 202 does not certify completed disconnection. Existing self-hosted media JWTs have a bounded replay window; see docs/INTEGRATION-3-6.md."
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stable occurrence identifier reused with a different definition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/partner/v1/issuers/{issuer}/cancellations": {
      "parameters": [
        {
          "name": "issuer",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{1,159}$"
          }
        }
      ],
      "post": {
        "operationId": "cancelOccurrence",
        "security": [
          {
            "PartnerManagementKey": []
          }
        ],
        "x-required-management-scope": "occurrences:cancel",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Idempotent replay with media enforcement completed, or no affected media connection",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "room_id"
                  ],
                  "properties": {
                    "room_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "replayed": {
                      "type": "boolean"
                    },
                    "cancelled": {
                      "type": "boolean"
                    },
                    "user_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "removed": {
                      "type": "boolean"
                    },
                    "enforcement_pending": {
                      "type": "boolean"
                    },
                    "media_enforcement": {
                      "enum": [
                        "pending",
                        "complete"
                      ]
                    },
                    "retry_after": {
                      "const": 5
                    }
                  },
                  "description": "Database access is revoked immediately; media removal is attempted now and retried durably. 202 does not certify completed disconnection. Existing self-hosted media JWTs have a bounded replay window; see docs/INTEGRATION-3-6.md."
                }
              }
            }
          },
          "202": {
            "description": "Revocation committed; durable media enforcement pending",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "room_id"
                  ],
                  "properties": {
                    "room_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "replayed": {
                      "type": "boolean"
                    },
                    "cancelled": {
                      "type": "boolean"
                    },
                    "user_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "removed": {
                      "type": "boolean"
                    },
                    "enforcement_pending": {
                      "type": "boolean"
                    },
                    "media_enforcement": {
                      "enum": [
                        "pending",
                        "complete"
                      ]
                    },
                    "retry_after": {
                      "const": 5
                    }
                  },
                  "description": "Database access is revoked immediately; media removal is attempted now and retried durably. 202 does not certify completed disconnection. Existing self-hosted media JWTs have a bounded replay window; see docs/INTEGRATION-3-6.md."
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stable occurrence identifier reused with a different definition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/partner/web-ticket": {
      "post": {
        "operationId": "issueWebTicket",
        "security": [
          {
            "PartnerKey": []
          }
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "assertion",
                  "roomId",
                  "parentOrigin",
                  "challenge"
                ],
                "properties": {
                  "assertion": {
                    "$ref": "#/components/schemas/Assertion"
                  },
                  "roomId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "parentOrigin": {
                    "type": "string",
                    "format": "uri"
                  },
                  "challenge": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9_-]{43}$"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebTicket"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/developer/v1/organizations/{organizationId}/applications": {
      "parameters": [
        {
          "name": "organizationId",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "operationId": "listApplications",
        "security": [
          {
            "UserSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "Application metadata; private key returned once on create/rotate only",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "applications"
                  ],
                  "properties": {
                    "applications": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Application"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      },
      "post": {
        "operationId": "createApplication",
        "security": [
          {
            "UserSession": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name",
                  "veyoraOrigin",
                  "origins",
                  "webEnabled",
                  "nativeEnabled",
                  "scopes"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "veyoraOrigin": {
                    "type": "string",
                    "format": "uri",
                    "maxLength": 255
                  },
                  "origins": {
                    "type": "array",
                    "maxItems": 10,
                    "uniqueItems": true,
                    "items": {
                      "type": "string",
                      "format": "uri",
                      "maxLength": 255
                    }
                  },
                  "webEnabled": {
                    "type": "boolean"
                  },
                  "nativeEnabled": {
                    "type": "boolean"
                  },
                  "scopes": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 6,
                    "uniqueItems": true,
                    "items": {
                      "enum": [
                        "identities:write",
                        "identities:revoke",
                        "occurrences:write",
                        "participants:write",
                        "occurrences:cancel",
                        "sessions:issue"
                      ]
                    }
                  },
                  "expiresInDays": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 365,
                    "default": 30
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Application metadata; private key returned once on create/rotate only",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApplicationCredential"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/developer/v1/organizations/{organizationId}/applications/{applicationId}": {
      "parameters": [
        {
          "name": "organizationId",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "name": "applicationId",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "patch": {
        "operationId": "updateApplication",
        "security": [
          {
            "UserSession": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name",
                  "veyoraOrigin",
                  "origins",
                  "webEnabled",
                  "nativeEnabled",
                  "scopes"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "veyoraOrigin": {
                    "type": "string",
                    "format": "uri",
                    "maxLength": 255
                  },
                  "origins": {
                    "type": "array",
                    "maxItems": 10,
                    "uniqueItems": true,
                    "items": {
                      "type": "string",
                      "format": "uri",
                      "maxLength": 255
                    }
                  },
                  "webEnabled": {
                    "type": "boolean"
                  },
                  "nativeEnabled": {
                    "type": "boolean"
                  },
                  "scopes": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 6,
                    "uniqueItems": true,
                    "items": {
                      "enum": [
                        "identities:write",
                        "identities:revoke",
                        "occurrences:write",
                        "participants:write",
                        "occurrences:cancel",
                        "sessions:issue"
                      ]
                    }
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Application metadata; private key returned once on create/rotate only",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "application"
                  ],
                  "properties": {
                    "application": {
                      "$ref": "#/components/schemas/Application"
                    }
                  }
                }
              }
            }
          },
          "202": {
            "description": "Access revoked; durable media disconnection pending",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "application"
                  ],
                  "properties": {
                    "application": {
                      "$ref": "#/components/schemas/Application"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/developer/v1/organizations/{organizationId}/applications/{applicationId}/rotate": {
      "parameters": [
        {
          "name": "organizationId",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "name": "applicationId",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "operationId": "rotateApplicationKey",
        "security": [
          {
            "UserSession": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [],
                "properties": {
                  "expiresInDays": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 365,
                    "default": 30
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Application metadata; private key returned once on create/rotate only",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApplicationCredential"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/developer/v1/organizations/{organizationId}/applications/{applicationId}/revoke": {
      "parameters": [
        {
          "name": "organizationId",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "name": "applicationId",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "operationId": "revokeApplication",
        "security": [
          {
            "UserSession": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [],
                "properties": {},
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Application metadata; private key returned once on create/rotate only",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "application"
                  ],
                  "properties": {
                    "application": {
                      "$ref": "#/components/schemas/Application"
                    }
                  }
                }
              }
            }
          },
          "202": {
            "description": "Access revoked; durable media disconnection pending",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "application"
                  ],
                  "properties": {
                    "application": {
                      "$ref": "#/components/schemas/Application"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/applications/v1/{applicationId}/identities": {
      "parameters": [
        {
          "name": "applicationId",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "operationId": "applicationProvisionIdentity",
        "security": [
          {
            "ApplicationKey": []
          }
        ],
        "x-required-management-scope": "identities:write",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "subject",
                  "display_name"
                ],
                "properties": {
                  "subject": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "display_name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 60
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "user_id",
                    "linked"
                  ],
                  "properties": {
                    "user_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "linked": {
                      "const": true
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stable occurrence identifier reused with a different definition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/applications/v1/{applicationId}/occurrences": {
      "parameters": [
        {
          "name": "applicationId",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "operationId": "applicationEnsureOccurrence",
        "security": [
          {
            "ApplicationKey": []
          }
        ],
        "x-required-management-scope": "occurrences:write",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "external_id",
                  "name",
                  "starts_at",
                  "ends_at",
                  "timezone",
                  "max_participants",
                  "waiting_room_enabled"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$"
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "starts_at": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "ends_at": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "timezone": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "max_participants": {
                    "type": "integer",
                    "minimum": 2,
                    "maximum": 100
                  },
                  "waiting_room_enabled": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "room_id"
                  ],
                  "properties": {
                    "room_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "replayed": {
                      "type": "boolean"
                    },
                    "cancelled": {
                      "type": "boolean"
                    },
                    "user_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "removed": {
                      "type": "boolean"
                    },
                    "enforcement_pending": {
                      "type": "boolean"
                    },
                    "media_enforcement": {
                      "enum": [
                        "pending",
                        "complete"
                      ]
                    },
                    "retry_after": {
                      "const": 5
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stable occurrence identifier reused with a different definition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/applications/v1/{applicationId}/participants": {
      "parameters": [
        {
          "name": "applicationId",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "operationId": "applicationSetOccurrenceParticipant",
        "security": [
          {
            "ApplicationKey": []
          }
        ],
        "x-required-management-scope": "participants:write",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "object",
                    "required": [
                      "external_id",
                      "subject",
                      "role",
                      "permissions"
                    ],
                    "properties": {
                      "external_id": {
                        "type": "string",
                        "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$"
                      },
                      "subject": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      },
                      "role": {
                        "enum": [
                          "host",
                          "participant"
                        ]
                      },
                      "permissions": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "microphone": {
                            "type": "boolean"
                          },
                          "camera": {
                            "type": "boolean"
                          },
                          "screen": {
                            "type": "boolean"
                          },
                          "chat": {
                            "type": "boolean"
                          },
                          "files": {
                            "type": "boolean"
                          },
                          "hands": {
                            "type": "boolean"
                          },
                          "board": {
                            "type": "boolean"
                          },
                          "rename": {
                            "type": "boolean"
                          },
                          "recording": {
                            "type": "boolean"
                          },
                          "captions": {
                            "type": "boolean"
                          },
                          "notes": {
                            "type": "boolean"
                          },
                          "apps": {
                            "type": "boolean"
                          },
                          "assistant": {
                            "type": "boolean"
                          }
                        }
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "required": [
                      "external_id",
                      "subject",
                      "remove"
                    ],
                    "properties": {
                      "external_id": {
                        "type": "string",
                        "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$"
                      },
                      "subject": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      },
                      "remove": {
                        "const": true
                      }
                    },
                    "additionalProperties": false
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "room_id"
                  ],
                  "properties": {
                    "room_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "replayed": {
                      "type": "boolean"
                    },
                    "cancelled": {
                      "type": "boolean"
                    },
                    "user_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "removed": {
                      "type": "boolean"
                    },
                    "enforcement_pending": {
                      "type": "boolean"
                    },
                    "media_enforcement": {
                      "enum": [
                        "pending",
                        "complete"
                      ]
                    },
                    "retry_after": {
                      "const": 5
                    }
                  }
                }
              }
            }
          },
          "202": {
            "description": "Removal or permission update committed; media enforcement pending",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "room_id"
                  ],
                  "properties": {
                    "room_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "replayed": {
                      "type": "boolean"
                    },
                    "cancelled": {
                      "type": "boolean"
                    },
                    "user_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "removed": {
                      "type": "boolean"
                    },
                    "enforcement_pending": {
                      "type": "boolean"
                    },
                    "media_enforcement": {
                      "enum": [
                        "pending",
                        "complete"
                      ]
                    },
                    "retry_after": {
                      "const": 5
                    }
                  },
                  "description": "Database access is revoked immediately; media removal is attempted now and retried durably. 202 does not certify completed disconnection. Existing self-hosted media JWTs have a bounded replay window; see docs/INTEGRATION-3-6.md."
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stable occurrence identifier reused with a different definition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/applications/v1/{applicationId}/identity-revocations": {
      "parameters": [
        {
          "name": "applicationId",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "operationId": "applicationRevokePartnerIdentity",
        "security": [
          {
            "ApplicationKey": []
          }
        ],
        "x-required-management-scope": "identities:revoke",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "subject"
                ],
                "properties": {
                  "subject": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Idempotent replay with media enforcement completed, or no affected media connection",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "revoked",
                    "enforcement_pending",
                    "media_enforcement"
                  ],
                  "properties": {
                    "revoked": {
                      "const": true
                    },
                    "enforcement_pending": {
                      "type": "boolean"
                    },
                    "media_enforcement": {
                      "enum": [
                        "pending",
                        "complete"
                      ]
                    },
                    "retry_after": {
                      "const": 5
                    }
                  },
                  "description": "Database access is revoked immediately; media removal is attempted now and retried durably. 202 does not certify completed disconnection. Existing self-hosted media JWTs have a bounded replay window; see docs/INTEGRATION-3-6.md."
                }
              }
            }
          },
          "202": {
            "description": "Revocation committed; durable media enforcement pending",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "revoked",
                    "enforcement_pending",
                    "media_enforcement"
                  ],
                  "properties": {
                    "revoked": {
                      "const": true
                    },
                    "enforcement_pending": {
                      "type": "boolean"
                    },
                    "media_enforcement": {
                      "enum": [
                        "pending",
                        "complete"
                      ]
                    },
                    "retry_after": {
                      "const": 5
                    }
                  },
                  "description": "Database access is revoked immediately; media removal is attempted now and retried durably. 202 does not certify completed disconnection. Existing self-hosted media JWTs have a bounded replay window; see docs/INTEGRATION-3-6.md."
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stable occurrence identifier reused with a different definition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/applications/v1/{applicationId}/cancellations": {
      "parameters": [
        {
          "name": "applicationId",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "operationId": "applicationCancelOccurrence",
        "security": [
          {
            "ApplicationKey": []
          }
        ],
        "x-required-management-scope": "occurrences:cancel",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Idempotent replay with media enforcement completed, or no affected media connection",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "room_id"
                  ],
                  "properties": {
                    "room_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "replayed": {
                      "type": "boolean"
                    },
                    "cancelled": {
                      "type": "boolean"
                    },
                    "user_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "removed": {
                      "type": "boolean"
                    },
                    "enforcement_pending": {
                      "type": "boolean"
                    },
                    "media_enforcement": {
                      "enum": [
                        "pending",
                        "complete"
                      ]
                    },
                    "retry_after": {
                      "const": 5
                    }
                  },
                  "description": "Database access is revoked immediately; media removal is attempted now and retried durably. 202 does not certify completed disconnection. Existing self-hosted media JWTs have a bounded replay window; see docs/INTEGRATION-3-6.md."
                }
              }
            }
          },
          "202": {
            "description": "Revocation committed; durable media enforcement pending",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "room_id"
                  ],
                  "properties": {
                    "room_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "replayed": {
                      "type": "boolean"
                    },
                    "cancelled": {
                      "type": "boolean"
                    },
                    "user_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "removed": {
                      "type": "boolean"
                    },
                    "enforcement_pending": {
                      "type": "boolean"
                    },
                    "media_enforcement": {
                      "enum": [
                        "pending",
                        "complete"
                      ]
                    },
                    "retry_after": {
                      "const": 5
                    }
                  },
                  "description": "Database access is revoked immediately; media removal is attempted now and retried durably. 202 does not certify completed disconnection. Existing self-hosted media JWTs have a bounded replay window; see docs/INTEGRATION-3-6.md."
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Stable occurrence identifier reused with a different definition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/applications/v1/{applicationId}/sessions": {
      "post": {
        "operationId": "applicationIssueSession",
        "security": [
          {
            "ApplicationKey": []
          }
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "subject",
                  "roomId"
                ],
                "properties": {
                  "subject": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "roomId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "actorSubject": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "contextId": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Session"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      },
      "parameters": [
        {
          "name": "applicationId",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/api/applications/v1/{applicationId}/web-ticket": {
      "post": {
        "operationId": "applicationIssueWebTicket",
        "security": [
          {
            "ApplicationKey": []
          }
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "subject",
                  "roomId",
                  "parentOrigin",
                  "challenge"
                ],
                "properties": {
                  "subject": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "roomId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "parentOrigin": {
                    "type": "string",
                    "format": "uri"
                  },
                  "challenge": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9_-]{43}$"
                  },
                  "actorSubject": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "contextId": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebTicket"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      },
      "parameters": [
        {
          "name": "applicationId",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/api/developer/v1/organizations/{organizationId}/applications/{applicationId}/directory": {
      "parameters": [
        {
          "name": "organizationId",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "name": "applicationId",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "operationId": "managePeopleDirectory",
        "security": [
          {
            "UserSession": []
          }
        ],
        "description": "Private per-application directory. Updates require the current revision. Data source authority is immutable. Context roles are authorization decisions, not automatic room enrollment. No account password is created. Server clients must verify actor_subject themselves. Structures have explicit ancestry (12 levels); roles inherit to descendants only within their period. Batches <=500 operations/256 KiB are atomic, preview expires after 24h. Sync is resumable per committed chunk, not globally atomic. as_actor is trusted-server only; portal scope derives from JWT. Invitations require a verified customer account, no email is sent. Context-bound sessions are rechecked on access; media removal is asynchronous. Reusable activities have contextual members/leaders. Draft sessions resolve current activity defaults plus explicit overrides; preparation creates one private room and freezes reviewed settings. Prepared sessions are changed through explicit scheduling commands. Activity writes require identities:write + participants:write; preparation requires identities:write + occurrences:write. Prepared rooms enforce directory membership and participant settings. No automatic email sending. Daily/weekly recurrence <=200 slots on <=366 days; explicit gap/fold policies. Future edits preserve past/started sessions and individual exceptions. Schedule changes retire old rooms and rotate occurrence generations. Substitutes host only their assigned session/time. All future writes require participants:write; edits/cancellations also occurrences:cancel. No background recurrence worker, unbounded RRULE or notification email delivery. Daily workspaces are read-only previews for portal administrators; personal backend requests use as_actor from verified authentication. Parents may select active represented people only. Reminder preferences and acknowledgments belong to that actor. Internal reminders are materialized on refresh, with no email/SMS delivery. Historical presence requires signed provider events; closed overlapping intervals are merged and open or missing data never proves absence. Email settings and delivery logs require full administration. Verified contacts may be supplied or revoked only by the application backend without as_actor. Personal preferences require as_actor and explicit consent. The durable email worker is disabled by default, needs a configured provider and rechecks access before sending. Accepted means provider acknowledgement, not inbox delivery. Session services add versioned draft/published reports, author-only private notes, assigned tasks, audited manual attendance decisions independent of media events, contextual resources, scoped access explanations and integration configuration checks. External links retain their host controls; private documents require current access on each retrieval. Organization operations provide scoped dashboards, self-reported onboarding, optional conflict enforcement, in-app announcements, explicit quality reports and administrator retention/export tools. Exports exclude author-private notes and secrets; cleanup is previewed, time-limited and never automatic. Quality observations are not verified provider metrics. Pilot services add membership-bound bookings with atomic capacity/waitlist and admission gating, separately consented numeric RTC statistics, and durable personal calendar jobs. Backend leases never cross personal handlers. External provider configuration and physical-device validation remain separate.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DirectoryCommand"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Directory result; records include revision and source",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DirectoryResult"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Revision, immutable identity or source-authority conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "410": {
            "description": "Teaching data expired under the application retention policy",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/applications/v1/{applicationId}/directory": {
      "parameters": [
        {
          "name": "applicationId",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "operationId": "applicationPeopleDirectory",
        "security": [
          {
            "ApplicationKey": []
          }
        ],
        "description": "Private per-application directory. Updates require the current revision. Data source authority is immutable. Context roles are authorization decisions, not automatic room enrollment. No account password is created. Server clients must verify actor_subject themselves. Structures have explicit ancestry (12 levels); roles inherit to descendants only within their period. Batches <=500 operations/256 KiB are atomic, preview expires after 24h. Sync is resumable per committed chunk, not globally atomic. as_actor is trusted-server only; portal scope derives from JWT. Invitations require a verified customer account, no email is sent. Context-bound sessions are rechecked on access; media removal is asynchronous. Reusable activities have contextual members/leaders. Draft sessions resolve current activity defaults plus explicit overrides; preparation creates one private room and freezes reviewed settings. Prepared sessions are changed through explicit scheduling commands. Activity writes require identities:write + participants:write; preparation requires identities:write + occurrences:write. Prepared rooms enforce directory membership and participant settings. No automatic email sending. Daily/weekly recurrence <=200 slots on <=366 days; explicit gap/fold policies. Future edits preserve past/started sessions and individual exceptions. Schedule changes retire old rooms and rotate occurrence generations. Substitutes host only their assigned session/time. All future writes require participants:write; edits/cancellations also occurrences:cancel. No background recurrence worker, unbounded RRULE or notification email delivery. Daily workspaces are read-only previews for portal administrators; personal backend requests use as_actor from verified authentication. Parents may select active represented people only. Reminder preferences and acknowledgments belong to that actor. Internal reminders are materialized on refresh, with no email/SMS delivery. Historical presence requires signed provider events; closed overlapping intervals are merged and open or missing data never proves absence. Email settings and delivery logs require full administration. Verified contacts may be supplied or revoked only by the application backend without as_actor. Personal preferences require as_actor and explicit consent. The durable email worker is disabled by default, needs a configured provider and rechecks access before sending. Accepted means provider acknowledgement, not inbox delivery. Session services add versioned draft/published reports, author-only private notes, assigned tasks, audited manual attendance decisions independent of media events, contextual resources, scoped access explanations and integration configuration checks. External links retain their host controls; private documents require current access on each retrieval. Organization operations provide scoped dashboards, self-reported onboarding, optional conflict enforcement, in-app announcements, explicit quality reports and administrator retention/export tools. Exports exclude author-private notes and secrets; cleanup is previewed, time-limited and never automatic. Quality observations are not verified provider metrics. Pilot services add membership-bound bookings with atomic capacity/waitlist and admission gating, separately consented numeric RTC statistics, and durable personal calendar jobs. Backend leases never cross personal handlers. External provider configuration and physical-device validation remain separate.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApplicationDirectoryCommand"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Directory result; records include revision and source",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DirectoryResult"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Revision, immutable identity or source-authority conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "410": {
            "description": "Teaching data expired under the application retention policy",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/developer/v1/directory-workspaces": {
      "get": {
        "operationId": "listDirectoryWorkspaces",
        "security": [
          {
            "UserSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "Applications visible to the verified owner, administrator or delegated portal user. No key material.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "workspaces"
                  ],
                  "properties": {
                    "workspaces": {
                      "type": "array",
                      "maxItems": 200,
                      "items": {
                        "type": "object",
                        "required": [
                          "application_id",
                          "application_name",
                          "organization_id",
                          "organization_name",
                          "full_administration"
                        ],
                        "properties": {
                          "application_id": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "application_name": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 80
                          },
                          "organization_id": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "organization_name": {
                            "type": "string"
                          },
                          "full_administration": {
                            "type": "boolean"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/applications/v1/{applicationId}/resource-content": {
      "post": {
        "operationId": "applicationResourceContent",
        "summary": "Read a private library document through the partner server",
        "description": "Server-only application key. as_actor is a verified account subject supplied by the trusted backend. Authorization is repeated after storage retrieval. No public or signed object URL is issued. Up to 10 MiB.",
        "security": [
          {
            "ApplicationKey": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "applicationId",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResourceContentRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Authorized private bytes; no-store, nosniff and restrictive CSP",
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              },
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              },
              "image/jpeg": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Request refused or unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Request refused or unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Request refused or unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Request refused or unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Request refused or unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Request refused or unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "Request refused or unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Request refused or unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Request refused or unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/integration/releases": {
      "get": {
        "operationId": "getIntegrationReleases",
        "summary": "Read public package versions and archive checksums",
        "security": [],
        "responses": {
          "200": {
            "description": "Public version information, not an end-to-end qualification",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IntegrationReleaseInfo"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/applications/v1/{applicationId}/teaching-readiness": {
      "parameters": [
        {
          "name": "applicationId",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "operationId": "teachingGoLiveReadiness",
        "summary": "Read-only schema, scopes, collection and retention checks; not delivery proof",
        "security": [
          {
            "ApplicationKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Read-only configuration and runtime snapshot",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeachingReadiness"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/partner/web-exchange": {
      "post": {
        "operationId": "exchangeWebTicket",
        "security": [],
        "parameters": [
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Must equal the configured Veyora origin, not the parent site origin."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "ticket",
                  "roomId",
                  "parentOrigin",
                  "challenge"
                ],
                "properties": {
                  "ticket": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9_-]{43}$"
                  },
                  "roomId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "parentOrigin": {
                    "type": "string",
                    "format": "uri"
                  },
                  "challenge": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9_-]{43}$"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebSession"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Disabled, restarting or provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "x-stability": "compatibility-baseline-v1"
      }
    },
    "/api/partner/web-renew": {
      "post": {
        "summary": "Renew the current room session; native requests need no Origin header",
        "security": [
          {
            "OpaqueSession": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "roomId"
                ],
                "properties": {
                  "roomId": {
                    "type": "string",
                    "format": "uuid"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Renewal"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Route or resource unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Request too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Unavailable or feature disabled",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "operationId": "renewWebSession",
        "parameters": [
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Must equal the configured Veyora origin, not the parent site origin."
          }
        ],
        "x-stability": "compatibility-baseline-v1"
      }
    }
  },
  "components": {
    "securitySchemes": {
      "PartnerKey": {
        "type": "http",
        "scheme": "bearer",
        "description": "Independent server-only partner key, not a rooms developer key."
      },
      "OpaqueSession": {
        "type": "http",
        "scheme": "bearer",
        "description": "Opaque room-scoped session, not a Supabase JWT."
      },
      "ApiKey": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "vyk_test_ / vyk_live_"
      },
      "UserSession": {
        "type": "http",
        "scheme": "bearer",
        "description": "Veyora administrator Supabase JWT; not a room API key or an opaque participant session."
      },
      "PartnerManagementKey": {
        "type": "http",
        "scheme": "bearer",
        "description": "Distinct server-only managementApiKey, bound to exactly one configured issuer/tenant and managementScopes. Browser Origin requests are refused."
      },
      "ApplicationKey": {
        "type": "http",
        "scheme": "bearer",
        "description": "Server-only vya_test/live application key issued once in the organization portal. Scoped to one application and organization; revoked/expired/rotated keys fail at runtime."
      }
    },
    "schemas": {
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "request_id": {
            "type": "string"
          }
        },
        "required": [
          "error"
        ]
      },
      "Assertion": {
        "type": "object",
        "required": [
          "issuer",
          "audience",
          "subject",
          "tenantId",
          "issuedAt",
          "expiresAt",
          "nonce",
          "signature"
        ],
        "properties": {
          "issuer": {
            "type": "string"
          },
          "audience": {
            "type": "string"
          },
          "subject": {
            "type": "string",
            "maxLength": 200
          },
          "tenantId": {
            "type": "string",
            "format": "uuid"
          },
          "issuedAt": {
            "type": "integer",
            "description": "UTC milliseconds",
            "format": "int64"
          },
          "expiresAt": {
            "type": "integer",
            "description": "UTC milliseconds",
            "format": "int64"
          },
          "nonce": {
            "type": "string"
          },
          "signature": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          }
        }
      },
      "Session": {
        "type": "object",
        "required": [
          "token",
          "roomId",
          "expiresAt",
          "expires_in",
          "renewable"
        ],
        "properties": {
          "token": {
            "type": "string",
            "pattern": "^[A-Za-z0-9_-]{43}$"
          },
          "roomId": {
            "type": "string",
            "format": "uuid"
          },
          "expiresAt": {
            "type": "integer",
            "format": "int64"
          },
          "expires_in": {
            "type": "integer",
            "minimum": 1,
            "maximum": 900
          },
          "renewable": {
            "type": "boolean"
          }
        }
      },
      "Renewal": {
        "type": "object",
        "required": [
          "expiresAt",
          "expires_in",
          "renewable"
        ],
        "properties": {
          "expiresAt": {
            "type": "integer",
            "format": "int64"
          },
          "expires_in": {
            "type": "integer",
            "minimum": 1,
            "maximum": 900
          },
          "renewable": {
            "type": "boolean"
          }
        }
      },
      "Admission": {
        "type": "object",
        "properties": {
          "status": {
            "type": "integer",
            "enum": [
              200,
              202
            ]
          },
          "request": {
            "type": "object",
            "required": [
              "status"
            ],
            "properties": {
              "status": {
                "enum": [
                  "pending",
                  "admitted",
                  "denied",
                  "host",
                  "not_required"
                ]
              }
            }
          }
        },
        "required": [
          "status",
          "request"
        ]
      },
      "MediaGrant": {
        "type": "object",
        "required": [
          "serverUrl",
          "token",
          "roomId",
          "expiresIn"
        ],
        "properties": {
          "serverUrl": {
            "type": "string",
            "description": "wss:// media origin; ws:// loopback for tests only"
          },
          "token": {
            "type": "string"
          },
          "roomId": {
            "type": "string",
            "format": "uuid"
          },
          "expiresIn": {
            "type": "integer",
            "minimum": 1,
            "maximum": 900
          },
          "role": {
            "type": "string"
          }
        }
      },
      "Room": {
        "type": "object",
        "required": [
          "id",
          "name",
          "max_participants",
          "created_at"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "max_participants": {
            "type": "integer",
            "minimum": 2,
            "maximum": 100
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "CreateRoom": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80
          },
          "maxParticipants": {
            "type": "integer",
            "minimum": 2,
            "maximum": 100,
            "default": 30
          }
        }
      },
      "KeyMetadata": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-f0-9]{16}$"
          },
          "label": {
            "type": "string"
          },
          "environment": {
            "enum": [
              "test",
              "live"
            ]
          },
          "scopes": {
            "type": "array",
            "items": {
              "enum": [
                "rooms:read",
                "rooms:create"
              ]
            }
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "revoked_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "CreateKey": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "label",
          "scopes"
        ],
        "properties": {
          "label": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80
          },
          "scopes": {
            "type": "array",
            "minItems": 1,
            "maxItems": 2,
            "uniqueItems": true,
            "items": {
              "enum": [
                "rooms:read",
                "rooms:create"
              ]
            }
          },
          "expiresInDays": {
            "type": "integer",
            "minimum": 1,
            "maximum": 365,
            "default": 30
          }
        }
      },
      "IssuedKey": {
        "type": "object",
        "required": [
          "key",
          "record"
        ],
        "properties": {
          "key": {
            "type": "string",
            "description": "Shown once; backend secret. Never store in a browser application."
          },
          "record": {
            "$ref": "#/components/schemas/KeyMetadata"
          }
        }
      },
      "WebTicket": {
        "type": "object",
        "required": [
          "ticket",
          "expiresAt",
          "expires_in"
        ],
        "properties": {
          "ticket": {
            "type": "string",
            "pattern": "^[A-Za-z0-9_-]{43}$"
          },
          "expiresAt": {
            "type": "integer"
          },
          "expires_in": {
            "const": 60
          }
        }
      },
      "WebSession": {
        "type": "object",
        "required": [
          "token",
          "expiresAt",
          "expires_in"
        ],
        "properties": {
          "token": {
            "type": "string",
            "pattern": "^[A-Za-z0-9_-]{43}$"
          },
          "expiresAt": {
            "type": "integer"
          },
          "expires_in": {
            "type": "integer",
            "minimum": 1,
            "maximum": 900
          }
        }
      },
      "Application": {
        "type": "object",
        "required": [
          "id",
          "organization_id",
          "name",
          "environment",
          "veyora_origin",
          "origins",
          "web_enabled",
          "native_enabled",
          "scopes",
          "key_id",
          "expires_at",
          "revoked_at",
          "created_at",
          "updated_at",
          "active",
          "issuer",
          "enforcement_pending"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "organization_id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "environment": {
            "enum": [
              "test",
              "live"
            ]
          },
          "veyora_origin": {
            "type": "string"
          },
          "origins": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "web_enabled": {
            "type": "boolean"
          },
          "native_enabled": {
            "type": "boolean"
          },
          "scopes": {
            "type": "array",
            "minItems": 1,
            "maxItems": 6,
            "uniqueItems": true,
            "items": {
              "enum": [
                "identities:write",
                "identities:revoke",
                "occurrences:write",
                "participants:write",
                "occurrences:cancel",
                "sessions:issue"
              ]
            }
          },
          "key_id": {
            "type": "string"
          },
          "expires_at": {
            "type": "string"
          },
          "revoked_at": {
            "type": [
              "string",
              "null"
            ]
          },
          "created_at": {
            "type": "string"
          },
          "updated_at": {
            "type": "string"
          },
          "active": {
            "type": "boolean"
          },
          "issuer": {
            "type": "string"
          },
          "enforcement_pending": {
            "type": "boolean"
          }
        }
      },
      "ApplicationCredential": {
        "type": "object",
        "required": [
          "application",
          "key"
        ],
        "properties": {
          "application": {
            "$ref": "#/components/schemas/Application"
          },
          "key": {
            "type": "string",
            "pattern": "^vya_(test|live)_[a-f0-9]{16}_[A-Za-z0-9_-]{43}$"
          }
        },
        "additionalProperties": false
      },
      "DirectoryPerson": {
        "type": "object",
        "required": [
          "application_id",
          "external_id",
          "source",
          "revision",
          "display_name",
          "kind",
          "status",
          "updated_at"
        ],
        "properties": {
          "application_id": {
            "type": "string",
            "format": "uuid"
          },
          "external_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "source": {
            "enum": [
              "application",
              "veyora"
            ]
          },
          "revision": {
            "type": "integer",
            "minimum": 1
          },
          "display_name": {
            "type": "string"
          },
          "kind": {
            "enum": [
              "account",
              "person"
            ]
          },
          "status": {
            "enum": [
              "active",
              "inactive"
            ]
          },
          "updated_at": {
            "type": "string"
          }
        }
      },
      "DirectoryContext": {
        "type": "object",
        "required": [
          "application_id",
          "external_id",
          "source",
          "revision",
          "name",
          "kind"
        ],
        "properties": {
          "application_id": {
            "type": "string",
            "format": "uuid"
          },
          "external_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "source": {
            "enum": [
              "application",
              "veyora"
            ]
          },
          "revision": {
            "type": "integer",
            "minimum": 1
          },
          "name": {
            "type": "string"
          },
          "kind": {
            "enum": [
              "organization",
              "structure",
              "group",
              "session"
            ]
          },
          "parent_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "structure_type": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              null,
              "establishment",
              "branch",
              "department",
              "unit"
            ]
          }
        }
      },
      "DirectoryRelationship": {
        "type": "object",
        "required": [
          "application_id",
          "account_id",
          "person_id",
          "relationship",
          "active",
          "source",
          "revision"
        ],
        "properties": {
          "application_id": {
            "type": "string",
            "format": "uuid"
          },
          "account_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "person_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "relationship": {
            "enum": [
              "guardian",
              "delegate"
            ]
          },
          "active": {
            "type": "boolean"
          },
          "source": {
            "enum": [
              "application",
              "veyora"
            ]
          },
          "revision": {
            "type": "integer",
            "minimum": 1
          }
        }
      },
      "DirectoryMembership": {
        "type": "object",
        "required": [
          "application_id",
          "person_id",
          "context_id",
          "role",
          "active",
          "source",
          "revision",
          "assignment_id",
          "valid_from",
          "valid_until"
        ],
        "properties": {
          "application_id": {
            "type": "string",
            "format": "uuid"
          },
          "person_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "context_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "role": {
            "enum": [
              "participant",
              "observer",
              "teacher",
              "manager"
            ]
          },
          "active": {
            "type": "boolean"
          },
          "source": {
            "enum": [
              "application",
              "veyora"
            ]
          },
          "revision": {
            "type": "integer",
            "minimum": 1
          },
          "assignment_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$"
          },
          "valid_from": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "valid_until": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "effective": {
            "type": "boolean"
          }
        }
      },
      "DirectoryCommand": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "catalog"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {},
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "people.list"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "status": {
                    "enum": [
                      "active",
                      "inactive"
                    ]
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "people.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "display_name",
                  "kind"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "display_name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "account",
                      "person"
                    ]
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "people.status"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "status",
                  "revision"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "status": {
                    "enum": [
                      "active",
                      "inactive"
                    ]
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "contexts.list"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "contexts.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "name",
                  "kind"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "structure_type": {
                    "enum": [
                      "establishment",
                      "branch",
                      "department",
                      "unit"
                    ]
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "relationships.list"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "relationships.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "account_id",
                  "person_id",
                  "relationship",
                  "active"
                ],
                "properties": {
                  "account_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "relationship": {
                    "enum": [
                      "guardian",
                      "delegate"
                    ]
                  },
                  "active": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "memberships.list"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "effective": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "memberships.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "person_id",
                  "context_id",
                  "role",
                  "active"
                ],
                "properties": {
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "role": {
                    "enum": [
                      "participant",
                      "observer",
                      "teacher",
                      "manager"
                    ]
                  },
                  "active": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "assignment_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$"
                  },
                  "valid_from": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  },
                  "valid_until": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "access.check"
              },
              "data": {
                "type": "object",
                "required": [
                  "actor_subject",
                  "person_id",
                  "context_id",
                  "permission"
                ],
                "properties": {
                  "actor_subject": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "permission": {
                    "enum": [
                      "sessions:view",
                      "sessions:join",
                      "sessions:host",
                      "participants:view",
                      "participants:manage"
                    ]
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "administrators.list"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "administrators.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "actor_subject",
                  "context_id",
                  "active"
                ],
                "properties": {
                  "actor_subject": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "portal_user_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "uuid"
                  },
                  "active": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "valid_from": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  },
                  "valid_until": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "administrators.transfer"
              },
              "data": {
                "type": "object",
                "required": [
                  "from_subject",
                  "to_subject",
                  "context_id",
                  "revision"
                ],
                "properties": {
                  "from_subject": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "to_subject": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "portal_user_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "uuid"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "invitations.list"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "invitations.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "email",
                  "context_id",
                  "role",
                  "active"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "email": {
                    "type": "string",
                    "maxLength": 254
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "role": {
                    "enum": [
                      "participant",
                      "observer",
                      "teacher",
                      "manager"
                    ]
                  },
                  "active": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "valid_from": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  },
                  "valid_until": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "invitations.claim"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "actor_subject",
                  "verified_email"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "actor_subject": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "verified_email": {
                    "type": "string",
                    "maxLength": 254
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "batch.preview"
              },
              "data": {
                "type": "object",
                "required": [
                  "request_key",
                  "operations"
                ],
                "properties": {
                  "request_key": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$"
                  },
                  "operations": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 500,
                    "items": {
                      "$ref": "#/components/schemas/DirectoryMutation"
                    }
                  },
                  "run_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$"
                  },
                  "offset": {
                    "type": "integer",
                    "minimum": 0
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "batch.commit"
              },
              "data": {
                "type": "object",
                "required": [
                  "batch_id"
                ],
                "properties": {
                  "batch_id": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "batch.status"
              },
              "data": {
                "type": "object",
                "required": [
                  "batch_id"
                ],
                "properties": {
                  "batch_id": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "sync.begin"
              },
              "data": {
                "type": "object",
                "required": [
                  "run_id",
                  "fingerprint",
                  "total",
                  "chunk_size"
                ],
                "properties": {
                  "run_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$",
                    "maxLength": 80
                  },
                  "fingerprint": {
                    "type": "string",
                    "pattern": "^[a-f0-9]{64}$"
                  },
                  "total": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100000
                  },
                  "chunk_size": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 500
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "sync.status"
              },
              "data": {
                "type": "object",
                "required": [
                  "run_id"
                ],
                "properties": {
                  "run_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "activities.list"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activities.get"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activities.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "name",
                  "kind",
                  "settings"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "course",
                      "team",
                      "program"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "settings": {
                    "$ref": "#/components/schemas/ActivitySettings"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "activity-sessions.list"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "activity_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-sessions.get"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-sessions.prepare"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-sessions.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "activity_id",
                  "name",
                  "starts_at",
                  "ends_at",
                  "overrides"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$"
                  },
                  "activity_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "starts_at": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "ends_at": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "overrides": {
                    "$ref": "#/components/schemas/ActivitySettings"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-series.preview"
              },
              "data": {
                "type": "object",
                "required": [
                  "activity_id",
                  "rule"
                ],
                "properties": {
                  "activity_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "rule": {
                    "$ref": "#/components/schemas/SeriesRule"
                  },
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "from_date": {
                    "type": "string",
                    "pattern": "^\\d{4}-\\d\\d-\\d\\d$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-series.create"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "activity_id",
                  "name",
                  "rule",
                  "overrides"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "activity_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "rule": {
                    "$ref": "#/components/schemas/SeriesRule"
                  },
                  "overrides": {
                    "$ref": "#/components/schemas/ActivitySettings"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-series.get"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-series.list"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "activity_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-series.update-future"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "from_date",
                  "revision",
                  "name",
                  "rule",
                  "overrides"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "from_date": {
                    "type": "string",
                    "pattern": "^\\d{4}-\\d\\d-\\d\\d$"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "rule": {
                    "$ref": "#/components/schemas/SeriesRule"
                  },
                  "overrides": {
                    "$ref": "#/components/schemas/ActivitySettings"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-series.cancel-future"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "from_date",
                  "revision"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "from_date": {
                    "type": "string",
                    "pattern": "^\\d{4}-\\d\\d-\\d\\d$"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-sessions.change"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "revision",
                  "changes"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "changes": {
                    "type": "object",
                    "required": [],
                    "properties": {
                      "name": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 80
                      },
                      "starts_at": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "ends_at": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "overrides": {
                        "$ref": "#/components/schemas/ActivitySettings"
                      },
                      "replacement_subject": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-sessions.cancel"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "revision"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "reason": {
                    "type": "string",
                    "maxLength": 200
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-sessions.history"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "pattern": "^\\d{1,19}$"
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "workspace.get"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "from": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "until": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "actor_subject": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "workspace.overview"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "from": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "until": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "workspace.roster"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "workspace.attendance"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "workspace.inbox"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "workspace.preferences"
              },
              "data": {
                "type": "object",
                "required": [
                  "lead_minutes"
                ],
                "properties": {
                  "lead_minutes": {
                    "enum": [
                      0,
                      5,
                      15,
                      30,
                      60
                    ]
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "workspace.ack"
              },
              "data": {
                "type": "object",
                "required": [
                  "notification_id"
                ],
                "properties": {
                  "notification_id": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "email.settings"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "return_url": {
                    "type": "string",
                    "format": "uri",
                    "maxLength": 2048
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "email.contact"
              },
              "data": {
                "type": "object",
                "required": [
                  "actor_subject",
                  "email"
                ],
                "properties": {
                  "actor_subject": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "email": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 254
                  },
                  "verified": {
                    "const": true
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "email.status"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {},
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "email.preferences"
              },
              "data": {
                "type": "object",
                "required": [
                  "enabled",
                  "lead_minutes",
                  "timezone"
                ],
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "lead_minutes": {
                    "enum": [
                      5,
                      15,
                      30,
                      60
                    ]
                  },
                  "timezone": {
                    "type": "string",
                    "maxLength": 100
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "email.deliveries"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "followup.get"
              },
              "data": {
                "type": "object",
                "required": [
                  "session_id"
                ],
                "properties": {
                  "session_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "followup.save"
              },
              "data": {
                "type": "object",
                "required": [
                  "session_id",
                  "summary",
                  "published"
                ],
                "properties": {
                  "session_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "summary": {
                    "type": "string",
                    "maxLength": 12000
                  },
                  "published": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "followup.note"
              },
              "data": {
                "type": "object",
                "required": [
                  "session_id",
                  "body"
                ],
                "properties": {
                  "session_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "body": {
                    "type": "string",
                    "maxLength": 12000
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "tasks.list"
              },
              "data": {
                "type": "object",
                "required": [
                  "session_id"
                ],
                "properties": {
                  "session_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "tasks.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "session_id",
                  "external_id",
                  "assignee",
                  "title",
                  "due_at"
                ],
                "properties": {
                  "session_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "assignee": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 500
                  },
                  "due_at": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "tasks.done"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "done",
                  "revision"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "done": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "decisions.list"
              },
              "data": {
                "type": "object",
                "required": [
                  "session_id"
                ],
                "properties": {
                  "session_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "target_person": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "decisions.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "session_id",
                  "target_person",
                  "status",
                  "reason"
                ],
                "properties": {
                  "session_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "target_person": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "status": {
                    "enum": [
                      "present",
                      "absent",
                      "late",
                      "excused",
                      "unreviewed"
                    ]
                  },
                  "reason": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 1000
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "resources.documents"
              },
              "data": {
                "type": "object",
                "required": [
                  "session_id"
                ],
                "properties": {
                  "session_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "resources.list"
              },
              "data": {
                "type": "object",
                "required": [
                  "context_id"
                ],
                "properties": {
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "resources.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "context_id",
                  "title",
                  "kind",
                  "audience",
                  "allow_download",
                  "expires_at",
                  "active"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 500
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "audience": {
                    "enum": [
                      "members",
                      "staff",
                      "person"
                    ]
                  },
                  "target_person": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "document_id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "maxLength": 2048
                  },
                  "allow_download": {
                    "type": "boolean"
                  },
                  "expires_at": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "active": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "resources.get"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "resources.archive"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "revision"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "resources.open"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "mode"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "mode": {
                    "enum": [
                      "view",
                      "download"
                    ]
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "followup.history"
              },
              "data": {
                "type": "object",
                "required": [
                  "session_id"
                ],
                "properties": {
                  "session_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 2
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "support.access"
              },
              "data": {
                "type": "object",
                "required": [
                  "actor_subject",
                  "person_id",
                  "context_id",
                  "permission"
                ],
                "properties": {
                  "actor_subject": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "permission": {
                    "enum": [
                      "sessions:view",
                      "sessions:join",
                      "sessions:host",
                      "participants:view",
                      "participants:manage"
                    ]
                  },
                  "invitation_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "integration.check"
              },
              "data": {
                "type": "object",
                "required": [
                  "parent_origin"
                ],
                "properties": {
                  "parent_origin": {
                    "type": "string",
                    "format": "uri"
                  }
                },
                "additionalProperties": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "lifecycle.archive"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "archived"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "archived": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "home.get"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "from": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "until": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 25
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "home.preferences"
              },
              "data": {
                "type": "object",
                "required": [
                  "locale",
                  "onboarding",
                  "announcements",
                  "quality_consent"
                ],
                "properties": {
                  "locale": {
                    "enum": [
                      "fr",
                      "ar"
                    ]
                  },
                  "onboarding": {
                    "type": "array",
                    "maxItems": 3,
                    "uniqueItems": true,
                    "items": {
                      "enum": [
                        "invitation",
                        "devices",
                        "first-session"
                      ]
                    }
                  },
                  "announcements": {
                    "type": "boolean"
                  },
                  "quality_consent": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "availability.list"
              },
              "data": {
                "type": "object",
                "required": [
                  "context_id",
                  "person_id"
                ],
                "properties": {
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 25
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "availability.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "context_id",
                  "person_id",
                  "starts_at",
                  "ends_at",
                  "active"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "starts_at": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "ends_at": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "active": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "planning.check"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "planning.settings"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "prevent_conflicts": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "announcements.list"
              },
              "data": {
                "type": "object",
                "required": [
                  "context_id"
                ],
                "properties": {
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 10
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "announcements.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "context_id",
                  "title",
                  "body",
                  "audience",
                  "expires_at",
                  "active"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "title": {
                    "type": "string",
                    "maxLength": 120
                  },
                  "body": {
                    "type": "string",
                    "maxLength": 4000
                  },
                  "audience": {
                    "enum": [
                      "members",
                      "guardians",
                      "staff"
                    ]
                  },
                  "expires_at": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "active": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "announcements.read"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "governance.policy"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "retention_days": {
                    "type": "integer",
                    "minimum": 30,
                    "maximum": 3650
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "governance.export"
              },
              "data": {
                "type": "object",
                "required": [
                  "dataset"
                ],
                "properties": {
                  "dataset": {
                    "enum": [
                      "people",
                      "memberships",
                      "reports",
                      "tasks",
                      "decisions",
                      "resources",
                      "announcements",
                      "archives"
                    ]
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 2
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "governance.preview"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {},
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "governance.purge"
              },
              "data": {
                "type": "object",
                "required": [
                  "token",
                  "confirmation"
                ],
                "properties": {
                  "token": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "confirmation": {
                    "const": "DELETE_EXPIRED_RECORDS"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "quality.report"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "event_id",
                  "kind"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "event_id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "kind": {
                    "enum": [
                      "entry-failed",
                      "audio-problem",
                      "video-problem",
                      "reconnected"
                    ]
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "quality.overview"
              },
              "data": {
                "type": "object",
                "required": [
                  "context_id"
                ],
                "properties": {
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "booking.settings"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "capacity": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 500
                  },
                  "waitlist": {
                    "type": "boolean"
                  },
                  "opens_at": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "closes_at": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "cancel_minutes": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 10080
                  },
                  "enabled": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "booking.list"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 25
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "booking.reserve"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "request_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "request_id": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "booking.cancel"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "telemetry.preferences"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "telemetry.record"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "event_id",
                  "samples",
                  "audio_loss_percent",
                  "video_loss_percent",
                  "jitter_ms",
                  "rtt_ms"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "event_id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "audio_loss_percent": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "minimum": 0,
                    "maximum": 100
                  },
                  "video_loss_percent": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "minimum": 0,
                    "maximum": 100
                  },
                  "jitter_ms": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "minimum": 0,
                    "maximum": 60000
                  },
                  "rtt_ms": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "minimum": 0,
                    "maximum": 60000
                  },
                  "samples": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 60
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "telemetry.overview"
              },
              "data": {
                "type": "object",
                "required": [
                  "context_id"
                ],
                "properties": {
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "calendar.vault-put"
              },
              "data": {
                "type": "object",
                "required": [
                  "id",
                  "kind",
                  "actor_subject",
                  "provider",
                  "target",
                  "ciphertext",
                  "expires_at"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "pattern": "^[a-f0-9]{64}$"
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "actor_subject": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "provider": {
                    "enum": [
                      "google",
                      "microsoft"
                    ]
                  },
                  "target": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9_.-]{1,80}$"
                  },
                  "ciphertext": {
                    "type": "string",
                    "maxLength": 44000
                  },
                  "expires_at": {
                    "type": "string",
                    "format": "date-time"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "calendar.vault-get"
              },
              "data": {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "pattern": "^[a-f0-9]{64}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "calendar.vault-take"
              },
              "data": {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "pattern": "^[a-f0-9]{64}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "calendar.plan"
              },
              "data": {
                "type": "object",
                "required": [
                  "provider",
                  "target",
                  "from",
                  "until"
                ],
                "properties": {
                  "provider": {
                    "enum": [
                      "google",
                      "microsoft"
                    ]
                  },
                  "target": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9_.-]{1,80}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "from": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "until": {
                    "type": "string",
                    "format": "date-time"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "calendar.claim"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {},
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "calendar.authorize"
              },
              "data": {
                "type": "object",
                "required": [
                  "job_id",
                  "lease"
                ],
                "properties": {
                  "job_id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "lease": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "calendar.finish"
              },
              "data": {
                "type": "object",
                "required": [
                  "job_id",
                  "lease",
                  "outcome",
                  "resource_id"
                ],
                "properties": {
                  "job_id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "lease": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "outcome": {
                    "enum": [
                      "sent",
                      "temporary",
                      "permanent",
                      "uncertain"
                    ]
                  },
                  "resource_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 512
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "calendar.resolve"
              },
              "data": {
                "type": "object",
                "required": [
                  "job_id",
                  "resource_id"
                ],
                "properties": {
                  "job_id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "resource_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 512
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "teaching.resources"
              },
              "data": {
                "type": "object",
                "required": [
                  "context_id"
                ],
                "properties": {
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "resources": {
                    "type": "object"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "teaching.session"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "teaching.period"
              },
              "data": {
                "type": "object",
                "required": [
                  "period"
                ],
                "properties": {
                  "period": {
                    "type": "string",
                    "pattern": "^20[0-9]{2}-(0[1-9]|1[0-2])$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "role": {
                    "enum": [
                      "host",
                      "participant",
                      "observer"
                    ]
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "teaching.policy"
              },
              "data": {
                "type": "object",
                "required": [
                  "context_id"
                ],
                "properties": {
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "enabled": {
                    "type": "boolean"
                  },
                  "regles": {
                    "type": "object"
                  },
                  "mode": {
                    "enum": [
                      "alerte",
                      "imposer"
                    ]
                  },
                  "grace": {
                    "type": "object"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "reason": {
                    "type": "string",
                    "maxLength": 1000
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "teaching.history"
              },
              "data": {
                "type": "object",
                "required": [
                  "context_id"
                ],
                "properties": {
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "after": {
                    "type": "integer",
                    "minimum": 0
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "teaching.period-config"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "start_day": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 28
                  },
                  "timezone": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "enabled": {
                    "type": "boolean"
                  },
                  "teaching_retention_months": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 60
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "teaching.erase-person"
              },
              "data": {
                "type": "object",
                "required": [
                  "subject"
                ],
                "properties": {
                  "subject": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "teaching.adjust"
              },
              "data": {
                "type": "object",
                "required": [
                  "period",
                  "person_id",
                  "metric",
                  "seconds",
                  "reason",
                  "request_id"
                ],
                "properties": {
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "period": {
                    "type": "string",
                    "pattern": "^20[0-9]{2}-(0[1-9]|1[0-2])$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "metric": {
                    "enum": [
                      "present_seconds",
                      "microphone_off_seconds",
                      "camera_on_seconds",
                      "voluntary_breach_seconds"
                    ]
                  },
                  "seconds": {
                    "type": "integer"
                  },
                  "reason": {
                    "type": "string",
                    "maxLength": 1000
                  },
                  "request_id": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "teaching.observer"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "account_id",
                  "person_id",
                  "enabled"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "account_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "enabled": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "teaching.tools"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "revision",
                  "state"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "state": {
                    "type": "object"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "teaching.note"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "target_person",
                  "result",
                  "note"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "target_person": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "result": {
                    "enum": [
                      "juste",
                      "a_revoir"
                    ]
                  },
                  "note": {
                    "type": "string",
                    "maxLength": 2000
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          }
        ]
      },
      "DirectoryResult": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/DirectoryPerson"
          },
          {
            "$ref": "#/components/schemas/DirectoryContext"
          },
          {
            "$ref": "#/components/schemas/DirectoryRelationship"
          },
          {
            "$ref": "#/components/schemas/DirectoryMembership"
          },
          {
            "$ref": "#/components/schemas/DirectoryAdministrator"
          },
          {
            "$ref": "#/components/schemas/DirectoryInvitation"
          },
          {
            "type": "object",
            "required": [
              "items",
              "next_cursor"
            ],
            "properties": {
              "items": {
                "type": "array",
                "maxItems": 100,
                "items": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/DirectoryPerson"
                    },
                    {
                      "$ref": "#/components/schemas/DirectoryContext"
                    },
                    {
                      "$ref": "#/components/schemas/DirectoryRelationship"
                    },
                    {
                      "$ref": "#/components/schemas/DirectoryMembership"
                    },
                    {
                      "$ref": "#/components/schemas/DirectoryAdministrator"
                    },
                    {
                      "$ref": "#/components/schemas/DirectoryInvitation"
                    },
                    {
                      "$ref": "#/components/schemas/DirectoryActivity"
                    },
                    {
                      "$ref": "#/components/schemas/DirectoryActivitySession"
                    },
                    {
                      "$ref": "#/components/schemas/ActivitySeries"
                    },
                    {
                      "$ref": "#/components/schemas/ScheduleHistory"
                    },
                    {
                      "$ref": "#/components/schemas/WorkspaceRosterPerson"
                    },
                    {
                      "$ref": "#/components/schemas/WorkspaceAttendance"
                    },
                    {
                      "$ref": "#/components/schemas/WorkspaceNotification"
                    },
                    {
                      "$ref": "#/components/schemas/EmailDelivery"
                    },
                    {
                      "$ref": "#/components/schemas/SessionTask"
                    },
                    {
                      "$ref": "#/components/schemas/SessionAttendanceDecision"
                    },
                    {
                      "$ref": "#/components/schemas/ActivityResource"
                    },
                    {
                      "$ref": "#/components/schemas/SessionServiceHistory"
                    },
                    {
                      "$ref": "#/components/schemas/SessionDocumentCandidate"
                    }
                  ]
                }
              },
              "next_cursor": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "operations": {
                "const": false
              },
              "pilot": {
                "const": false
              },
              "teaching": {
                "const": false
              }
            }
          },
          {
            "type": "object",
            "required": [
              "roles",
              "kinds",
              "source"
            ],
            "properties": {
              "roles": {
                "type": "object",
                "additionalProperties": {
                  "type": "array",
                  "items": {
                    "enum": [
                      "sessions:view",
                      "sessions:join",
                      "sessions:host",
                      "participants:view",
                      "participants:manage"
                    ]
                  }
                }
              },
              "kinds": {
                "type": "array",
                "items": {
                  "enum": [
                    "account",
                    "person"
                  ]
                }
              },
              "source": {
                "enum": [
                  "application",
                  "veyora"
                ]
              },
              "administration": {
                "enum": [
                  "full",
                  "scoped"
                ]
              },
              "actor_subject": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "allowed",
              "reason"
            ],
            "properties": {
              "allowed": {
                "type": "boolean"
              },
              "reason": {
                "enum": [
                  "identity",
                  "representation",
                  "context",
                  "roles"
                ]
              },
              "roles": {
                "type": "array",
                "items": {
                  "enum": [
                    "participant",
                    "observer",
                    "teacher",
                    "manager"
                  ]
                }
              },
              "person_id": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              },
              "context_id": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "$ref": "#/components/schemas/DirectoryBatch"
          },
          {
            "$ref": "#/components/schemas/DirectorySyncStatus"
          },
          {
            "type": "object",
            "required": [
              "run_id",
              "total",
              "chunk_size"
            ],
            "properties": {
              "run_id": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$"
              },
              "total": {
                "type": "integer"
              },
              "chunk_size": {
                "type": "integer"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "transferred",
              "administrator"
            ],
            "properties": {
              "transferred": {
                "const": true
              },
              "administrator": {
                "$ref": "#/components/schemas/DirectoryAdministrator"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "claimed",
              "replayed"
            ],
            "properties": {
              "claimed": {
                "const": true
              },
              "replayed": {
                "type": "boolean"
              },
              "membership": {
                "$ref": "#/components/schemas/DirectoryMembership"
              }
            }
          },
          {
            "$ref": "#/components/schemas/DirectoryActivity"
          },
          {
            "$ref": "#/components/schemas/DirectoryActivitySession"
          },
          {
            "$ref": "#/components/schemas/ActivitySeries"
          },
          {
            "$ref": "#/components/schemas/SeriesPreview"
          },
          {
            "$ref": "#/components/schemas/SeriesMutationResult"
          },
          {
            "$ref": "#/components/schemas/WorkspaceResult"
          },
          {
            "type": "object",
            "required": [
              "lead_minutes"
            ],
            "properties": {
              "lead_minutes": {
                "enum": [
                  0,
                  5,
                  15,
                  30,
                  60
                ]
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "read"
            ],
            "properties": {
              "read": {
                "const": true
              }
            },
            "additionalProperties": false
          },
          {
            "$ref": "#/components/schemas/EmailSettings"
          },
          {
            "$ref": "#/components/schemas/EmailContactUpdated"
          },
          {
            "$ref": "#/components/schemas/EmailPreferences"
          },
          {
            "$ref": "#/components/schemas/SessionFollowup"
          },
          {
            "$ref": "#/components/schemas/SessionServiceSaved"
          },
          {
            "$ref": "#/components/schemas/ResourceDetail"
          },
          {
            "$ref": "#/components/schemas/ResourceLink"
          },
          {
            "$ref": "#/components/schemas/ResourceDocument"
          },
          {
            "$ref": "#/components/schemas/SessionAccessDiagnostic"
          },
          {
            "$ref": "#/components/schemas/ApplicationIntegrationCheck"
          },
          {
            "$ref": "#/components/schemas/OrganizationOperationsResult"
          },
          {
            "$ref": "#/components/schemas/PilotResult"
          },
          {
            "$ref": "#/components/schemas/TeachingResult"
          }
        ]
      },
      "DirectoryAdministrator": {
        "type": "object",
        "required": [
          "application_id",
          "source",
          "revision",
          "actor_subject",
          "context_id",
          "portal_user_id",
          "active",
          "valid_from",
          "valid_until"
        ],
        "properties": {
          "application_id": {
            "type": "string",
            "format": "uuid"
          },
          "source": {
            "enum": [
              "application",
              "veyora"
            ]
          },
          "revision": {
            "type": "integer",
            "minimum": 1
          },
          "actor_subject": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "context_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "portal_user_id": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "active": {
            "type": "boolean"
          },
          "valid_from": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "valid_until": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "DirectoryInvitation": {
        "type": "object",
        "required": [
          "application_id",
          "source",
          "revision",
          "external_id",
          "email",
          "context_id",
          "role",
          "active",
          "valid_from",
          "valid_until",
          "expires_at",
          "claimed_by",
          "claimed_at"
        ],
        "properties": {
          "application_id": {
            "type": "string",
            "format": "uuid"
          },
          "source": {
            "enum": [
              "application",
              "veyora"
            ]
          },
          "revision": {
            "type": "integer",
            "minimum": 1
          },
          "external_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "email": {
            "type": "string",
            "maxLength": 254
          },
          "context_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "role": {
            "enum": [
              "participant",
              "observer",
              "teacher",
              "manager"
            ]
          },
          "active": {
            "type": "boolean"
          },
          "valid_from": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "valid_until": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "claimed_by": {
            "type": [
              "string",
              "null"
            ]
          },
          "claimed_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "DirectoryBatch": {
        "type": "object",
        "required": [
          "batch_id",
          "state",
          "report",
          "expires_at",
          "replayed"
        ],
        "properties": {
          "batch_id": {
            "type": "string",
            "format": "uuid"
          },
          "state": {
            "enum": [
              "ready",
              "invalid",
              "applied",
              "conflict"
            ]
          },
          "report": {
            "type": "array",
            "maxItems": 500,
            "items": {
              "type": "object",
              "required": [
                "row",
                "line",
                "action",
                "status"
              ],
              "properties": {
                "row": {
                  "type": "integer"
                },
                "line": {
                  "type": "integer"
                },
                "action": {
                  "type": "string"
                },
                "status": {
                  "enum": [
                    "ready",
                    "error"
                  ]
                },
                "change": {
                  "enum": [
                    "create",
                    "update",
                    "replay"
                  ]
                },
                "message": {
                  "type": "string"
                },
                "code": {
                  "type": "string"
                }
              }
            }
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "replayed": {
            "type": "boolean"
          }
        }
      },
      "DirectorySyncStatus": {
        "type": "object",
        "required": [
          "run_id",
          "total",
          "applied",
          "completed"
        ],
        "properties": {
          "run_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$"
          },
          "total": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100000
          },
          "applied": {
            "type": "integer",
            "minimum": 0
          },
          "completed": {
            "type": "boolean"
          }
        }
      },
      "DirectoryMutation": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "people.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "display_name",
                  "kind"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "display_name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "account",
                      "person"
                    ]
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "line": {
                "type": "integer",
                "minimum": 1,
                "maximum": 100000
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "people.status"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "status",
                  "revision"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "status": {
                    "enum": [
                      "active",
                      "inactive"
                    ]
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              "line": {
                "type": "integer",
                "minimum": 1,
                "maximum": 100000
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "contexts.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "name",
                  "kind"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "structure_type": {
                    "enum": [
                      "establishment",
                      "branch",
                      "department",
                      "unit"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "line": {
                "type": "integer",
                "minimum": 1,
                "maximum": 100000
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "relationships.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "account_id",
                  "person_id",
                  "relationship",
                  "active"
                ],
                "properties": {
                  "account_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "relationship": {
                    "enum": [
                      "guardian",
                      "delegate"
                    ]
                  },
                  "active": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              "line": {
                "type": "integer",
                "minimum": 1,
                "maximum": 100000
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "memberships.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "person_id",
                  "context_id",
                  "role",
                  "active"
                ],
                "properties": {
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "role": {
                    "enum": [
                      "participant",
                      "observer",
                      "teacher",
                      "manager"
                    ]
                  },
                  "active": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "assignment_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$"
                  },
                  "valid_from": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  },
                  "valid_until": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  }
                },
                "additionalProperties": false
              },
              "line": {
                "type": "integer",
                "minimum": 1,
                "maximum": 100000
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "invitations.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "email",
                  "context_id",
                  "role",
                  "active"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "email": {
                    "type": "string",
                    "maxLength": 254
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "role": {
                    "enum": [
                      "participant",
                      "observer",
                      "teacher",
                      "manager"
                    ]
                  },
                  "active": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "valid_from": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  },
                  "valid_until": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  }
                },
                "additionalProperties": false
              },
              "line": {
                "type": "integer",
                "minimum": 1,
                "maximum": 100000
              }
            },
            "additionalProperties": false
          }
        ]
      },
      "ApplicationDirectoryCommand": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "catalog"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {},
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "people.list"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "status": {
                    "enum": [
                      "active",
                      "inactive"
                    ]
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "people.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "display_name",
                  "kind"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "display_name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "account",
                      "person"
                    ]
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "people.status"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "status",
                  "revision"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "status": {
                    "enum": [
                      "active",
                      "inactive"
                    ]
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "contexts.list"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "contexts.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "name",
                  "kind"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "structure_type": {
                    "enum": [
                      "establishment",
                      "branch",
                      "department",
                      "unit"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "relationships.list"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "relationships.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "account_id",
                  "person_id",
                  "relationship",
                  "active"
                ],
                "properties": {
                  "account_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "relationship": {
                    "enum": [
                      "guardian",
                      "delegate"
                    ]
                  },
                  "active": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "memberships.list"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "effective": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "memberships.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "person_id",
                  "context_id",
                  "role",
                  "active"
                ],
                "properties": {
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "role": {
                    "enum": [
                      "participant",
                      "observer",
                      "teacher",
                      "manager"
                    ]
                  },
                  "active": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "assignment_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$"
                  },
                  "valid_from": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  },
                  "valid_until": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "access.check"
              },
              "data": {
                "type": "object",
                "required": [
                  "actor_subject",
                  "person_id",
                  "context_id",
                  "permission"
                ],
                "properties": {
                  "actor_subject": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "permission": {
                    "enum": [
                      "sessions:view",
                      "sessions:join",
                      "sessions:host",
                      "participants:view",
                      "participants:manage"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "administrators.list"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "administrators.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "actor_subject",
                  "context_id",
                  "active"
                ],
                "properties": {
                  "actor_subject": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "portal_user_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "uuid"
                  },
                  "active": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "valid_from": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  },
                  "valid_until": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "administrators.transfer"
              },
              "data": {
                "type": "object",
                "required": [
                  "from_subject",
                  "to_subject",
                  "context_id",
                  "revision"
                ],
                "properties": {
                  "from_subject": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "to_subject": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "portal_user_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "uuid"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "invitations.list"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "invitations.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "email",
                  "context_id",
                  "role",
                  "active"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "email": {
                    "type": "string",
                    "maxLength": 254
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "role": {
                    "enum": [
                      "participant",
                      "observer",
                      "teacher",
                      "manager"
                    ]
                  },
                  "active": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "valid_from": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  },
                  "valid_until": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "invitations.claim"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "actor_subject",
                  "verified_email"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "actor_subject": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "verified_email": {
                    "type": "string",
                    "maxLength": 254
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "batch.preview"
              },
              "data": {
                "type": "object",
                "required": [
                  "request_key",
                  "operations"
                ],
                "properties": {
                  "request_key": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$"
                  },
                  "operations": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 500,
                    "items": {
                      "$ref": "#/components/schemas/DirectoryMutation"
                    }
                  },
                  "run_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$"
                  },
                  "offset": {
                    "type": "integer",
                    "minimum": 0
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "batch.commit"
              },
              "data": {
                "type": "object",
                "required": [
                  "batch_id"
                ],
                "properties": {
                  "batch_id": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "batch.status"
              },
              "data": {
                "type": "object",
                "required": [
                  "batch_id"
                ],
                "properties": {
                  "batch_id": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "sync.begin"
              },
              "data": {
                "type": "object",
                "required": [
                  "run_id",
                  "fingerprint",
                  "total",
                  "chunk_size"
                ],
                "properties": {
                  "run_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$",
                    "maxLength": 80
                  },
                  "fingerprint": {
                    "type": "string",
                    "pattern": "^[a-f0-9]{64}$"
                  },
                  "total": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100000
                  },
                  "chunk_size": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 500
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "sync.status"
              },
              "data": {
                "type": "object",
                "required": [
                  "run_id"
                ],
                "properties": {
                  "run_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "activities.list"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activities.get"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activities.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "name",
                  "kind",
                  "settings"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "course",
                      "team",
                      "program"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "settings": {
                    "$ref": "#/components/schemas/ActivitySettings"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "activity-sessions.list"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "activity_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-sessions.get"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-sessions.prepare"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-sessions.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "activity_id",
                  "name",
                  "starts_at",
                  "ends_at",
                  "overrides"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$"
                  },
                  "activity_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "starts_at": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "ends_at": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "overrides": {
                    "$ref": "#/components/schemas/ActivitySettings"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-series.preview"
              },
              "data": {
                "type": "object",
                "required": [
                  "activity_id",
                  "rule"
                ],
                "properties": {
                  "activity_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "rule": {
                    "$ref": "#/components/schemas/SeriesRule"
                  },
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "from_date": {
                    "type": "string",
                    "pattern": "^\\d{4}-\\d\\d-\\d\\d$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-series.create"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "activity_id",
                  "name",
                  "rule",
                  "overrides"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "activity_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "rule": {
                    "$ref": "#/components/schemas/SeriesRule"
                  },
                  "overrides": {
                    "$ref": "#/components/schemas/ActivitySettings"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-series.get"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-series.list"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "activity_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-series.update-future"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "from_date",
                  "revision",
                  "name",
                  "rule",
                  "overrides"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "from_date": {
                    "type": "string",
                    "pattern": "^\\d{4}-\\d\\d-\\d\\d$"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "rule": {
                    "$ref": "#/components/schemas/SeriesRule"
                  },
                  "overrides": {
                    "$ref": "#/components/schemas/ActivitySettings"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-series.cancel-future"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "from_date",
                  "revision"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "from_date": {
                    "type": "string",
                    "pattern": "^\\d{4}-\\d\\d-\\d\\d$"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-sessions.change"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "revision",
                  "changes"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "changes": {
                    "type": "object",
                    "required": [],
                    "properties": {
                      "name": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 80
                      },
                      "starts_at": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "ends_at": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "overrides": {
                        "$ref": "#/components/schemas/ActivitySettings"
                      },
                      "replacement_subject": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-sessions.cancel"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "revision"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "reason": {
                    "type": "string",
                    "maxLength": 200
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "activity-sessions.history"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "pattern": "^\\d{1,19}$"
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "workspace.get"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "from": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "until": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "actor_subject": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "workspace.overview"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "from": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "until": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "workspace.roster"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "workspace.attendance"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "workspace.inbox"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "workspace.preferences"
              },
              "data": {
                "type": "object",
                "required": [
                  "lead_minutes"
                ],
                "properties": {
                  "lead_minutes": {
                    "enum": [
                      0,
                      5,
                      15,
                      30,
                      60
                    ]
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "workspace.ack"
              },
              "data": {
                "type": "object",
                "required": [
                  "notification_id"
                ],
                "properties": {
                  "notification_id": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "email.settings"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "return_url": {
                    "type": "string",
                    "format": "uri",
                    "maxLength": 2048
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "email.contact"
              },
              "data": {
                "type": "object",
                "required": [
                  "actor_subject",
                  "email"
                ],
                "properties": {
                  "actor_subject": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "email": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 254
                  },
                  "verified": {
                    "const": true
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "email.status"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {},
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "email.preferences"
              },
              "data": {
                "type": "object",
                "required": [
                  "enabled",
                  "lead_minutes",
                  "timezone"
                ],
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "lead_minutes": {
                    "enum": [
                      5,
                      15,
                      30,
                      60
                    ]
                  },
                  "timezone": {
                    "type": "string",
                    "maxLength": 100
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "email.deliveries"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "parent_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "scope_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "followup.get"
              },
              "data": {
                "type": "object",
                "required": [
                  "session_id"
                ],
                "properties": {
                  "session_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "followup.save"
              },
              "data": {
                "type": "object",
                "required": [
                  "session_id",
                  "summary",
                  "published"
                ],
                "properties": {
                  "session_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "summary": {
                    "type": "string",
                    "maxLength": 12000
                  },
                  "published": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "followup.note"
              },
              "data": {
                "type": "object",
                "required": [
                  "session_id",
                  "body"
                ],
                "properties": {
                  "session_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "body": {
                    "type": "string",
                    "maxLength": 12000
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "tasks.list"
              },
              "data": {
                "type": "object",
                "required": [
                  "session_id"
                ],
                "properties": {
                  "session_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "tasks.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "session_id",
                  "external_id",
                  "assignee",
                  "title",
                  "due_at"
                ],
                "properties": {
                  "session_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "assignee": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 500
                  },
                  "due_at": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "tasks.done"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "done",
                  "revision"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "done": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "decisions.list"
              },
              "data": {
                "type": "object",
                "required": [
                  "session_id"
                ],
                "properties": {
                  "session_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "target_person": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "decisions.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "session_id",
                  "target_person",
                  "status",
                  "reason"
                ],
                "properties": {
                  "session_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "target_person": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "status": {
                    "enum": [
                      "present",
                      "absent",
                      "late",
                      "excused",
                      "unreviewed"
                    ]
                  },
                  "reason": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 1000
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "resources.documents"
              },
              "data": {
                "type": "object",
                "required": [
                  "session_id"
                ],
                "properties": {
                  "session_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "resources.list"
              },
              "data": {
                "type": "object",
                "required": [
                  "context_id"
                ],
                "properties": {
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "search": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "resources.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "context_id",
                  "title",
                  "kind",
                  "audience",
                  "allow_download",
                  "expires_at",
                  "active"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 500
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "audience": {
                    "enum": [
                      "members",
                      "staff",
                      "person"
                    ]
                  },
                  "target_person": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "document_id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "maxLength": 2048
                  },
                  "allow_download": {
                    "type": "boolean"
                  },
                  "expires_at": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "active": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "resources.get"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "resources.archive"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "revision"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "resources.open"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "mode"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "mode": {
                    "enum": [
                      "view",
                      "download"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "followup.history"
              },
              "data": {
                "type": "object",
                "required": [
                  "session_id"
                ],
                "properties": {
                  "session_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 2
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "support.access"
              },
              "data": {
                "type": "object",
                "required": [
                  "actor_subject",
                  "person_id",
                  "context_id",
                  "permission"
                ],
                "properties": {
                  "actor_subject": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "permission": {
                    "enum": [
                      "sessions:view",
                      "sessions:join",
                      "sessions:host",
                      "participants:view",
                      "participants:manage"
                    ]
                  },
                  "invitation_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "integration.check"
              },
              "data": {
                "type": "object",
                "required": [
                  "parent_origin"
                ],
                "properties": {
                  "parent_origin": {
                    "type": "string",
                    "format": "uri"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "lifecycle.archive"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "archived"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "archived": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "home.get"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "from": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "until": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 25
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "home.preferences"
              },
              "data": {
                "type": "object",
                "required": [
                  "locale",
                  "onboarding",
                  "announcements",
                  "quality_consent"
                ],
                "properties": {
                  "locale": {
                    "enum": [
                      "fr",
                      "ar"
                    ]
                  },
                  "onboarding": {
                    "type": "array",
                    "maxItems": 3,
                    "uniqueItems": true,
                    "items": {
                      "enum": [
                        "invitation",
                        "devices",
                        "first-session"
                      ]
                    }
                  },
                  "announcements": {
                    "type": "boolean"
                  },
                  "quality_consent": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "availability.list"
              },
              "data": {
                "type": "object",
                "required": [
                  "context_id",
                  "person_id"
                ],
                "properties": {
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 25
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "availability.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "context_id",
                  "person_id",
                  "starts_at",
                  "ends_at",
                  "active"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "starts_at": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "ends_at": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "active": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "planning.check"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "planning.settings"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "prevent_conflicts": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "announcements.list"
              },
              "data": {
                "type": "object",
                "required": [
                  "context_id"
                ],
                "properties": {
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 10
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "announcements.put"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "context_id",
                  "title",
                  "body",
                  "audience",
                  "expires_at",
                  "active"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "title": {
                    "type": "string",
                    "maxLength": 120
                  },
                  "body": {
                    "type": "string",
                    "maxLength": 4000
                  },
                  "audience": {
                    "enum": [
                      "members",
                      "guardians",
                      "staff"
                    ]
                  },
                  "expires_at": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "active": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "announcements.read"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "governance.policy"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "retention_days": {
                    "type": "integer",
                    "minimum": 30,
                    "maximum": 3650
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "governance.export"
              },
              "data": {
                "type": "object",
                "required": [
                  "dataset"
                ],
                "properties": {
                  "dataset": {
                    "enum": [
                      "people",
                      "memberships",
                      "reports",
                      "tasks",
                      "decisions",
                      "resources",
                      "announcements",
                      "archives"
                    ]
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 2
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "governance.preview"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {},
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "governance.purge"
              },
              "data": {
                "type": "object",
                "required": [
                  "token",
                  "confirmation"
                ],
                "properties": {
                  "token": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "confirmation": {
                    "const": "DELETE_EXPIRED_RECORDS"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "quality.report"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "event_id",
                  "kind"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "event_id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "kind": {
                    "enum": [
                      "entry-failed",
                      "audio-problem",
                      "video-problem",
                      "reconnected"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "quality.overview"
              },
              "data": {
                "type": "object",
                "required": [
                  "context_id"
                ],
                "properties": {
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "booking.settings"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "capacity": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 500
                  },
                  "waitlist": {
                    "type": "boolean"
                  },
                  "opens_at": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "closes_at": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "cancel_minutes": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 10080
                  },
                  "enabled": {
                    "type": "boolean"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "booking.list"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 25
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 600
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "booking.reserve"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "request_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "request_id": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "booking.cancel"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "telemetry.preferences"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "telemetry.record"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "event_id",
                  "samples",
                  "audio_loss_percent",
                  "video_loss_percent",
                  "jitter_ms",
                  "rtt_ms"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "event_id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "audio_loss_percent": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "minimum": 0,
                    "maximum": 100
                  },
                  "video_loss_percent": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "minimum": 0,
                    "maximum": 100
                  },
                  "jitter_ms": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "minimum": 0,
                    "maximum": 60000
                  },
                  "rtt_ms": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "minimum": 0,
                    "maximum": 60000
                  },
                  "samples": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 60
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "telemetry.overview"
              },
              "data": {
                "type": "object",
                "required": [
                  "context_id"
                ],
                "properties": {
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "calendar.vault-put"
              },
              "data": {
                "type": "object",
                "required": [
                  "id",
                  "kind",
                  "actor_subject",
                  "provider",
                  "target",
                  "ciphertext",
                  "expires_at"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "pattern": "^[a-f0-9]{64}$"
                  },
                  "kind": {
                    "enum": [
                      "organization",
                      "structure",
                      "group",
                      "session"
                    ]
                  },
                  "actor_subject": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "provider": {
                    "enum": [
                      "google",
                      "microsoft"
                    ]
                  },
                  "target": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9_.-]{1,80}$"
                  },
                  "ciphertext": {
                    "type": "string",
                    "maxLength": 44000
                  },
                  "expires_at": {
                    "type": "string",
                    "format": "date-time"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "calendar.vault-get"
              },
              "data": {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "pattern": "^[a-f0-9]{64}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "calendar.vault-take"
              },
              "data": {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "pattern": "^[a-f0-9]{64}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "calendar.plan"
              },
              "data": {
                "type": "object",
                "required": [
                  "provider",
                  "target",
                  "from",
                  "until"
                ],
                "properties": {
                  "provider": {
                    "enum": [
                      "google",
                      "microsoft"
                    ]
                  },
                  "target": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9_.-]{1,80}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "from": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "until": {
                    "type": "string",
                    "format": "date-time"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "calendar.claim"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {},
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "calendar.authorize"
              },
              "data": {
                "type": "object",
                "required": [
                  "job_id",
                  "lease"
                ],
                "properties": {
                  "job_id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "lease": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "calendar.finish"
              },
              "data": {
                "type": "object",
                "required": [
                  "job_id",
                  "lease",
                  "outcome",
                  "resource_id"
                ],
                "properties": {
                  "job_id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "lease": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "outcome": {
                    "enum": [
                      "sent",
                      "temporary",
                      "permanent",
                      "uncertain"
                    ]
                  },
                  "resource_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 512
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "calendar.resolve"
              },
              "data": {
                "type": "object",
                "required": [
                  "job_id",
                  "resource_id"
                ],
                "properties": {
                  "job_id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "resource_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 512
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "teaching.resources"
              },
              "data": {
                "type": "object",
                "required": [
                  "context_id"
                ],
                "properties": {
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "resources": {
                    "type": "object"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "teaching.session"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "teaching.period"
              },
              "data": {
                "type": "object",
                "required": [
                  "period"
                ],
                "properties": {
                  "period": {
                    "type": "string",
                    "pattern": "^20[0-9]{2}-(0[1-9]|1[0-2])$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "role": {
                    "enum": [
                      "host",
                      "participant",
                      "observer"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "teaching.policy"
              },
              "data": {
                "type": "object",
                "required": [
                  "context_id"
                ],
                "properties": {
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "enabled": {
                    "type": "boolean"
                  },
                  "regles": {
                    "type": "object"
                  },
                  "mode": {
                    "enum": [
                      "alerte",
                      "imposer"
                    ]
                  },
                  "grace": {
                    "type": "object"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "reason": {
                    "type": "string",
                    "maxLength": 1000
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "teaching.history"
              },
              "data": {
                "type": "object",
                "required": [
                  "context_id"
                ],
                "properties": {
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "after": {
                    "type": "integer",
                    "minimum": 0
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action"
            ],
            "properties": {
              "action": {
                "const": "teaching.period-config"
              },
              "data": {
                "type": "object",
                "required": [],
                "properties": {
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "start_day": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 28
                  },
                  "timezone": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "enabled": {
                    "type": "boolean"
                  },
                  "teaching_retention_months": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 60
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "teaching.erase-person"
              },
              "data": {
                "type": "object",
                "required": [
                  "subject"
                ],
                "properties": {
                  "subject": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "teaching.adjust"
              },
              "data": {
                "type": "object",
                "required": [
                  "period",
                  "person_id",
                  "metric",
                  "seconds",
                  "reason",
                  "request_id"
                ],
                "properties": {
                  "context_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "period": {
                    "type": "string",
                    "pattern": "^20[0-9]{2}-(0[1-9]|1[0-2])$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "metric": {
                    "enum": [
                      "present_seconds",
                      "microphone_off_seconds",
                      "camera_on_seconds",
                      "voluntary_breach_seconds"
                    ]
                  },
                  "seconds": {
                    "type": "integer"
                  },
                  "reason": {
                    "type": "string",
                    "maxLength": 1000
                  },
                  "request_id": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "teaching.observer"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "account_id",
                  "person_id",
                  "enabled"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "account_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "person_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "enabled": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "teaching.tools"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "revision",
                  "state"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "revision": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "state": {
                    "type": "object"
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "data"
            ],
            "properties": {
              "action": {
                "const": "teaching.note"
              },
              "data": {
                "type": "object",
                "required": [
                  "external_id",
                  "target_person",
                  "result",
                  "note"
                ],
                "properties": {
                  "external_id": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "target_person": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
                  },
                  "result": {
                    "enum": [
                      "juste",
                      "a_revoir"
                    ]
                  },
                  "note": {
                    "type": "string",
                    "maxLength": 2000
                  }
                },
                "additionalProperties": false
              },
              "as_actor": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              }
            },
            "additionalProperties": false
          }
        ]
      },
      "ActivitySettings": {
        "type": "object",
        "required": [],
        "properties": {
          "max_participants": {
            "type": "integer",
            "minimum": 2,
            "maximum": 100
          },
          "waiting_room_enabled": {
            "type": "boolean"
          },
          "timezone": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80
          },
          "permissions": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "microphone": {
                "type": "boolean"
              },
              "camera": {
                "type": "boolean"
              },
              "screen": {
                "type": "boolean"
              },
              "chat": {
                "type": "boolean"
              },
              "files": {
                "type": "boolean"
              },
              "hands": {
                "type": "boolean"
              },
              "board": {
                "type": "boolean"
              },
              "rename": {
                "type": "boolean"
              },
              "recording": {
                "type": "boolean"
              },
              "captions": {
                "type": "boolean"
              },
              "notes": {
                "type": "boolean"
              },
              "apps": {
                "type": "boolean"
              },
              "assistant": {
                "type": "boolean"
              }
            }
          }
        },
        "additionalProperties": false
      },
      "ActivityEffectiveSettings": {
        "type": "object",
        "required": [
          "max_participants",
          "waiting_room_enabled",
          "timezone",
          "permissions"
        ],
        "properties": {
          "max_participants": {
            "type": "integer",
            "minimum": 2,
            "maximum": 100
          },
          "waiting_room_enabled": {
            "type": "boolean"
          },
          "timezone": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80
          },
          "permissions": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "microphone": {
                "type": "boolean"
              },
              "camera": {
                "type": "boolean"
              },
              "screen": {
                "type": "boolean"
              },
              "chat": {
                "type": "boolean"
              },
              "files": {
                "type": "boolean"
              },
              "hands": {
                "type": "boolean"
              },
              "board": {
                "type": "boolean"
              },
              "rename": {
                "type": "boolean"
              },
              "recording": {
                "type": "boolean"
              },
              "captions": {
                "type": "boolean"
              },
              "notes": {
                "type": "boolean"
              },
              "apps": {
                "type": "boolean"
              },
              "assistant": {
                "type": "boolean"
              }
            },
            "required": [
              "microphone",
              "camera",
              "screen",
              "chat",
              "files",
              "hands",
              "board",
              "rename",
              "recording",
              "captions",
              "notes",
              "apps",
              "assistant"
            ]
          }
        }
      },
      "DirectoryActivity": {
        "type": "object",
        "required": [
          "application_id",
          "external_id",
          "name",
          "parent_id",
          "kind",
          "settings",
          "source",
          "revision"
        ],
        "properties": {
          "application_id": {
            "type": "string",
            "format": "uuid"
          },
          "external_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80
          },
          "parent_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "kind": {
            "enum": [
              "course",
              "team",
              "program"
            ]
          },
          "settings": {
            "$ref": "#/components/schemas/ActivityEffectiveSettings"
          },
          "source": {
            "enum": [
              "veyora",
              "application"
            ]
          },
          "revision": {
            "type": "integer",
            "minimum": 1
          }
        }
      },
      "DirectoryActivitySession": {
        "type": "object",
        "required": [
          "application_id",
          "external_id",
          "activity_id",
          "name",
          "starts_at",
          "ends_at",
          "overrides",
          "source",
          "revision",
          "room_id",
          "activity_revision",
          "current_activity_revision",
          "resolved_settings",
          "effective_settings",
          "state",
          "cancelled"
        ],
        "properties": {
          "application_id": {
            "type": "string",
            "format": "uuid"
          },
          "external_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "activity_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80
          },
          "starts_at": {
            "type": "string",
            "format": "date-time"
          },
          "ends_at": {
            "type": "string",
            "format": "date-time"
          },
          "overrides": {
            "$ref": "#/components/schemas/ActivitySettings"
          },
          "source": {
            "enum": [
              "veyora",
              "application"
            ]
          },
          "revision": {
            "type": "integer",
            "minimum": 1
          },
          "room_id": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "activity_revision": {
            "type": [
              "integer",
              "null"
            ]
          },
          "current_activity_revision": {
            "type": "integer",
            "minimum": 1
          },
          "resolved_settings": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ActivityEffectiveSettings"
              },
              {
                "type": "null"
              }
            ]
          },
          "effective_settings": {
            "$ref": "#/components/schemas/ActivityEffectiveSettings"
          },
          "state": {
            "enum": [
              "draft",
              "prepared"
            ]
          },
          "cancelled": {
            "type": "boolean"
          },
          "series_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "series_date": {
            "type": [
              "string",
              "null"
            ]
          },
          "schedule_exception": {
            "type": "boolean"
          },
          "generation": {
            "type": "integer",
            "minimum": 1
          },
          "cancelled_at": {
            "type": [
              "string",
              "null"
            ]
          },
          "replacement_subject": {
            "type": [
              "string",
              "null"
            ]
          },
          "occurrence_key": {
            "type": "string"
          }
        }
      },
      "SeriesRule": {
        "type": "object",
        "required": [
          "start_date",
          "until_date",
          "local_time",
          "timezone",
          "duration_minutes",
          "frequency",
          "interval",
          "weekdays",
          "gap_policy",
          "fold_policy"
        ],
        "properties": {
          "start_date": {
            "type": "string",
            "pattern": "^\\d{4}-\\d\\d-\\d\\d$"
          },
          "until_date": {
            "type": "string",
            "pattern": "^\\d{4}-\\d\\d-\\d\\d$"
          },
          "local_time": {
            "type": "string",
            "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
          },
          "timezone": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80
          },
          "duration_minutes": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1440
          },
          "frequency": {
            "enum": [
              "daily",
              "weekly"
            ]
          },
          "interval": {
            "type": "integer",
            "minimum": 1,
            "maximum": 12
          },
          "weekdays": {
            "type": "array",
            "maxItems": 7,
            "uniqueItems": true,
            "items": {
              "type": "integer",
              "minimum": 1,
              "maximum": 7
            }
          },
          "gap_policy": {
            "enum": [
              "reject",
              "skip"
            ]
          },
          "fold_policy": {
            "enum": [
              "earlier",
              "later"
            ]
          }
        },
        "additionalProperties": false
      },
      "ActivitySeries": {
        "type": "object",
        "required": [
          "application_id",
          "external_id",
          "activity_id",
          "name",
          "rule",
          "overrides",
          "source",
          "revision",
          "cancelled_from"
        ],
        "properties": {
          "application_id": {
            "type": "string",
            "format": "uuid"
          },
          "external_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "activity_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80
          },
          "rule": {
            "$ref": "#/components/schemas/SeriesRule"
          },
          "overrides": {
            "$ref": "#/components/schemas/ActivitySettings"
          },
          "source": {
            "enum": [
              "application",
              "veyora"
            ]
          },
          "revision": {
            "type": "integer",
            "minimum": 1
          },
          "cancelled_from": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "SeriesPreview": {
        "type": "object",
        "required": [
          "sessions",
          "skipped_dates",
          "timezone",
          "preserved_exceptions"
        ],
        "properties": {
          "sessions": {
            "type": "array",
            "maxItems": 200,
            "items": {
              "type": "object",
              "required": [
                "local_date",
                "starts_at",
                "ends_at",
                "resolution"
              ],
              "properties": {
                "local_date": {
                  "type": "string",
                  "pattern": "^\\d{4}-\\d\\d-\\d\\d$"
                },
                "starts_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "ends_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "resolution": {
                  "enum": [
                    "unique",
                    "earlier",
                    "later"
                  ]
                }
              }
            }
          },
          "skipped_dates": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^\\d{4}-\\d\\d-\\d\\d$"
            }
          },
          "timezone": {
            "type": "string"
          },
          "preserved_exceptions": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "SeriesMutationResult": {
        "type": "object",
        "required": [
          "series",
          "created",
          "replayed"
        ],
        "properties": {
          "series": {
            "$ref": "#/components/schemas/ActivitySeries"
          },
          "created": {
            "type": "integer",
            "minimum": 0
          },
          "changed": {
            "type": "integer",
            "minimum": 0
          },
          "cancelled": {
            "type": "integer",
            "minimum": 0
          },
          "preserved": {
            "type": "integer",
            "minimum": 0
          },
          "skipped_dates": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^\\d{4}-\\d\\d-\\d\\d$"
            }
          },
          "replayed": {
            "type": "boolean"
          }
        }
      },
      "ScheduleHistory": {
        "type": "object",
        "required": [
          "id",
          "application_id",
          "session_id",
          "action",
          "source",
          "actor_subject",
          "reason",
          "snapshot",
          "created_at"
        ],
        "properties": {
          "id": {
            "type": "integer"
          },
          "application_id": {
            "type": "string",
            "format": "uuid"
          },
          "session_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "action": {
            "enum": [
              "change",
              "cancel"
            ]
          },
          "source": {
            "enum": [
              "veyora",
              "application"
            ]
          },
          "actor_subject": {
            "type": [
              "string",
              "null"
            ]
          },
          "reason": {
            "type": [
              "string",
              "null"
            ]
          },
          "snapshot": {
            "$ref": "#/components/schemas/DirectoryActivitySession"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "WorkspacePerson": {
        "type": "object",
        "required": [
          "person_id",
          "display_name",
          "kind"
        ],
        "properties": {
          "person_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "display_name": {
            "type": "string"
          },
          "kind": {
            "enum": [
              "account",
              "person"
            ]
          }
        }
      },
      "WorkspaceResult": {
        "type": "object",
        "required": [
          "actor_subject",
          "person_id",
          "people",
          "sessions",
          "next_cursor",
          "lead_minutes",
          "preview",
          "reminder_channel"
        ],
        "properties": {
          "actor_subject": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "person_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "people": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkspacePerson"
            }
          },
          "sessions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DirectoryActivitySession"
            }
          },
          "next_cursor": {
            "type": [
              "string",
              "null"
            ]
          },
          "lead_minutes": {
            "enum": [
              0,
              5,
              15,
              30,
              60
            ]
          },
          "preview": {
            "type": "boolean"
          },
          "reminder_channel": {
            "const": "in_app_on_refresh"
          }
        }
      },
      "WorkspaceRosterPerson": {
        "type": "object",
        "required": [
          "person_id",
          "display_name",
          "roles"
        ],
        "properties": {
          "person_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "display_name": {
            "type": "string"
          },
          "roles": {
            "type": "array",
            "items": {
              "enum": [
                "teacher",
                "manager",
                "participant",
                "observer"
              ]
            }
          }
        }
      },
      "WorkspaceAttendance": {
        "type": "object",
        "required": [
          "person_id",
          "display_name",
          "first_joined_at",
          "last_left_at",
          "closed_seconds",
          "provisional"
        ],
        "properties": {
          "person_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "display_name": {
            "type": "string"
          },
          "first_joined_at": {
            "type": [
              "string",
              "null"
            ]
          },
          "last_left_at": {
            "type": [
              "string",
              "null"
            ]
          },
          "closed_seconds": {
            "type": "integer",
            "minimum": 0
          },
          "provisional": {
            "type": "boolean"
          }
        }
      },
      "WorkspaceNotification": {
        "type": "object",
        "required": [
          "id",
          "person_id",
          "session_id",
          "session_name",
          "kind",
          "created_at",
          "read_at"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "person_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "session_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "session_name": {
            "type": "string"
          },
          "kind": {
            "enum": [
              "reminder",
              "changed",
              "cancelled"
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "read_at": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "EmailSettings": {
        "type": "object",
        "required": [
          "enabled",
          "return_url",
          "worker_last_tick",
          "worker_problem"
        ],
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "return_url": {
            "type": "string"
          },
          "worker_last_tick": {
            "type": [
              "string",
              "null"
            ]
          },
          "worker_problem": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "additionalProperties": false
      },
      "EmailContactUpdated": {
        "type": "object",
        "required": [
          "contact_updated"
        ],
        "properties": {
          "contact_updated": {
            "const": true
          }
        },
        "additionalProperties": false
      },
      "EmailPreferences": {
        "type": "object",
        "required": [
          "contact_available",
          "email_enabled",
          "email_lead_minutes",
          "timezone",
          "application_enabled"
        ],
        "properties": {
          "contact_available": {
            "type": "boolean"
          },
          "email_enabled": {
            "type": "boolean"
          },
          "email_lead_minutes": {
            "enum": [
              5,
              15,
              30,
              60
            ]
          },
          "timezone": {
            "type": "string"
          },
          "application_enabled": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "EmailDelivery": {
        "type": "object",
        "required": [
          "id",
          "actor_subject",
          "person_id",
          "session_id",
          "kind",
          "state",
          "attempts",
          "last_code",
          "created_at",
          "accepted_at"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "actor_subject": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "person_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "session_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "kind": {
            "enum": [
              "reminder",
              "changed",
              "cancelled"
            ]
          },
          "state": {
            "enum": [
              "pending",
              "sending",
              "accepted",
              "failed",
              "cancelled"
            ]
          },
          "attempts": {
            "type": "integer",
            "minimum": 0
          },
          "last_code": {
            "type": [
              "string",
              "null"
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "accepted_at": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "SessionReport": {
        "type": "object",
        "required": [
          "application_id",
          "session_id",
          "summary",
          "published",
          "revision",
          "updated_at"
        ],
        "properties": {
          "application_id": {
            "type": "string",
            "format": "uuid"
          },
          "session_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "summary": {
            "type": "string"
          },
          "published": {
            "type": "boolean"
          },
          "revision": {
            "type": "integer",
            "minimum": 1
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "SessionPrivateNote": {
        "type": "object",
        "required": [
          "application_id",
          "session_id",
          "body",
          "revision"
        ],
        "properties": {
          "application_id": {
            "type": "string",
            "format": "uuid"
          },
          "session_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "body": {
            "type": "string"
          },
          "revision": {
            "type": "integer",
            "minimum": 1
          }
        }
      },
      "SessionTask": {
        "type": "object",
        "required": [
          "application_id",
          "external_id",
          "session_id",
          "person_id",
          "title",
          "due_at",
          "done",
          "revision",
          "updated_at"
        ],
        "properties": {
          "application_id": {
            "type": "string",
            "format": "uuid"
          },
          "external_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "session_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "person_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "title": {
            "type": "string"
          },
          "due_at": {
            "type": [
              "string",
              "null"
            ]
          },
          "done": {
            "type": "boolean"
          },
          "revision": {
            "type": "integer",
            "minimum": 1
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "SessionAttendanceDecision": {
        "type": "object",
        "required": [
          "application_id",
          "session_id",
          "person_id",
          "status",
          "reason",
          "revision",
          "updated_at"
        ],
        "properties": {
          "application_id": {
            "type": "string",
            "format": "uuid"
          },
          "session_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "person_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "status": {
            "enum": [
              "present",
              "absent",
              "late",
              "excused",
              "unreviewed"
            ]
          },
          "reason": {
            "type": "string"
          },
          "revision": {
            "type": "integer",
            "minimum": 1
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "SessionDocumentCandidate": {
        "type": "object",
        "required": [
          "document_candidate",
          "document_id",
          "name",
          "media_type",
          "byte_size",
          "allow_download"
        ],
        "properties": {
          "document_candidate": {
            "const": true
          },
          "document_id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "media_type": {
            "type": "string"
          },
          "byte_size": {
            "type": "integer"
          },
          "allow_download": {
            "type": "boolean"
          }
        }
      },
      "ActivityResource": {
        "type": "object",
        "required": [
          "application_id",
          "external_id",
          "context_id",
          "title",
          "kind",
          "audience",
          "person_id",
          "allow_download",
          "expires_at",
          "active",
          "revision",
          "updated_at"
        ],
        "properties": {
          "application_id": {
            "type": "string",
            "format": "uuid"
          },
          "external_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "context_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "title": {
            "type": "string"
          },
          "kind": {
            "enum": [
              "document",
              "link",
              "recording"
            ]
          },
          "audience": {
            "enum": [
              "members",
              "staff",
              "person"
            ]
          },
          "person_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "allow_download": {
            "type": "boolean"
          },
          "expires_at": {
            "type": [
              "string",
              "null"
            ]
          },
          "active": {
            "type": "boolean"
          },
          "revision": {
            "type": "integer",
            "minimum": 1
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "SessionServiceHistory": {
        "type": "object",
        "required": [
          "id",
          "application_id",
          "context_id",
          "actor",
          "action",
          "item_id",
          "before_data",
          "after_data",
          "created_at"
        ],
        "properties": {
          "id": {
            "type": "integer"
          },
          "application_id": {
            "type": "string",
            "format": "uuid"
          },
          "context_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "actor": {
            "type": "string"
          },
          "action": {
            "type": "string"
          },
          "item_id": {
            "type": "string"
          },
          "before_data": {
            "type": [
              "object",
              "null"
            ]
          },
          "after_data": {
            "type": [
              "object",
              "null"
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "SessionFollowup": {
        "type": "object",
        "required": [
          "followup",
          "session_id",
          "can_manage",
          "report",
          "private_note"
        ],
        "properties": {
          "followup": {
            "const": true
          },
          "session_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "can_manage": {
            "type": "boolean"
          },
          "report": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/SessionReport"
              },
              {
                "type": "null"
              }
            ]
          },
          "private_note": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/SessionPrivateNote"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "SessionServiceSaved": {
        "type": "object",
        "required": [
          "followup_saved",
          "item"
        ],
        "properties": {
          "followup_saved": {
            "const": true
          },
          "item": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/SessionReport"
              },
              {
                "$ref": "#/components/schemas/SessionPrivateNote"
              },
              {
                "$ref": "#/components/schemas/SessionTask"
              },
              {
                "$ref": "#/components/schemas/SessionAttendanceDecision"
              },
              {
                "$ref": "#/components/schemas/ActivityResource"
              }
            ]
          }
        }
      },
      "ResourceDetail": {
        "type": "object",
        "required": [
          "resource_detail",
          "item"
        ],
        "properties": {
          "resource_detail": {
            "const": true
          },
          "item": {
            "type": "object",
            "required": [
              "application_id",
              "external_id",
              "context_id",
              "title",
              "kind",
              "audience",
              "person_id",
              "allow_download",
              "expires_at",
              "active",
              "revision",
              "updated_at"
            ],
            "properties": {
              "application_id": {
                "type": "string",
                "format": "uuid"
              },
              "external_id": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              },
              "context_id": {
                "type": "string",
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
              },
              "title": {
                "type": "string"
              },
              "kind": {
                "enum": [
                  "document",
                  "link",
                  "recording"
                ]
              },
              "audience": {
                "enum": [
                  "members",
                  "staff",
                  "person"
                ]
              },
              "person_id": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "allow_download": {
                "type": "boolean"
              },
              "expires_at": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "active": {
                "type": "boolean"
              },
              "revision": {
                "type": "integer",
                "minimum": 1
              },
              "updated_at": {
                "type": "string",
                "format": "date-time"
              },
              "url": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "document_id": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          }
        }
      },
      "ResourceLink": {
        "type": "object",
        "required": [
          "resource_link",
          "url",
          "external_access_notice"
        ],
        "properties": {
          "resource_link": {
            "const": true
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "external_access_notice": {
            "type": "string"
          }
        }
      },
      "ResourceDocument": {
        "type": "object",
        "required": [
          "resource_document",
          "room_id",
          "document_id",
          "name",
          "media_type",
          "byte_size",
          "mode"
        ],
        "properties": {
          "resource_document": {
            "const": true
          },
          "room_id": {
            "type": "string",
            "format": "uuid"
          },
          "document_id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "media_type": {
            "enum": [
              "text/plain",
              "application/pdf",
              "image/png",
              "image/jpeg"
            ]
          },
          "byte_size": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10485760
          },
          "mode": {
            "enum": [
              "view",
              "download"
            ]
          }
        }
      },
      "SessionAccessDiagnostic": {
        "type": "object",
        "required": [
          "diagnostic",
          "reference",
          "code",
          "directory_allowed",
          "message",
          "scope",
          "admission_checked",
          "devices_checked"
        ],
        "properties": {
          "diagnostic": {
            "const": true
          },
          "reference": {
            "type": "string",
            "format": "uuid"
          },
          "code": {
            "type": "string"
          },
          "directory_allowed": {
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "scope": {
            "const": "directory_and_schedule_only"
          },
          "admission_checked": {
            "const": false
          },
          "devices_checked": {
            "const": false
          }
        }
      },
      "ApplicationIntegrationCheck": {
        "type": "object",
        "required": [
          "integration_checked",
          "parent_origin_allowed",
          "web_enabled",
          "native_enabled",
          "instance_origin",
          "database_features",
          "scopes"
        ],
        "properties": {
          "integration_checked": {
            "const": true
          },
          "parent_origin_allowed": {
            "type": "boolean"
          },
          "web_enabled": {
            "type": "boolean"
          },
          "native_enabled": {
            "type": "boolean"
          },
          "instance_origin": {
            "type": "string",
            "format": "uri"
          },
          "database_features": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "scopes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "ResourceContentRequest": {
        "type": "object",
        "required": [
          "external_id",
          "mode",
          "as_actor"
        ],
        "properties": {
          "external_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "person_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "mode": {
            "enum": [
              "view",
              "download"
            ]
          },
          "as_actor": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          }
        },
        "additionalProperties": false
      },
      "IntegrationReleaseInfo": {
        "type": "object",
        "required": [
          "server_version",
          "contract_version",
          "notice",
          "sdks"
        ],
        "properties": {
          "server_version": {
            "type": "string"
          },
          "contract_version": {
            "type": "string"
          },
          "notice": {
            "type": "string"
          },
          "sdks": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "name",
                "version",
                "download",
                "archive"
              ],
              "properties": {
                "name": {
                  "type": "string"
                },
                "version": {
                  "type": "string"
                },
                "download": {
                  "type": "string"
                },
                "archive": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "properties": {
                    "filename": {
                      "type": "string"
                    },
                    "sha256": {
                      "type": "string"
                    },
                    "bytes": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "OrganizationOperationsResult": {
        "type": "object",
        "required": [
          "operations"
        ],
        "properties": {
          "operations": {
            "const": true
          },
          "role": {
            "enum": [
              "administrator",
              "manager",
              "teacher",
              "guardian",
              "participant"
            ]
          },
          "person_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "preferences": {
            "type": "object"
          },
          "sessions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DirectoryActivitySession"
            }
          },
          "counts": {
            "type": "object"
          },
          "counts_scope": {
            "type": "string"
          },
          "policy": {
            "type": "object"
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "item": {
            "type": "object"
          },
          "next_cursor": {
            "type": [
              "string",
              "null"
            ]
          },
          "notice": {
            "type": "string"
          },
          "conflicts": {
            "type": "object",
            "required": [
              "overlapping_sessions",
              "unavailable_people"
            ],
            "properties": {
              "overlapping_sessions": {
                "type": "integer",
                "minimum": 0
              },
              "unavailable_people": {
                "type": "integer",
                "minimum": 0
              }
            }
          },
          "blocking_enabled": {
            "type": "boolean"
          },
          "token": {
            "type": [
              "string",
              "null"
            ]
          },
          "cutoff": {
            "type": "string",
            "format": "date-time"
          },
          "deleted": {
            "type": "boolean"
          },
          "read": {
            "const": true
          },
          "recorded": {
            "const": true
          },
          "source": {
            "const": "user_report"
          },
          "period_days": {
            "const": 30
          },
          "stored_document_bytes": {
            "type": "integer",
            "minimum": 0
          },
          "production_capacity_proven": {
            "const": false
          }
        },
        "additionalProperties": false
      },
      "PilotResult": {
        "type": "object",
        "required": [
          "pilot"
        ],
        "properties": {
          "pilot": {
            "const": true
          },
          "stored": {
            "const": true
          },
          "entry": {
            "type": [
              "object",
              "null"
            ]
          },
          "slot": {
            "type": [
              "object",
              "null"
            ]
          },
          "booking": {
            "type": "object"
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "next_cursor": {
            "type": [
              "string",
              "null"
            ]
          },
          "cancelled": {
            "const": true
          },
          "enabled": {
            "type": "boolean"
          },
          "recorded": {
            "const": true
          },
          "planned": {
            "type": "integer"
          },
          "notice": {
            "type": "string"
          },
          "source": {
            "const": "browser_rtc_stats"
          },
          "period_days": {
            "const": 30
          },
          "samples": {
            "type": "integer"
          },
          "reports": {
            "type": "integer"
          },
          "audio_loss_percent": {
            "type": [
              "number",
              "null"
            ],
            "minimum": 0,
            "maximum": 100
          },
          "video_loss_percent": {
            "type": [
              "number",
              "null"
            ],
            "minimum": 0,
            "maximum": 100
          },
          "jitter_ms": {
            "type": [
              "number",
              "null"
            ],
            "minimum": 0,
            "maximum": 60000
          },
          "rtt_ms": {
            "type": [
              "number",
              "null"
            ],
            "minimum": 0,
            "maximum": 60000
          },
          "job": {
            "type": "object"
          },
          "finished": {
            "const": true
          },
          "resolved": {
            "const": true
          }
        },
        "additionalProperties": false
      },
      "TeachingReadiness": {
        "type": "object",
        "required": [
          "read_only",
          "schema",
          "application",
          "runtime",
          "signed_delivery",
          "ready_for_measurement"
        ],
        "properties": {
          "read_only": {
            "const": true
          },
          "schema": {
            "type": "object",
            "required": [
              "checked",
              "teaching_004",
              "retention_005"
            ],
            "properties": {
              "checked": {
                "type": "boolean"
              },
              "teaching_004": {
                "type": "boolean"
              },
              "retention_005": {
                "type": "boolean"
              }
            }
          },
          "application": {
            "type": "object",
            "required": [
              "configuration_accessible",
              "measurement_enabled",
              "retention_months",
              "native_enabled",
              "web_enabled",
              "missing_scopes",
              "temporary_origin"
            ],
            "properties": {
              "configuration_accessible": {
                "type": "boolean"
              },
              "measurement_enabled": {
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "retention_months": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "native_enabled": {
                "type": "boolean"
              },
              "web_enabled": {
                "type": "boolean"
              },
              "missing_scopes": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "temporary_origin": {
                "type": [
                  "boolean",
                  "null"
                ]
              }
            }
          },
          "runtime": {
            "type": "object",
            "required": [
              "collector_enabled",
              "collector_healthy",
              "retention_healthy"
            ],
            "properties": {
              "collector_enabled": {
                "type": "boolean"
              },
              "collector_healthy": {
                "type": "boolean"
              },
              "retention_healthy": {
                "type": "boolean"
              }
            }
          },
          "signed_delivery": {
            "type": "object",
            "required": [
              "worker_enabled",
              "worker_healthy",
              "verified",
              "evidence"
            ],
            "properties": {
              "worker_enabled": {
                "type": "boolean"
              },
              "worker_healthy": {
                "type": "boolean"
              },
              "verified": {
                "const": false
              },
              "evidence": {
                "type": "string"
              }
            }
          },
          "ready_for_measurement": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "TeachingResult": {
        "type": "object",
        "required": [
          "teaching"
        ],
        "properties": {
          "teaching": {
            "const": true
          },
          "erased": {
            "const": true
          },
          "deleted_rows": {
            "type": "integer",
            "minimum": 0
          },
          "redacted_rows": {
            "type": "integer",
            "minimum": 0
          },
          "turn_changed": {
            "type": "boolean"
          },
          "declarations": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "precision_seconds": {
            "type": "integer",
            "minimum": 0
          },
          "external_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:@-]{0,199}$"
          },
          "from": {
            "type": "string"
          },
          "until": {
            "type": "string"
          },
          "provisional": {
            "type": "boolean"
          },
          "measurement": {
            "type": "string"
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "recitation_notes": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "policy": {
            "type": "object"
          },
          "viewer": {
            "type": "object"
          },
          "tools": {
            "type": "object"
          },
          "config": {
            "type": "object"
          },
          "resources": {
            "type": [
              "object",
              "null"
            ]
          },
          "source_capabilities": {
            "type": "object"
          },
          "notice": {
            "type": "string"
          },
          "period": {
            "type": "object"
          },
          "sealed": {
            "type": "boolean"
          },
          "sealed_at": {
            "type": [
              "string",
              "null"
            ]
          },
          "adjustments": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "saved": {
            "const": true
          },
          "adjusted": {
            "const": true
          },
          "updated": {
            "const": true
          }
        },
        "additionalProperties": false
      }
    },
    "responses": {
      "InvalidRequest": {
        "description": "Invalid request",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "InvalidCredentials": {
        "description": "Missing, expired or invalid credentials",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Forbidden": {
        "description": "Role or scope denied",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "MethodNotAllowed": {
        "description": "Method not allowed",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "RateLimited": {
        "description": "Process-local request limit; Retry-After header",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Unavailable": {
        "description": "Configuration, migration or upstream unavailable",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      }
    }
  },
  "x-canonical-partner-contract": "/api/integration/v1/openapi.json",
  "x-compatibility-policy": "docs/INTEGRATION-CONTRACT.md"
}
