{
  "openapi": "3.1.0",
  "info": {
    "title": "Hubuum REST API",
    "description": "OpenAPI documentation for the Hubuum REST service.",
    "license": {
      "name": "MIT",
      "identifier": "MIT"
    },
    "version": "0.0.17"
  },
  "servers": [
    {
      "url": "/",
      "description": "Current deployment base URL"
    }
  ],
  "paths": {
    "/api/v0/auth/login": {
      "post": {
        "tags": [
          "auth"
        ],
        "summary": "Post Api V0 Auth Login",
        "description": "Auto-generated documentation for POST /api/v0/auth/login.",
        "operationId": "postApiV0AuthLogin",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginUser"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Token and authoritative expiry issued",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoginResponse"
                }
              }
            }
          },
          "400": {
            "description": "Login fields exceed their supported lengths",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Too many login attempts",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v0/auth/logout": {
      "post": {
        "tags": [
          "auth"
        ],
        "summary": "Post Api V0 Auth Logout",
        "description": "Auto-generated documentation for POST /api/v0/auth/logout.",
        "operationId": "postApiV0AuthLogout",
        "responses": {
          "200": {
            "description": "Token revoked",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v0/auth/logout/token": {
      "post": {
        "tags": [
          "auth"
        ],
        "summary": "Post Api V0 Auth Logout Token",
        "description": "Auto-generated documentation for POST /api/v0/auth/logout/token.",
        "operationId": "postApiV0AuthLogoutToken",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LogoutTokenRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Token revoked",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v0/auth/logout/uid/{user_id}": {
      "post": {
        "tags": [
          "auth"
        ],
        "summary": "Post Api V0 Auth Logout Uid By User Id",
        "description": "Auto-generated documentation for POST /api/v0/auth/logout/uid/{user_id}.",
        "operationId": "postApiV0AuthLogoutUidByUserId",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "description": "User ID to revoke all tokens for",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "All tokens revoked for user",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v0/auth/logout_all": {
      "post": {
        "tags": [
          "auth"
        ],
        "summary": "Post Api V0 Auth Logout All",
        "description": "Auto-generated documentation for POST /api/v0/auth/logout_all.",
        "operationId": "postApiV0AuthLogoutAll",
        "responses": {
          "200": {
            "description": "All tokens revoked for current user",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v0/auth/providers": {
      "get": {
        "tags": [
          "auth"
        ],
        "summary": "Get Api V0 Auth Providers",
        "description": "Auto-generated documentation for GET /api/v0/auth/providers.",
        "operationId": "getApiV0AuthProviders",
        "responses": {
          "200": {
            "description": "Configured authentication provider names",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthProvidersResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v0/auth/validate": {
      "get": {
        "tags": [
          "auth"
        ],
        "summary": "Get Api V0 Auth Validate",
        "description": "Auto-generated documentation for GET /api/v0/auth/validate.",
        "operationId": "getApiV0AuthValidate",
        "responses": {
          "200": {
            "description": "Token is valid",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v0/meta/counts": {
      "get": {
        "tags": [
          "meta"
        ],
        "summary": "Get Api V0 Meta Counts",
        "description": "Auto-generated documentation for GET /api/v0/meta/counts.",
        "operationId": "getApiV0MetaCounts",
        "responses": {
          "200": {
            "description": "Object and class counters",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CountsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v0/meta/db": {
      "get": {
        "tags": [
          "meta"
        ],
        "summary": "Get Api V0 Meta Db",
        "description": "Auto-generated documentation for GET /api/v0/meta/db.",
        "operationId": "getApiV0MetaDb",
        "responses": {
          "200": {
            "description": "Database state",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DbStateResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Database diagnostics are not available for the configured storage backend",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v0/meta/login-rate-limit": {
      "get": {
        "tags": [
          "meta"
        ],
        "summary": "Get Api V0 Meta Login Rate Limit",
        "description": "Auto-generated documentation for GET /api/v0/meta/login-rate-limit.",
        "operationId": "getApiV0MetaLoginRateLimit",
        "parameters": [
          {
            "name": "include",
            "in": "query",
            "description": "`locked` (default) or `all`",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scope",
            "in": "query",
            "description": "Filter by scope kind: `user_ip`, `ip`, or `subnet`",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "q",
            "in": "query",
            "description": "Case-insensitive substring match on the scope identifier",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Login rate-limit configuration and tracked scopes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoginRateLimitStateResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "503": {
            "description": "Shared limiter unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "meta"
        ],
        "summary": "Delete Api V0 Meta Login Rate Limit",
        "description": "Auto-generated documentation for DELETE /api/v0/meta/login-rate-limit.",
        "operationId": "deleteApiV0MetaLoginRateLimit",
        "responses": {
          "200": {
            "description": "All entries cleared",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClearRateLimitResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "503": {
            "description": "Shared limiter unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v0/meta/login-rate-limit/{id}": {
      "delete": {
        "tags": [
          "meta"
        ],
        "summary": "Delete Api V0 Meta Login Rate Limit By Id",
        "description": "Auto-generated documentation for DELETE /api/v0/meta/login-rate-limit/{id}.",
        "operationId": "deleteApiV0MetaLoginRateLimitById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Opaque entry id from the list endpoint",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Entry released",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReleaseRateLimitResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid entry id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Entry not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "503": {
            "description": "Shared limiter unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v0/meta/tasks": {
      "get": {
        "tags": [
          "meta"
        ],
        "summary": "Get Api V0 Meta Tasks",
        "description": "Auto-generated documentation for GET /api/v0/meta/tasks.",
        "operationId": "getApiV0MetaTasks",
        "responses": {
          "200": {
            "description": "Task queue and worker state",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskQueueStateResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/admin/config": {
      "get": {
        "tags": [
          "admin"
        ],
        "summary": "Get Api V1 Admin Config",
        "description": "Auto-generated documentation for GET /api/v1/admin/config.",
        "operationId": "getApiV1AdminConfig",
        "responses": {
          "200": {
            "description": "Effective redacted process configuration",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RunningConfig"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/backups": {
      "post": {
        "tags": [
          "backups"
        ],
        "summary": "Post Api V1 Backups",
        "description": "Auto-generated documentation for POST /api/v1/backups.",
        "operationId": "postApiV1Backups",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BackupRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Backup task accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Unscoped administrator access required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Too many active backup tasks",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/backups/{task_id}": {
      "get": {
        "tags": [
          "backups"
        ],
        "summary": "Get Api V1 Backups By Task Id",
        "description": "Auto-generated documentation for GET /api/v1/backups/{task_id}.",
        "operationId": "getApiV1BackupsByTaskId",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "description": "Backup task ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Backup task projection",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Unscoped administrator access required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Backup task not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/backups/{task_id}/output": {
      "get": {
        "tags": [
          "backups"
        ],
        "summary": "Get Api V1 Backups By Task Id Output",
        "description": "Auto-generated documentation for GET /api/v1/backups/{task_id}/output.",
        "operationId": "getApiV1BackupsByTaskIdOutput",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "description": "Backup task ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Stored backup document",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                },
                "description": "Always no-store for credential-bearing artifacts"
              },
              "Content-Disposition": {
                "schema": {
                  "type": "string"
                },
                "description": "Attachment filename for the backup document"
              },
              "Digest": {
                "schema": {
                  "type": "string"
                },
                "description": "Base64-encoded SHA-256 content digest"
              },
              "X-Hubuum-Backup-SHA256": {
                "schema": {
                  "type": "string"
                },
                "description": "Lowercase hexadecimal SHA-256 digest"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BackupDocument"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Unscoped administrator access required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Backup output not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "410": {
            "description": "Backup output expired",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get Api V1 Classes",
        "description": "Auto-generated documentation for GET /api/v1/classes. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1Classes",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Classes matching optional query filters The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HubuumClassExpanded"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "classes"
        ],
        "summary": "Post Api V1 Classes",
        "description": "Auto-generated documentation for POST /api/v1/classes.",
        "operationId": "postApiV1Classes",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewHubuumClass"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Class created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HubuumClassExpanded"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/by-name/{class_name}": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get a class by name",
        "description": "Name-addressed alias for the class endpoint. The explicit by-name segment always treats numeric-looking values as names.",
        "operationId": "getApiV1ClassesByNameByClassName",
        "parameters": [
          {
            "name": "class_name",
            "in": "path",
            "description": "Globally unique class name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Class (expanded with include=collection)",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HubuumClass"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "classes"
        ],
        "summary": "Delete a class by name",
        "description": "Name-addressed alias for class deletion. The original name and resolved ID are rechecked under the transactional row lock.",
        "operationId": "deleteApiV1ClassesByNameByClassName",
        "parameters": [
          {
            "name": "class_name",
            "in": "path",
            "description": "Globally unique current class name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Class deleted",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class not found or concurrently renamed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "classes"
        ],
        "summary": "Update a class by name",
        "description": "Name-addressed alias for class update. Authorization is bound to the resolved class, and the original name plus resolved ID are rechecked under the transactional row lock.",
        "operationId": "patchApiV1ClassesByNameByClassName",
        "parameters": [
          {
            "name": "class_name",
            "in": "path",
            "description": "Globally unique current class name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateHubuumClass"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Updated class",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HubuumClassExpanded"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class not found or concurrently renamed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/by-name/{class_name}/object-aggregates": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Aggregate objects in a class by class name",
        "description": "Name-addressed alias for permission-scoped object aggregation. Numeric-looking class names remain names. Normal object filters and up to two enabled shared or owned personal computed filters are applied before optional grouping and numeric measures.",
        "operationId": "getApiV1ClassesByNameByClassNameObjectAggregates",
        "parameters": [
          {
            "name": "class_name",
            "in": "path",
            "description": "Globally unique class name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "group_by",
            "in": "query",
            "description": "Up to three repeated ordered dimensions: name, description, collection_id, created_at, updated_at, json_data.<comma-separated-path>, computed.shared.<key>, or computed.personal.<key>",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "aggregate",
            "in": "query",
            "description": "Up to four repeated numeric measures in operation:field form. Operations are sum, average, min, and max; fields are json_data.<comma-separated-path>, computed.shared.<key>, or computed.personal.<key>. At least one group_by or aggregate parameter is required.",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Aggregate ordering: dimensions.asc, dimensions.desc, object_count.asc, or object_count.desc",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Permission-scoped grouped or global aggregate rows. Dimension states preserve null, missing, and unavailable values; numeric measures report contributing and skipped source counts.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ObjectAggregateRow"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid filter, dimension, measure, path, sort, cursor, or computed selector",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "413": {
            "description": "An aggregate value is too large for a replay-safe cursor, or source snapshots or externally authorized intermediate aggregates exceed their memory bounds",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/by-name/{class_name}/objects": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "List objects in a class by class name",
        "description": "Name-addressed alias for listing the current objects in a class. Numeric-looking class names remain names. Named related.<alias> groups filter objects by bounded, permission-visible paths to independent target objects. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1ClassesByNameByClassNameObjects",
        "parameters": [
          {
            "name": "class_name",
            "in": "path",
            "description": "Globally unique class name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include",
            "in": "query",
            "description": "Set to computed to enrich each object",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Sort by object fields or computed.shared.<key>/computed.personal.<key>; computed sorting supports at most two explicit sort fields",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "related.<alias>.class.name",
            "in": "query",
            "description": "Required exact target-class selector for a named related group; use class.id instead for an integer ID",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "related.<alias>.object.<field>__<operator>",
            "in": "query",
            "description": "Target-object predicate correlated within the named group; supports id, name, description, collection_id, created_at, updated_at, revision, and json_data",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "related.<alias>.depth__lte",
            "in": "query",
            "description": "Maximum bidirectional relationship depth for the named group; defaults to 1 and is capped at 10",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "maximum": 10,
              "minimum": 1
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Objects in class, optionally enriched with computed fields The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HubuumObjectReadResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "classes"
        ],
        "summary": "Create an object in a class by class name",
        "description": "Name-addressed alias for object creation. The original class name and resolved ID are rechecked under the same transaction that creates the object.",
        "operationId": "postApiV1ClassesByNameByClassNameObjects",
        "parameters": [
          {
            "name": "class_name",
            "in": "path",
            "description": "Globally unique current class name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewHubuumObjectRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Object created in class",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HubuumObject"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class not found or concurrently renamed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/by-name/{class_name}/objects/by-name/{object_name}": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get an object by class and object name",
        "description": "Fully name-addressed alias for the object endpoint. Numeric-looking path values remain names.",
        "operationId": "getApiV1ClassesByNameByClassNameObjectsByNameByObjectName",
        "parameters": [
          {
            "name": "class_name",
            "in": "path",
            "description": "Globally unique class name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "object_name",
            "in": "path",
            "description": "Object name, unique within the class",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include",
            "in": "query",
            "description": "Set to computed to enrich the object",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Object in class, optionally enriched with computed fields",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HubuumObjectReadResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class/object name pair not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "classes"
        ],
        "summary": "Delete an object by class and object name",
        "description": "Fully name-addressed alias for object deletion. The original natural key and resolved IDs are rechecked under the transactional row lock.",
        "operationId": "deleteApiV1ClassesByNameByClassNameObjectsByNameByObjectName",
        "parameters": [
          {
            "name": "class_name",
            "in": "path",
            "description": "Globally unique current class name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "object_name",
            "in": "path",
            "description": "Current object name, unique within the class",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Object deleted",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class/object pair not found or concurrently renamed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "classes"
        ],
        "summary": "Update an object by class and object name",
        "description": "Fully name-addressed alias for object update. The original natural key and resolved IDs are rechecked under the transactional row lock.",
        "operationId": "patchApiV1ClassesByNameByClassNameObjectsByNameByObjectName",
        "parameters": [
          {
            "name": "class_name",
            "in": "path",
            "description": "Globally unique current class name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "object_name",
            "in": "path",
            "description": "Current object name, unique within the class",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateHubuumObjectRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Updated object",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HubuumObject"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class/object pair not found or concurrently renamed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/by-name/{class_name}/objects/by-name/{object_name}/data": {
      "patch": {
        "tags": [
          "classes"
        ],
        "summary": "Apply JSON Patch to object data by object name",
        "description": "Fully name-addressed alias for the atomic object-data JSON Patch endpoint. Class names are globally unique, object names are unique within their class, and both names are URL percent-decoded. The server resolves the natural key for authorization, then requires that same object ID, class ID, class name, and object name when taking the transactional row lock so a concurrent rename cannot redirect the patch. Numeric-looking names are always treated as names on this route. Every `path` and `from` remains relative to the root of the raw `data` document.",
        "operationId": "patchApiV1ClassesByNameByClassNameObjectsByNameByObjectNameData",
        "parameters": [
          {
            "name": "class_name",
            "in": "path",
            "description": "Globally unique class name, URL percent-encoded as needed",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "object_name",
            "in": "path",
            "description": "Class-scoped object name, URL percent-encoded as needed",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "RFC 6902 operation array. Supports add, remove, replace, move, copy, and test. Limited to 1,000 operations and 128 pointer segments per path/from.",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ObjectDataPatchDocument"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Updated object, or the unchanged object for a no-op patch",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HubuumObject"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON, invalid JSON Patch structure or bounds, or a result PostgreSQL JSONB cannot represent",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "UpdateObject permission denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class-name/object-name pair not found or the object was concurrently renamed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "406": {
            "description": "Final patched data fails the class JSON Schema",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "A patch operation failed, including a failed test operation; no change was persisted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          },
          "413": {
            "description": "JSON Patch request or resulting object data exceeds its resource limits",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type is not application/json-patch+json",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Persistence, computed-field materialization, or event emission failed and the transaction was rolled back",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/by-name/{class_name}/objects/by-name/{object_name}/related/graph": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get the related-object graph by class and object name",
        "description": "Returns the complete bounded neighborhood graph as one response. This endpoint is not paginated: limit is a maximum related-node safety bound, include_total has no effect, and X-Total-Count is not returned.",
        "operationId": "getApiV1ClassesByNameByClassNameObjectsByNameByObjectNameRelatedGraph",
        "parameters": [
          {
            "name": "class_name",
            "in": "path",
            "description": "Globally unique class name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "object_name",
            "in": "path",
            "description": "Object name, unique within the class",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Neighborhood graph for the object",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RelatedObjectGraph"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class/object name pair not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/by-name/{class_name}/objects/by-name/{object_name}/related/objects": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get related objects by class and object name",
        "description": "Auto-generated documentation for GET /api/v1/classes/by-name/{class_name}/objects/by-name/{object_name}/related/objects. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1ClassesByNameByClassNameObjectsByNameByObjectNameRelatedObjects",
        "parameters": [
          {
            "name": "class_name",
            "in": "path",
            "description": "Globally unique class name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "object_name",
            "in": "path",
            "description": "Object name, unique within the class",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ignore_classes",
            "in": "query",
            "description": "Comma-separated class IDs to exclude from the returned connected objects",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ignore_self_class",
            "in": "query",
            "description": "Exclude connected objects in the same class as the root object. Defaults to true",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Objects connected to the object The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HubuumObjectWithPath"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class/object name pair not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/by-name/{class_name}/objects/by-name/{object_name}/related/relations": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get related object relations by class and object name",
        "description": "Auto-generated documentation for GET /api/v1/classes/by-name/{class_name}/objects/by-name/{object_name}/related/relations. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1ClassesByNameByClassNameObjectsByNameByObjectNameRelatedRelations",
        "parameters": [
          {
            "name": "class_name",
            "in": "path",
            "description": "Globally unique class name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "object_name",
            "in": "path",
            "description": "Object name, unique within the class",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Direct relations touching the object The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HubuumObjectRelation"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class/object name pair not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/by-name/{class_name}/permissions": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get class permissions by class name",
        "description": "Auto-generated documentation for GET /api/v1/classes/by-name/{class_name}/permissions. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1ClassesByNameByClassNamePermissions",
        "parameters": [
          {
            "name": "class_name",
            "in": "path",
            "description": "Globally unique class name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Collection-group permission mappings for class collection The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GroupPermission"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/by-name/{class_name}/related/classes": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get related classes by class name",
        "description": "Auto-generated documentation for GET /api/v1/classes/by-name/{class_name}/related/classes. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1ClassesByNameByClassNameRelatedClasses",
        "parameters": [
          {
            "name": "class_name",
            "in": "path",
            "description": "Globally unique class name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Classes connected to the class The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HubuumClassWithPath"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/by-name/{class_name}/related/graph": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get the related-class graph by class name",
        "description": "Returns the complete bounded neighborhood graph as one response. This endpoint is not paginated: limit is a maximum related-node safety bound, include_total has no effect, and X-Total-Count is not returned.",
        "operationId": "getApiV1ClassesByNameByClassNameRelatedGraph",
        "parameters": [
          {
            "name": "class_name",
            "in": "path",
            "description": "Globally unique class name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Neighborhood graph for the class",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RelatedClassGraph"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/by-name/{class_name}/related/relations": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get related class relations by class name",
        "description": "Auto-generated documentation for GET /api/v1/classes/by-name/{class_name}/related/relations. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1ClassesByNameByClassNameRelatedRelations",
        "parameters": [
          {
            "name": "class_name",
            "in": "path",
            "description": "Globally unique class name",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Direct relations touching the class The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HubuumClassRelation"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get Api V1 Classes By Class Id",
        "description": "Auto-generated documentation for GET /api/v1/classes/{class_id}.",
        "operationId": "getApiV1ClassesByClassId",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Class (expanded with include=collection)",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HubuumClass"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "classes"
        ],
        "summary": "Delete Api V1 Classes By Class Id",
        "description": "Auto-generated documentation for DELETE /api/v1/classes/{class_id}.",
        "operationId": "deleteApiV1ClassesByClassId",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Class deleted",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "classes"
        ],
        "summary": "Patch Api V1 Classes By Class Id",
        "description": "Auto-generated documentation for PATCH /api/v1/classes/{class_id}.",
        "operationId": "patchApiV1ClassesByClassId",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateHubuumClass"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Updated class",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HubuumClassExpanded"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get Api V1 Classes By Class Id Trailing",
        "description": "Lists objects in the path class. Enabled computed fields can be filtered with computed.shared.<key> or computed.personal.<key> using the normal __operator suffix, and sorted with the same names. Named related.<alias> groups filter objects by bounded, permission-visible paths to independent target objects. Computed querying supports at most two computed filter parameters and two explicit sort fields per request. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1ClassesByClassIdTrailing",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "include",
            "in": "query",
            "description": "Set to computed to enrich each object",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Sort by object fields or computed.shared.<key>/computed.personal.<key>; computed sorting supports at most two explicit sort fields",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "related.<alias>.class.name",
            "in": "query",
            "description": "Required exact target-class selector for a named related group; use class.id instead for an integer ID",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "related.<alias>.object.<field>__<operator>",
            "in": "query",
            "description": "Target-object predicate correlated within the named group; supports id, name, description, collection_id, created_at, updated_at, revision, and json_data",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "related.<alias>.depth__lte",
            "in": "query",
            "description": "Maximum bidirectional relationship depth for the named group; defaults to 1 and is capped at 10",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "maximum": 10,
              "minimum": 1
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Objects in class, optionally enriched with computed fields The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HubuumObjectReadResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "classes"
        ],
        "summary": "Post Api V1 Classes By Class Id Trailing",
        "description": "Auto-generated documentation for POST /api/v1/classes/{class_id}/.",
        "operationId": "postApiV1ClassesByClassIdTrailing",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewHubuumObjectRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Object created in class",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HubuumObject"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/computed-fields": {
      "get": {
        "tags": [
          "computed fields"
        ],
        "summary": "Get Api V1 Classes By Class Id Computed Fields",
        "description": "Auto-generated documentation for GET /api/v1/classes/{class_id}/computed-fields.",
        "operationId": "getApiV1ClassesByClassIdComputedFields",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Shared computed-field definitions and rebuild state",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComputedFieldListResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "computed fields"
        ],
        "summary": "Post Api V1 Classes By Class Id Computed Fields",
        "description": "Auto-generated documentation for POST /api/v1/classes/{class_id}/computed-fields.",
        "operationId": "postApiV1ClassesByClassIdComputedFields",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ComputedFieldDefinitionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Shared definition created and rebuild queued",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComputedFieldMutationResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid definition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Key conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/computed-fields/preview": {
      "post": {
        "tags": [
          "computed fields"
        ],
        "summary": "Post Api V1 Classes By Class Id Computed Fields Preview",
        "description": "Auto-generated documentation for POST /api/v1/classes/{class_id}/computed-fields/preview.",
        "operationId": "postApiV1ClassesByClassIdComputedFieldsPreview",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ComputedFieldPreviewRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Computed-field preview",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComputedFieldPreviewResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid preview",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/computed-fields/rebuild": {
      "post": {
        "tags": [
          "computed fields"
        ],
        "summary": "Post Api V1 Classes By Class Id Computed Fields Rebuild",
        "description": "Auto-generated documentation for POST /api/v1/classes/{class_id}/computed-fields/rebuild.",
        "operationId": "postApiV1ClassesByClassIdComputedFieldsRebuild",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Computed-field rebuild queued",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClassComputationState"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/computed-fields/{field_id}": {
      "get": {
        "tags": [
          "computed fields"
        ],
        "summary": "Get Api V1 Classes By Class Id Computed Fields By Field Id",
        "description": "Auto-generated documentation for GET /api/v1/classes/{class_id}/computed-fields/{field_id}.",
        "operationId": "getApiV1ClassesByClassIdComputedFieldsByFieldId",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "field_id",
            "in": "path",
            "description": "Computed-field definition ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Shared computed-field definition",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComputedFieldDefinition"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Computed field or class not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "computed fields"
        ],
        "summary": "Delete Api V1 Classes By Class Id Computed Fields By Field Id",
        "description": "Auto-generated documentation for DELETE /api/v1/classes/{class_id}/computed-fields/{field_id}.",
        "operationId": "deleteApiV1ClassesByClassIdComputedFieldsByFieldId",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "field_id",
            "in": "path",
            "description": "Computed-field definition ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Shared definition deleted and rebuild queued",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComputedFieldDeleteResponse"
                }
              }
            }
          },
          "409": {
            "description": "Revision conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "computed fields"
        ],
        "summary": "Patch Api V1 Classes By Class Id Computed Fields By Field Id",
        "description": "Auto-generated documentation for PATCH /api/v1/classes/{class_id}/computed-fields/{field_id}.",
        "operationId": "patchApiV1ClassesByClassIdComputedFieldsByFieldId",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "field_id",
            "in": "path",
            "description": "Computed-field definition ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ComputedFieldDefinitionPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Shared definition updated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComputedFieldMutationResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid definition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Revision or key conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/events": {
      "get": {
        "tags": [
          "events"
        ],
        "summary": "Get Api V1 Classes By Class Id Events",
        "description": "Auto-generated documentation for GET /api/v1/classes/{class_id}/events. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1ClassesByClassIdEvents",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "action",
            "in": "query",
            "description": "Optional action filter",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "actor_kind",
            "in": "query",
            "description": "Optional actor kind filter",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "actor_user_id",
            "in": "query",
            "description": "Optional actor principal id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "initiator_user_id",
            "in": "query",
            "description": "Optional root task initiator principal id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "collection_id",
            "in": "query",
            "description": "Optional collection id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "occurred_after",
            "in": "query",
            "description": "Optional lower occurred_at bound, RFC3339 or YYYY-MM-DD",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "occurred_before",
            "in": "query",
            "description": "Optional upper occurred_at bound, RFC3339 or YYYY-MM-DD",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Supported fields: id, occurred_at",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursor token from X-Next-Cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Visible class audit events The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EventResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/history": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get Api V1 Classes By Class Id History",
        "description": "Auto-generated documentation for GET /api/v1/classes/{class_id}/history. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1ClassesByClassIdHistory",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Class history The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HistoryResponse_HubuumClassHistory"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/history/as-of": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get Api V1 Classes By Class Id History As Of",
        "description": "Auto-generated documentation for GET /api/v1/classes/{class_id}/history/as-of.",
        "operationId": "getApiV1ClassesByClassIdHistoryAsOf",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "at",
            "in": "query",
            "description": "RFC3339 timestamp",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Class version at timestamp",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HistoryResponse_HubuumClassHistory"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class or version not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/object-aggregates": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get Api V1 Classes By Class Id Object Aggregates",
        "description": "Permission-scoped object aggregation. Normal object filters and up to two enabled shared or owned personal computed filters are applied before optional grouping and numeric measures.",
        "operationId": "getApiV1ClassesByClassIdObjectAggregates",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "group_by",
            "in": "query",
            "description": "Up to three repeated ordered dimensions: name, description, collection_id, created_at, updated_at, json_data.<comma-separated-path>, computed.shared.<key>, or computed.personal.<key>",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "aggregate",
            "in": "query",
            "description": "Up to four repeated numeric measures in operation:field form. Operations are sum, average, min, and max; fields are json_data.<comma-separated-path>, computed.shared.<key>, or computed.personal.<key>. At least one group_by or aggregate parameter is required.",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Aggregate ordering: dimensions.asc, dimensions.desc, object_count.asc, or object_count.desc",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Permission-scoped grouped or global aggregate rows. Dimension states preserve null, missing, and unavailable values; numeric measures report contributing and skipped source counts.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ObjectAggregateRow"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid filter, dimension, measure, path, sort, cursor, or computed selector",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "413": {
            "description": "An aggregate value is too large for a replay-safe cursor, or source snapshots or externally authorized intermediate aggregates exceed their memory bounds",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/objects/{object_id}/related/graph": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get Api V1 Classes By Class Id Objects By Object Id Related Graph",
        "description": "Returns the complete bounded neighborhood graph as one response. This endpoint is not paginated: limit is a maximum related-node safety bound, include_total has no effect, and X-Total-Count is not returned.",
        "operationId": "getApiV1ClassesByClassIdObjectsByObjectIdRelatedGraph",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "object_id",
            "in": "path",
            "description": "Object ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Neighborhood graph for the object",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RelatedObjectGraph"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class or object not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/objects/{object_id}/related/objects": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get Api V1 Classes By Class Id Objects By Object Id Related Objects",
        "description": "Auto-generated documentation for GET /api/v1/classes/{class_id}/objects/{object_id}/related/objects. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1ClassesByClassIdObjectsByObjectIdRelatedObjects",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "object_id",
            "in": "path",
            "description": "Object ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "ignore_classes",
            "in": "query",
            "description": "Comma-separated class IDs to exclude from the returned connected objects",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ignore_self_class",
            "in": "query",
            "description": "Exclude connected objects in the same class as the root object. Defaults to true",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Objects connected to the object The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HubuumObjectWithPath"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class or object not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/objects/{object_id}/related/relations": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get Api V1 Classes By Class Id Objects By Object Id Related Relations",
        "description": "Auto-generated documentation for GET /api/v1/classes/{class_id}/objects/{object_id}/related/relations. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1ClassesByClassIdObjectsByObjectIdRelatedRelations",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "object_id",
            "in": "path",
            "description": "Object ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Direct relations touching the object The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HubuumObjectRelation"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class or object not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/permissions": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get Api V1 Classes By Class Id Permissions",
        "description": "Auto-generated documentation for GET /api/v1/classes/{class_id}/permissions. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1ClassesByClassIdPermissions",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Collection-group permission mappings for class collection The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GroupPermission"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/related/classes": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get Api V1 Classes By Class Id Related Classes",
        "description": "Auto-generated documentation for GET /api/v1/classes/{class_id}/related/classes. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1ClassesByClassIdRelatedClasses",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Classes connected to the class The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HubuumClassWithPath"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/related/graph": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get Api V1 Classes By Class Id Related Graph",
        "description": "Returns the complete bounded neighborhood graph as one response. This endpoint is not paginated: limit is a maximum related-node safety bound, include_total has no effect, and X-Total-Count is not returned.",
        "operationId": "getApiV1ClassesByClassIdRelatedGraph",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Neighborhood graph for the class",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RelatedClassGraph"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/related/relations": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get Api V1 Classes By Class Id Related Relations",
        "description": "Auto-generated documentation for GET /api/v1/classes/{class_id}/related/relations. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1ClassesByClassIdRelatedRelations",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Direct relations touching the class The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HubuumClassRelation"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/relations": {
      "post": {
        "tags": [
          "classes"
        ],
        "summary": "Post Api V1 Classes By Class Id Relations",
        "description": "Auto-generated documentation for POST /api/v1/classes/{class_id}/relations.",
        "operationId": "postApiV1ClassesByClassIdRelations",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewHubuumClassRelationFromClass"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Class relation created",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HubuumClassRelation"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/relations/{relation_id}": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get Api V1 Classes By Class Id Relations By Relation Id",
        "description": "Auto-generated documentation for GET /api/v1/classes/{class_id}/relations/{relation_id}.",
        "operationId": "getApiV1ClassesByClassIdRelationsByRelationId",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "relation_id",
            "in": "path",
            "description": "Class relation ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Class relation",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HubuumClassRelation"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class or relation not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "classes"
        ],
        "summary": "Delete Api V1 Classes By Class Id Relations By Relation Id",
        "description": "Auto-generated documentation for DELETE /api/v1/classes/{class_id}/relations/{relation_id}.",
        "operationId": "deleteApiV1ClassesByClassIdRelationsByRelationId",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "relation_id",
            "in": "path",
            "description": "Class relation ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Class relation deleted",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class or relation not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/schema": {
      "get": {
        "tags": [
          "schema evolution"
        ],
        "summary": "Get Api V1 Classes By Class Id Schema",
        "description": "Auto-generated documentation for GET /api/v1/classes/{class_id}/schema.",
        "operationId": "getApiV1ClassesByClassIdSchema",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/HubuumClassID"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Administrator class compliance report",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClassSchemaResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid schema, policy or bounded request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class, revision or task not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Stale revision, incompatible activation or invalid lifecycle transition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/schema/objects": {
      "get": {
        "tags": [
          "schema evolution"
        ],
        "summary": "Get Api V1 Classes By Class Id Schema Objects",
        "description": "Auto-generated documentation for GET /api/v1/classes/{class_id}/schema/objects.",
        "operationId": "getApiV1ClassesByClassIdSchemaObjects",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/HubuumClassID"
            }
          },
          {
            "name": "after",
            "in": "query",
            "description": "Last inspected object ID",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "1 to 100 candidates",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Effective active-revision compliance",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/ComplianceStatus"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Authorized compliance page; totals and hidden objects are omitted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SchemaCompliancePage"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/schema/revisions": {
      "get": {
        "tags": [
          "schema evolution"
        ],
        "summary": "Get Api V1 Classes By Class Id Schema Revisions",
        "description": "Auto-generated documentation for GET /api/v1/classes/{class_id}/schema/revisions.",
        "operationId": "getApiV1ClassesByClassIdSchemaRevisions",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/HubuumClassID"
            }
          },
          {
            "name": "after",
            "in": "query",
            "description": "Last schema revision; defaults to zero",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "1 to 100 revisions; defaults to 50",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Bounded immutable schema revision list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SchemaRevisionResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid schema, policy or bounded request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class, revision or task not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Stale revision, incompatible activation or invalid lifecycle transition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "schema evolution"
        ],
        "summary": "Post Api V1 Classes By Class Id Schema Revisions",
        "description": "Auto-generated documentation for POST /api/v1/classes/{class_id}/schema/revisions.",
        "operationId": "postApiV1ClassesByClassIdSchemaRevisions",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/HubuumClassID"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SchemaStageRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Stage an immutable schema revision without activation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SchemaRevisionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid schema, policy or bounded request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class, revision or task not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Stale revision, incompatible activation or invalid lifecycle transition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/schema/revisions/{revision}": {
      "get": {
        "tags": [
          "schema evolution"
        ],
        "summary": "Get Api V1 Classes By Class Id Schema Revisions By Revision",
        "description": "Auto-generated documentation for GET /api/v1/classes/{class_id}/schema/revisions/{revision}.",
        "operationId": "getApiV1ClassesByClassIdSchemaRevisionsByRevision",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/HubuumClassID"
            }
          },
          {
            "name": "revision",
            "in": "path",
            "description": "Positive immutable identity",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SchemaRevision"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Read an exact schema revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SchemaRevisionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid schema, policy or bounded request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class, revision or task not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Stale revision, incompatible activation or invalid lifecycle transition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "schema evolution"
        ],
        "summary": "Delete Api V1 Classes By Class Id Schema Revisions By Revision",
        "description": "Auto-generated documentation for DELETE /api/v1/classes/{class_id}/schema/revisions/{revision}.",
        "operationId": "deleteApiV1ClassesByClassIdSchemaRevisionsByRevision",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/HubuumClassID"
            }
          },
          {
            "name": "revision",
            "in": "path",
            "description": "Positive immutable identity",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SchemaRevision"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Abandon a staged revision; active and retired documents remain immutable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SchemaRevisionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid schema, policy or bounded request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class, revision or task not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Stale revision, incompatible activation or invalid lifecycle transition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/schema/revisions/{revision}/activate": {
      "post": {
        "tags": [
          "schema evolution"
        ],
        "summary": "Post Api V1 Classes By Class Id Schema Revisions By Revision Activate",
        "description": "Auto-generated documentation for POST /api/v1/classes/{class_id}/schema/revisions/{revision}/activate.",
        "operationId": "postApiV1ClassesByClassIdSchemaRevisionsByRevisionActivate",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/HubuumClassID"
            }
          },
          {
            "name": "revision",
            "in": "path",
            "description": "Positive immutable identity",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SchemaRevision"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SchemaActivationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Explicit activation; reject_incompatible requires an exact current impact proof for nonempty classes; allow_pending additionally requires administrator access",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SchemaActivationResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid schema, policy or bounded request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class, revision or task not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Stale revision, incompatible activation or invalid lifecycle transition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/schema/revisions/{revision}/impact": {
      "post": {
        "tags": [
          "schema evolution"
        ],
        "summary": "Post Api V1 Classes By Class Id Schema Revisions By Revision Impact",
        "description": "Auto-generated documentation for POST /api/v1/classes/{class_id}/schema/revisions/{revision}/impact.",
        "operationId": "postApiV1ClassesByClassIdSchemaRevisionsByRevisionImpact",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/HubuumClassID"
            }
          },
          {
            "name": "revision",
            "in": "path",
            "description": "Positive immutable identity",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SchemaRevision"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Queue bounded impact analysis; advisory results cannot authorize strict activation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SchemaWorkResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid schema, policy or bounded request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class, revision or task not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Stale revision, incompatible activation or invalid lifecycle transition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "413": {
            "description": "Report exceeds the 16 MiB assembly budget; saved work is retained",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/schema/revisions/{revision}/revalidate": {
      "post": {
        "tags": [
          "schema evolution"
        ],
        "summary": "Post Api V1 Classes By Class Id Schema Revisions By Revision Revalidate",
        "description": "Auto-generated documentation for POST /api/v1/classes/{class_id}/schema/revisions/{revision}/revalidate.",
        "operationId": "postApiV1ClassesByClassIdSchemaRevisionsByRevisionRevalidate",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/HubuumClassID"
            }
          },
          {
            "name": "revision",
            "in": "path",
            "description": "Positive immutable identity",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SchemaRevision"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Queue deduplicated revalidation of the active revision",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SchemaWorkResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid schema, policy or bounded request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class, revision or task not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Stale revision, incompatible activation or invalid lifecycle transition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/schema/tasks/{task_id}": {
      "get": {
        "tags": [
          "schema evolution"
        ],
        "summary": "Get Api V1 Classes By Class Id Schema Tasks By Task Id",
        "description": "Auto-generated documentation for GET /api/v1/classes/{class_id}/schema/tasks/{task_id}.",
        "operationId": "getApiV1ClassesByClassIdSchemaTasksByTaskId",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/HubuumClassID"
            }
          },
          {
            "name": "task_id",
            "in": "path",
            "description": "Positive immutable identity",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/TaskID"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Administrator report with complete grouped impact mismatches and exact/advisory population boundary",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SchemaWorkResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid schema, policy or bounded request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class, revision or task not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Stale revision, incompatible activation or invalid lifecycle transition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "413": {
            "description": "Report exceeds the 16 MiB assembly budget; saved work is retained",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "schema evolution"
        ],
        "summary": "Delete Api V1 Classes By Class Id Schema Tasks By Task Id",
        "description": "Auto-generated documentation for DELETE /api/v1/classes/{class_id}/schema/tasks/{task_id}.",
        "operationId": "deleteApiV1ClassesByClassIdSchemaTasksByTaskId",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/HubuumClassID"
            }
          },
          {
            "name": "task_id",
            "in": "path",
            "description": "Positive immutable identity",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/TaskID"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Cancel schema work atomically; completed batches remain and later batch commits are fenced",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SchemaWorkResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid schema, policy or bounded request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class, revision or task not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Stale revision, incompatible activation or invalid lifecycle transition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "413": {
            "description": "Report exceeds the 16 MiB assembly budget; saved work is retained",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/schema/tasks/{task_id}/report": {
      "get": {
        "tags": [
          "schema evolution"
        ],
        "summary": "Get Api V1 Classes By Class Id Schema Tasks By Task Id Report",
        "description": "Auto-generated documentation for GET /api/v1/classes/{class_id}/schema/tasks/{task_id}/report.",
        "operationId": "getApiV1ClassesByClassIdSchemaTasksByTaskIdReport",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/HubuumClassID"
            }
          },
          {
            "name": "task_id",
            "in": "path",
            "description": "Source impact analysis",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/TaskID"
            }
          },
          {
            "name": "download",
            "in": "query",
            "description": "Download the retained HTML",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Same retained HTML without reanalysis or rerendering",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Source analysis access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Analysis or retained report not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "schema evolution"
        ],
        "summary": "Post Api V1 Classes By Class Id Schema Tasks By Task Id Report",
        "description": "Auto-generated documentation for POST /api/v1/classes/{class_id}/schema/tasks/{task_id}/report.",
        "operationId": "postApiV1ClassesByClassIdSchemaTasksByTaskIdReport",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/HubuumClassID"
            }
          },
          {
            "name": "task_id",
            "in": "path",
            "description": "Source impact analysis",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/TaskID"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SchemaRepairReportRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Generated and retained complete HTML rendering of saved findings",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid URL, layout or rendering budget",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Source analysis or template access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Impact analysis not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "413": {
            "description": "Complete report exceeds assembly or output limit; previous report is retained",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/{from_object_id}/relations/{to_class_id}/{to_object_id}": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get Api V1 Classes By Class Id By From Object Id Relations By To Class Id By To Object Id",
        "description": "Auto-generated documentation for GET /api/v1/classes/{class_id}/{from_object_id}/relations/{to_class_id}/{to_object_id}.",
        "operationId": "getApiV1ClassesByClassIdByFromObjectIdRelationsByToClassIdByToObjectId",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Source class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "from_object_id",
            "in": "path",
            "description": "Source object ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "to_class_id",
            "in": "path",
            "description": "Target class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "to_object_id",
            "in": "path",
            "description": "Target object ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Object relation",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HubuumObjectRelation"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Relation not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "classes"
        ],
        "summary": "Post Api V1 Classes By Class Id By From Object Id Relations By To Class Id By To Object Id",
        "description": "Auto-generated documentation for POST /api/v1/classes/{class_id}/{from_object_id}/relations/{to_class_id}/{to_object_id}.",
        "operationId": "postApiV1ClassesByClassIdByFromObjectIdRelationsByToClassIdByToObjectId",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Source class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "from_object_id",
            "in": "path",
            "description": "Source object ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "to_class_id",
            "in": "path",
            "description": "Target class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "to_object_id",
            "in": "path",
            "description": "Target object ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Object relation created",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HubuumObjectRelation"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class or object not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "classes"
        ],
        "summary": "Delete Api V1 Classes By Class Id By From Object Id Relations By To Class Id By To Object Id",
        "description": "Auto-generated documentation for DELETE /api/v1/classes/{class_id}/{from_object_id}/relations/{to_class_id}/{to_object_id}.",
        "operationId": "deleteApiV1ClassesByClassIdByFromObjectIdRelationsByToClassIdByToObjectId",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Source class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "from_object_id",
            "in": "path",
            "description": "Source object ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "to_class_id",
            "in": "path",
            "description": "Target class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "to_object_id",
            "in": "path",
            "description": "Target object ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Object relation deleted",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Relation not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/{object_id}": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get Api V1 Classes By Class Id By Object Id",
        "description": "Auto-generated documentation for GET /api/v1/classes/{class_id}/{object_id}.",
        "operationId": "getApiV1ClassesByClassIdByObjectId",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "object_id",
            "in": "path",
            "description": "Object ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "include",
            "in": "query",
            "description": "Set to computed to enrich the object",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Object in class, optionally enriched with computed fields",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HubuumObjectReadResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Object not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "classes"
        ],
        "summary": "Delete Api V1 Classes By Class Id By Object Id",
        "description": "Auto-generated documentation for DELETE /api/v1/classes/{class_id}/{object_id}.",
        "operationId": "deleteApiV1ClassesByClassIdByObjectId",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "object_id",
            "in": "path",
            "description": "Object ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Object deleted",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Object not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "classes"
        ],
        "summary": "Patch Api V1 Classes By Class Id By Object Id",
        "description": "Auto-generated documentation for PATCH /api/v1/classes/{class_id}/{object_id}.",
        "operationId": "patchApiV1ClassesByClassIdByObjectId",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "object_id",
            "in": "path",
            "description": "Object ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateHubuumObjectRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Updated object",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HubuumObject"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Object not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/{object_id}/data": {
      "patch": {
        "tags": [
          "classes"
        ],
        "summary": "Apply JSON Patch to object data",
        "description": "Atomically applies an RFC 6902 JSON Patch document to the object's raw `data` document. Every `path` and `from` is an RFC 6901 JSON Pointer relative to the root of `data`; an empty path replaces the complete document. Operations are evaluated against the latest row-locked data. A successful change updates schema validation, computed-field materialization, history, timestamps, and the object update event in one transaction. A patch that produces no data change returns the current object without changing its timestamp or emitting an update event.",
        "operationId": "patchApiV1ClassesByClassIdByObjectIdData",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "object_id",
            "in": "path",
            "description": "Object ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "RFC 6902 operation array. Supports add, remove, replace, move, copy, and test. Limited to 1,000 operations and 128 pointer segments per path/from.",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ObjectDataPatchDocument"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Updated object, or the unchanged object for a no-op patch",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HubuumObject"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON, invalid JSON Patch structure or bounds, or a result PostgreSQL JSONB cannot represent",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "UpdateObject permission denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class/object pair not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "406": {
            "description": "Final patched data fails the class JSON Schema",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "A patch operation failed, including a failed test operation; no change was persisted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          },
          "413": {
            "description": "JSON Patch request or resulting object data exceeds its resource limits",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type is not application/json-patch+json",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Persistence, computed-field materialization, or event emission failed and the transaction was rolled back",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/{object_id}/events": {
      "get": {
        "tags": [
          "events"
        ],
        "summary": "Get Api V1 Classes By Class Id By Object Id Events",
        "description": "Auto-generated documentation for GET /api/v1/classes/{class_id}/{object_id}/events. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1ClassesByClassIdByObjectIdEvents",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "object_id",
            "in": "path",
            "description": "Object id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "action",
            "in": "query",
            "description": "Optional action filter",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "actor_kind",
            "in": "query",
            "description": "Optional actor kind filter",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "actor_user_id",
            "in": "query",
            "description": "Optional actor principal id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "initiator_user_id",
            "in": "query",
            "description": "Optional root task initiator principal id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "collection_id",
            "in": "query",
            "description": "Optional collection id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "occurred_after",
            "in": "query",
            "description": "Optional lower occurred_at bound, RFC3339 or YYYY-MM-DD",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "occurred_before",
            "in": "query",
            "description": "Optional upper occurred_at bound, RFC3339 or YYYY-MM-DD",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Supported fields: id, occurred_at",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursor token from X-Next-Cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Visible object audit events The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EventResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Object not found in the requested class",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/{object_id}/history": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get Api V1 Classes By Class Id By Object Id History",
        "description": "Auto-generated documentation for GET /api/v1/classes/{class_id}/{object_id}/history. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1ClassesByClassIdByObjectIdHistory",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "object_id",
            "in": "path",
            "description": "Object ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Object history The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HistoryResponse_HubuumObjectHistory"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class or object not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/classes/{class_id}/{object_id}/history/as-of": {
      "get": {
        "tags": [
          "classes"
        ],
        "summary": "Get Api V1 Classes By Class Id By Object Id History As Of",
        "description": "Auto-generated documentation for GET /api/v1/classes/{class_id}/{object_id}/history/as-of.",
        "operationId": "getApiV1ClassesByClassIdByObjectIdHistoryAsOf",
        "parameters": [
          {
            "name": "class_id",
            "in": "path",
            "description": "Class ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "object_id",
            "in": "path",
            "description": "Object ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "at",
            "in": "query",
            "description": "RFC3339 timestamp",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Object version at timestamp",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HistoryResponse_HubuumObjectHistory"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Class, object, or version not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/collections": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "Get Api V1 Collections",
        "description": "Auto-generated documentation for GET /api/v1/collections. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1Collections",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Collections matching optional query filters The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Collection"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "collections"
        ],
        "summary": "Post Api V1 Collections",
        "description": "Auto-generated documentation for POST /api/v1/collections.",
        "operationId": "postApiV1Collections",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewCollectionWithAssignee"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Collection created",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Collection"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/collections/{collection_id}": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "Get Api V1 Collections By Collection Id",
        "description": "Auto-generated documentation for GET /api/v1/collections/{collection_id}.",
        "operationId": "getApiV1CollectionsByCollectionId",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Collection",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Collection"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Collection not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "collections"
        ],
        "summary": "Delete Api V1 Collections By Collection Id",
        "description": "Auto-generated documentation for DELETE /api/v1/collections/{collection_id}.",
        "operationId": "deleteApiV1CollectionsByCollectionId",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Collection deleted",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Collection not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "collections"
        ],
        "summary": "Patch Api V1 Collections By Collection Id",
        "description": "Auto-generated documentation for PATCH /api/v1/collections/{collection_id}.",
        "operationId": "patchApiV1CollectionsByCollectionId",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCollection"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Collection updated",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Collection"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Collection not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/collections/{collection_id}/ancestors": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "Get Api V1 Collections By Collection Id Ancestors",
        "description": "Auto-generated documentation for GET /api/v1/collections/{collection_id}/ancestors.",
        "operationId": "getApiV1CollectionsByCollectionIdAncestors",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Ancestor collections, nearest parent first",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Collection"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Collection not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/collections/{collection_id}/children": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "Get Api V1 Collections By Collection Id Children",
        "description": "Auto-generated documentation for GET /api/v1/collections/{collection_id}/children.",
        "operationId": "getApiV1CollectionsByCollectionIdChildren",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Direct child collections",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Collection"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Collection not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/collections/{collection_id}/event-subscriptions": {
      "get": {
        "tags": [
          "event-subscriptions"
        ],
        "summary": "Get Api V1 Collections By Collection Id Event Subscriptions",
        "description": "Auto-generated documentation for GET /api/v1/collections/{collection_id}/event-subscriptions. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1CollectionsByCollectionIdEventSubscriptions",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Event subscriptions The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EventSubscription"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "event-subscriptions"
        ],
        "summary": "Post Api V1 Collections By Collection Id Event Subscriptions",
        "description": "Auto-generated documentation for POST /api/v1/collections/{collection_id}/event-subscriptions.",
        "operationId": "postApiV1CollectionsByCollectionIdEventSubscriptions",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewEventSubscription"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Event subscription created",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventSubscription"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Collection or sink not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/collections/{collection_id}/event-subscriptions/{subscription_id}": {
      "get": {
        "tags": [
          "event-subscriptions"
        ],
        "summary": "Get Api V1 Collections By Collection Id Event Subscriptions By Subscription Id",
        "description": "Auto-generated documentation for GET /api/v1/collections/{collection_id}/event-subscriptions/{subscription_id}.",
        "operationId": "getApiV1CollectionsByCollectionIdEventSubscriptionsBySubscriptionId",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "subscription_id",
            "in": "path",
            "description": "Event subscription ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Event subscription",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventSubscription"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Event subscription not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "event-subscriptions"
        ],
        "summary": "Delete Api V1 Collections By Collection Id Event Subscriptions By Subscription Id",
        "description": "Auto-generated documentation for DELETE /api/v1/collections/{collection_id}/event-subscriptions/{subscription_id}.",
        "operationId": "deleteApiV1CollectionsByCollectionIdEventSubscriptionsBySubscriptionId",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "subscription_id",
            "in": "path",
            "description": "Event subscription ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Event subscription deleted",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Event subscription not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "event-subscriptions"
        ],
        "summary": "Patch Api V1 Collections By Collection Id Event Subscriptions By Subscription Id",
        "description": "Auto-generated documentation for PATCH /api/v1/collections/{collection_id}/event-subscriptions/{subscription_id}.",
        "operationId": "patchApiV1CollectionsByCollectionIdEventSubscriptionsBySubscriptionId",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "subscription_id",
            "in": "path",
            "description": "Event subscription ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateEventSubscription"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Event subscription updated",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventSubscription"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Event subscription not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/collections/{collection_id}/events": {
      "get": {
        "tags": [
          "events"
        ],
        "summary": "Get Api V1 Collections By Collection Id Events",
        "description": "Auto-generated documentation for GET /api/v1/collections/{collection_id}/events. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1CollectionsByCollectionIdEvents",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "action",
            "in": "query",
            "description": "Optional action filter",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "actor_kind",
            "in": "query",
            "description": "Optional actor kind filter",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "actor_user_id",
            "in": "query",
            "description": "Optional actor principal id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "initiator_user_id",
            "in": "query",
            "description": "Optional root task initiator principal id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "occurred_after",
            "in": "query",
            "description": "Optional lower occurred_at bound, RFC3339 or YYYY-MM-DD",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "occurred_before",
            "in": "query",
            "description": "Optional upper occurred_at bound, RFC3339 or YYYY-MM-DD",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Supported fields: id, occurred_at",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursor token from X-Next-Cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Visible collection audit events The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EventResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/collections/{collection_id}/has_permissions/{permission}": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "List all groups that have any permissions on a collection",
        "description": "Auto-generated documentation for GET /api/v1/collections/{collection_id}/has_permissions/{permission}. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1CollectionsByCollectionIdHasPermissionsByPermission",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "permission",
            "in": "path",
            "description": "Permission value",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Permissions"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Groups with permission The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GroupResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Collection not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/collections/{collection_id}/history": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "Get Api V1 Collections By Collection Id History",
        "description": "Auto-generated documentation for GET /api/v1/collections/{collection_id}/history. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1CollectionsByCollectionIdHistory",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Collection history The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HistoryResponse_CollectionHistory"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Collection not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/collections/{collection_id}/history/as-of": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "Get Api V1 Collections By Collection Id History As Of",
        "description": "Auto-generated documentation for GET /api/v1/collections/{collection_id}/history/as-of.",
        "operationId": "getApiV1CollectionsByCollectionIdHistoryAsOf",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "at",
            "in": "query",
            "description": "RFC3339 timestamp",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Collection version at timestamp",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HistoryResponse_CollectionHistory"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Collection or version not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/collections/{collection_id}/parent": {
      "put": {
        "tags": [
          "collections"
        ],
        "summary": "Put Api V1 Collections By Collection Id Parent",
        "description": "Auto-generated documentation for PUT /api/v1/collections/{collection_id}/parent.",
        "operationId": "putApiV1CollectionsByCollectionIdParent",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCollectionParent"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Collection moved",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Collection"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Collection not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/collections/{collection_id}/permissions": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "List all groups who have permissions for a collection",
        "description": "Auto-generated documentation for GET /api/v1/collections/{collection_id}/permissions. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1CollectionsByCollectionIdPermissions",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Revisioned permission set The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              },
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CollectionPermissionSet"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Collection not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/collections/{collection_id}/permissions/effective/group/{group_id}": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "Get Api V1 Collections By Collection Id Permissions Effective Group By Group Id",
        "description": "Auto-generated documentation for GET /api/v1/collections/{collection_id}/permissions/effective/group/{group_id}.",
        "operationId": "getApiV1CollectionsByCollectionIdPermissionsEffectiveGroupByGroupId",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "Group ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Effective group permissions, including inherited ancestor grants",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EffectiveGroupPermission"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Collection or group not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/collections/{collection_id}/permissions/effective/principal/{principal_id}": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "Get Api V1 Collections By Collection Id Permissions Effective Principal By Principal Id",
        "description": "Auto-generated documentation for GET /api/v1/collections/{collection_id}/permissions/effective/principal/{principal_id}.",
        "operationId": "getApiV1CollectionsByCollectionIdPermissionsEffectivePrincipalByPrincipalId",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "principal_id",
            "in": "path",
            "description": "Principal ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Effective principal permissions via group memberships, including inherited ancestor grants",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EffectiveGroupPermission"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Collection not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/collections/{collection_id}/permissions/group/{group_id}": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "List all permissions for a given group on a collection",
        "description": "Auto-generated documentation for GET /api/v1/collections/{collection_id}/permissions/group/{group_id}.",
        "operationId": "getApiV1CollectionsByCollectionIdPermissionsGroupByGroupId",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "Group ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Revisioned permission set",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CollectionPermissionSet"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Collection or group not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "put": {
        "tags": [
          "collections"
        ],
        "summary": "Replace all permissions for a group on a collection\nThis removes any existing permissions and applies the new set.",
        "description": "Auto-generated documentation for PUT /api/v1/collections/{collection_id}/permissions/group/{group_id}.",
        "operationId": "putApiV1CollectionsByCollectionIdPermissionsGroupByGroupId",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "Group ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Permissions"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Permissions replaced",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CollectionPermissionSet"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Collection or group not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "collections"
        ],
        "summary": "Post a permission set to a group on a collection\nThis will create a new entry if the group had no permissions,\nor add to the existing entry if it did.\nThe body should be a JSON array of permissions:\n```json\n[\n  \"CreateObject\",\n  \"ReadCollection\"\n]\n```",
        "description": "Auto-generated documentation for POST /api/v1/collections/{collection_id}/permissions/group/{group_id}.",
        "operationId": "postApiV1CollectionsByCollectionIdPermissionsGroupByGroupId",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "Group ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Permissions"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Permissions set",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CollectionPermissionSet"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Collection or group not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "collections"
        ],
        "summary": "Revoke a permission set from a group on a collection",
        "description": "Auto-generated documentation for DELETE /api/v1/collections/{collection_id}/permissions/group/{group_id}.",
        "operationId": "deleteApiV1CollectionsByCollectionIdPermissionsGroupByGroupId",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "Group ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Permissions revoked",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CollectionPermissionSet"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Collection or group not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/collections/{collection_id}/permissions/group/{group_id}/{permission}": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "Check a specific permission for a group on a collection",
        "description": "Auto-generated documentation for GET /api/v1/collections/{collection_id}/permissions/group/{group_id}/{permission}.",
        "operationId": "getApiV1CollectionsByCollectionIdPermissionsGroupByGroupIdByPermission",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "Group ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "permission",
            "in": "path",
            "description": "Permission value",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Permissions"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Group has permission"
          },
          "404": {
            "description": "Group missing permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "collections"
        ],
        "summary": "Grant a specific permission to a group on a collection\nIf the group previously had no permissions, a new entry is created",
        "description": "Auto-generated documentation for POST /api/v1/collections/{collection_id}/permissions/group/{group_id}/{permission}.",
        "operationId": "postApiV1CollectionsByCollectionIdPermissionsGroupByGroupIdByPermission",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "Group ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "permission",
            "in": "path",
            "description": "Permission value",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Permissions"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Permission granted",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CollectionPermissionSet"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Collection or group not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "collections"
        ],
        "summary": "Revoke a specific permission from a group on a collection",
        "description": "Auto-generated documentation for DELETE /api/v1/collections/{collection_id}/permissions/group/{group_id}/{permission}.",
        "operationId": "deleteApiV1CollectionsByCollectionIdPermissionsGroupByGroupIdByPermission",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "Group ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "permission",
            "in": "path",
            "description": "Permission value",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Permissions"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Permission revoked",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CollectionPermissionSet"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Collection or group not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/collections/{collection_id}/permissions/principal/{principal_id}": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "List all permissions for a principal on a collection",
        "description": "Auto-generated documentation for GET /api/v1/collections/{collection_id}/permissions/principal/{principal_id}. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1CollectionsByCollectionIdPermissionsPrincipalByPrincipalId",
        "parameters": [
          {
            "name": "collection_id",
            "in": "path",
            "description": "Collection ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "principal_id",
            "in": "path",
            "description": "Principal ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Principal permissions via group memberships The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GroupPermission"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No permissions found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/config": {
      "get": {
        "tags": [
          "config"
        ],
        "summary": "Get Api V1 Config",
        "description": "Auto-generated documentation for GET /api/v1/config.",
        "operationId": "getApiV1Config",
        "responses": {
          "200": {
            "description": "Effective client-safe configuration",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientConfig"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/event-deliveries": {
      "get": {
        "tags": [
          "event-deliveries"
        ],
        "summary": "Get Api V1 Event Deliveries",
        "description": "Auto-generated documentation for GET /api/v1/event-deliveries. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1EventDeliveries",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Supported fields: id, status, created_at, updated_at, next_attempt_at",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursor token from X-Next-Cursor",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Event deliveries The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EventDeliveryResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/event-deliveries/health": {
      "get": {
        "tags": [
          "event-deliveries"
        ],
        "summary": "Get Api V1 Event Deliveries Health",
        "description": "Auto-generated documentation for GET /api/v1/event-deliveries/health.",
        "operationId": "getApiV1EventDeliveriesHealth",
        "responses": {
          "200": {
            "description": "Event delivery pipeline health",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventDeliveryHealthResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/event-deliveries/{delivery_id}": {
      "get": {
        "tags": [
          "event-deliveries"
        ],
        "summary": "Get Api V1 Event Deliveries By Delivery Id",
        "description": "Auto-generated documentation for GET /api/v1/event-deliveries/{delivery_id}.",
        "operationId": "getApiV1EventDeliveriesByDeliveryId",
        "parameters": [
          {
            "name": "delivery_id",
            "in": "path",
            "description": "Event delivery ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Event delivery",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventDeliveryResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Event delivery not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/event-deliveries/{delivery_id}/dead": {
      "post": {
        "tags": [
          "event-deliveries"
        ],
        "summary": "Post Api V1 Event Deliveries By Delivery Id Dead",
        "description": "Auto-generated documentation for POST /api/v1/event-deliveries/{delivery_id}/dead.",
        "operationId": "postApiV1EventDeliveriesByDeliveryIdDead",
        "parameters": [
          {
            "name": "delivery_id",
            "in": "path",
            "description": "Event delivery ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Event delivery marked dead",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventDeliveryUpdateResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Event delivery not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/event-deliveries/{delivery_id}/retry": {
      "post": {
        "tags": [
          "event-deliveries"
        ],
        "summary": "Post Api V1 Event Deliveries By Delivery Id Retry",
        "description": "Auto-generated documentation for POST /api/v1/event-deliveries/{delivery_id}/retry.",
        "operationId": "postApiV1EventDeliveriesByDeliveryIdRetry",
        "parameters": [
          {
            "name": "delivery_id",
            "in": "path",
            "description": "Event delivery ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Event delivery released for retry",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventDeliveryUpdateResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Event delivery not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/event-sinks": {
      "get": {
        "tags": [
          "event-sinks"
        ],
        "summary": "Get Api V1 Event Sinks",
        "description": "Auto-generated documentation for GET /api/v1/event-sinks. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1EventSinks",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Event sinks The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EventSink"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "event-sinks"
        ],
        "summary": "Post Api V1 Event Sinks",
        "description": "Auto-generated documentation for POST /api/v1/event-sinks.",
        "operationId": "postApiV1EventSinks",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewEventSink"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Event sink created",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventSink"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/event-sinks/{sink_id}": {
      "get": {
        "tags": [
          "event-sinks"
        ],
        "summary": "Get Api V1 Event Sinks By Sink Id",
        "description": "Auto-generated documentation for GET /api/v1/event-sinks/{sink_id}.",
        "operationId": "getApiV1EventSinksBySinkId",
        "parameters": [
          {
            "name": "sink_id",
            "in": "path",
            "description": "Event sink ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Event sink",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventSink"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Event sink not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "event-sinks"
        ],
        "summary": "Delete Api V1 Event Sinks By Sink Id",
        "description": "Auto-generated documentation for DELETE /api/v1/event-sinks/{sink_id}.",
        "operationId": "deleteApiV1EventSinksBySinkId",
        "parameters": [
          {
            "name": "sink_id",
            "in": "path",
            "description": "Event sink ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Event sink deleted",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Event sink not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "event-sinks"
        ],
        "summary": "Patch Api V1 Event Sinks By Sink Id",
        "description": "Auto-generated documentation for PATCH /api/v1/event-sinks/{sink_id}.",
        "operationId": "patchApiV1EventSinksBySinkId",
        "parameters": [
          {
            "name": "sink_id",
            "in": "path",
            "description": "Event sink ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateEventSink"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Event sink updated",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventSink"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Event sink not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/event-sinks/{sink_id}/preview": {
      "post": {
        "tags": [
          "event-sinks"
        ],
        "summary": "Post Api V1 Event Sinks By Sink Id Preview",
        "description": "Auto-generated documentation for POST /api/v1/event-sinks/{sink_id}/preview.",
        "operationId": "postApiV1EventSinksBySinkIdPreview",
        "parameters": [
          {
            "name": "sink_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EventNotificationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Rendered webhook test payload; no secret resolution or delivery",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventNotificationPreview"
                }
              }
            }
          },
          "400": {
            "description": "Invalid source or configuration",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Administrator required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Source not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/event-sinks/{sink_id}/test": {
      "post": {
        "tags": [
          "event-sinks"
        ],
        "summary": "Post Api V1 Event Sinks By Sink Id Test",
        "description": "Auto-generated documentation for POST /api/v1/event-sinks/{sink_id}/test.",
        "operationId": "postApiV1EventSinksBySinkIdTest",
        "parameters": [
          {
            "name": "sink_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EventNotificationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Webhook test delivery queued",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventDeliveryResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid source or configuration",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Administrator required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Source not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/events": {
      "get": {
        "tags": [
          "events"
        ],
        "summary": "Get Api V1 Events",
        "description": "Auto-generated documentation for GET /api/v1/events. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1Events",
        "parameters": [
          {
            "name": "entity_type",
            "in": "query",
            "description": "Optional event entity type filter",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entity_id",
            "in": "query",
            "description": "Optional event entity id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "action",
            "in": "query",
            "description": "Optional action filter",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "actor_kind",
            "in": "query",
            "description": "Optional actor kind filter",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "actor_user_id",
            "in": "query",
            "description": "Optional actor principal id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "initiator_user_id",
            "in": "query",
            "description": "Optional root task initiator principal id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "collection_id",
            "in": "query",
            "description": "Optional collection id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "occurred_after",
            "in": "query",
            "description": "Optional lower occurred_at bound, RFC3339 or YYYY-MM-DD",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "occurred_before",
            "in": "query",
            "description": "Optional upper occurred_at bound, RFC3339 or YYYY-MM-DD",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Supported fields: id, occurred_at",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursor token from X-Next-Cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Visible audit events The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EventResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/export-templates": {
      "get": {
        "tags": [
          "export-templates"
        ],
        "summary": "Get Api V1 Export Templates",
        "description": "Auto-generated documentation for GET /api/v1/export-templates. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1ExportTemplates",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Templates visible to caller The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ExportTemplate"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "export-templates"
        ],
        "summary": "Post Api V1 Export Templates",
        "description": "Auto-generated documentation for POST /api/v1/export-templates.",
        "operationId": "postApiV1ExportTemplates",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewExportTemplate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Template created",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExportTemplate"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/export-templates/{template_id}": {
      "get": {
        "tags": [
          "export-templates"
        ],
        "summary": "Get Api V1 Export Templates By Template Id",
        "description": "Auto-generated documentation for GET /api/v1/export-templates/{template_id}.",
        "operationId": "getApiV1ExportTemplatesByTemplateId",
        "parameters": [
          {
            "name": "template_id",
            "in": "path",
            "description": "Template ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Template",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExportTemplate"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Template not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "export-templates"
        ],
        "summary": "Delete Api V1 Export Templates By Template Id",
        "description": "Auto-generated documentation for DELETE /api/v1/export-templates/{template_id}.",
        "operationId": "deleteApiV1ExportTemplatesByTemplateId",
        "parameters": [
          {
            "name": "template_id",
            "in": "path",
            "description": "Template ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Template deleted",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Template not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "export-templates"
        ],
        "summary": "Patch Api V1 Export Templates By Template Id",
        "description": "Auto-generated documentation for PATCH /api/v1/export-templates/{template_id}.",
        "operationId": "patchApiV1ExportTemplatesByTemplateId",
        "parameters": [
          {
            "name": "template_id",
            "in": "path",
            "description": "Template ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateExportTemplate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Template updated",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExportTemplate"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Template not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/export-templates/{template_id}/events": {
      "get": {
        "tags": [
          "events"
        ],
        "summary": "Get Api V1 Export Templates By Template Id Events",
        "description": "Auto-generated documentation for GET /api/v1/export-templates/{template_id}/events. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1ExportTemplatesByTemplateIdEvents",
        "parameters": [
          {
            "name": "template_id",
            "in": "path",
            "description": "Export template id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "action",
            "in": "query",
            "description": "Optional action filter",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "actor_kind",
            "in": "query",
            "description": "Optional actor kind filter",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "actor_user_id",
            "in": "query",
            "description": "Optional actor principal id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "initiator_user_id",
            "in": "query",
            "description": "Optional root task initiator principal id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "collection_id",
            "in": "query",
            "description": "Optional collection id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "occurred_after",
            "in": "query",
            "description": "Optional lower occurred_at bound, RFC3339 or YYYY-MM-DD",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "occurred_before",
            "in": "query",
            "description": "Optional upper occurred_at bound, RFC3339 or YYYY-MM-DD",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Supported fields: id, occurred_at",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursor token from X-Next-Cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Visible export template audit events The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EventResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/export-templates/{template_id}/exports": {
      "post": {
        "tags": [
          "export-templates"
        ],
        "summary": "Post Api V1 Export Templates By Template Id Exports",
        "description": "Auto-generated documentation for POST /api/v1/export-templates/{template_id}/exports.",
        "operationId": "postApiV1ExportTemplatesByTemplateIdExports",
        "parameters": [
          {
            "name": "template_id",
            "in": "path",
            "description": "Executable export template ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExportTemplateRunRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Export task accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Template not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Too many active export tasks",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/export-templates/{template_id}/history": {
      "get": {
        "tags": [
          "export-templates"
        ],
        "summary": "Get Api V1 Export Templates By Template Id History",
        "description": "Auto-generated documentation for GET /api/v1/export-templates/{template_id}/history. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1ExportTemplatesByTemplateIdHistory",
        "parameters": [
          {
            "name": "template_id",
            "in": "path",
            "description": "Template ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Template history The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HistoryResponse_ExportTemplateHistory"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Template not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/export-templates/{template_id}/history/as-of": {
      "get": {
        "tags": [
          "export-templates"
        ],
        "summary": "Get Api V1 Export Templates By Template Id History As Of",
        "description": "Auto-generated documentation for GET /api/v1/export-templates/{template_id}/history/as-of.",
        "operationId": "getApiV1ExportTemplatesByTemplateIdHistoryAsOf",
        "parameters": [
          {
            "name": "template_id",
            "in": "path",
            "description": "Template ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "at",
            "in": "query",
            "description": "RFC3339 timestamp",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Template version at timestamp",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HistoryResponse_ExportTemplateHistory"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Template or version not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/exports": {
      "post": {
        "tags": [
          "exports"
        ],
        "summary": "Post Api V1 Exports",
        "description": "Auto-generated documentation for POST /api/v1/exports.",
        "operationId": "postApiV1Exports",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExportRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Export task accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Too many active export tasks",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/exports/{task_id}": {
      "get": {
        "tags": [
          "exports"
        ],
        "summary": "Get Api V1 Exports By Task Id",
        "description": "Auto-generated documentation for GET /api/v1/exports/{task_id}.",
        "operationId": "getApiV1ExportsByTaskId",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "description": "Export task ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Export task projection",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Export task not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/exports/{task_id}/output": {
      "get": {
        "tags": [
          "exports"
        ],
        "summary": "Get Api V1 Exports By Task Id Output",
        "description": "Auto-generated documentation for GET /api/v1/exports/{task_id}/output.",
        "operationId": "getApiV1ExportsByTaskIdOutput",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "description": "Export task ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Stored export output",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExportJsonResponse"
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Export output not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "410": {
            "description": "Export output expired",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/credential-approvals": {
      "post": {
        "tags": [
          "auth"
        ],
        "summary": "Post Api V1 Iam Credential Approvals",
        "description": "Auto-generated documentation for POST /api/v1/iam/credential-approvals.",
        "operationId": "postApiV1IamCredentialApprovals",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CredentialApprovalRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Single-use approval and retained evidence; no-store",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CredentialApprovalResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid operation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Human or administrative authority required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Reauthentication throttled",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "503": {
            "description": "Authentication provider unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/credential-approvals/{approval_id}": {
      "get": {
        "tags": [
          "auth"
        ],
        "summary": "Get Api V1 Iam Credential Approvals By Approval Id",
        "description": "Auto-generated documentation for GET /api/v1/iam/credential-approvals/{approval_id}.",
        "operationId": "getApiV1IamCredentialApprovalsByApprovalId",
        "parameters": [
          {
            "name": "approval_id",
            "in": "path",
            "description": "Retained approval identifier",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Non-secret evidence, visible to actor or administrator",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CredentialApprovalRecord"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Approval not found or not visible",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/groups": {
      "get": {
        "tags": [
          "groups"
        ],
        "summary": "Get Api V1 Iam Groups",
        "description": "Auto-generated documentation for GET /api/v1/iam/groups. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1IamGroups",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Groups matching optional query filters The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GroupResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "groups"
        ],
        "summary": "Post Api V1 Iam Groups",
        "description": "Auto-generated documentation for POST /api/v1/iam/groups.",
        "operationId": "postApiV1IamGroups",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewGroup"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Group created",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GroupPointResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/groups/{group_id}": {
      "get": {
        "tags": [
          "groups"
        ],
        "summary": "Get Api V1 Iam Groups By Group Id",
        "description": "Auto-generated documentation for GET /api/v1/iam/groups/{group_id}.",
        "operationId": "getApiV1IamGroupsByGroupId",
        "parameters": [
          {
            "name": "group_id",
            "in": "path",
            "description": "Group ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Group",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GroupPointResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Group not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "groups"
        ],
        "summary": "Delete Api V1 Iam Groups By Group Id",
        "description": "Auto-generated documentation for DELETE /api/v1/iam/groups/{group_id}.",
        "operationId": "deleteApiV1IamGroupsByGroupId",
        "parameters": [
          {
            "name": "group_id",
            "in": "path",
            "description": "Group ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Group deleted",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Directory-managed group is read-only",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Group not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Group still owns service accounts",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "groups"
        ],
        "summary": "Patch Api V1 Iam Groups By Group Id",
        "description": "Auto-generated documentation for PATCH /api/v1/iam/groups/{group_id}.",
        "operationId": "patchApiV1IamGroupsByGroupId",
        "parameters": [
          {
            "name": "group_id",
            "in": "path",
            "description": "Group ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateGroup"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Updated group",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GroupPointResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Directory-managed group is read-only",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Group not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/groups/{group_id}/events": {
      "get": {
        "tags": [
          "events"
        ],
        "summary": "Get Api V1 Iam Groups By Group Id Events",
        "description": "Auto-generated documentation for GET /api/v1/iam/groups/{group_id}/events. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1IamGroupsByGroupIdEvents",
        "parameters": [
          {
            "name": "group_id",
            "in": "path",
            "description": "Group principal id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "action",
            "in": "query",
            "description": "Optional action filter",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "actor_kind",
            "in": "query",
            "description": "Optional actor kind filter",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "actor_user_id",
            "in": "query",
            "description": "Optional actor principal id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "initiator_user_id",
            "in": "query",
            "description": "Optional root task initiator principal id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "collection_id",
            "in": "query",
            "description": "Optional collection id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "occurred_after",
            "in": "query",
            "description": "Optional lower occurred_at bound, RFC3339 or YYYY-MM-DD",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "occurred_before",
            "in": "query",
            "description": "Optional upper occurred_at bound, RFC3339 or YYYY-MM-DD",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Supported fields: id, occurred_at",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursor token from X-Next-Cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Visible group audit events The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EventResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/groups/{group_id}/members": {
      "get": {
        "tags": [
          "groups"
        ],
        "summary": "Get Api V1 Iam Groups By Group Id Members",
        "description": "Auto-generated documentation for GET /api/v1/iam/groups/{group_id}/members. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1IamGroupsByGroupIdMembers",
        "parameters": [
          {
            "name": "group_id",
            "in": "path",
            "description": "Group ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Members of group The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PrincipalMemberResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Group not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/groups/{group_id}/members/{principal_id}": {
      "get": {
        "tags": [
          "groups"
        ],
        "summary": "Get Api V1 Iam Groups By Group Id Members By Principal Id",
        "description": "Auto-generated documentation for GET /api/v1/iam/groups/{group_id}/members/{principal_id}.",
        "operationId": "getApiV1IamGroupsByGroupIdMembersByPrincipalId",
        "parameters": [
          {
            "name": "group_id",
            "in": "path",
            "description": "Group ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "principal_id",
            "in": "path",
            "description": "Principal ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Membership",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrincipalMemberResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Membership not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "groups"
        ],
        "summary": "Post Api V1 Iam Groups By Group Id Members By Principal Id",
        "description": "Auto-generated documentation for POST /api/v1/iam/groups/{group_id}/members/{principal_id}.",
        "operationId": "postApiV1IamGroupsByGroupIdMembersByPrincipalId",
        "parameters": [
          {
            "name": "group_id",
            "in": "path",
            "description": "Group ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "principal_id",
            "in": "path",
            "description": "Principal ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Membership created",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrincipalMemberResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "User or group not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "groups"
        ],
        "summary": "Delete Api V1 Iam Groups By Group Id Members By Principal Id",
        "description": "Auto-generated documentation for DELETE /api/v1/iam/groups/{group_id}/members/{principal_id}.",
        "operationId": "deleteApiV1IamGroupsByGroupIdMembersByPrincipalId",
        "parameters": [
          {
            "name": "group_id",
            "in": "path",
            "description": "Group ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "principal_id",
            "in": "path",
            "description": "Principal ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "User removed from group",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "User or group not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/me": {
      "get": {
        "tags": [
          "principals"
        ],
        "summary": "Get Api V1 Iam Me",
        "description": "Auto-generated documentation for GET /api/v1/iam/me.",
        "operationId": "getApiV1IamMe",
        "responses": {
          "200": {
            "description": "Current authenticated principal and token, including permission and resource scope dimensions",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MeResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/me/computed-fields": {
      "get": {
        "tags": [
          "computed fields"
        ],
        "summary": "Get Api V1 Iam Me Computed Fields",
        "description": "Auto-generated documentation for GET /api/v1/iam/me/computed-fields. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1IamMeComputedFields",
        "parameters": [
          {
            "name": "class_id",
            "in": "query",
            "description": "Limit results to one class",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Current user's personal computed fields The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ComputedFieldDefinition"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Service accounts are not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "computed fields"
        ],
        "summary": "Post Api V1 Iam Me Computed Fields",
        "description": "Auto-generated documentation for POST /api/v1/iam/me/computed-fields.",
        "operationId": "postApiV1IamMeComputedFields",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PersonalComputedFieldDefinitionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Personal computed field created",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComputedFieldDefinition"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/me/computed-fields/preview": {
      "post": {
        "tags": [
          "computed fields"
        ],
        "summary": "Post Api V1 Iam Me Computed Fields Preview",
        "description": "Auto-generated documentation for POST /api/v1/iam/me/computed-fields/preview.",
        "operationId": "postApiV1IamMeComputedFieldsPreview",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ComputedFieldPreviewRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Personal computed-field preview",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComputedFieldPreviewResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid preview",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/me/computed-fields/{field_id}": {
      "get": {
        "tags": [
          "computed fields"
        ],
        "summary": "Get Api V1 Iam Me Computed Fields By Field Id",
        "description": "Auto-generated documentation for GET /api/v1/iam/me/computed-fields/{field_id}.",
        "operationId": "getApiV1IamMeComputedFieldsByFieldId",
        "parameters": [
          {
            "name": "field_id",
            "in": "path",
            "description": "Computed-field definition ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Personal computed-field definition",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComputedFieldDefinition"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Service accounts are not allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Computed field not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "computed fields"
        ],
        "summary": "Delete Api V1 Iam Me Computed Fields By Field Id",
        "description": "Auto-generated documentation for DELETE /api/v1/iam/me/computed-fields/{field_id}.",
        "operationId": "deleteApiV1IamMeComputedFieldsByFieldId",
        "parameters": [
          {
            "name": "field_id",
            "in": "path",
            "description": "Computed-field definition ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Personal computed field deleted",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            }
          },
          "409": {
            "description": "Revision conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "computed fields"
        ],
        "summary": "Patch Api V1 Iam Me Computed Fields By Field Id",
        "description": "Auto-generated documentation for PATCH /api/v1/iam/me/computed-fields/{field_id}.",
        "operationId": "patchApiV1IamMeComputedFieldsByFieldId",
        "parameters": [
          {
            "name": "field_id",
            "in": "path",
            "description": "Computed-field definition ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ComputedFieldDefinitionPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Personal computed field updated",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComputedFieldDefinition"
                }
              }
            }
          },
          "409": {
            "description": "Revision conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/me/groups": {
      "get": {
        "tags": [
          "principals"
        ],
        "summary": "Get Api V1 Iam Me Groups",
        "description": "Auto-generated documentation for GET /api/v1/iam/me/groups. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1IamMeGroups",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Groups the current principal belongs to The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GroupResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/me/permissions": {
      "get": {
        "tags": [
          "principals"
        ],
        "summary": "Get Api V1 Iam Me Permissions",
        "description": "Auto-generated documentation for GET /api/v1/iam/me/permissions.",
        "operationId": "getApiV1IamMePermissions",
        "responses": {
          "200": {
            "description": "Current principal direct permission rows per collection, grouped by granting group",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PrincipalCollectionPermissions"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/me/settings": {
      "get": {
        "tags": [
          "principals"
        ],
        "summary": "Get Api V1 Iam Me Settings",
        "description": "Auto-generated documentation for GET /api/v1/iam/me/settings.",
        "operationId": "getApiV1IamMeSettings",
        "responses": {
          "200": {
            "description": "Current principal settings",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrincipalSettingsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "put": {
        "tags": [
          "principals"
        ],
        "summary": "Put Api V1 Iam Me Settings",
        "description": "Auto-generated documentation for PUT /api/v1/iam/me/settings.",
        "operationId": "putApiV1IamMeSettings",
        "parameters": [
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PrincipalSettings"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Replaced current principal settings",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrincipalSettingsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Settings root is not an object",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "principals"
        ],
        "summary": "Delete Api V1 Iam Me Settings",
        "description": "Auto-generated documentation for DELETE /api/v1/iam/me/settings.",
        "operationId": "deleteApiV1IamMeSettings",
        "parameters": [
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Current principal settings reset",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "principals"
        ],
        "summary": "Patch current principal settings",
        "description": "Selects patch semantics from Content-Type and applies the complete patch to the latest row-locked settings document. `application/json` and `application/merge-patch+json` use object-only JSON Merge Patch: object values merge recursively, `null` removes a key, and other values replace it. `application/json-patch+json` uses bounded RFC 6902 add, remove, replace, move, copy, and test operations. The final document root must remain an object. A no-op returns the unchanged settings without advancing the revision or emitting an event.",
        "operationId": "patchApiV1IamMeSettings",
        "parameters": [
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "An object-only JSON Merge Patch or RFC 6902 operation array, selected by Content-Type.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PrincipalSettings"
              },
              "example": {
                "layout": {
                  "columns": 2,
                  "sidebar": null
                },
                "theme": "dark"
              }
            },
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PrincipalSettingsPatchDocument"
              },
              "example": [
                {
                  "op": "test",
                  "path": "/theme",
                  "value": "light"
                },
                {
                  "op": "replace",
                  "path": "/theme",
                  "value": "dark"
                }
              ]
            },
            "application/merge-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PrincipalSettings"
              },
              "example": {
                "layout": {
                  "columns": 2,
                  "sidebar": null
                },
                "theme": "dark"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Patched current principal settings, or the unchanged settings for a no-op",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrincipalSettingsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Malformed patch, invalid patch bounds, an invalid final root, or a result PostgreSQL JSONB cannot represent",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "A JSON Patch operation failed, including a failed test; nothing was persisted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          },
          "413": {
            "description": "The patch request, result, nesting, or cumulative application work exceeds its limit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type is not application/json, application/merge-patch+json, or application/json-patch+json",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Persistence or event emission failed and the transaction was rolled back",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/me/tokens": {
      "get": {
        "tags": [
          "principals"
        ],
        "summary": "Get Api V1 Iam Me Tokens",
        "description": "Auto-generated documentation for GET /api/v1/iam/me/tokens. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1IamMeTokens",
        "parameters": [
          {
            "name": "state",
            "in": "query",
            "description": "Retained-token lifecycle subset. Defaults to active. Expired and revoked subsets may overlap.",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/TokenListState"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Current human user's selected retained token metadata; active tokens by default The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PrincipalTokenMetadata"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/principals/{principal_id}/groups": {
      "get": {
        "tags": [
          "principals"
        ],
        "summary": "Get Api V1 Iam Principals By Principal Id Groups",
        "description": "Auto-generated documentation for GET /api/v1/iam/principals/{principal_id}/groups. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1IamPrincipalsByPrincipalIdGroups",
        "parameters": [
          {
            "name": "principal_id",
            "in": "path",
            "description": "Principal id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Groups the principal belongs to The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GroupResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/principals/{principal_id}/permissions": {
      "get": {
        "tags": [
          "principals"
        ],
        "summary": "Get Api V1 Iam Principals By Principal Id Permissions",
        "description": "Auto-generated documentation for GET /api/v1/iam/principals/{principal_id}/permissions.",
        "operationId": "getApiV1IamPrincipalsByPrincipalIdPermissions",
        "parameters": [
          {
            "name": "principal_id",
            "in": "path",
            "description": "Principal id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Effective permissions per collection, grouped by granting group",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PrincipalCollectionPermissions"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/principals/{principal_id}/settings": {
      "get": {
        "tags": [
          "principals"
        ],
        "summary": "Get Api V1 Iam Principals By Principal Id Settings",
        "description": "Auto-generated documentation for GET /api/v1/iam/principals/{principal_id}/settings.",
        "operationId": "getApiV1IamPrincipalsByPrincipalIdSettings",
        "parameters": [
          {
            "name": "principal_id",
            "in": "path",
            "description": "Principal id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Principal settings",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrincipalSettingsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Principal not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "put": {
        "tags": [
          "principals"
        ],
        "summary": "Put Api V1 Iam Principals By Principal Id Settings",
        "description": "Auto-generated documentation for PUT /api/v1/iam/principals/{principal_id}/settings.",
        "operationId": "putApiV1IamPrincipalsByPrincipalIdSettings",
        "parameters": [
          {
            "name": "principal_id",
            "in": "path",
            "description": "Principal id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PrincipalSettings"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Replaced principal settings",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrincipalSettingsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Settings root is not an object",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Principal not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "principals"
        ],
        "summary": "Delete Api V1 Iam Principals By Principal Id Settings",
        "description": "Auto-generated documentation for DELETE /api/v1/iam/principals/{principal_id}/settings.",
        "operationId": "deleteApiV1IamPrincipalsByPrincipalIdSettings",
        "parameters": [
          {
            "name": "principal_id",
            "in": "path",
            "description": "Principal id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Principal settings reset",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Principal not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "principals"
        ],
        "summary": "Patch principal settings",
        "description": "Selects patch semantics from Content-Type and applies the complete patch to the latest row-locked settings document. `application/json` and `application/merge-patch+json` use object-only JSON Merge Patch: object values merge recursively, `null` removes a key, and other values replace it. `application/json-patch+json` uses bounded RFC 6902 add, remove, replace, move, copy, and test operations. The final document root must remain an object. A no-op returns the unchanged settings without advancing the revision or emitting an event.",
        "operationId": "patchApiV1IamPrincipalsByPrincipalIdSettings",
        "parameters": [
          {
            "name": "principal_id",
            "in": "path",
            "description": "Principal id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "An object-only JSON Merge Patch or RFC 6902 operation array, selected by Content-Type.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PrincipalSettings"
              },
              "example": {
                "layout": {
                  "columns": 2,
                  "sidebar": null
                },
                "theme": "dark"
              }
            },
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PrincipalSettingsPatchDocument"
              },
              "example": [
                {
                  "op": "test",
                  "path": "/theme",
                  "value": "light"
                },
                {
                  "op": "replace",
                  "path": "/theme",
                  "value": "dark"
                }
              ]
            },
            "application/merge-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PrincipalSettings"
              },
              "example": {
                "layout": {
                  "columns": 2,
                  "sidebar": null
                },
                "theme": "dark"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Patched principal settings, or the unchanged settings for a no-op",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrincipalSettingsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Malformed patch, invalid patch bounds, an invalid final root, or a result PostgreSQL JSONB cannot represent",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Principal not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "A JSON Patch operation failed, including a failed test; nothing was persisted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          },
          "413": {
            "description": "The patch request, result, nesting, or cumulative application work exceeds its limit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type is not application/json, application/merge-patch+json, or application/json-patch+json",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Persistence or event emission failed and the transaction was rolled back",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/principals/{principal_id}/tokens": {
      "get": {
        "tags": [
          "principals"
        ],
        "summary": "Get Api V1 Iam Principals By Principal Id Tokens",
        "description": "Auto-generated documentation for GET /api/v1/iam/principals/{principal_id}/tokens. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1IamPrincipalsByPrincipalIdTokens",
        "parameters": [
          {
            "name": "principal_id",
            "in": "path",
            "description": "Principal id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "state",
            "in": "query",
            "description": "Retained-token lifecycle subset. Defaults to active. Expired and revoked subsets may overlap.",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/TokenListState"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Selected retained token metadata; active tokens by default The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PrincipalTokenMetadata"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "principals"
        ],
        "summary": "Post Api V1 Iam Principals By Principal Id Tokens",
        "description": "Auto-generated documentation for POST /api/v1/iam/principals/{principal_id}/tokens.",
        "operationId": "postApiV1IamPrincipalsByPrincipalIdTokens",
        "parameters": [
          {
            "name": "X-Hubuum-Credential-Approval",
            "in": "header",
            "description": "Single-use approval for this exact operation",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "principal_id",
            "in": "path",
            "description": "Principal id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewTokenRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Raw token and authoritative expiry (shown once)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoginResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Service account disabled",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/principals/{principal_id}/tokens/{token_id}": {
      "get": {
        "tags": [
          "principals"
        ],
        "summary": "Get Api V1 Iam Principals By Principal Id Tokens By Token Id",
        "description": "Auto-generated documentation for GET /api/v1/iam/principals/{principal_id}/tokens/{token_id}.",
        "operationId": "getApiV1IamPrincipalsByPrincipalIdTokensByTokenId",
        "parameters": [
          {
            "name": "principal_id",
            "in": "path",
            "description": "Principal id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "token_id",
            "in": "path",
            "description": "Token id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Retained token metadata",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrincipalTokenPointResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Token not found, not owned by this principal, or already purged",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/principals/{principal_id}/tokens/{token_id}/renew": {
      "post": {
        "tags": [
          "principals"
        ],
        "summary": "Post Api V1 Iam Principals By Principal Id Tokens By Token Id Renew",
        "description": "Auto-generated documentation for POST /api/v1/iam/principals/{principal_id}/tokens/{token_id}/renew.",
        "operationId": "postApiV1IamPrincipalsByPrincipalIdTokensByTokenIdRenew",
        "parameters": [
          {
            "name": "X-Hubuum-Credential-Approval",
            "in": "header",
            "description": "Single-use approval for this exact operation",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "principal_id",
            "in": "path",
            "description": "Principal id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "token_id",
            "in": "path",
            "description": "Source token id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RenewTokenRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Fresh raw token and authoritative expiry (shown once)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoginResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Source token not found, not owned by this principal, or already purged",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Source token revoked or service account disabled",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/principals/{principal_id}/tokens/{token_id}/revoke": {
      "post": {
        "tags": [
          "principals"
        ],
        "summary": "Post Api V1 Iam Principals By Principal Id Tokens By Token Id Revoke",
        "description": "Auto-generated documentation for POST /api/v1/iam/principals/{principal_id}/tokens/{token_id}/revoke.",
        "operationId": "postApiV1IamPrincipalsByPrincipalIdTokensByTokenIdRevoke",
        "parameters": [
          {
            "name": "principal_id",
            "in": "path",
            "description": "Principal id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "token_id",
            "in": "path",
            "description": "Token id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Token revoked",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Token not found for this principal",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/service-accounts": {
      "get": {
        "tags": [
          "service-accounts"
        ],
        "summary": "Get Api V1 Iam Service Accounts",
        "description": "Auto-generated documentation for GET /api/v1/iam/service-accounts. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1IamServiceAccounts",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Service accounts the caller may manage The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ServiceAccountResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "service-accounts"
        ],
        "summary": "Post Api V1 Iam Service Accounts",
        "description": "Auto-generated documentation for POST /api/v1/iam/service-accounts.",
        "operationId": "postApiV1IamServiceAccounts",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewServiceAccount"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Service account created",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceAccountPointResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/service-accounts/{service_account_id}": {
      "get": {
        "tags": [
          "service-accounts"
        ],
        "summary": "Get Api V1 Iam Service Accounts By Service Account Id",
        "description": "Auto-generated documentation for GET /api/v1/iam/service-accounts/{service_account_id}.",
        "operationId": "getApiV1IamServiceAccountsByServiceAccountId",
        "parameters": [
          {
            "name": "service_account_id",
            "in": "path",
            "description": "Service account id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Service account",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceAccountPointResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "service-accounts"
        ],
        "summary": "Delete Api V1 Iam Service Accounts By Service Account Id",
        "description": "Auto-generated documentation for DELETE /api/v1/iam/service-accounts/{service_account_id}.",
        "operationId": "deleteApiV1IamServiceAccountsByServiceAccountId",
        "parameters": [
          {
            "name": "service_account_id",
            "in": "path",
            "description": "Service account id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Service account deleted",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "service-accounts"
        ],
        "summary": "Patch Api V1 Iam Service Accounts By Service Account Id",
        "description": "Auto-generated documentation for PATCH /api/v1/iam/service-accounts/{service_account_id}.",
        "operationId": "patchApiV1IamServiceAccountsByServiceAccountId",
        "parameters": [
          {
            "name": "service_account_id",
            "in": "path",
            "description": "Service account id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateServiceAccount"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Updated service account",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceAccountPointResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/service-accounts/{service_account_id}/disable": {
      "post": {
        "tags": [
          "service-accounts"
        ],
        "summary": "Post Api V1 Iam Service Accounts By Service Account Id Disable",
        "description": "Auto-generated documentation for POST /api/v1/iam/service-accounts/{service_account_id}/disable.",
        "operationId": "postApiV1IamServiceAccountsByServiceAccountIdDisable",
        "parameters": [
          {
            "name": "service_account_id",
            "in": "path",
            "description": "Service account id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Service account disabled",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceAccountPointResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/users": {
      "get": {
        "tags": [
          "users"
        ],
        "summary": "Get Api V1 Iam Users",
        "description": "Auto-generated documentation for GET /api/v1/iam/users. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1IamUsers",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Users matching optional query filters The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "users"
        ],
        "summary": "Post Api V1 Iam Users",
        "description": "Auto-generated documentation for POST /api/v1/iam/users.",
        "operationId": "postApiV1IamUsers",
        "parameters": [
          {
            "name": "X-Hubuum-Credential-Approval",
            "in": "header",
            "description": "Single-use create_user approval",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewUser"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "User created",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserPointResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Administrator authority and fresh credential approval required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/users/{user_id}": {
      "get": {
        "tags": [
          "users"
        ],
        "summary": "Get Api V1 Iam Users By User Id",
        "description": "Auto-generated documentation for GET /api/v1/iam/users/{user_id}.",
        "operationId": "getApiV1IamUsersByUserId",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "description": "User ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "User",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserPointResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "User not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "users"
        ],
        "summary": "Delete Api V1 Iam Users By User Id",
        "description": "Auto-generated documentation for DELETE /api/v1/iam/users/{user_id}.",
        "operationId": "deleteApiV1IamUsersByUserId",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "description": "User ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "User deleted",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Fresh credential approval required, or provider-managed user is read-only",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "User not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "users"
        ],
        "summary": "Patch Api V1 Iam Users By User Id",
        "description": "Auto-generated documentation for PATCH /api/v1/iam/users/{user_id}.",
        "operationId": "patchApiV1IamUsersByUserId",
        "parameters": [
          {
            "name": "X-Hubuum-Credential-Approval",
            "in": "header",
            "description": "Required when the patch supplies a password",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          {
            "name": "user_id",
            "in": "path",
            "description": "User ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateUser"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Updated user",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserPointResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Fresh credential approval required, or provider-managed user is read-only",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "User not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/users/{user_id}/anonymize": {
      "post": {
        "tags": [
          "users"
        ],
        "summary": "Post Api V1 Iam Users By User Id Anonymize",
        "description": "Auto-generated documentation for POST /api/v1/iam/users/{user_id}/anonymize.",
        "operationId": "postApiV1IamUsersByUserIdAnonymize",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "description": "User ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "User anonymized",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "User not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/iam/users/{user_id}/events": {
      "get": {
        "tags": [
          "events"
        ],
        "summary": "Get Api V1 Iam Users By User Id Events",
        "description": "Auto-generated documentation for GET /api/v1/iam/users/{user_id}/events. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1IamUsersByUserIdEvents",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "description": "User principal id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "action",
            "in": "query",
            "description": "Optional action filter",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "actor_kind",
            "in": "query",
            "description": "Optional actor kind filter",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "actor_user_id",
            "in": "query",
            "description": "Optional actor principal id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "initiator_user_id",
            "in": "query",
            "description": "Optional root task initiator principal id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "collection_id",
            "in": "query",
            "description": "Optional collection id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "occurred_after",
            "in": "query",
            "description": "Optional lower occurred_at bound, RFC3339 or YYYY-MM-DD",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "occurred_before",
            "in": "query",
            "description": "Optional upper occurred_at bound, RFC3339 or YYYY-MM-DD",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Supported fields: id, occurred_at",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursor token from X-Next-Cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Visible user audit events The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EventResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/imports": {
      "post": {
        "tags": [
          "imports"
        ],
        "summary": "Post Api V1 Imports",
        "description": "Auto-generated documentation for POST /api/v1/imports.",
        "operationId": "postApiV1Imports",
        "parameters": [
          {
            "name": "X-Hubuum-Credential-Approval",
            "in": "header",
            "description": "Required for any import carrying password or password_hash, including dry runs",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Import task accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Too many active import tasks",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/imports/{task_id}": {
      "get": {
        "tags": [
          "imports"
        ],
        "summary": "Get Api V1 Imports By Task Id",
        "description": "Auto-generated documentation for GET /api/v1/imports/{task_id}.",
        "operationId": "getApiV1ImportsByTaskId",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "description": "Import task ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Import task projection",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Import task not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/imports/{task_id}/results": {
      "get": {
        "tags": [
          "imports"
        ],
        "summary": "Get Api V1 Imports By Task Id Results",
        "description": "Auto-generated documentation for GET /api/v1/imports/{task_id}/results. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1ImportsByTaskIdResults",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "description": "Import task ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Import item results The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ImportTaskResultResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Import task not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/relations/classes": {
      "get": {
        "tags": [
          "relations"
        ],
        "summary": "Get Api V1 Relations Classes",
        "description": "Auto-generated documentation for GET /api/v1/relations/classes. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1RelationsClasses",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Class relations matching optional query filters The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HubuumClassRelation"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "relations"
        ],
        "summary": "Post Api V1 Relations Classes",
        "description": "Auto-generated documentation for POST /api/v1/relations/classes.",
        "operationId": "postApiV1RelationsClasses",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewHubuumClassRelation"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Class relation created",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HubuumClassRelation"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/relations/classes/{relation_id}": {
      "get": {
        "tags": [
          "relations"
        ],
        "summary": "Get Api V1 Relations Classes By Relation Id",
        "description": "Auto-generated documentation for GET /api/v1/relations/classes/{relation_id}.",
        "operationId": "getApiV1RelationsClassesByRelationId",
        "parameters": [
          {
            "name": "relation_id",
            "in": "path",
            "description": "Class relation ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Class relation",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HubuumClassRelation"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Relation not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "relations"
        ],
        "summary": "Delete Api V1 Relations Classes By Relation Id",
        "description": "Auto-generated documentation for DELETE /api/v1/relations/classes/{relation_id}.",
        "operationId": "deleteApiV1RelationsClassesByRelationId",
        "parameters": [
          {
            "name": "relation_id",
            "in": "path",
            "description": "Class relation ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Class relation deleted",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Relation not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/relations/objects": {
      "get": {
        "tags": [
          "relations"
        ],
        "summary": "Get Api V1 Relations Objects",
        "description": "Auto-generated documentation for GET /api/v1/relations/objects. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1RelationsObjects",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Object relations matching optional query filters The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HubuumObjectRelation"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "relations"
        ],
        "summary": "Post Api V1 Relations Objects",
        "description": "Auto-generated documentation for POST /api/v1/relations/objects.",
        "operationId": "postApiV1RelationsObjects",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewHubuumObjectRelation"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Object relation created",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HubuumObjectRelation"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/relations/objects/{relation_id}": {
      "get": {
        "tags": [
          "relations"
        ],
        "summary": "Get Api V1 Relations Objects By Relation Id",
        "description": "Auto-generated documentation for GET /api/v1/relations/objects/{relation_id}.",
        "operationId": "getApiV1RelationsObjectsByRelationId",
        "parameters": [
          {
            "name": "relation_id",
            "in": "path",
            "description": "Object relation ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Object relation",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HubuumObjectRelation"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Relation not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "relations"
        ],
        "summary": "Delete Api V1 Relations Objects By Relation Id",
        "description": "Auto-generated documentation for DELETE /api/v1/relations/objects/{relation_id}.",
        "operationId": "deleteApiV1RelationsObjectsByRelationId",
        "parameters": [
          {
            "name": "relation_id",
            "in": "path",
            "description": "Object relation ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Object relation deleted",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Relation not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/remote-targets": {
      "get": {
        "tags": [
          "remote-targets"
        ],
        "summary": "Get Api V1 Remote Targets",
        "description": "Auto-generated documentation for GET /api/v1/remote-targets. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1RemoteTargets",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Remote targets visible to caller The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RemoteTarget"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "remote-targets"
        ],
        "summary": "Post Api V1 Remote Targets",
        "description": "Auto-generated documentation for POST /api/v1/remote-targets.",
        "operationId": "postApiV1RemoteTargets",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewRemoteTarget"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Remote target created",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RemoteTarget"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/remote-targets/{remote_target_id}/history": {
      "get": {
        "tags": [
          "remote-targets"
        ],
        "summary": "Get Api V1 Remote Targets By Remote Target Id History",
        "description": "Auto-generated documentation for GET /api/v1/remote-targets/{remote_target_id}/history. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1RemoteTargetsByRemoteTargetIdHistory",
        "parameters": [
          {
            "name": "remote_target_id",
            "in": "path",
            "description": "Remote target ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Remote target history The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HistoryResponse_RemoteTargetHistory"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Remote target not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/remote-targets/{remote_target_id}/history/as-of": {
      "get": {
        "tags": [
          "remote-targets"
        ],
        "summary": "Get Api V1 Remote Targets By Remote Target Id History As Of",
        "description": "Auto-generated documentation for GET /api/v1/remote-targets/{remote_target_id}/history/as-of.",
        "operationId": "getApiV1RemoteTargetsByRemoteTargetIdHistoryAsOf",
        "parameters": [
          {
            "name": "remote_target_id",
            "in": "path",
            "description": "Remote target ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "at",
            "in": "query",
            "description": "RFC3339 timestamp",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Remote target version at timestamp",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HistoryResponse_RemoteTargetHistory"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Remote target or version not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/remote-targets/{target_id}": {
      "get": {
        "tags": [
          "remote-targets"
        ],
        "summary": "Get Api V1 Remote Targets By Target Id",
        "description": "Auto-generated documentation for GET /api/v1/remote-targets/{target_id}.",
        "operationId": "getApiV1RemoteTargetsByTargetId",
        "parameters": [
          {
            "name": "target_id",
            "in": "path",
            "description": "Remote target ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Remote target",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RemoteTarget"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Remote target not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "remote-targets"
        ],
        "summary": "Delete Api V1 Remote Targets By Target Id",
        "description": "Auto-generated documentation for DELETE /api/v1/remote-targets/{target_id}.",
        "operationId": "deleteApiV1RemoteTargetsByTargetId",
        "parameters": [
          {
            "name": "target_id",
            "in": "path",
            "description": "Remote target ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Remote target deleted",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Remote target not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "remote-targets"
        ],
        "summary": "Patch Api V1 Remote Targets By Target Id",
        "description": "Auto-generated documentation for PATCH /api/v1/remote-targets/{target_id}.",
        "operationId": "patchApiV1RemoteTargetsByTargetId",
        "parameters": [
          {
            "name": "target_id",
            "in": "path",
            "description": "Remote target ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateRemoteTarget"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Remote target updated",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RemoteTarget"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Remote target not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/remote-targets/{target_id}/events": {
      "get": {
        "tags": [
          "events"
        ],
        "summary": "Get Api V1 Remote Targets By Target Id Events",
        "description": "Auto-generated documentation for GET /api/v1/remote-targets/{target_id}/events. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1RemoteTargetsByTargetIdEvents",
        "parameters": [
          {
            "name": "target_id",
            "in": "path",
            "description": "Remote target id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "action",
            "in": "query",
            "description": "Optional action filter",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "actor_kind",
            "in": "query",
            "description": "Optional actor kind filter",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "actor_user_id",
            "in": "query",
            "description": "Optional actor principal id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "initiator_user_id",
            "in": "query",
            "description": "Optional root task initiator principal id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "collection_id",
            "in": "query",
            "description": "Optional collection id filter",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "occurred_after",
            "in": "query",
            "description": "Optional lower occurred_at bound, RFC3339 or YYYY-MM-DD",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "occurred_before",
            "in": "query",
            "description": "Optional upper occurred_at bound, RFC3339 or YYYY-MM-DD",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Supported fields: id, occurred_at",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursor token from X-Next-Cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Visible remote target audit events The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EventResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/remote-targets/{target_id}/invoke": {
      "post": {
        "tags": [
          "remote-targets"
        ],
        "summary": "Post Api V1 Remote Targets By Target Id Invoke",
        "description": "Auto-generated documentation for POST /api/v1/remote-targets/{target_id}/invoke.",
        "operationId": "postApiV1RemoteTargetsByTargetIdInvoke",
        "parameters": [
          {
            "name": "target_id",
            "in": "path",
            "description": "Remote target ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RemoteTargetInvokeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Remote call task accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Subject or remote target not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/restores": {
      "post": {
        "tags": [
          "restores"
        ],
        "summary": "Post Api V1 Restores",
        "description": "Auto-generated documentation for POST /api/v1/restores.",
        "operationId": "postApiV1Restores",
        "requestBody": {
          "description": "Full BackupDocument JSON bytes",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BackupDocument"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Restore document staged and validated",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                },
                "description": "Always no-store for restore capabilities and metadata"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RestoreStageResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid backup document",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Administrator access required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "413": {
            "description": "Restore upload too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/restores/{restore_id}/confirm": {
      "post": {
        "tags": [
          "restores"
        ],
        "summary": "Post Api V1 Restores By Restore Id Confirm",
        "description": "Auto-generated documentation for POST /api/v1/restores/{restore_id}/confirm.",
        "operationId": "postApiV1RestoresByRestoreIdConfirm",
        "parameters": [
          {
            "name": "X-Hubuum-Credential-Approval",
            "in": "header",
            "description": "Single-use confirm_restore approval",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "restore_id",
            "in": "path",
            "description": "Restore stage ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64",
              "minimum": 1
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RestoreConfirmRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Restore confirmed and queued for the isolated executor",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                },
                "description": "Always no-store for restore metadata"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RestoreStageResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid confirmation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Administrator access and fresh approval required; restore capability rejected",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Restore stage cannot be confirmed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "410": {
            "description": "Restore stage expired",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/restores/{restore_id}/status": {
      "get": {
        "tags": [
          "restores"
        ],
        "summary": "Get Api V1 Restores By Restore Id Status",
        "description": "Auto-generated documentation for GET /api/v1/restores/{restore_id}/status.",
        "operationId": "getApiV1RestoresByRestoreIdStatus",
        "parameters": [
          {
            "name": "restore_id",
            "in": "path",
            "description": "Restore stage ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64",
              "minimum": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Restore status",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                },
                "description": "Always no-store for restore metadata"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RestoreStageResponse"
                }
              }
            }
          },
          "400": {
            "description": "Restore capability header is missing",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Capability rejected or restore stage unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "restore_capability": []
          }
        ]
      }
    },
    "/api/v1/search": {
      "get": {
        "tags": [
          "search"
        ],
        "summary": "Get Api V1 Search",
        "description": "Auto-generated documentation for GET /api/v1/search.",
        "operationId": "getApiV1Search",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "description": "Plain-text query string",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kinds",
            "in": "query",
            "description": "Comma-separated kinds: collection,class,object",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit_per_kind",
            "in": "query",
            "description": "Maximum results per kind. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "cursor_collections",
            "in": "query",
            "description": "Opaque cursor for collection results",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor_classes",
            "in": "query",
            "description": "Opaque cursor for class results",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor_objects",
            "in": "query",
            "description": "Opaque cursor for object results",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search_class_schema",
            "in": "query",
            "description": "Include class schema text in class matching",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "search_object_data",
            "in": "query",
            "description": "Include object JSON string values in object matching",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Grouped unified search results",
            "headers": {
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedSearchResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "search"
        ],
        "summary": "Post Api V1 Search",
        "description": "Runs the versioned, typed Hubuum resource-search DSL. Version 1 targets collections, classes, objects, audit events, users, groups, or service accounts. Boolean and/or/not expressions compose target-specific field predicates; object queries may additionally use permission-aware existential related-object predicates and an optional exact class selector. See docs/search_api.md for the complete grammar and field/operator matrix.",
        "operationId": "postApiV1Search",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StructuredSearchRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Tagged, cursor-paginated structured resource search results",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StructuredSearchResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid DSL, predicate, or cursor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Explicit object target class not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "413": {
            "description": "Request body exceeds the structured-search size limit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "415": {
            "description": "Content type is not application/json",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/search/stream": {
      "get": {
        "tags": [
          "search"
        ],
        "summary": "Get Api V1 Search Stream",
        "description": "Auto-generated documentation for GET /api/v1/search/stream.",
        "operationId": "getApiV1SearchStream",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "description": "Plain-text query string",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kinds",
            "in": "query",
            "description": "Comma-separated kinds: collection,class,object",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit_per_kind",
            "in": "query",
            "description": "Maximum results per kind. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "cursor_collections",
            "in": "query",
            "description": "Opaque cursor for collection results",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor_classes",
            "in": "query",
            "description": "Opaque cursor for class results",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor_objects",
            "in": "query",
            "description": "Opaque cursor for object results",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search_class_schema",
            "in": "query",
            "description": "Include class schema text in class matching",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "search_object_data",
            "in": "query",
            "description": "Include object JSON string values in object matching",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Server-sent event stream for unified search",
            "headers": {
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              }
            },
            "content": {
              "text/event-stream": {}
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "search"
        ],
        "summary": "Post Api V1 Search Stream",
        "description": "Runs the same versioned structured resource-search DSL as POST /api/v1/search and returns server-sent events. The stream emits started, zero or more tagged result events, and one terminal done event carrying cursor metadata; execution failures after streaming starts produce a terminal error event.",
        "operationId": "postApiV1SearchStream",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StructuredSearchRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Structured search server-sent event stream",
            "content": {
              "text/event-stream": {}
            }
          },
          "400": {
            "description": "Invalid DSL or request envelope",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "413": {
            "description": "Request body exceeds the structured-search size limit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "415": {
            "description": "Content type is not application/json",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/system-event-subscriptions": {
      "get": {
        "tags": [
          "event-subscriptions"
        ],
        "summary": "Get Api V1 System Event Subscriptions",
        "description": "Auto-generated documentation for GET /api/v1/system-event-subscriptions.",
        "operationId": "getApiV1SystemEventSubscriptions",
        "responses": {
          "200": {
            "description": "Event subscriptions",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SystemEventSubscription"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "event-subscriptions"
        ],
        "summary": "Post Api V1 System Event Subscriptions",
        "description": "Auto-generated documentation for POST /api/v1/system-event-subscriptions.",
        "operationId": "postApiV1SystemEventSubscriptions",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewEventSubscription"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Event subscription created",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SystemEventSubscription"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Collection or sink not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/system-event-subscriptions/{subscription_id}": {
      "get": {
        "tags": [
          "event-subscriptions"
        ],
        "summary": "Get Api V1 System Event Subscriptions By Subscription Id",
        "description": "Auto-generated documentation for GET /api/v1/system-event-subscriptions/{subscription_id}.",
        "operationId": "getApiV1SystemEventSubscriptionsBySubscriptionId",
        "parameters": [
          {
            "name": "subscription_id",
            "in": "path",
            "description": "Event subscription ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Event subscription",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SystemEventSubscription"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Event subscription not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "event-subscriptions"
        ],
        "summary": "Delete Api V1 System Event Subscriptions By Subscription Id",
        "description": "Auto-generated documentation for DELETE /api/v1/system-event-subscriptions/{subscription_id}.",
        "operationId": "deleteApiV1SystemEventSubscriptionsBySubscriptionId",
        "parameters": [
          {
            "name": "subscription_id",
            "in": "path",
            "description": "Event subscription ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Event subscription deleted",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Event subscription not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "event-subscriptions"
        ],
        "summary": "Patch Api V1 System Event Subscriptions By Subscription Id",
        "description": "Auto-generated documentation for PATCH /api/v1/system-event-subscriptions/{subscription_id}.",
        "operationId": "patchApiV1SystemEventSubscriptionsBySubscriptionId",
        "parameters": [
          {
            "name": "subscription_id",
            "in": "path",
            "description": "Event subscription ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Strong ETag from the latest tagged representation. The header is optional for compatibility; when supplied, the mutation is applied only if the resource still matches.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateEventSubscription"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Event subscription updated",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Strong validator for this revision-owned representation. It may be omitted when an expanded or backend-specific representation is returned, or when a deleted aggregate no longer exists."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SystemEventSubscription"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Event subscription not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "412": {
            "description": "Precondition failed because If-Match does not match the current resource revision."
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/tasks": {
      "get": {
        "tags": [
          "tasks"
        ],
        "summary": "Get Api V1 Tasks",
        "description": "Auto-generated documentation for GET /api/v1/tasks. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1Tasks",
        "parameters": [
          {
            "name": "class_id",
            "in": "query",
            "description": "Explicit target class",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "object_id",
            "in": "query",
            "description": "Explicit target object",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "collection_id",
            "in": "query",
            "description": "Explicit target collection",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "relation_type",
            "in": "query",
            "description": "class_relation or object_relation; requires relation_id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "relation_id",
            "in": "query",
            "description": "Explicit relation identity; requires relation_type",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "schema_revision",
            "in": "query",
            "description": "Target schema revision; requires class_id",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "schema_work_kind",
            "in": "query",
            "description": "Retained work kind: impact or revalidation",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "schema_work_status",
            "in": "query",
            "description": "Retained work status: running, failed, complete, cancelled, superseded",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "computation_revision",
            "in": "query",
            "description": "Target computation revision; requires class_id",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "remote_target_id",
            "in": "query",
            "description": "Remote target configuration identity",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "remote_side_effect_state",
            "in": "query",
            "description": "not_sent, possibly_sent or legacy_unknown",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "export_scope_kind",
            "in": "query",
            "description": "Captured export scope kind",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "export_template_id",
            "in": "query",
            "description": "Resolved export template identity",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "export_has_warnings",
            "in": "query",
            "description": "Known export warning outcome",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "export_truncated",
            "in": "query",
            "description": "Known export truncation outcome",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "import_dry_run",
            "in": "query",
            "description": "Captured import dry run option",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "import_atomicity",
            "in": "query",
            "description": "strict or best_effort",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "import_collision_policy",
            "in": "query",
            "description": "abort or overwrite",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "import_permission_policy",
            "in": "query",
            "description": "abort or continue",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "import_has_failed_items",
            "in": "query",
            "description": "Known terminal import failure count is nonzero",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "backup_include_history",
            "in": "query",
            "description": "Captured backup history option",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "output_state",
            "in": "query",
            "description": "available, expired, not_produced or unknown; exports and backups",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "description": "Comma-separated task kinds (import|export|backup|reindex|remote_call|schema_validation; schema tasks require administrator access)",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Comma-separated task statuses",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "terminal",
            "in": "query",
            "description": "Restrict to terminal or nonterminal states; must agree with status",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "cancel_requested",
            "in": "query",
            "description": "Match durable cancellation intent",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "terminal_reason",
            "in": "query",
            "description": "cancel_requested or deadline_exceeded",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "trace_id",
            "in": "query",
            "description": "32 hexadecimal digits identifying the originating trace",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "created_after",
            "in": "query",
            "description": "RFC 3339 created timestamp; inclusive lower bound",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "created_before",
            "in": "query",
            "description": "RFC 3339 created timestamp; exclusive upper bound",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "started_after",
            "in": "query",
            "description": "RFC 3339 started timestamp; inclusive lower bound",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "started_before",
            "in": "query",
            "description": "RFC 3339 started timestamp; exclusive upper bound",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "finished_after",
            "in": "query",
            "description": "RFC 3339 finished timestamp; inclusive lower bound",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "finished_before",
            "in": "query",
            "description": "RFC 3339 finished timestamp; exclusive upper bound",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "submitted_by",
            "in": "query",
            "description": "Optional submitter user id filter (effective only for admins)",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Supported fields: id, kind, status, submitted_by, created_at, started_at, finished_at. Example: kind.asc,id.desc",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursor token from X-Next-Cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Visible tasks The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TaskResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/tasks/{task_id}": {
      "get": {
        "tags": [
          "tasks"
        ],
        "summary": "Get Api V1 Tasks By Task Id",
        "description": "Auto-generated documentation for GET /api/v1/tasks/{task_id}.",
        "operationId": "getApiV1TasksByTaskId",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "description": "Task ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Task state",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Task not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/tasks/{task_id}/cancel": {
      "post": {
        "tags": [
          "tasks"
        ],
        "summary": "Post Api V1 Tasks By Task Id Cancel",
        "description": "Auto-generated documentation for POST /api/v1/tasks/{task_id}/cancel.",
        "operationId": "postApiV1TasksByTaskIdCancel",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "description": "Task ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/TaskID"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TaskCancelRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Terminal task; repeated requests return the same state",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskResponse"
                }
              }
            }
          },
          "202": {
            "description": "Durable cancellation requested; executor cleanup is pending",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid cancellation reason or status",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthenticated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Cancellation is not authorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Task not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Expected status no longer matches",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/api/v1/tasks/{task_id}/events": {
      "get": {
        "tags": [
          "tasks"
        ],
        "summary": "Get Api V1 Tasks By Task Id Events",
        "description": "Auto-generated documentation for GET /api/v1/tasks/{task_id}/events. Supports cursor pagination through the `limit`, `sort`, and `cursor` query parameters. The exact total hit count is returned in the `X-Total-Count` response header unless `include_total=false`, and the next page cursor is returned in the `X-Next-Cursor` response header.",
        "operationId": "getApiV1TasksByTaskIdEvents",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "description": "Task ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of items to return. Defaults to 100. The server clamps values above 250.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 250,
              "minimum": 1
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Comma-separated sort fields. Cursor pagination uses the requested sort order and appends a stable tie-breaker automatically.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor returned in the X-Next-Cursor response header from a previous page. Supply it unchanged to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include_total",
            "in": "query",
            "description": "Whether to execute an exact count query and return X-Total-Count. Defaults to true; set false on latency-sensitive requests that do not need the count.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Task event history The response body contains the current page items as a JSON array. Use the `X-Total-Count` header for the exact number of matching results. Use the `X-Next-Cursor` header, when present, to request the next page.",
            "headers": {
              "X-Next-Cursor": {
                "schema": {
                  "type": "string"
                },
                "description": "Opaque cursor for the next page. This header is omitted when there are no more results."
              },
              "X-Page-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Effective page size used by the server after applying the configured default and maximum."
              },
              "X-Total-Count": {
                "schema": {
                  "type": "string"
                },
                "description": "Exact total number of results matching the current filter set, independent of cursor pagination. Omitted when include_total=false."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TaskEventResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Task not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/healthz": {
      "get": {
        "tags": [
          "probes"
        ],
        "summary": "Get Healthz",
        "description": "Auto-generated documentation for GET /healthz.",
        "operationId": "getHealthz",
        "responses": {
          "200": {
            "description": "Process is alive",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProbeResponse"
                }
              }
            }
          }
        }
      }
    },
    "/readyz": {
      "get": {
        "tags": [
          "probes"
        ],
        "summary": "Get Readyz",
        "description": "Auto-generated documentation for GET /readyz.",
        "operationId": "getReadyz",
        "responses": {
          "200": {
            "description": "Service is ready to receive traffic",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProbeResponse"
                }
              }
            }
          },
          "503": {
            "description": "Service is not ready",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AddOperation": {
        "type": "object",
        "description": "JSON Patch 'add' operation representation",
        "required": [
          "path",
          "value"
        ],
        "properties": {
          "path": {
            "type": "string",
            "description": "JSON-Pointer value [RFC6901](https://tools.ietf.org/html/rfc6901) that references a location\nwithin the target document where the operation is performed."
          },
          "value": {
            "description": "Value to add to the target location."
          }
        }
      },
      "ApiErrorResponse": {
        "type": "object",
        "required": [
          "error",
          "message"
        ],
        "properties": {
          "error": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "reason": {
            "type": [
              "string",
              "null"
            ],
            "description": "Machine-readable reason for errors with a client recovery flow."
          }
        },
        "example": {
          "error": "Unauthorized",
          "message": "Authentication failure"
        }
      },
      "AuthProvidersResponse": {
        "type": "object",
        "required": [
          "providers"
        ],
        "properties": {
          "providers": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "AuthenticationConfig": {
        "type": "object",
        "required": [
          "token_lifetime_hours",
          "max_token_lifetime_hours",
          "token_retention_purge_enabled",
          "token_retention_days",
          "token_retention_purge_interval_seconds",
          "token_retention_purge_batch_size",
          "stable_token_hash_key_configured",
          "token_hash_key_mode",
          "active_token_hash_key_id",
          "previous_token_hash_key_ids",
          "token_hash_key_ring_identity",
          "require_stable_token_hash_key",
          "admin_groupname",
          "provider_config_path",
          "login_rate_limit"
        ],
        "properties": {
          "active_token_hash_key_id": {
            "type": "string"
          },
          "admin_groupname": {
            "type": "string"
          },
          "admin_identity_scope": {
            "type": [
              "string",
              "null"
            ]
          },
          "login_rate_limit": {
            "$ref": "#/components/schemas/LoginRateLimitConfig"
          },
          "max_token_lifetime_hours": {
            "type": "integer",
            "format": "int64"
          },
          "previous_token_hash_key_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "provider_config_path": {
            "$ref": "#/components/schemas/SecretStatus"
          },
          "require_stable_token_hash_key": {
            "type": "boolean"
          },
          "stable_token_hash_key_configured": {
            "type": "boolean"
          },
          "token_hash_key_mode": {
            "type": "string"
          },
          "token_hash_key_ring_identity": {
            "type": "string"
          },
          "token_lifetime_hours": {
            "type": "integer",
            "format": "int64"
          },
          "token_retention_days": {
            "type": "integer",
            "format": "int64"
          },
          "token_retention_purge_batch_size": {
            "type": "integer",
            "minimum": 10
          },
          "token_retention_purge_enabled": {
            "type": "boolean"
          },
          "token_retention_purge_interval_seconds": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          }
        }
      },
      "BackupConfig": {
        "type": "object",
        "required": [
          "max_capture_rows",
          "output_retention_hours",
          "max_active_tasks_per_user",
          "max_output_bytes"
        ],
        "properties": {
          "max_active_tasks_per_user": {
            "type": "integer",
            "minimum": 0
          },
          "max_capture_rows": {
            "type": "integer",
            "minimum": 0
          },
          "max_output_bytes": {
            "type": "integer",
            "minimum": 0
          },
          "output_retention_hours": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "BackupDocument": {
        "type": "object",
        "required": [
          "backup_version",
          "created_at",
          "source_version",
          "state",
          "manifest"
        ],
        "properties": {
          "backup_version": {
            "type": "integer",
            "format": "int32"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "RFC 3339 creation instant in UTC."
          },
          "history": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/BackupHistory"
              },
              {
                "type": "null"
              }
            ]
          },
          "manifest": {
            "$ref": "#/components/schemas/BackupManifest"
          },
          "source_version": {
            "type": "string"
          },
          "state": {
            "$ref": "#/components/schemas/BackupState"
          }
        },
        "additionalProperties": false
      },
      "BackupHistory": {
        "type": "object",
        "description": "Privileged, restore-only logical snapshots. Backup version 6 identifies\nsections by stable Hubuum resources rather than PostgreSQL tables. Each\nstorage adapter explicitly maps its persistence layout to these versioned\nsections. These are disaster-recovery internals, not portable import data.",
        "required": [
          "sections"
        ],
        "properties": {
          "sections": {
            "type": "object"
          }
        },
        "additionalProperties": false
      },
      "BackupManifest": {
        "type": "object",
        "required": [
          "item_counts",
          "exclusions"
        ],
        "properties": {
          "exclusions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "item_counts": {
            "type": "object"
          }
        }
      },
      "BackupRequest": {
        "type": "object",
        "properties": {
          "include_history": {
            "type": "boolean",
            "description": "Full-system backups include durable audit, task, delivery, and temporal\nhistory by default. Set this explicitly to false only when the eventual\nrestore is intended to reset that history."
          }
        },
        "additionalProperties": false
      },
      "BackupState": {
        "type": "object",
        "description": "Canonical logical rows used by the destructive full-system restore path.",
        "required": [
          "sections"
        ],
        "properties": {
          "sections": {
            "type": "object"
          }
        },
        "additionalProperties": false
      },
      "BackupTaskDetails": {
        "type": "object",
        "required": [
          "output_url",
          "output_available",
          "output_expired"
        ],
        "properties": {
          "byte_size": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "output_available": {
            "type": "boolean"
          },
          "output_expired": {
            "type": "boolean"
          },
          "output_expires_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "output_url": {
            "type": "string"
          },
          "retained": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RetainedBackupDetails"
              },
              {
                "type": "null"
              }
            ]
          },
          "sha256": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "ClassComputationState": {
        "type": "object",
        "required": [
          "class_id",
          "evaluation_revision",
          "rebuild_status",
          "created_at",
          "updated_at"
        ],
        "properties": {
          "active_task_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "class_id": {
            "type": "integer",
            "format": "int32"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "evaluation_revision": {
            "type": "integer",
            "format": "int64"
          },
          "last_error": {
            "type": [
              "string",
              "null"
            ]
          },
          "rebuild_status": {
            "type": "string"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "ClassKey": {
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "collection_key": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/CollectionKey"
              },
              {
                "type": "null"
              }
            ]
          },
          "collection_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "name": {
            "type": "string"
          }
        }
      },
      "ClassSchemaResponse": {
        "type": "object",
        "required": [
          "active",
          "counts",
          "object_epoch"
        ],
        "properties": {
          "active": {
            "$ref": "#/components/schemas/SchemaRevisionResponse"
          },
          "counts": {
            "$ref": "#/components/schemas/SchemaComplianceCounts"
          },
          "object_epoch": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          }
        }
      },
      "ClearRateLimitResponse": {
        "type": "object",
        "required": [
          "cleared"
        ],
        "properties": {
          "cleared": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "ClientAllowlistStatus": {
        "type": "object",
        "required": [
          "allows_any",
          "network_count"
        ],
        "properties": {
          "allows_any": {
            "type": "boolean"
          },
          "network_count": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "ClientAuthenticationConfig": {
        "type": "object",
        "required": [
          "default_token_lifetime_hours",
          "max_token_lifetime_hours"
        ],
        "properties": {
          "default_token_lifetime_hours": {
            "type": "integer",
            "format": "int64",
            "description": "Lifetime applied to newly issued tokens when the mint request omits an\nexplicit expiry.",
            "minimum": 1
          },
          "max_token_lifetime_hours": {
            "type": "integer",
            "format": "int64",
            "description": "Largest lifetime accepted for an explicitly requested token expiry.",
            "minimum": 1
          }
        }
      },
      "ClientConfig": {
        "type": "object",
        "description": "Public configuration values that API consumers need to use the service correctly.\n\nKeep this projection deliberately small. Adding a value here makes it available without\nauthentication through the client configuration endpoint.",
        "required": [
          "pagination",
          "authentication"
        ],
        "properties": {
          "authentication": {
            "$ref": "#/components/schemas/ClientAuthenticationConfig"
          },
          "pagination": {
            "$ref": "#/components/schemas/ClientPaginationConfig"
          }
        }
      },
      "ClientPaginationConfig": {
        "type": "object",
        "required": [
          "default_page_limit",
          "max_page_limit"
        ],
        "properties": {
          "default_page_limit": {
            "type": "integer",
            "description": "Number of items returned when a paginated request omits its limit.",
            "minimum": 1
          },
          "max_page_limit": {
            "type": "integer",
            "description": "Largest effective page size used for a client request.",
            "minimum": 1
          }
        }
      },
      "Collection": {
        "type": "object",
        "required": [
          "id",
          "name",
          "description",
          "created_at",
          "updated_at",
          "revision"
        ],
        "properties": {
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string"
          },
          "parent_collection_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "CollectionHistory": {
        "type": "object",
        "required": [
          "id",
          "name",
          "description",
          "created_at",
          "updated_at",
          "op",
          "valid_from",
          "history_id",
          "revision"
        ],
        "properties": {
          "actor_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "actor_kind": {
            "type": [
              "string",
              "null"
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "description": {
            "type": "string"
          },
          "history_id": {
            "type": "integer",
            "format": "int64"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "initiator_user_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "name": {
            "type": "string"
          },
          "op": {
            "type": "string"
          },
          "parent_collection_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "task_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "valid_from": {
            "type": "string",
            "format": "date-time"
          },
          "valid_to": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "CollectionID": {
        "type": "integer",
        "format": "int32",
        "description": "Validated positive collection id.",
        "minimum": 1
      },
      "CollectionKey": {
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "path": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            }
          }
        }
      },
      "CollectionPermissionSet": {
        "type": "object",
        "description": "The revisioned authorization grant set for a collection.\n\nIndividual grants are implementation details of this aggregate;\ncallers condition mutations on the revision of the complete set.",
        "required": [
          "collection_id",
          "revision",
          "permissions"
        ],
        "properties": {
          "collection_id": {
            "type": "integer",
            "format": "int32"
          },
          "permissions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Permission"
            },
            "description": "ACL entries contain stable group identifiers without embedding mutable\ngroup representations that are outside this aggregate's revision."
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          }
        }
      },
      "ComplianceStatus": {
        "type": "string",
        "enum": [
          "valid",
          "invalid",
          "pending",
          "not_required"
        ]
      },
      "ComputedFieldDefinition": {
        "type": "object",
        "required": [
          "id",
          "class_id",
          "visibility",
          "key",
          "label",
          "description",
          "operation",
          "result_type",
          "enabled",
          "revision",
          "semantics_version",
          "created_at",
          "updated_at"
        ],
        "properties": {
          "class_id": {
            "type": "integer",
            "format": "int32"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "created_by": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "description": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "key": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "operation": {
            "type": "object"
          },
          "owner_user_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "result_type": {
            "type": "string"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "semantics_version": {
            "type": "integer",
            "format": "int32"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_by": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "visibility": {
            "type": "string"
          }
        }
      },
      "ComputedFieldDefinitionPatch": {
        "type": "object",
        "properties": {
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "enabled": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "key": {
            "type": [
              "string",
              "null"
            ]
          },
          "label": {
            "type": [
              "string",
              "null"
            ]
          },
          "operation": {
            "type": [
              "object",
              "null"
            ]
          },
          "result_type": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ComputedResultType"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false
      },
      "ComputedFieldDefinitionRequest": {
        "type": "object",
        "required": [
          "key",
          "label",
          "operation",
          "result_type"
        ],
        "properties": {
          "description": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "key": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "operation": {
            "type": "object"
          },
          "result_type": {
            "$ref": "#/components/schemas/ComputedResultType"
          }
        },
        "additionalProperties": false
      },
      "ComputedFieldDeleteResponse": {
        "type": "object",
        "required": [
          "deleted_definition_id",
          "state"
        ],
        "properties": {
          "deleted_definition_id": {
            "type": "integer",
            "format": "int32"
          },
          "state": {
            "$ref": "#/components/schemas/ClassComputationState"
          }
        }
      },
      "ComputedFieldErrorResponse": {
        "type": "object",
        "required": [
          "code",
          "message"
        ],
        "properties": {
          "code": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "path": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "ComputedFieldListResponse": {
        "type": "object",
        "required": [
          "definitions",
          "state"
        ],
        "properties": {
          "definitions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ComputedFieldDefinition"
            }
          },
          "state": {
            "$ref": "#/components/schemas/ClassComputationState"
          }
        }
      },
      "ComputedFieldMutationResponse": {
        "type": "object",
        "required": [
          "definition",
          "state"
        ],
        "properties": {
          "definition": {
            "$ref": "#/components/schemas/ComputedFieldDefinition"
          },
          "state": {
            "$ref": "#/components/schemas/ClassComputationState"
          }
        }
      },
      "ComputedFieldPreviewRequest": {
        "type": "object",
        "required": [
          "definition"
        ],
        "properties": {
          "class_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "description": "Required by the personal preview route and ignored on class-scoped routes."
          },
          "data": {
            "type": [
              "object",
              "null"
            ]
          },
          "definition": {
            "$ref": "#/components/schemas/ComputedFieldDefinitionRequest"
          },
          "object_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "ComputedFieldPreviewResponse": {
        "type": "object",
        "required": [
          "value"
        ],
        "properties": {
          "error": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ComputedFieldErrorResponse"
              },
              {
                "type": "null"
              }
            ]
          },
          "value": {}
        }
      },
      "ComputedObjectScopesResponse": {
        "type": "object",
        "required": [
          "shared"
        ],
        "properties": {
          "personal": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ComputedScopeResponse"
              },
              {
                "type": "null"
              }
            ]
          },
          "shared": {
            "$ref": "#/components/schemas/SharedComputedScopeResponse"
          }
        }
      },
      "ComputedResultType": {
        "type": "string",
        "enum": [
          "string",
          "number",
          "integer",
          "boolean",
          "object",
          "array"
        ]
      },
      "ComputedScopeResponse": {
        "type": "object",
        "required": [
          "values",
          "errors"
        ],
        "properties": {
          "errors": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/ComputedFieldErrorResponse"
            },
            "propertyNames": {
              "type": "string"
            }
          },
          "values": {
            "type": "object",
            "additionalProperties": {},
            "propertyNames": {
              "type": "string"
            }
          }
        }
      },
      "CopyOperation": {
        "type": "object",
        "description": "JSON Patch 'copy' operation representation",
        "required": [
          "from",
          "path"
        ],
        "properties": {
          "from": {
            "type": "string",
            "description": "JSON-Pointer value [RFC6901](https://tools.ietf.org/html/rfc6901) that references a location\nto copy value from."
          },
          "path": {
            "type": "string",
            "description": "JSON-Pointer value [RFC6901](https://tools.ietf.org/html/rfc6901) that references a location\nwithin the target document where the operation is performed."
          }
        }
      },
      "CountsResponse": {
        "type": "object",
        "required": [
          "total_objects",
          "total_classes",
          "total_collections",
          "objects_per_class"
        ],
        "properties": {
          "objects_per_class": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ObjectsByClass"
            }
          },
          "total_classes": {
            "type": "integer",
            "format": "int64"
          },
          "total_collections": {
            "type": "integer",
            "format": "int64"
          },
          "total_objects": {
            "type": "integer",
            "format": "int64"
          }
        },
        "example": {
          "objects_per_class": [
            {
              "count": 6,
              "hubuum_class_id": 1
            }
          ],
          "total_classes": 7,
          "total_collections": 3,
          "total_objects": 42
        }
      },
      "CredentialApprovalRecord": {
        "type": "object",
        "required": [
          "id",
          "actor_id",
          "token_id",
          "operation",
          "authenticated_at",
          "expires_at"
        ],
        "properties": {
          "actor_id": {
            "$ref": "#/components/schemas/PrincipalID"
          },
          "authenticated_at": {
            "type": "string",
            "format": "date-time"
          },
          "consumed_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "invalidated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "operation": {
            "type": "string"
          },
          "restore_job_id": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RestoreJobID"
              },
              {
                "type": "null"
              }
            ]
          },
          "target_id": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PrincipalID"
              },
              {
                "type": "null"
              }
            ]
          },
          "token_id": {
            "$ref": "#/components/schemas/TokenID"
          }
        }
      },
      "CredentialApprovalRequest": {
        "type": "object",
        "required": [
          "password",
          "operation"
        ],
        "properties": {
          "operation": {
            "$ref": "#/components/schemas/CredentialOperation"
          },
          "password": {
            "type": "string",
            "description": "The acting human's current password. Never retained or logged."
          }
        },
        "additionalProperties": false
      },
      "CredentialApprovalResponse": {
        "type": "object",
        "required": [
          "approval",
          "record"
        ],
        "properties": {
          "approval": {
            "$ref": "#/components/schemas/CredentialApprovalSecret"
          },
          "record": {
            "$ref": "#/components/schemas/CredentialApprovalRecord"
          },
          "token_expires_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Use this exact value as token.expires_at in the subsequent creation/renewal request.\nResolved token expiry at database microsecond precision. Copy this value\ninto the mint/renew request, including when approval used an explicit expiry."
          }
        }
      },
      "CredentialApprovalSecret": {
        "type": "string",
        "pattern": "^hca1\\.[0-9a-f]{64}$"
      },
      "CredentialOperation": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "import",
              "kind"
            ],
            "properties": {
              "import": {
                "$ref": "#/components/schemas/ImportRequest"
              },
              "kind": {
                "type": "string",
                "enum": [
                  "import_credentials"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "restore_id",
              "confirmation",
              "kind"
            ],
            "properties": {
              "confirmation": {
                "$ref": "#/components/schemas/RestoreConfirmRequest"
              },
              "kind": {
                "type": "string",
                "enum": [
                  "confirm_restore"
                ]
              },
              "restore_id": {
                "$ref": "#/components/schemas/RestoreJobID"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "principal_id",
              "token",
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "create_token"
                ]
              },
              "principal_id": {
                "$ref": "#/components/schemas/PrincipalID"
              },
              "token": {
                "$ref": "#/components/schemas/NewTokenRequest"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "principal_id",
              "token_id",
              "token",
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "renew_token"
                ]
              },
              "principal_id": {
                "$ref": "#/components/schemas/PrincipalID"
              },
              "token": {
                "$ref": "#/components/schemas/RenewTokenRequest"
              },
              "token_id": {
                "$ref": "#/components/schemas/TokenID"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "user",
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "create_user"
                ]
              },
              "user": {
                "$ref": "#/components/schemas/NewUser"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "user_id",
              "user",
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "update_user"
                ]
              },
              "user": {
                "$ref": "#/components/schemas/UpdateUser"
              },
              "user_id": {
                "$ref": "#/components/schemas/UserID"
              }
            }
          }
        ]
      },
      "CurrentTokenMetadata": {
        "type": "object",
        "description": "Public metadata for the token authenticating the current request.",
        "required": [
          "id",
          "issued",
          "revision"
        ],
        "properties": {
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "expires_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "id": {
            "$ref": "#/components/schemas/TokenID"
          },
          "issued": {
            "type": "string",
            "format": "date-time"
          },
          "last_used_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "scope": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/TokenScopeDetails",
                "description": "Exact permission and resource boundaries. `None` means that this token\nis unscoped."
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "DatabaseConfig": {
        "type": "object",
        "required": [
          "backend",
          "url",
          "pool_size",
          "pool_acquire_timeout_ms",
          "statement_timeout_ms",
          "role_mode",
          "privilege_mode",
          "owner_role",
          "migrator_role",
          "runtime_role"
        ],
        "properties": {
          "backend": {
            "type": "string",
            "description": "Complete storage backend selected by the application composition root."
          },
          "migrator_role": {
            "type": "string"
          },
          "owner_role": {
            "type": "string"
          },
          "pool_acquire_timeout_ms": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "pool_size": {
            "type": "integer",
            "format": "int32",
            "minimum": 0
          },
          "privilege_mode": {
            "type": "string"
          },
          "role_mode": {
            "type": "string"
          },
          "runtime_role": {
            "type": "string"
          },
          "statement_timeout_ms": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "url": {
            "$ref": "#/components/schemas/SecretStatus"
          }
        }
      },
      "DbStateResponse": {
        "type": "object",
        "required": [
          "max_connections",
          "total_connections",
          "available_connections",
          "idle_connections",
          "in_use_connections",
          "pending_acquisitions",
          "acquisitions_started",
          "acquisitions_direct",
          "acquisitions_waited",
          "acquisitions_timed_out",
          "acquisition_wait_time_ms",
          "connections_created",
          "connections_closed_broken",
          "connections_closed_invalid",
          "connections_closed_max_lifetime",
          "connections_closed_idle_timeout",
          "active_connections",
          "db_size"
        ],
        "properties": {
          "acquisition_wait_time_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Cumulative time spent waiting for connections, in milliseconds.",
            "minimum": 0
          },
          "acquisitions_direct": {
            "type": "integer",
            "format": "int64",
            "description": "Cumulative acquisitions completed without waiting.",
            "minimum": 0
          },
          "acquisitions_started": {
            "type": "integer",
            "format": "int64",
            "description": "Cumulative connection acquisitions started.",
            "minimum": 0
          },
          "acquisitions_timed_out": {
            "type": "integer",
            "format": "int64",
            "description": "Cumulative acquisitions that exceeded the acquisition timeout.",
            "minimum": 0
          },
          "acquisitions_waited": {
            "type": "integer",
            "format": "int64",
            "description": "Cumulative acquisitions that waited for a connection.",
            "minimum": 0
          },
          "active_connections": {
            "type": "integer",
            "format": "int64",
            "description": "Active PostgreSQL sessions reported by `pg_stat_activity`."
          },
          "available_connections": {
            "type": "integer",
            "format": "int32",
            "description": "Remaining capacity: idle connections plus capacity to create connections.",
            "minimum": 0
          },
          "connections_closed_broken": {
            "type": "integer",
            "format": "int64",
            "description": "Cumulative connections discarded because they were broken.",
            "minimum": 0
          },
          "connections_closed_idle_timeout": {
            "type": "integer",
            "format": "int64",
            "description": "Cumulative connections closed after reaching the idle timeout.",
            "minimum": 0
          },
          "connections_closed_invalid": {
            "type": "integer",
            "format": "int64",
            "description": "Cumulative connections discarded after checkout validation failed.",
            "minimum": 0
          },
          "connections_closed_max_lifetime": {
            "type": "integer",
            "format": "int64",
            "description": "Cumulative connections closed after reaching their maximum lifetime.",
            "minimum": 0
          },
          "connections_created": {
            "type": "integer",
            "format": "int64",
            "description": "Cumulative connections established by the context.",
            "minimum": 0
          },
          "db_size": {
            "type": "integer",
            "format": "int64",
            "description": "Current database size in bytes."
          },
          "idle_connections": {
            "type": "integer",
            "format": "int32",
            "description": "Established connections currently waiting in the context.",
            "minimum": 0
          },
          "in_use_connections": {
            "type": "integer",
            "format": "int32",
            "description": "Established connections currently checked out of the context.",
            "minimum": 0
          },
          "last_vacuum_time": {
            "type": [
              "string",
              "null"
            ],
            "description": "Most recent vacuum timestamp among user tables."
          },
          "max_connections": {
            "type": "integer",
            "format": "int32",
            "description": "Configured maximum number of connections in this process-local context.",
            "minimum": 0
          },
          "pending_acquisitions": {
            "type": "integer",
            "format": "int64",
            "description": "Connection acquisitions currently waiting to complete.",
            "minimum": 0
          },
          "total_connections": {
            "type": "integer",
            "format": "int32",
            "description": "Connections currently managed by this process-local context.",
            "minimum": 0
          }
        }
      },
      "EffectiveGroupPermission": {
        "type": "object",
        "required": [
          "target_collection",
          "source_collection",
          "depth",
          "inherited",
          "group",
          "permission"
        ],
        "properties": {
          "depth": {
            "type": "integer",
            "format": "int32"
          },
          "group": {
            "$ref": "#/components/schemas/Group"
          },
          "inherited": {
            "type": "boolean"
          },
          "permission": {
            "$ref": "#/components/schemas/Permission"
          },
          "source_collection": {
            "$ref": "#/components/schemas/Collection"
          },
          "target_collection": {
            "$ref": "#/components/schemas/Collection"
          }
        }
      },
      "EventConfig": {
        "type": "object",
        "required": [
          "fanout_workers",
          "fanout_batch_size",
          "fanout_poll_interval_ms",
          "fanout_lock_timeout_ms",
          "delivery_workers",
          "delivery_batch_size",
          "delivery_poll_interval_ms",
          "delivery_lock_timeout_ms",
          "delivery_transport_timeout_ms",
          "delivery_retry_backoff_base_ms",
          "delivery_retry_backoff_max_ms",
          "delivery_max_attempts",
          "retention_purge_enabled",
          "retention_days",
          "delivery_retention_days",
          "retention_purge_interval_seconds",
          "retention_purge_batch_size",
          "retention_file_archive_enabled",
          "retention_archive_path_configured"
        ],
        "properties": {
          "delivery_batch_size": {
            "type": "integer",
            "minimum": 0
          },
          "delivery_lock_timeout_ms": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "delivery_max_attempts": {
            "type": "integer",
            "format": "int32"
          },
          "delivery_poll_interval_ms": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "delivery_retention_days": {
            "type": "integer",
            "format": "int64"
          },
          "delivery_retry_backoff_base_ms": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "delivery_retry_backoff_max_ms": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "delivery_transport_timeout_ms": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "delivery_workers": {
            "type": "integer",
            "minimum": 0
          },
          "fanout_batch_size": {
            "type": "integer",
            "minimum": 0
          },
          "fanout_lock_timeout_ms": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "fanout_poll_interval_ms": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "fanout_workers": {
            "type": "integer",
            "minimum": 0
          },
          "retention_archive_path_configured": {
            "type": "boolean"
          },
          "retention_days": {
            "type": "integer",
            "format": "int64"
          },
          "retention_file_archive_enabled": {
            "type": "boolean"
          },
          "retention_purge_batch_size": {
            "type": "integer",
            "minimum": 0
          },
          "retention_purge_enabled": {
            "type": "boolean"
          },
          "retention_purge_interval_seconds": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          }
        }
      },
      "EventDeliveryHealthResponse": {
        "type": "object",
        "required": [
          "fanout",
          "delivery",
          "sinks",
          "subscriptions"
        ],
        "properties": {
          "delivery": {
            "$ref": "#/components/schemas/EventDeliveryQueueHealth"
          },
          "fanout": {
            "$ref": "#/components/schemas/EventFanoutHealth"
          },
          "sinks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EventSinkDeliveryHealth"
            }
          },
          "subscriptions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EventSubscriptionDeliveryHealth"
            }
          }
        }
      },
      "EventDeliveryPolicy": {
        "type": "object",
        "description": "An optional minimum interval between admissions to one sink.",
        "properties": {
          "min_interval_ms": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "maximum": 86400000,
            "minimum": 1
          }
        }
      },
      "EventDeliveryPurpose": {
        "type": "string",
        "enum": [
          "event",
          "test"
        ]
      },
      "EventDeliveryQueueHealth": {
        "type": "object",
        "required": [
          "counts",
          "stale_claims",
          "worker"
        ],
        "properties": {
          "counts": {
            "$ref": "#/components/schemas/EventDeliveryStatusCounts"
          },
          "oldest_due_age_seconds": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "stale_claims": {
            "type": "integer",
            "format": "int64"
          },
          "worker": {
            "$ref": "#/components/schemas/EventWorkerHealth"
          }
        }
      },
      "EventDeliveryResponse": {
        "type": "object",
        "required": [
          "id",
          "event_id",
          "subscription_id",
          "status",
          "attempts",
          "next_attempt_at",
          "created_at",
          "updated_at",
          "purpose"
        ],
        "properties": {
          "attempts": {
            "type": "integer",
            "format": "int32"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "deferred_reason": {
            "type": [
              "string",
              "null"
            ]
          },
          "event_id": {
            "type": "integer",
            "format": "int64"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "last_error": {
            "type": [
              "string",
              "null"
            ]
          },
          "locked_until": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "next_attempt_at": {
            "type": "string",
            "format": "date-time"
          },
          "purpose": {
            "$ref": "#/components/schemas/EventDeliveryPurpose"
          },
          "status": {
            "type": "string"
          },
          "subscription_id": {
            "type": "integer",
            "format": "int32"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "EventDeliveryStatus": {
        "type": "string",
        "description": "Durable lifecycle state for one event delivery.\n\nThe textual representation is shared by storage adapters, API models, and\noperational reporting so each layer cannot silently invent different\npersisted status values.",
        "enum": [
          "pending",
          "in_flight",
          "succeeded",
          "failed",
          "dead"
        ]
      },
      "EventDeliveryStatusCounts": {
        "type": "object",
        "required": [
          "total",
          "pending",
          "in_flight",
          "succeeded",
          "failed",
          "dead",
          "retryable"
        ],
        "properties": {
          "dead": {
            "type": "integer",
            "format": "int64"
          },
          "failed": {
            "type": "integer",
            "format": "int64"
          },
          "in_flight": {
            "type": "integer",
            "format": "int64"
          },
          "pending": {
            "type": "integer",
            "format": "int64"
          },
          "retryable": {
            "type": "integer",
            "format": "int64"
          },
          "succeeded": {
            "type": "integer",
            "format": "int64"
          },
          "total": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "EventDeliveryUpdateResponse": {
        "type": "object",
        "required": [
          "delivery"
        ],
        "properties": {
          "delivery": {
            "$ref": "#/components/schemas/EventDeliveryResponse"
          }
        }
      },
      "EventEntityId": {
        "type": "integer",
        "format": "int32",
        "description": "Validated positive event entity id.",
        "minimum": 1
      },
      "EventFanoutHealth": {
        "type": "object",
        "required": [
          "pending_events",
          "in_flight_events",
          "stale_claims",
          "worker"
        ],
        "properties": {
          "in_flight_events": {
            "type": "integer",
            "format": "int64"
          },
          "oldest_pending_age_seconds": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "pending_events": {
            "type": "integer",
            "format": "int64"
          },
          "stale_claims": {
            "type": "integer",
            "format": "int64"
          },
          "worker": {
            "$ref": "#/components/schemas/EventWorkerHealth"
          }
        }
      },
      "EventNotificationPreview": {
        "type": "object",
        "required": [
          "sink_kind",
          "payload"
        ],
        "properties": {
          "payload": {},
          "sink_kind": {
            "$ref": "#/components/schemas/EventSinkKind"
          }
        }
      },
      "EventNotificationRequest": {
        "type": "object",
        "description": "Source for administrator preview and test requests.",
        "required": [
          "subscription_id",
          "event_id"
        ],
        "properties": {
          "event_id": {
            "type": "string",
            "format": "uuid"
          },
          "subscription_id": {
            "$ref": "#/components/schemas/EventSubscriptionID"
          }
        },
        "additionalProperties": false
      },
      "EventResponse": {
        "type": "object",
        "required": [
          "id",
          "event_id",
          "occurred_at",
          "entity_type",
          "action",
          "actor_kind",
          "provenance",
          "summary",
          "metadata",
          "schema_version"
        ],
        "properties": {
          "action": {
            "type": "string"
          },
          "actor_kind": {
            "type": "string"
          },
          "actor_user_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "after": {},
          "after_revision": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ResourceRevision"
              },
              {
                "type": "null"
              }
            ]
          },
          "before": {},
          "before_revision": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ResourceRevision"
              },
              {
                "type": "null"
              }
            ]
          },
          "collection_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "correlation_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "entity_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "entity_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "entity_type": {
            "type": "string"
          },
          "event_id": {
            "type": "string",
            "format": "uuid"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "metadata": {},
          "occurred_at": {
            "type": "string",
            "format": "date-time"
          },
          "provenance": {
            "$ref": "#/components/schemas/Provenance"
          },
          "request_id": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "schema_version": {
            "type": "integer",
            "format": "int32"
          },
          "summary": {
            "type": "string"
          }
        }
      },
      "EventSink": {
        "type": "object",
        "required": [
          "id",
          "name",
          "kind",
          "config",
          "enabled",
          "created_at",
          "updated_at",
          "revision"
        ],
        "properties": {
          "config": {
            "description": "Transport settings. Webhooks support body_template, url_secret_ref, and response rules."
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "delivery_policy": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/EventDeliveryPolicy"
              },
              {
                "type": "null"
              }
            ]
          },
          "enabled": {
            "type": "boolean"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "kind": {
            "$ref": "#/components/schemas/EventSinkKind"
          },
          "name": {
            "type": "string"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "secret_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "EventSinkDeliveryHealth": {
        "type": "object",
        "required": [
          "sink_id",
          "sink_name",
          "sink_kind",
          "sink_enabled",
          "subscription_count",
          "counts",
          "stale_claims"
        ],
        "properties": {
          "counts": {
            "$ref": "#/components/schemas/EventDeliveryStatusCounts"
          },
          "oldest_due_age_seconds": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "sink_enabled": {
            "type": "boolean"
          },
          "sink_id": {
            "type": "integer",
            "format": "int32"
          },
          "sink_kind": {
            "type": "string"
          },
          "sink_name": {
            "type": "string"
          },
          "stale_claims": {
            "type": "integer",
            "format": "int64"
          },
          "subscription_count": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "EventSinkID": {
        "type": "integer",
        "format": "int32",
        "description": "Validated positive event sink id.",
        "minimum": 1
      },
      "EventSinkKey": {
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string"
          }
        }
      },
      "EventSinkKind": {
        "type": "string",
        "enum": [
          "webhook",
          "amqp",
          "valkey_stream",
          "email"
        ]
      },
      "EventSubscription": {
        "type": "object",
        "required": [
          "id",
          "collection_id",
          "sink_id",
          "name",
          "description",
          "entity_types",
          "actions",
          "routing",
          "enabled",
          "created_at",
          "updated_at",
          "revision"
        ],
        "properties": {
          "actions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "collection_id": {
            "type": "integer",
            "format": "int32"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "description": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "entity_types": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "filter": {
            "$ref": "#/components/schemas/EventSubscriptionFilter"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "routing": {},
          "sink_id": {
            "type": "integer",
            "format": "int32"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "EventSubscriptionDeliveryHealth": {
        "type": "object",
        "required": [
          "subscription_id",
          "subscription_name",
          "sink_id",
          "sink_name",
          "sink_kind",
          "subscription_enabled",
          "sink_enabled",
          "counts",
          "stale_claims"
        ],
        "properties": {
          "collection_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "counts": {
            "$ref": "#/components/schemas/EventDeliveryStatusCounts"
          },
          "oldest_due_age_seconds": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "sink_enabled": {
            "type": "boolean"
          },
          "sink_id": {
            "type": "integer",
            "format": "int32"
          },
          "sink_kind": {
            "type": "string"
          },
          "sink_name": {
            "type": "string"
          },
          "stale_claims": {
            "type": "integer",
            "format": "int64"
          },
          "subscription_enabled": {
            "type": "boolean"
          },
          "subscription_id": {
            "type": "integer",
            "format": "int32"
          },
          "subscription_name": {
            "type": "string"
          }
        }
      },
      "EventSubscriptionFilter": {
        "type": "object",
        "description": "Optional additional fan-out filter for an event subscription.\n\n`entity_types` and `actions` remain first-class subscription fields because\nthey drive catalog validation and coarse fan-out selection. This filter\nnarrows those matches by stable event-envelope fields. Empty or omitted\nfields match all events for that dimension.",
        "properties": {
          "actor_kinds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "actor_user_ids": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PrincipalID"
            }
          },
          "collection_ids": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CollectionID"
            }
          },
          "correlation_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "entity_ids": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EventEntityId"
            }
          },
          "entity_names": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "initiator_user_ids": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PrincipalID"
            }
          },
          "related_collection_ids": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CollectionID"
            }
          },
          "request_ids": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "task_kinds": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TaskKind"
            }
          }
        }
      },
      "EventSubscriptionID": {
        "type": "integer",
        "format": "int32",
        "description": "Validated positive event subscription id.",
        "minimum": 1
      },
      "EventWorkerHealth": {
        "type": "object",
        "required": [
          "workers_configured",
          "batch_size",
          "poll_interval_ms",
          "lock_timeout_ms",
          "wakeups"
        ],
        "properties": {
          "batch_size": {
            "type": "integer",
            "minimum": 0
          },
          "lock_timeout_ms": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "poll_interval_ms": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "wakeups": {
            "$ref": "#/components/schemas/EventWorkerWakeupStats"
          },
          "workers_configured": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "EventWorkerWakeupStats": {
        "type": "object",
        "required": [
          "notifications_sent",
          "notification_wakeups",
          "poll_wakeups"
        ],
        "properties": {
          "notification_wakeups": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "notifications_sent": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "poll_wakeups": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          }
        }
      },
      "ExportConfig": {
        "type": "object",
        "required": [
          "output_retention_hours",
          "output_cleanup_interval_seconds",
          "template_recursion_limit",
          "template_fuel",
          "template_max_objects",
          "max_output_bytes",
          "stage_timeout_ms",
          "storage_query_budget_ms",
          "database_statement_timeout_ms"
        ],
        "properties": {
          "database_statement_timeout_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Deprecated compatibility alias for `storage_query_budget_ms`.\n\nThe value is identical and remains present so administrator clients do\nnot break while migrating away from the PostgreSQL-shaped field name.",
            "minimum": 0
          },
          "max_output_bytes": {
            "type": "integer",
            "minimum": 0
          },
          "output_cleanup_interval_seconds": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "output_retention_hours": {
            "type": "integer",
            "format": "int64"
          },
          "stage_timeout_ms": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "storage_query_budget_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Backend-neutral budget applied to each export storage read stage.",
            "minimum": 0
          },
          "template_fuel": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "template_max_objects": {
            "type": "integer",
            "minimum": 0
          },
          "template_recursion_limit": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "ExportContentType": {
        "type": "string",
        "enum": [
          "application/json",
          "text/plain",
          "text/html",
          "text/csv"
        ]
      },
      "ExportInclude": {
        "type": "object",
        "properties": {
          "related_objects": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "$ref": "#/components/schemas/ExportIncludeRelatedObject"
            },
            "propertyNames": {
              "type": "string"
            }
          }
        }
      },
      "ExportIncludeRelatedDirection": {
        "type": "string",
        "enum": [
          "any",
          "outgoing",
          "incoming"
        ]
      },
      "ExportIncludeRelatedObject": {
        "type": "object",
        "required": [
          "class_id"
        ],
        "properties": {
          "class_id": {
            "type": "integer",
            "format": "int32"
          },
          "class_relation_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "direction": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportIncludeRelatedDirection"
              },
              {
                "type": "null"
              }
            ]
          },
          "limit": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "max_depth": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "sort": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportIncludeRelatedSort"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "ExportIncludeRelatedSort": {
        "type": "string",
        "enum": [
          "path",
          "name",
          "created_at"
        ]
      },
      "ExportJsonResponse": {
        "type": "object",
        "required": [
          "items",
          "meta",
          "warnings"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {}
          },
          "meta": {
            "$ref": "#/components/schemas/ExportMeta"
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExportWarning"
            }
          }
        },
        "example": {
          "items": [
            {
              "id": 1,
              "name": "srv-01"
            },
            {
              "id": 2,
              "name": "srv-02"
            }
          ],
          "meta": {
            "content_type": "application/json",
            "count": 2,
            "scope": {
              "class_id": 42,
              "kind": "objects_in_class",
              "object_id": null
            },
            "truncated": false
          },
          "warnings": []
        }
      },
      "ExportLimits": {
        "type": "object",
        "properties": {
          "max_items": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0
          },
          "max_output_bytes": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0
          }
        },
        "example": {
          "max_items": 100,
          "max_output_bytes": 262144
        }
      },
      "ExportMeta": {
        "type": "object",
        "required": [
          "count",
          "truncated",
          "scope",
          "content_type"
        ],
        "properties": {
          "content_type": {
            "$ref": "#/components/schemas/ExportContentType"
          },
          "count": {
            "type": "integer",
            "minimum": 0
          },
          "scope": {
            "$ref": "#/components/schemas/ExportScope"
          },
          "truncated": {
            "type": "boolean"
          }
        },
        "example": {
          "content_type": "application/json",
          "count": 2,
          "scope": {
            "class_id": 42,
            "kind": "objects_in_class",
            "object_id": null
          },
          "truncated": false
        }
      },
      "ExportMissingDataPolicy": {
        "type": "string",
        "enum": [
          "strict",
          "null",
          "omit"
        ]
      },
      "ExportRelationContext": {
        "type": "object",
        "properties": {
          "depth": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "example": {
          "depth": 2
        }
      },
      "ExportRequest": {
        "type": "object",
        "required": [
          "scope"
        ],
        "properties": {
          "include": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportInclude"
              },
              {
                "type": "null"
              }
            ]
          },
          "limits": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportLimits"
              },
              {
                "type": "null"
              }
            ]
          },
          "missing_data_policy": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportMissingDataPolicy"
              },
              {
                "type": "null"
              }
            ]
          },
          "query": {
            "type": [
              "string",
              "null"
            ]
          },
          "relation_context": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportRelationContext"
              },
              {
                "type": "null"
              }
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/ExportScope"
          }
        },
        "example": {
          "include": null,
          "limits": {
            "max_items": 100,
            "max_output_bytes": 262144
          },
          "missing_data_policy": "strict",
          "query": "name__icontains=server&sort=name",
          "relation_context": null,
          "scope": {
            "class_id": 42,
            "kind": "objects_in_class",
            "object_id": null
          }
        }
      },
      "ExportScope": {
        "type": "object",
        "required": [
          "kind"
        ],
        "properties": {
          "class_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 1
          },
          "kind": {
            "$ref": "#/components/schemas/ExportScopeKind"
          },
          "object_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 1
          }
        },
        "example": {
          "class_id": 42,
          "kind": "objects_in_class",
          "object_id": null
        }
      },
      "ExportScopeKind": {
        "type": "string",
        "enum": [
          "collections",
          "classes",
          "objects_in_class",
          "class_relations",
          "object_relations",
          "related_objects"
        ]
      },
      "ExportTaskDetails": {
        "type": "object",
        "required": [
          "output_url",
          "output_available",
          "output_expired"
        ],
        "properties": {
          "hydration_duration_ms": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "output_available": {
            "type": "boolean"
          },
          "output_content_type": {
            "type": [
              "string",
              "null"
            ]
          },
          "output_expired": {
            "type": "boolean",
            "description": "True when output was produced but has since passed its retention window. Distinguishes an\nexpired export from one that was never generated (both have `output_available = false`)."
          },
          "output_expires_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "output_url": {
            "type": "string"
          },
          "query_duration_ms": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "render_duration_ms": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "retained": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RetainedExportDetails"
              },
              {
                "type": "null"
              }
            ]
          },
          "template_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "total_duration_ms": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "truncated": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "warning_count": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          }
        }
      },
      "ExportTemplate": {
        "type": "object",
        "required": [
          "id",
          "collection_id",
          "name",
          "description",
          "content_type",
          "template",
          "kind",
          "created_at",
          "updated_at",
          "revision"
        ],
        "properties": {
          "class_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "collection_id": {
            "type": "integer",
            "format": "int32"
          },
          "content_type": {
            "$ref": "#/components/schemas/ExportContentType"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "default_limits": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportLimits"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_missing_data_policy": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportMissingDataPolicy"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_query": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "type": "string"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "include": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportInclude"
              },
              {
                "type": "null"
              }
            ]
          },
          "kind": {
            "$ref": "#/components/schemas/ExportTemplateKind"
          },
          "name": {
            "type": "string"
          },
          "relation_context": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportRelationContext"
              },
              {
                "type": "null"
              }
            ]
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "scope_kind": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportScopeKind"
              },
              {
                "type": "null"
              }
            ]
          },
          "template": {
            "type": "string"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "example": {
          "class_id": 42,
          "collection_id": 7,
          "content_type": "text/plain",
          "created_at": "2026-03-06T12:00:00",
          "default_limits": {
            "max_items": 100,
            "max_output_bytes": 262144
          },
          "default_missing_data_policy": "strict",
          "default_query": "sort=name",
          "description": "Template for owner listing",
          "id": 1,
          "include": null,
          "kind": "export",
          "name": "owner-export",
          "relation_context": null,
          "revision": 1,
          "scope_kind": "objects_in_class",
          "template": "{% for item in items %}{{ item.name }}={{ item.data.owner }}\n{% endfor %}",
          "updated_at": "2026-03-06T12:00:00"
        }
      },
      "ExportTemplateHistory": {
        "type": "object",
        "required": [
          "id",
          "collection_id",
          "name",
          "description",
          "content_type",
          "template",
          "kind",
          "created_at",
          "updated_at",
          "op",
          "valid_from",
          "history_id",
          "revision"
        ],
        "properties": {
          "actor_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "actor_kind": {
            "type": [
              "string",
              "null"
            ]
          },
          "class_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "collection_id": {
            "type": "integer",
            "format": "int32"
          },
          "content_type": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "default_limits": {},
          "default_missing_data_policy": {
            "type": [
              "string",
              "null"
            ]
          },
          "default_query": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "type": "string"
          },
          "history_id": {
            "type": "integer",
            "format": "int64"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "include": {},
          "initiator_user_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "kind": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "op": {
            "type": "string"
          },
          "relation_context": {},
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "scope_kind": {
            "type": [
              "string",
              "null"
            ]
          },
          "task_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "template": {
            "type": "string"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "valid_from": {
            "type": "string",
            "format": "date-time"
          },
          "valid_to": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "ExportTemplateID": {
        "type": "integer",
        "format": "int32",
        "description": "Validated positive export template id.",
        "minimum": 1
      },
      "ExportTemplateKind": {
        "type": "string",
        "enum": [
          "export",
          "fragment"
        ]
      },
      "ExportTemplateRunRequest": {
        "type": "object",
        "properties": {
          "limits": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportLimits"
              },
              {
                "type": "null"
              }
            ]
          },
          "missing_data_policy": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportMissingDataPolicy"
              },
              {
                "type": "null"
              }
            ]
          },
          "object_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "query": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "additionalProperties": false,
        "example": {
          "limits": {
            "max_items": 100,
            "max_output_bytes": 262144
          },
          "missing_data_policy": "strict",
          "object_id": null,
          "query": "name__icontains=server&sort=name"
        }
      },
      "ExportWarning": {
        "type": "object",
        "required": [
          "code",
          "message"
        ],
        "properties": {
          "code": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "path": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "example": {
          "code": "missing_value",
          "message": "Template lookup failed",
          "path": "item.data.owner"
        }
      },
      "Group": {
        "type": "object",
        "required": [
          "id",
          "groupname",
          "description",
          "created_at",
          "updated_at",
          "identity_scope_id",
          "managed_by",
          "revision"
        ],
        "properties": {
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "description": {
            "type": "string"
          },
          "external_key": {
            "type": [
              "string",
              "null"
            ]
          },
          "groupname": {
            "type": "string"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "identity_scope_id": {
            "type": "integer",
            "format": "int32"
          },
          "last_sync_attempted_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "last_sync_success_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "managed_by": {
            "type": "string"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "GroupGrant": {
        "type": "object",
        "description": "One group's direct permission row contribution on a collection.",
        "required": [
          "group_id",
          "groupname",
          "permissions"
        ],
        "properties": {
          "group_id": {
            "type": "integer",
            "format": "int32"
          },
          "groupname": {
            "type": "string"
          },
          "permissions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Permissions"
            }
          }
        }
      },
      "GroupKey": {
        "type": "object",
        "required": [
          "groupname"
        ],
        "properties": {
          "groupname": {
            "type": "string"
          },
          "identity_scope": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "GroupPermission": {
        "type": "object",
        "required": [
          "group",
          "permission"
        ],
        "properties": {
          "group": {
            "$ref": "#/components/schemas/Group"
          },
          "permission": {
            "$ref": "#/components/schemas/Permission"
          }
        }
      },
      "GroupPointResponse": {
        "type": "object",
        "description": "Canonical group representation covered completely by the group revision.\nDirectory synchronization timestamps remain available in list responses,\nbut are intentionally excluded here because they are operational state and\ndo not advance the authoritative revision.",
        "required": [
          "id",
          "identity_scope",
          "groupname",
          "description",
          "managed_by",
          "created_at",
          "updated_at",
          "revision"
        ],
        "properties": {
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "description": {
            "type": "string"
          },
          "external_key": {
            "type": [
              "string",
              "null"
            ]
          },
          "groupname": {
            "type": "string"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "identity_scope": {
            "type": "string"
          },
          "managed_by": {
            "type": "string"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "GroupResponse": {
        "type": "object",
        "required": [
          "id",
          "identity_scope",
          "groupname",
          "description",
          "managed_by",
          "created_at",
          "updated_at",
          "revision"
        ],
        "properties": {
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "description": {
            "type": "string"
          },
          "external_key": {
            "type": [
              "string",
              "null"
            ]
          },
          "groupname": {
            "type": "string"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "identity_scope": {
            "type": "string"
          },
          "last_sync_attempted_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "last_sync_success_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "managed_by": {
            "type": "string"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "HistoryResponse_CollectionHistory": {
        "allOf": [
          {
            "type": "object",
            "required": [
              "id",
              "name",
              "description",
              "created_at",
              "updated_at",
              "op",
              "valid_from",
              "history_id",
              "revision"
            ],
            "properties": {
              "actor_id": {
                "type": [
                  "integer",
                  "null"
                ],
                "format": "int32"
              },
              "actor_kind": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "created_at": {
                "type": "string",
                "format": "date-time"
              },
              "description": {
                "type": "string"
              },
              "history_id": {
                "type": "integer",
                "format": "int64"
              },
              "id": {
                "type": "integer",
                "format": "int32"
              },
              "initiator_user_id": {
                "type": [
                  "integer",
                  "null"
                ],
                "format": "int32"
              },
              "name": {
                "type": "string"
              },
              "op": {
                "type": "string"
              },
              "parent_collection_id": {
                "type": [
                  "integer",
                  "null"
                ],
                "format": "int32"
              },
              "revision": {
                "$ref": "#/components/schemas/ResourceRevision"
              },
              "task_id": {
                "type": [
                  "integer",
                  "null"
                ],
                "format": "int32"
              },
              "updated_at": {
                "type": "string",
                "format": "date-time"
              },
              "valid_from": {
                "type": "string",
                "format": "date-time"
              },
              "valid_to": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "provenance"
            ],
            "properties": {
              "actor_username": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "provenance": {
                "$ref": "#/components/schemas/Provenance"
              }
            }
          }
        ],
        "description": "A serialized history row plus the resolved username of its actor (if any)."
      },
      "HistoryResponse_ExportTemplateHistory": {
        "allOf": [
          {
            "type": "object",
            "required": [
              "id",
              "collection_id",
              "name",
              "description",
              "content_type",
              "template",
              "kind",
              "created_at",
              "updated_at",
              "op",
              "valid_from",
              "history_id",
              "revision"
            ],
            "properties": {
              "actor_id": {
                "type": [
                  "integer",
                  "null"
                ],
                "format": "int32"
              },
              "actor_kind": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "class_id": {
                "type": [
                  "integer",
                  "null"
                ],
                "format": "int32"
              },
              "collection_id": {
                "type": "integer",
                "format": "int32"
              },
              "content_type": {
                "type": "string"
              },
              "created_at": {
                "type": "string",
                "format": "date-time"
              },
              "default_limits": {},
              "default_missing_data_policy": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "default_query": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "description": {
                "type": "string"
              },
              "history_id": {
                "type": "integer",
                "format": "int64"
              },
              "id": {
                "type": "integer",
                "format": "int32"
              },
              "include": {},
              "initiator_user_id": {
                "type": [
                  "integer",
                  "null"
                ],
                "format": "int32"
              },
              "kind": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "op": {
                "type": "string"
              },
              "relation_context": {},
              "revision": {
                "$ref": "#/components/schemas/ResourceRevision"
              },
              "scope_kind": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "task_id": {
                "type": [
                  "integer",
                  "null"
                ],
                "format": "int32"
              },
              "template": {
                "type": "string"
              },
              "updated_at": {
                "type": "string",
                "format": "date-time"
              },
              "valid_from": {
                "type": "string",
                "format": "date-time"
              },
              "valid_to": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "provenance"
            ],
            "properties": {
              "actor_username": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "provenance": {
                "$ref": "#/components/schemas/Provenance"
              }
            }
          }
        ],
        "description": "A serialized history row plus the resolved username of its actor (if any)."
      },
      "HistoryResponse_HubuumClassHistory": {
        "allOf": [
          {
            "type": "object",
            "required": [
              "id",
              "name",
              "collection_id",
              "validate_schema",
              "description",
              "created_at",
              "updated_at",
              "op",
              "valid_from",
              "history_id",
              "revision"
            ],
            "properties": {
              "actor_id": {
                "type": [
                  "integer",
                  "null"
                ],
                "format": "int32"
              },
              "actor_kind": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "collection_id": {
                "type": "integer",
                "format": "int32"
              },
              "created_at": {
                "type": "string",
                "format": "date-time"
              },
              "description": {
                "type": "string"
              },
              "history_id": {
                "type": "integer",
                "format": "int64"
              },
              "id": {
                "type": "integer",
                "format": "int32"
              },
              "initiator_user_id": {
                "type": [
                  "integer",
                  "null"
                ],
                "format": "int32"
              },
              "json_schema": {},
              "name": {
                "type": "string"
              },
              "op": {
                "type": "string"
              },
              "revision": {
                "$ref": "#/components/schemas/ResourceRevision"
              },
              "task_id": {
                "type": [
                  "integer",
                  "null"
                ],
                "format": "int32"
              },
              "updated_at": {
                "type": "string",
                "format": "date-time"
              },
              "valid_from": {
                "type": "string",
                "format": "date-time"
              },
              "valid_to": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              },
              "validate_schema": {
                "type": "boolean"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "provenance"
            ],
            "properties": {
              "actor_username": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "provenance": {
                "$ref": "#/components/schemas/Provenance"
              }
            }
          }
        ],
        "description": "A serialized history row plus the resolved username of its actor (if any)."
      },
      "HistoryResponse_HubuumObjectHistory": {
        "allOf": [
          {
            "type": "object",
            "required": [
              "id",
              "name",
              "collection_id",
              "hubuum_class_id",
              "data",
              "description",
              "created_at",
              "updated_at",
              "op",
              "valid_from",
              "history_id",
              "revision"
            ],
            "properties": {
              "actor_id": {
                "type": [
                  "integer",
                  "null"
                ],
                "format": "int32"
              },
              "actor_kind": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "collection_id": {
                "type": "integer",
                "format": "int32"
              },
              "created_at": {
                "type": "string",
                "format": "date-time"
              },
              "data": {},
              "description": {
                "type": "string"
              },
              "history_id": {
                "type": "integer",
                "format": "int64"
              },
              "hubuum_class_id": {
                "type": "integer",
                "format": "int32"
              },
              "id": {
                "type": "integer",
                "format": "int32"
              },
              "initiator_user_id": {
                "type": [
                  "integer",
                  "null"
                ],
                "format": "int32"
              },
              "name": {
                "type": "string"
              },
              "op": {
                "type": "string"
              },
              "revision": {
                "$ref": "#/components/schemas/ResourceRevision"
              },
              "task_id": {
                "type": [
                  "integer",
                  "null"
                ],
                "format": "int32"
              },
              "updated_at": {
                "type": "string",
                "format": "date-time"
              },
              "valid_from": {
                "type": "string",
                "format": "date-time"
              },
              "valid_to": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "provenance"
            ],
            "properties": {
              "actor_username": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "provenance": {
                "$ref": "#/components/schemas/Provenance"
              }
            }
          }
        ],
        "description": "A serialized history row plus the resolved username of its actor (if any)."
      },
      "HistoryResponse_RemoteTargetHistory": {
        "allOf": [
          {
            "type": "object",
            "required": [
              "id",
              "collection_id",
              "name",
              "description",
              "method",
              "url_template",
              "headers_template",
              "auth_config",
              "allowed_subject_types",
              "timeout_ms",
              "enabled",
              "created_at",
              "updated_at",
              "op",
              "valid_from",
              "history_id",
              "revision"
            ],
            "properties": {
              "actor_id": {
                "type": [
                  "integer",
                  "null"
                ],
                "format": "int32"
              },
              "actor_kind": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "allowed_subject_types": {},
              "auth_config": {},
              "body_template": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "class_id": {
                "type": [
                  "integer",
                  "null"
                ],
                "format": "int32"
              },
              "collection_id": {
                "type": "integer",
                "format": "int32"
              },
              "created_at": {
                "type": "string",
                "format": "date-time"
              },
              "description": {
                "type": "string"
              },
              "enabled": {
                "type": "boolean"
              },
              "headers_template": {},
              "history_id": {
                "type": "integer",
                "format": "int64"
              },
              "id": {
                "type": "integer",
                "format": "int32"
              },
              "initiator_user_id": {
                "type": [
                  "integer",
                  "null"
                ],
                "format": "int32"
              },
              "method": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "op": {
                "type": "string"
              },
              "revision": {
                "$ref": "#/components/schemas/ResourceRevision"
              },
              "task_id": {
                "type": [
                  "integer",
                  "null"
                ],
                "format": "int32"
              },
              "timeout_ms": {
                "type": "integer",
                "format": "int32"
              },
              "updated_at": {
                "type": "string",
                "format": "date-time"
              },
              "url_template": {
                "type": "string"
              },
              "valid_from": {
                "type": "string",
                "format": "date-time"
              },
              "valid_to": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "provenance"
            ],
            "properties": {
              "actor_username": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "provenance": {
                "$ref": "#/components/schemas/Provenance"
              }
            }
          }
        ],
        "description": "A serialized history row plus the resolved username of its actor (if any)."
      },
      "HubuumClass": {
        "type": "object",
        "required": [
          "id",
          "name",
          "collection_id",
          "validate_schema",
          "description",
          "created_at",
          "updated_at",
          "revision"
        ],
        "properties": {
          "collection_id": {
            "type": "integer",
            "format": "int32"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "json_schema": {},
          "name": {
            "type": "string"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "validate_schema": {
            "type": "boolean"
          }
        }
      },
      "HubuumClassExpanded": {
        "type": "object",
        "required": [
          "id",
          "name",
          "collection",
          "validate_schema",
          "description",
          "created_at",
          "updated_at",
          "revision"
        ],
        "properties": {
          "collection": {
            "$ref": "#/components/schemas/Collection"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "json_schema": {},
          "name": {
            "type": "string"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "validate_schema": {
            "type": "boolean"
          }
        }
      },
      "HubuumClassHistory": {
        "type": "object",
        "required": [
          "id",
          "name",
          "collection_id",
          "validate_schema",
          "description",
          "created_at",
          "updated_at",
          "op",
          "valid_from",
          "history_id",
          "revision"
        ],
        "properties": {
          "actor_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "actor_kind": {
            "type": [
              "string",
              "null"
            ]
          },
          "collection_id": {
            "type": "integer",
            "format": "int32"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "description": {
            "type": "string"
          },
          "history_id": {
            "type": "integer",
            "format": "int64"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "initiator_user_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "json_schema": {},
          "name": {
            "type": "string"
          },
          "op": {
            "type": "string"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "task_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "valid_from": {
            "type": "string",
            "format": "date-time"
          },
          "valid_to": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "validate_schema": {
            "type": "boolean"
          }
        }
      },
      "HubuumClassID": {
        "type": "integer",
        "format": "int32",
        "description": "Validated positive class id.",
        "minimum": 1
      },
      "HubuumClassRelation": {
        "type": "object",
        "required": [
          "id",
          "from_hubuum_class_id",
          "to_hubuum_class_id",
          "created_at",
          "updated_at",
          "revision"
        ],
        "properties": {
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "forward_template_alias": {
            "type": [
              "string",
              "null"
            ]
          },
          "from_hubuum_class_id": {
            "type": "integer",
            "format": "int32"
          },
          "from_max_relations": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ObjectRelationLimit",
                "description": "Maximum relations allowed for each object in `from_hubuum_class_id`.\n`None` means unlimited."
              },
              {
                "type": "null"
              }
            ]
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "reverse_template_alias": {
            "type": [
              "string",
              "null"
            ]
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "to_hubuum_class_id": {
            "type": "integer",
            "format": "int32"
          },
          "to_max_relations": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ObjectRelationLimit",
                "description": "Maximum relations allowed for each object in `to_hubuum_class_id`.\n`None` means unlimited."
              },
              {
                "type": "null"
              }
            ]
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "HubuumClassRelationID": {
        "type": "integer",
        "format": "int32",
        "description": "Validated positive class relation id.",
        "minimum": 1
      },
      "HubuumClassWithPath": {
        "type": "object",
        "required": [
          "id",
          "name",
          "collection_id",
          "validate_schema",
          "description",
          "created_at",
          "updated_at",
          "revision",
          "path"
        ],
        "properties": {
          "collection_id": {
            "type": "integer",
            "format": "int32"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "json_schema": {},
          "name": {
            "type": "string"
          },
          "path": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            }
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "validate_schema": {
            "type": "boolean"
          }
        }
      },
      "HubuumObject": {
        "type": "object",
        "required": [
          "id",
          "name",
          "collection_id",
          "hubuum_class_id",
          "data",
          "description",
          "created_at",
          "updated_at",
          "revision"
        ],
        "properties": {
          "collection_id": {
            "type": "integer",
            "format": "int32"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "data": {},
          "description": {
            "type": "string"
          },
          "hubuum_class_id": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "HubuumObjectComputedResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/HubuumObject"
          },
          {
            "type": "object",
            "required": [
              "computed"
            ],
            "properties": {
              "computed": {
                "$ref": "#/components/schemas/ComputedObjectScopesResponse"
              }
            }
          }
        ]
      },
      "HubuumObjectHistory": {
        "type": "object",
        "required": [
          "id",
          "name",
          "collection_id",
          "hubuum_class_id",
          "data",
          "description",
          "created_at",
          "updated_at",
          "op",
          "valid_from",
          "history_id",
          "revision"
        ],
        "properties": {
          "actor_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "actor_kind": {
            "type": [
              "string",
              "null"
            ]
          },
          "collection_id": {
            "type": "integer",
            "format": "int32"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "data": {},
          "description": {
            "type": "string"
          },
          "history_id": {
            "type": "integer",
            "format": "int64"
          },
          "hubuum_class_id": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "initiator_user_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "name": {
            "type": "string"
          },
          "op": {
            "type": "string"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "task_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "valid_from": {
            "type": "string",
            "format": "date-time"
          },
          "valid_to": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "HubuumObjectID": {
        "type": "integer",
        "format": "int32",
        "description": "Validated positive object id.",
        "minimum": 1
      },
      "HubuumObjectReadResponse": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/HubuumObject"
          },
          {
            "$ref": "#/components/schemas/HubuumObjectComputedResponse"
          }
        ],
        "description": "The two typed representations returned by object read endpoints."
      },
      "HubuumObjectRelation": {
        "type": "object",
        "required": [
          "id",
          "from_hubuum_object_id",
          "to_hubuum_object_id",
          "class_relation_id",
          "created_at",
          "updated_at",
          "revision"
        ],
        "properties": {
          "class_relation_id": {
            "type": "integer",
            "format": "int32"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "from_hubuum_object_id": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "to_hubuum_object_id": {
            "type": "integer",
            "format": "int32"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "HubuumObjectRelationID": {
        "type": "integer",
        "format": "int32",
        "description": "Validated positive object relation id.",
        "minimum": 1
      },
      "HubuumObjectWithPath": {
        "type": "object",
        "required": [
          "id",
          "name",
          "collection_id",
          "hubuum_class_id",
          "data",
          "description",
          "created_at",
          "updated_at",
          "revision",
          "path"
        ],
        "properties": {
          "collection_id": {
            "type": "integer",
            "format": "int32"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "data": {},
          "description": {
            "type": "string"
          },
          "hubuum_class_id": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string"
          },
          "path": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            }
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "IdentityScopeKey": {
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string"
          }
        }
      },
      "ImportAtomicity": {
        "type": "string",
        "enum": [
          "strict",
          "best_effort"
        ]
      },
      "ImportClassInput": {
        "type": "object",
        "required": [
          "name",
          "description"
        ],
        "properties": {
          "collection_key": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/CollectionKey"
              },
              {
                "type": "null"
              }
            ]
          },
          "collection_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "condition": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportWriteCondition"
              },
              {
                "type": "null"
              }
            ]
          },
          "description": {
            "type": "string"
          },
          "json_schema": {},
          "name": {
            "type": "string"
          },
          "ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "schema_activation": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportSchemaActivation",
                "description": "Explicit activation of an already staged revision, committed with this import item."
              },
              {
                "type": "null"
              }
            ]
          },
          "timestamps": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RestoreTimestamps"
              },
              {
                "type": "null"
              }
            ]
          },
          "validate_schema": {
            "type": [
              "boolean",
              "null"
            ]
          }
        }
      },
      "ImportClassRelationInput": {
        "type": "object",
        "properties": {
          "condition": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportWriteCondition"
              },
              {
                "type": "null"
              }
            ]
          },
          "forward_template_alias": {
            "type": [
              "string",
              "null"
            ]
          },
          "from_class_key": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ClassKey"
              },
              {
                "type": "null"
              }
            ]
          },
          "from_class_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "from_max_relations": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ObjectRelationLimit"
              },
              {
                "type": "null"
              }
            ]
          },
          "ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "reverse_template_alias": {
            "type": [
              "string",
              "null"
            ]
          },
          "timestamps": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RestoreTimestamps"
              },
              {
                "type": "null"
              }
            ]
          },
          "to_class_key": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ClassKey"
              },
              {
                "type": "null"
              }
            ]
          },
          "to_class_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "to_max_relations": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ObjectRelationLimit"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "ImportCollectionInput": {
        "type": "object",
        "required": [
          "name",
          "description"
        ],
        "properties": {
          "condition": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportWriteCondition"
              },
              {
                "type": "null"
              }
            ]
          },
          "description": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "parent_collection_key": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/CollectionKey"
              },
              {
                "type": "null"
              }
            ]
          },
          "parent_collection_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "timestamps": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RestoreTimestamps"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "ImportCollectionPermissionInput": {
        "type": "object",
        "required": [
          "group_key",
          "permissions"
        ],
        "properties": {
          "collection_key": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/CollectionKey"
              },
              {
                "type": "null"
              }
            ]
          },
          "collection_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "condition": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportWriteCondition"
              },
              {
                "type": "null"
              }
            ]
          },
          "group_key": {
            "$ref": "#/components/schemas/GroupKey"
          },
          "permissions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Permissions"
            }
          },
          "ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "replace_existing": {
            "type": [
              "boolean",
              "null"
            ]
          }
        }
      },
      "ImportCollisionPolicy": {
        "type": "string",
        "enum": [
          "abort",
          "overwrite"
        ]
      },
      "ImportComputedFieldInput": {
        "type": "object",
        "required": [
          "visibility",
          "key",
          "label",
          "operation",
          "result_type",
          "enabled"
        ],
        "properties": {
          "class_key": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ClassKey"
              },
              {
                "type": "null"
              }
            ]
          },
          "class_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "condition": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportWriteCondition"
              },
              {
                "type": "null"
              }
            ]
          },
          "description": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "key": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "operation": {
            "type": "object"
          },
          "owner_key": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PrincipalKey"
              },
              {
                "type": "null"
              }
            ]
          },
          "owner_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "result_type": {
            "$ref": "#/components/schemas/ComputedResultType"
          },
          "timestamps": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RestoreTimestamps"
              },
              {
                "type": "null"
              }
            ]
          },
          "visibility": {
            "$ref": "#/components/schemas/ImportComputedFieldVisibility"
          }
        }
      },
      "ImportComputedFieldVisibility": {
        "type": "string",
        "enum": [
          "shared",
          "personal"
        ]
      },
      "ImportEventSinkInput": {
        "type": "object",
        "required": [
          "name",
          "kind",
          "enabled"
        ],
        "properties": {
          "condition": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportWriteCondition"
              },
              {
                "type": "null"
              }
            ]
          },
          "config": {},
          "delivery_policy": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/EventDeliveryPolicy"
              },
              {
                "type": "null"
              }
            ]
          },
          "enabled": {
            "type": "boolean"
          },
          "kind": {
            "$ref": "#/components/schemas/EventSinkKind"
          },
          "name": {
            "type": "string"
          },
          "ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "secret_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "timestamps": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RestoreTimestamps"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "ImportEventSubscriptionInput": {
        "type": "object",
        "required": [
          "name",
          "description",
          "entity_types",
          "actions",
          "enabled"
        ],
        "properties": {
          "actions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "collection_key": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/CollectionKey"
              },
              {
                "type": "null"
              }
            ]
          },
          "collection_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "condition": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportWriteCondition"
              },
              {
                "type": "null"
              }
            ]
          },
          "description": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "entity_types": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "filter": {},
          "name": {
            "type": "string"
          },
          "ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "routing": {},
          "sink_key": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/EventSinkKey"
              },
              {
                "type": "null"
              }
            ]
          },
          "sink_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "timestamps": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RestoreTimestamps"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "ImportExportTemplateInput": {
        "type": "object",
        "required": [
          "name",
          "description",
          "content_type",
          "template",
          "kind"
        ],
        "properties": {
          "class_key": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ClassKey"
              },
              {
                "type": "null"
              }
            ]
          },
          "class_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "collection_key": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/CollectionKey"
              },
              {
                "type": "null"
              }
            ]
          },
          "collection_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "condition": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportWriteCondition"
              },
              {
                "type": "null"
              }
            ]
          },
          "content_type": {
            "$ref": "#/components/schemas/ExportContentType"
          },
          "default_limits": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportLimits"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_missing_data_policy": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportMissingDataPolicy"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_query": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "type": "string"
          },
          "include": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportInclude"
              },
              {
                "type": "null"
              }
            ]
          },
          "kind": {
            "$ref": "#/components/schemas/ExportTemplateKind"
          },
          "name": {
            "type": "string"
          },
          "ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "relation_context": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportRelationContext"
              },
              {
                "type": "null"
              }
            ]
          },
          "scope_kind": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportScopeKind"
              },
              {
                "type": "null"
              }
            ]
          },
          "template": {
            "type": "string"
          },
          "timestamps": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RestoreTimestamps"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "ImportGraph": {
        "type": "object",
        "properties": {
          "class_relations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ImportClassRelationInput"
            }
          },
          "classes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ImportClassInput"
            }
          },
          "collection_permissions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ImportCollectionPermissionInput"
            }
          },
          "collections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ImportCollectionInput"
            }
          },
          "computed_fields": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ImportComputedFieldInput"
            }
          },
          "event_sinks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ImportEventSinkInput"
            }
          },
          "event_subscriptions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ImportEventSubscriptionInput"
            }
          },
          "export_templates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ImportExportTemplateInput"
            }
          },
          "group_memberships": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ImportGroupMembershipInput"
            }
          },
          "groups": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ImportGroupInput"
            }
          },
          "identity_scopes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ImportIdentityScopeInput"
            }
          },
          "object_relations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ImportObjectRelationInput"
            }
          },
          "objects": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ImportObjectInput"
            }
          },
          "principals": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ImportPrincipalInput"
            }
          },
          "remote_targets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ImportRemoteTargetInput"
            }
          }
        }
      },
      "ImportGroupInput": {
        "type": "object",
        "required": [
          "groupname",
          "description",
          "managed_by"
        ],
        "properties": {
          "condition": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportWriteCondition"
              },
              {
                "type": "null"
              }
            ]
          },
          "description": {
            "type": "string"
          },
          "external_key": {
            "type": [
              "string",
              "null"
            ]
          },
          "groupname": {
            "type": "string"
          },
          "identity_scope_key": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/IdentityScopeKey"
              },
              {
                "type": "null"
              }
            ]
          },
          "identity_scope_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "last_sync_attempted_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "last_sync_success_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "managed_by": {
            "type": "string"
          },
          "ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "timestamps": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RestoreTimestamps"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "ImportGroupMembershipInput": {
        "type": "object",
        "properties": {
          "condition": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportWriteCondition"
              },
              {
                "type": "null"
              }
            ]
          },
          "group_key": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/GroupKey"
              },
              {
                "type": "null"
              }
            ]
          },
          "group_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "principal_key": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PrincipalKey"
              },
              {
                "type": "null"
              }
            ]
          },
          "principal_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ImportMembershipSourceInput"
            }
          },
          "timestamps": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RestoreTimestamps"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "ImportIdentityScopeInput": {
        "type": "object",
        "required": [
          "name",
          "provider_kind"
        ],
        "properties": {
          "condition": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportWriteCondition"
              },
              {
                "type": "null"
              }
            ]
          },
          "name": {
            "type": "string"
          },
          "provider_kind": {
            "type": "string"
          },
          "ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "timestamps": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RestoreTimestamps"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "ImportMembershipSourceInput": {
        "type": "object",
        "required": [
          "source",
          "source_key"
        ],
        "properties": {
          "source": {
            "type": "string"
          },
          "source_key": {
            "type": "string"
          },
          "source_scope_key": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/IdentityScopeKey"
              },
              {
                "type": "null"
              }
            ]
          },
          "source_scope_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "timestamps": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RestoreTimestamps"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "ImportMode": {
        "type": "object",
        "properties": {
          "atomicity": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportAtomicity"
              },
              {
                "type": "null"
              }
            ]
          },
          "collision_policy": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportCollisionPolicy"
              },
              {
                "type": "null"
              }
            ]
          },
          "permission_policy": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportPermissionPolicy"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "ImportObjectInput": {
        "type": "object",
        "required": [
          "name",
          "description",
          "data"
        ],
        "properties": {
          "class_key": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ClassKey"
              },
              {
                "type": "null"
              }
            ]
          },
          "class_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "condition": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportWriteCondition"
              },
              {
                "type": "null"
              }
            ]
          },
          "data": {},
          "description": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "timestamps": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RestoreTimestamps"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "ImportObjectRelationInput": {
        "type": "object",
        "properties": {
          "condition": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportWriteCondition"
              },
              {
                "type": "null"
              }
            ]
          },
          "from_object_key": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ObjectKey"
              },
              {
                "type": "null"
              }
            ]
          },
          "from_object_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "timestamps": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RestoreTimestamps"
              },
              {
                "type": "null"
              }
            ]
          },
          "to_object_key": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ObjectKey"
              },
              {
                "type": "null"
              }
            ]
          },
          "to_object_ref": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "ImportPermissionPolicy": {
        "type": "string",
        "enum": [
          "abort",
          "continue"
        ]
      },
      "ImportPrincipalInput": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ImportPrincipalSubtype"
          },
          {
            "type": "object",
            "required": [
              "name",
              "provider_managed"
            ],
            "properties": {
              "condition": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/ImportWriteCondition"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "external_subject": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "identity_scope_key": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/IdentityScopeKey"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "identity_scope_ref": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "last_sync_attempted_at": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              },
              "last_sync_success_at": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              },
              "name": {
                "type": "string"
              },
              "provider_managed": {
                "type": "boolean"
              },
              "ref": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "settings": {},
              "timestamps": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/RestoreTimestamps"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            }
          }
        ]
      },
      "ImportPrincipalSubtype": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "kind"
            ],
            "properties": {
              "anonymized_at": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              },
              "email": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "kind": {
                "type": "string",
                "enum": [
                  "human"
                ]
              },
              "password": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "password_hash": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "proper_name": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "description",
              "kind"
            ],
            "properties": {
              "created_by_key": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/PrincipalKey"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "created_by_ref": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "description": {
                "type": "string"
              },
              "disabled_at": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              },
              "kind": {
                "type": "string",
                "enum": [
                  "service_account"
                ]
              },
              "owner_group_key": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/GroupKey"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "owner_group_ref": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          }
        ]
      },
      "ImportRemoteTargetInput": {
        "type": "object",
        "required": [
          "name",
          "description",
          "method",
          "url_template",
          "allowed_subject_types",
          "timeout_ms",
          "enabled"
        ],
        "properties": {
          "allowed_subject_types": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RemoteTargetSubjectType"
            }
          },
          "auth_config": {
            "$ref": "#/components/schemas/RemoteAuthConfig"
          },
          "body_template": {
            "type": [
              "string",
              "null"
            ]
          },
          "class_key": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ClassKey"
              },
              {
                "type": "null"
              }
            ]
          },
          "class_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "collection_key": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/CollectionKey"
              },
              {
                "type": "null"
              }
            ]
          },
          "collection_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "condition": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportWriteCondition"
              },
              {
                "type": "null"
              }
            ]
          },
          "description": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "headers_template": {},
          "method": {
            "$ref": "#/components/schemas/RemoteHttpMethod"
          },
          "name": {
            "type": "string"
          },
          "ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "timeout_ms": {
            "type": "integer",
            "format": "int32"
          },
          "timestamps": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RestoreTimestamps"
              },
              {
                "type": "null"
              }
            ]
          },
          "url_template": {
            "type": "string"
          }
        }
      },
      "ImportRequest": {
        "type": "object",
        "required": [
          "version",
          "graph"
        ],
        "properties": {
          "dry_run": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "graph": {
            "$ref": "#/components/schemas/ImportGraph"
          },
          "mode": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportMode"
              },
              {
                "type": "null"
              }
            ]
          },
          "version": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "ImportSchemaActivation": {
        "type": "object",
        "description": "Administrator-selected schema activation applied atomically during import.",
        "required": [
          "revision",
          "expected_active_revision",
          "policy"
        ],
        "properties": {
          "expected_active_revision": {
            "$ref": "#/components/schemas/SchemaRevision"
          },
          "impact_task_id": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/TaskID"
              },
              {
                "type": "null"
              }
            ]
          },
          "policy": {
            "$ref": "#/components/schemas/SchemaActivationPolicy"
          },
          "revision": {
            "$ref": "#/components/schemas/SchemaRevision"
          }
        },
        "additionalProperties": false
      },
      "ImportTaskDetails": {
        "type": "object",
        "required": [
          "results_url"
        ],
        "properties": {
          "results_url": {
            "type": "string"
          },
          "retained": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RetainedImportDetails"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "ImportTaskResultResponse": {
        "type": "object",
        "required": [
          "id",
          "task_id",
          "entity_kind",
          "action",
          "outcome",
          "created_at"
        ],
        "properties": {
          "action": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "details": {},
          "entity_kind": {
            "type": "string"
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "identifier": {
            "type": [
              "string",
              "null"
            ]
          },
          "item_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "observed_revision": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ResourceRevision"
              },
              {
                "type": "null"
              }
            ]
          },
          "outcome": {
            "type": "string"
          },
          "task_id": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "ImportWriteCondition": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "mode"
            ],
            "properties": {
              "mode": {
                "type": "string",
                "enum": [
                  "create_only"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "mode"
            ],
            "properties": {
              "mode": {
                "type": "string",
                "enum": [
                  "overwrite"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "expected_revision",
              "mode"
            ],
            "properties": {
              "expected_revision": {
                "$ref": "#/components/schemas/ResourceRevision"
              },
              "mode": {
                "type": "string",
                "enum": [
                  "if_revision"
                ]
              }
            }
          }
        ],
        "description": "Per-item collision and optimistic-concurrency behavior for import v2."
      },
      "LoginRateLimitConfig": {
        "type": "object",
        "required": [
          "enabled",
          "max_attempts",
          "max_attempts_per_ip",
          "max_attempts_per_subnet",
          "window_seconds",
          "backoff_base_seconds",
          "backoff_max_seconds",
          "subnet_prefix_v4",
          "subnet_prefix_v6",
          "backend",
          "valkey_url",
          "valkey_prefix",
          "valkey_io_timeout_ms"
        ],
        "properties": {
          "backend": {
            "type": "string"
          },
          "backoff_base_seconds": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "backoff_max_seconds": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "enabled": {
            "type": "boolean"
          },
          "max_attempts": {
            "type": "integer",
            "minimum": 0
          },
          "max_attempts_per_ip": {
            "type": "integer",
            "minimum": 0
          },
          "max_attempts_per_subnet": {
            "type": "integer",
            "minimum": 0
          },
          "subnet_prefix_v4": {
            "type": "integer",
            "format": "int32",
            "minimum": 0
          },
          "subnet_prefix_v6": {
            "type": "integer",
            "format": "int32",
            "minimum": 0
          },
          "valkey_io_timeout_ms": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "valkey_prefix": {
            "type": "string"
          },
          "valkey_url": {
            "$ref": "#/components/schemas/SecretStatus"
          },
          "window_seconds": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          }
        }
      },
      "LoginRateLimitConfigResponse": {
        "type": "object",
        "description": "Effective login rate-limit configuration, echoed back in the admin state endpoint.",
        "required": [
          "enabled",
          "backend",
          "max_attempts",
          "max_attempts_per_ip",
          "max_attempts_per_subnet",
          "window_seconds",
          "backoff_base_seconds",
          "backoff_max_seconds",
          "subnet_prefix_v4",
          "subnet_prefix_v6"
        ],
        "properties": {
          "backend": {
            "type": "string"
          },
          "backoff_base_seconds": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "backoff_max_seconds": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "enabled": {
            "type": "boolean"
          },
          "max_attempts": {
            "type": "integer",
            "minimum": 0
          },
          "max_attempts_per_ip": {
            "type": "integer",
            "minimum": 0
          },
          "max_attempts_per_subnet": {
            "type": "integer",
            "minimum": 0
          },
          "subnet_prefix_v4": {
            "type": "integer",
            "format": "int32",
            "minimum": 0
          },
          "subnet_prefix_v6": {
            "type": "integer",
            "format": "int32",
            "minimum": 0
          },
          "window_seconds": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          }
        }
      },
      "LoginRateLimitEntryResponse": {
        "type": "object",
        "description": "One tracked rate-limit scope (a user+IP pair, an IP, or a subnet).",
        "required": [
          "id",
          "scope",
          "identifier",
          "attempts",
          "locked",
          "lockout_level"
        ],
        "properties": {
          "attempts": {
            "type": "integer",
            "description": "Failed attempts currently within the sliding window.",
            "minimum": 0
          },
          "id": {
            "type": "string",
            "description": "Opaque, URL-safe id; pass to `DELETE /meta/login-rate-limit/{id}` to release it."
          },
          "identifier": {
            "type": "string",
            "description": "Human-readable identifier for the scope."
          },
          "locked": {
            "type": "boolean",
            "description": "Whether the scope is locked out right now."
          },
          "locked_for_seconds": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "description": "Remaining lockout time in seconds, if currently locked.",
            "minimum": 0
          },
          "lockout_level": {
            "type": "integer",
            "format": "int32",
            "description": "Current exponential-backoff level.",
            "minimum": 0
          },
          "scope": {
            "type": "string",
            "description": "Scope kind: `user_ip`, `ip`, or `subnet`."
          }
        }
      },
      "LoginRateLimitStateResponse": {
        "type": "object",
        "required": [
          "config",
          "tracked_entries",
          "locked_entries",
          "returned_entries",
          "entries"
        ],
        "properties": {
          "config": {
            "$ref": "#/components/schemas/LoginRateLimitConfigResponse"
          },
          "entries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LoginRateLimitEntryResponse"
            },
            "description": "The tracked scopes matching the `include`, `scope`, and `q` query parameters."
          },
          "locked_entries": {
            "type": "integer",
            "description": "Number of scopes currently locked out (before filtering).",
            "minimum": 0
          },
          "returned_entries": {
            "type": "integer",
            "description": "Number of scopes returned in `entries` after applying the query filters.",
            "minimum": 0
          },
          "tracked_entries": {
            "type": "integer",
            "description": "Total number of tracked scopes (before filtering).",
            "minimum": 0
          }
        }
      },
      "LoginResponse": {
        "type": "object",
        "required": [
          "token",
          "expires_at"
        ],
        "properties": {
          "expires_at": {
            "type": "string",
            "format": "date-time",
            "description": "Authoritative expiry persisted for the newly issued token."
          },
          "token": {
            "type": "string",
            "description": "Raw bearer token, shown only in this issuance response."
          }
        },
        "example": {
          "expires_at": "2026-07-26T12:00:00",
          "token": "eyJhbGciOi...example-token"
        }
      },
      "LoginUser": {
        "type": "object",
        "description": "Struct to log in a user.\n\nThe password is expected to be plaintext. `name` is the principal name.",
        "required": [
          "name",
          "password"
        ],
        "properties": {
          "identity_scope": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255
          },
          "name": {
            "type": "string",
            "maxLength": 255
          },
          "password": {
            "type": "string",
            "maxLength": 4096
          }
        },
        "example": {
          "identity_scope": null,
          "name": "alice",
          "password": "correct-horse-battery-staple"
        }
      },
      "LogoutTokenRequest": {
        "type": "object",
        "required": [
          "token"
        ],
        "properties": {
          "token": {
            "type": "string"
          }
        }
      },
      "MeResponse": {
        "type": "object",
        "required": [
          "principal",
          "token"
        ],
        "properties": {
          "principal": {
            "$ref": "#/components/schemas/MembershipPrincipalResponse"
          },
          "token": {
            "$ref": "#/components/schemas/CurrentTokenMetadata"
          }
        }
      },
      "MembershipPrincipalResponse": {
        "type": "object",
        "description": "Public principal details nested in a membership entity. Its revision is the\nprincipal revision, independent of the enclosing membership revision.",
        "required": [
          "principal_id",
          "identity_scope",
          "kind",
          "name",
          "created_at",
          "updated_at",
          "revision"
        ],
        "properties": {
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "identity_scope": {
            "type": "string"
          },
          "kind": {
            "$ref": "#/components/schemas/PrincipalKind"
          },
          "name": {
            "type": "string"
          },
          "principal_id": {
            "type": "integer",
            "format": "int32"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "MessageResponse": {
        "type": "object",
        "required": [
          "message"
        ],
        "properties": {
          "message": {
            "type": "string"
          }
        },
        "example": {
          "message": "Token is valid."
        }
      },
      "MoveOperation": {
        "type": "object",
        "description": "JSON Patch 'move' operation representation",
        "required": [
          "from",
          "path"
        ],
        "properties": {
          "from": {
            "type": "string",
            "description": "JSON-Pointer value [RFC6901](https://tools.ietf.org/html/rfc6901) that references a location\nto move value from."
          },
          "path": {
            "type": "string",
            "description": "JSON-Pointer value [RFC6901](https://tools.ietf.org/html/rfc6901) that references a location\nwithin the target document where the operation is performed."
          }
        }
      },
      "NetworkConfig": {
        "type": "object",
        "required": [
          "trust_ip_headers",
          "trusted_proxy_hops",
          "trusted_proxy_networks",
          "client_allowlist"
        ],
        "properties": {
          "client_allowlist": {
            "$ref": "#/components/schemas/ClientAllowlistStatus"
          },
          "trust_ip_headers": {
            "type": "boolean"
          },
          "trusted_proxy_hops": {
            "type": "integer",
            "minimum": 0
          },
          "trusted_proxy_networks": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "NewCollectionWithAssignee": {
        "type": "object",
        "description": "A new collection, with an assignee. Used for creating new collection entries\ninto the database and assign all permissions to the group given as group_id.\n\nThis wraps the NewCollection struct and uses the group_id to grant all permissions\nto the group in a single transaction.",
        "required": [
          "name",
          "description",
          "group_id"
        ],
        "properties": {
          "description": {
            "type": "string"
          },
          "group_id": {
            "type": "integer",
            "format": "int32",
            "minimum": 1
          },
          "name": {
            "type": "string"
          },
          "parent_collection_id": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/CollectionID"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "example": {
          "description": "Shared assets and metadata",
          "group_id": 1,
          "name": "global-assets",
          "parent_collection_id": null
        }
      },
      "NewEventSink": {
        "type": "object",
        "required": [
          "name",
          "kind"
        ],
        "properties": {
          "config": {
            "description": "Transport settings. Webhooks support body_template, url_secret_ref, and response rules."
          },
          "delivery_policy": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/EventDeliveryPolicy"
              },
              {
                "type": "null"
              }
            ]
          },
          "enabled": {
            "type": "boolean"
          },
          "kind": {
            "$ref": "#/components/schemas/EventSinkKind"
          },
          "name": {
            "type": "string"
          },
          "secret_ref": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "NewEventSubscription": {
        "type": "object",
        "required": [
          "sink_id",
          "name",
          "entity_types",
          "actions"
        ],
        "properties": {
          "actions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "description": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "entity_types": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "filter": {
            "$ref": "#/components/schemas/EventSubscriptionFilter"
          },
          "name": {
            "type": "string"
          },
          "routing": {},
          "sink_id": {
            "$ref": "#/components/schemas/EventSinkID"
          }
        }
      },
      "NewExportTemplate": {
        "type": "object",
        "required": [
          "collection_id",
          "name",
          "description",
          "content_type",
          "template",
          "kind"
        ],
        "properties": {
          "class_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "collection_id": {
            "type": "integer",
            "format": "int32"
          },
          "content_type": {
            "$ref": "#/components/schemas/ExportContentType"
          },
          "default_limits": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportLimits"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_missing_data_policy": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportMissingDataPolicy"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_query": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "type": "string"
          },
          "include": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportInclude"
              },
              {
                "type": "null"
              }
            ]
          },
          "kind": {
            "$ref": "#/components/schemas/ExportTemplateKind"
          },
          "name": {
            "type": "string"
          },
          "relation_context": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportRelationContext"
              },
              {
                "type": "null"
              }
            ]
          },
          "scope_kind": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportScopeKind"
              },
              {
                "type": "null"
              }
            ]
          },
          "template": {
            "type": "string"
          }
        },
        "example": {
          "class_id": 42,
          "collection_id": 7,
          "content_type": "text/plain",
          "default_limits": {
            "max_items": 100,
            "max_output_bytes": 262144
          },
          "default_missing_data_policy": "strict",
          "default_query": "sort=name",
          "description": "Template for owner listing",
          "include": null,
          "kind": "export",
          "name": "owner-export",
          "relation_context": null,
          "scope_kind": "objects_in_class",
          "template": "{% for item in items %}{{ item.name }}={{ item.data.owner }}\n{% endfor %}"
        }
      },
      "NewGroup": {
        "type": "object",
        "required": [
          "groupname"
        ],
        "properties": {
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "groupname": {
            "type": "string"
          },
          "identity_scope": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "example": {
          "description": "Operations team",
          "groupname": "ops",
          "identity_scope": null
        }
      },
      "NewHubuumClass": {
        "type": "object",
        "required": [
          "name",
          "collection_id",
          "description"
        ],
        "properties": {
          "collection_id": {
            "type": "integer",
            "format": "int32"
          },
          "description": {
            "type": "string"
          },
          "json_schema": {},
          "name": {
            "type": "string"
          },
          "validate_schema": {
            "type": [
              "boolean",
              "null"
            ]
          }
        },
        "example": {
          "collection_id": 1,
          "description": "Server inventory class",
          "json_schema": null,
          "name": "server",
          "validate_schema": false
        }
      },
      "NewHubuumClassRelation": {
        "type": "object",
        "required": [
          "from_hubuum_class_id",
          "to_hubuum_class_id"
        ],
        "properties": {
          "forward_template_alias": {
            "type": [
              "string",
              "null"
            ]
          },
          "from_hubuum_class_id": {
            "type": "integer",
            "format": "int32"
          },
          "from_max_relations": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ObjectRelationLimit",
                "description": "Maximum relations allowed for each object in `from_hubuum_class_id`.\nOmit or set to `null` for unlimited."
              },
              {
                "type": "null"
              }
            ]
          },
          "reverse_template_alias": {
            "type": [
              "string",
              "null"
            ]
          },
          "to_hubuum_class_id": {
            "type": "integer",
            "format": "int32"
          },
          "to_max_relations": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ObjectRelationLimit",
                "description": "Maximum relations allowed for each object in `to_hubuum_class_id`.\nOmit or set to `null` for unlimited."
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "example": {
          "forward_template_alias": "rooms",
          "from_hubuum_class_id": 1,
          "from_max_relations": 1,
          "reverse_template_alias": "hosts",
          "to_hubuum_class_id": 2,
          "to_max_relations": null
        }
      },
      "NewHubuumClassRelationFromClass": {
        "type": "object",
        "description": "To create new relations between classes from within a class\nwe only need the id of the class we want to relate to.",
        "required": [
          "to_hubuum_class_id"
        ],
        "properties": {
          "forward_template_alias": {
            "type": [
              "string",
              "null"
            ]
          },
          "from_max_relations": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ObjectRelationLimit",
                "description": "Maximum relations allowed for each object in the class from the URL.\nOmit or set to `null` for unlimited."
              },
              {
                "type": "null"
              }
            ]
          },
          "reverse_template_alias": {
            "type": [
              "string",
              "null"
            ]
          },
          "to_hubuum_class_id": {
            "type": "integer",
            "format": "int32"
          },
          "to_max_relations": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ObjectRelationLimit",
                "description": "Maximum relations allowed for each object in `to_hubuum_class_id`.\nOmit or set to `null` for unlimited."
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "example": {
          "forward_template_alias": "rooms",
          "from_max_relations": 1,
          "reverse_template_alias": "hosts",
          "to_hubuum_class_id": 2,
          "to_max_relations": null
        }
      },
      "NewHubuumObject": {
        "type": "object",
        "required": [
          "name",
          "collection_id",
          "hubuum_class_id",
          "data",
          "description"
        ],
        "properties": {
          "collection_id": {
            "type": "integer",
            "format": "int32"
          },
          "data": {},
          "description": {
            "type": "string"
          },
          "hubuum_class_id": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string"
          }
        },
        "example": {
          "collection_id": 1,
          "data": {
            "hostname": "srv-01",
            "ip": "10.0.0.10"
          },
          "description": "Primary application server",
          "hubuum_class_id": 2,
          "name": "srv-01"
        }
      },
      "NewHubuumObjectRelation": {
        "type": "object",
        "required": [
          "from_hubuum_object_id",
          "to_hubuum_object_id",
          "class_relation_id"
        ],
        "properties": {
          "class_relation_id": {
            "type": "integer",
            "format": "int32"
          },
          "from_hubuum_object_id": {
            "type": "integer",
            "format": "int32"
          },
          "to_hubuum_object_id": {
            "type": "integer",
            "format": "int32"
          }
        },
        "example": {
          "class_relation_id": 3,
          "from_hubuum_object_id": 10,
          "to_hubuum_object_id": 20
        }
      },
      "NewHubuumObjectRequest": {
        "type": "object",
        "required": [
          "name",
          "data",
          "description"
        ],
        "properties": {
          "collection_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "data": {},
          "description": {
            "type": "string"
          },
          "hubuum_class_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "name": {
            "type": "string"
          }
        }
      },
      "NewRemoteTarget": {
        "type": "object",
        "required": [
          "collection_id",
          "name",
          "description",
          "method",
          "url_template",
          "allowed_subject_types"
        ],
        "properties": {
          "allowed_subject_types": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RemoteTargetSubjectType"
            }
          },
          "auth_config": {
            "$ref": "#/components/schemas/RemoteAuthConfig"
          },
          "body_template": {
            "type": [
              "string",
              "null"
            ]
          },
          "class_id": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/HubuumClassID"
              },
              {
                "type": "null"
              }
            ]
          },
          "collection_id": {
            "$ref": "#/components/schemas/CollectionID"
          },
          "description": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "headers_template": {},
          "method": {
            "$ref": "#/components/schemas/RemoteHttpMethod"
          },
          "name": {
            "type": "string"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "int32"
          },
          "url_template": {
            "type": "string"
          }
        }
      },
      "NewServiceAccount": {
        "type": "object",
        "description": "Request body to create a service account.",
        "required": [
          "name",
          "owner_group_id"
        ],
        "properties": {
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "identity_scope": {
            "type": [
              "string",
              "null"
            ]
          },
          "name": {
            "type": "string"
          },
          "owner_group_id": {
            "type": "integer",
            "format": "int32",
            "minimum": 1
          }
        },
        "example": {
          "description": "Production DNS importer",
          "identity_scope": null,
          "name": "dns-sync",
          "owner_group_id": 1
        }
      },
      "NewTokenRequest": {
        "type": "object",
        "properties": {
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "expires_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Requested expiry. It must be in the future and no farther from issuance\nthan the server's public maximum token lifetime. When omitted, the\nserver applies the public default lifetime."
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "scope": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/TokenScopeDetails",
                "description": "Optional permission and resource boundaries. Omit or send `null` for an\nunscoped token."
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false
      },
      "NewUser": {
        "type": "object",
        "description": "Struct to create a new user.\n\nThe password is expected to be plaintext. `name` is the principal name.",
        "required": [
          "name",
          "password"
        ],
        "properties": {
          "email": {
            "type": [
              "string",
              "null"
            ]
          },
          "identity_scope": {
            "type": [
              "string",
              "null"
            ]
          },
          "name": {
            "type": "string"
          },
          "password": {
            "type": "string"
          },
          "proper_name": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "example": {
          "email": "alice@example.com",
          "identity_scope": null,
          "name": "alice",
          "password": "correct-horse-battery-staple",
          "proper_name": "Alice Doe"
        }
      },
      "ObjectAggregateDimensionValue": {
        "type": "object",
        "required": [
          "field",
          "state"
        ],
        "properties": {
          "field": {
            "type": "string"
          },
          "state": {
            "$ref": "#/components/schemas/ObjectAggregateValueState"
          },
          "value": {}
        }
      },
      "ObjectAggregateMeasureOperation": {
        "type": "string",
        "enum": [
          "sum",
          "average",
          "min",
          "max"
        ]
      },
      "ObjectAggregateMeasureState": {
        "type": "string",
        "enum": [
          "value",
          "empty"
        ]
      },
      "ObjectAggregateMeasureValue": {
        "type": "object",
        "required": [
          "field",
          "operation",
          "state",
          "value_count",
          "skipped_count"
        ],
        "properties": {
          "field": {
            "type": "string"
          },
          "operation": {
            "$ref": "#/components/schemas/ObjectAggregateMeasureOperation"
          },
          "skipped_count": {
            "type": "integer",
            "format": "int64"
          },
          "state": {
            "$ref": "#/components/schemas/ObjectAggregateMeasureState"
          },
          "value": {},
          "value_count": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "ObjectAggregateRow": {
        "type": "object",
        "required": [
          "dimensions",
          "object_count"
        ],
        "properties": {
          "dimensions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ObjectAggregateDimensionValue"
            }
          },
          "measures": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ObjectAggregateMeasureValue"
            }
          },
          "object_count": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "ObjectAggregateValueState": {
        "type": "string",
        "enum": [
          "value",
          "null",
          "missing",
          "unavailable"
        ]
      },
      "ObjectComplianceResponse": {
        "type": "object",
        "required": [
          "object_id",
          "object_revision",
          "active_schema",
          "status"
        ],
        "properties": {
          "active_schema": {
            "$ref": "#/components/schemas/SchemaReference"
          },
          "evidence": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ObjectSchemaEvidence"
              },
              {
                "type": "null"
              }
            ]
          },
          "object_id": {
            "type": "integer",
            "format": "int32"
          },
          "object_revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "status": {
            "$ref": "#/components/schemas/ComplianceStatus"
          }
        }
      },
      "ObjectDataPatchDocument": {
        "type": "array",
        "items": {
          "oneOf": [
            {
              "allOf": [
                {
                  "$ref": "#/components/schemas/AddOperation",
                  "description": "'add' operation"
                },
                {
                  "type": "object",
                  "required": [
                    "op"
                  ],
                  "properties": {
                    "op": {
                      "type": "string",
                      "enum": [
                        "add"
                      ]
                    }
                  }
                }
              ],
              "description": "'add' operation"
            },
            {
              "allOf": [
                {
                  "$ref": "#/components/schemas/RemoveOperation",
                  "description": "'remove' operation"
                },
                {
                  "type": "object",
                  "required": [
                    "op"
                  ],
                  "properties": {
                    "op": {
                      "type": "string",
                      "enum": [
                        "remove"
                      ]
                    }
                  }
                }
              ],
              "description": "'remove' operation"
            },
            {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ReplaceOperation",
                  "description": "'replace' operation"
                },
                {
                  "type": "object",
                  "required": [
                    "op"
                  ],
                  "properties": {
                    "op": {
                      "type": "string",
                      "enum": [
                        "replace"
                      ]
                    }
                  }
                }
              ],
              "description": "'replace' operation"
            },
            {
              "allOf": [
                {
                  "$ref": "#/components/schemas/MoveOperation",
                  "description": "'move' operation"
                },
                {
                  "type": "object",
                  "required": [
                    "op"
                  ],
                  "properties": {
                    "op": {
                      "type": "string",
                      "enum": [
                        "move"
                      ]
                    }
                  }
                }
              ],
              "description": "'move' operation"
            },
            {
              "allOf": [
                {
                  "$ref": "#/components/schemas/CopyOperation",
                  "description": "'copy' operation"
                },
                {
                  "type": "object",
                  "required": [
                    "op"
                  ],
                  "properties": {
                    "op": {
                      "type": "string",
                      "enum": [
                        "copy"
                      ]
                    }
                  }
                }
              ],
              "description": "'copy' operation"
            },
            {
              "allOf": [
                {
                  "$ref": "#/components/schemas/TestOperation",
                  "description": "'test' operation"
                },
                {
                  "type": "object",
                  "required": [
                    "op"
                  ],
                  "properties": {
                    "op": {
                      "type": "string",
                      "enum": [
                        "test"
                      ]
                    }
                  }
                }
              ],
              "description": "'test' operation"
            }
          ],
          "description": "JSON Patch single patch operation"
        },
        "description": "RFC 6902 operations applied relative to the root of an object's raw data document. Supports add, remove, replace, move, copy, and test; test compares JSON numbers by numeric value. The resulting document is limited to 2 MiB and 64 nested containers, with a bounded cumulative application-work budget.",
        "examples": [
          [
            {
              "op": "add",
              "path": "/facts",
              "value": {
                "source": "inventory"
              }
            }
          ]
        ],
        "maxItems": 1000
      },
      "ObjectKey": {
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "class_key": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ClassKey"
              },
              {
                "type": "null"
              }
            ]
          },
          "class_ref": {
            "type": [
              "string",
              "null"
            ]
          },
          "name": {
            "type": "string"
          }
        }
      },
      "ObjectRelationLimit": {
        "type": "integer",
        "format": "int32",
        "description": "Maximum number of object relations allowed for one object on one side of a class relation.",
        "minimum": 1
      },
      "ObjectSchemaEvidence": {
        "type": "object",
        "required": [
          "schema",
          "object_revision",
          "valid",
          "validated_at"
        ],
        "properties": {
          "object_revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "schema": {
            "$ref": "#/components/schemas/SchemaReference"
          },
          "valid": {
            "type": "boolean"
          },
          "validated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "ObjectsByClass": {
        "type": "object",
        "required": [
          "hubuum_class_id",
          "count"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "format": "int64"
          },
          "hubuum_class_id": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "PaginationConfig": {
        "type": "object",
        "required": [
          "default_page_limit",
          "max_page_limit",
          "max_transitive_depth",
          "max_traversal_work_rows"
        ],
        "properties": {
          "default_page_limit": {
            "type": "integer",
            "minimum": 0
          },
          "max_page_limit": {
            "type": "integer",
            "minimum": 0
          },
          "max_transitive_depth": {
            "type": "integer",
            "format": "int32"
          },
          "max_traversal_work_rows": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "PatchOperation": {
        "oneOf": [
          {
            "allOf": [
              {
                "$ref": "#/components/schemas/AddOperation",
                "description": "'add' operation"
              },
              {
                "type": "object",
                "required": [
                  "op"
                ],
                "properties": {
                  "op": {
                    "type": "string",
                    "enum": [
                      "add"
                    ]
                  }
                }
              }
            ],
            "description": "'add' operation"
          },
          {
            "allOf": [
              {
                "$ref": "#/components/schemas/RemoveOperation",
                "description": "'remove' operation"
              },
              {
                "type": "object",
                "required": [
                  "op"
                ],
                "properties": {
                  "op": {
                    "type": "string",
                    "enum": [
                      "remove"
                    ]
                  }
                }
              }
            ],
            "description": "'remove' operation"
          },
          {
            "allOf": [
              {
                "$ref": "#/components/schemas/ReplaceOperation",
                "description": "'replace' operation"
              },
              {
                "type": "object",
                "required": [
                  "op"
                ],
                "properties": {
                  "op": {
                    "type": "string",
                    "enum": [
                      "replace"
                    ]
                  }
                }
              }
            ],
            "description": "'replace' operation"
          },
          {
            "allOf": [
              {
                "$ref": "#/components/schemas/MoveOperation",
                "description": "'move' operation"
              },
              {
                "type": "object",
                "required": [
                  "op"
                ],
                "properties": {
                  "op": {
                    "type": "string",
                    "enum": [
                      "move"
                    ]
                  }
                }
              }
            ],
            "description": "'move' operation"
          },
          {
            "allOf": [
              {
                "$ref": "#/components/schemas/CopyOperation",
                "description": "'copy' operation"
              },
              {
                "type": "object",
                "required": [
                  "op"
                ],
                "properties": {
                  "op": {
                    "type": "string",
                    "enum": [
                      "copy"
                    ]
                  }
                }
              }
            ],
            "description": "'copy' operation"
          },
          {
            "allOf": [
              {
                "$ref": "#/components/schemas/TestOperation",
                "description": "'test' operation"
              },
              {
                "type": "object",
                "required": [
                  "op"
                ],
                "properties": {
                  "op": {
                    "type": "string",
                    "enum": [
                      "test"
                    ]
                  }
                }
              }
            ],
            "description": "'test' operation"
          }
        ],
        "description": "JSON Patch single patch operation"
      },
      "Permission": {
        "type": "object",
        "required": [
          "id",
          "collection_id",
          "group_id",
          "has_read_collection",
          "has_update_collection",
          "has_delete_collection",
          "has_delegate_collection",
          "has_create_class",
          "has_read_class",
          "has_update_class",
          "has_delete_class",
          "has_create_object",
          "has_read_object",
          "has_update_object",
          "has_delete_object",
          "has_create_class_relation",
          "has_read_class_relation",
          "has_update_class_relation",
          "has_delete_class_relation",
          "has_create_object_relation",
          "has_read_object_relation",
          "has_update_object_relation",
          "has_delete_object_relation",
          "has_read_template",
          "has_create_template",
          "has_update_template",
          "has_delete_template",
          "has_read_remote_target",
          "has_create_remote_target",
          "has_update_remote_target",
          "has_delete_remote_target",
          "has_execute_remote_target",
          "created_at",
          "updated_at",
          "has_read_audit",
          "has_manage_event_subscription"
        ],
        "properties": {
          "collection_id": {
            "type": "integer",
            "format": "int32"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "group_id": {
            "type": "integer",
            "format": "int32"
          },
          "has_create_class": {
            "type": "boolean"
          },
          "has_create_class_relation": {
            "type": "boolean"
          },
          "has_create_object": {
            "type": "boolean"
          },
          "has_create_object_relation": {
            "type": "boolean"
          },
          "has_create_remote_target": {
            "type": "boolean"
          },
          "has_create_template": {
            "type": "boolean"
          },
          "has_delegate_collection": {
            "type": "boolean"
          },
          "has_delete_class": {
            "type": "boolean"
          },
          "has_delete_class_relation": {
            "type": "boolean"
          },
          "has_delete_collection": {
            "type": "boolean"
          },
          "has_delete_object": {
            "type": "boolean"
          },
          "has_delete_object_relation": {
            "type": "boolean"
          },
          "has_delete_remote_target": {
            "type": "boolean"
          },
          "has_delete_template": {
            "type": "boolean"
          },
          "has_execute_remote_target": {
            "type": "boolean"
          },
          "has_manage_event_subscription": {
            "type": "boolean"
          },
          "has_read_audit": {
            "type": "boolean"
          },
          "has_read_class": {
            "type": "boolean"
          },
          "has_read_class_relation": {
            "type": "boolean"
          },
          "has_read_collection": {
            "type": "boolean"
          },
          "has_read_object": {
            "type": "boolean"
          },
          "has_read_object_relation": {
            "type": "boolean"
          },
          "has_read_remote_target": {
            "type": "boolean"
          },
          "has_read_template": {
            "type": "boolean"
          },
          "has_update_class": {
            "type": "boolean"
          },
          "has_update_class_relation": {
            "type": "boolean"
          },
          "has_update_collection": {
            "type": "boolean"
          },
          "has_update_object": {
            "type": "boolean"
          },
          "has_update_object_relation": {
            "type": "boolean"
          },
          "has_update_remote_target": {
            "type": "boolean"
          },
          "has_update_template": {
            "type": "boolean"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "PermissionConfig": {
        "type": "object",
        "required": [
          "backend",
          "treetop_url",
          "treetop_connect_timeout_ms",
          "treetop_request_timeout_ms",
          "treetop_ca_certificate_configured",
          "treetop_accept_invalid_certificates"
        ],
        "properties": {
          "backend": {
            "type": "string"
          },
          "treetop_accept_invalid_certificates": {
            "type": "boolean"
          },
          "treetop_ca_certificate_configured": {
            "type": "boolean"
          },
          "treetop_connect_timeout_ms": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "treetop_request_timeout_ms": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "treetop_url": {
            "$ref": "#/components/schemas/SecretStatus"
          }
        }
      },
      "Permissions": {
        "type": "string",
        "enum": [
          "ReadCollection",
          "UpdateCollection",
          "DeleteCollection",
          "DelegateCollection",
          "CreateClass",
          "ReadClass",
          "UpdateClass",
          "DeleteClass",
          "CreateObject",
          "ReadObject",
          "UpdateObject",
          "DeleteObject",
          "CreateClassRelation",
          "ReadClassRelation",
          "UpdateClassRelation",
          "DeleteClassRelation",
          "CreateObjectRelation",
          "ReadObjectRelation",
          "UpdateObjectRelation",
          "DeleteObjectRelation",
          "ReadTemplate",
          "CreateTemplate",
          "UpdateTemplate",
          "DeleteTemplate",
          "ReadRemoteTarget",
          "CreateRemoteTarget",
          "UpdateRemoteTarget",
          "DeleteRemoteTarget",
          "ExecuteRemoteTarget",
          "ReadAudit",
          "ManageEventSubscription"
        ]
      },
      "PersonalComputedFieldDefinitionRequest": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ComputedFieldDefinitionRequest"
          },
          {
            "type": "object",
            "required": [
              "class_id"
            ],
            "properties": {
              "class_id": {
                "type": "integer",
                "format": "int32"
              }
            }
          }
        ]
      },
      "PrincipalCollectionPermissions": {
        "type": "object",
        "description": "A principal's direct permission rows on a single collection, broken down by the\ngroup that grants them.",
        "required": [
          "collection_id",
          "collection_name",
          "grants"
        ],
        "properties": {
          "collection_id": {
            "type": "integer",
            "format": "int32"
          },
          "collection_name": {
            "type": "string"
          },
          "grants": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GroupGrant"
            }
          }
        }
      },
      "PrincipalID": {
        "type": "integer",
        "format": "int32",
        "description": "Validated positive principal id.",
        "minimum": 1
      },
      "PrincipalKey": {
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "identity_scope": {
            "type": [
              "string",
              "null"
            ]
          },
          "name": {
            "type": "string"
          }
        }
      },
      "PrincipalKind": {
        "type": "string",
        "description": "Closed set of principal kinds understood by every Hubuum layer.\n\nAdapters must parse persisted values into this type before returning a\nprincipal so database corruption cannot cross the storage boundary as an\narbitrary string.",
        "enum": [
          "human",
          "service_account"
        ]
      },
      "PrincipalMemberResponse": {
        "type": "object",
        "description": "Public representation of the revision-owned membership between a principal\nand a group.",
        "required": [
          "principal_id",
          "group_id",
          "created_at",
          "updated_at",
          "revision"
        ],
        "properties": {
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "group_id": {
            "type": "integer",
            "format": "int32"
          },
          "principal": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/MembershipPrincipalResponse"
              },
              {
                "type": "null"
              }
            ]
          },
          "principal_id": {
            "type": "integer",
            "format": "int32"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "PrincipalSettings": {
        "type": "object",
        "description": "An object-only JSON document containing a principal's local preferences.\n\nValues below the document root may be any JSON type. The private\nrepresentation keeps callers from constructing an invalid non-object root."
      },
      "PrincipalSettingsPatchDocument": {
        "type": "array",
        "items": {
          "oneOf": [
            {
              "allOf": [
                {
                  "$ref": "#/components/schemas/AddOperation",
                  "description": "'add' operation"
                },
                {
                  "type": "object",
                  "required": [
                    "op"
                  ],
                  "properties": {
                    "op": {
                      "type": "string",
                      "enum": [
                        "add"
                      ]
                    }
                  }
                }
              ],
              "description": "'add' operation"
            },
            {
              "allOf": [
                {
                  "$ref": "#/components/schemas/RemoveOperation",
                  "description": "'remove' operation"
                },
                {
                  "type": "object",
                  "required": [
                    "op"
                  ],
                  "properties": {
                    "op": {
                      "type": "string",
                      "enum": [
                        "remove"
                      ]
                    }
                  }
                }
              ],
              "description": "'remove' operation"
            },
            {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ReplaceOperation",
                  "description": "'replace' operation"
                },
                {
                  "type": "object",
                  "required": [
                    "op"
                  ],
                  "properties": {
                    "op": {
                      "type": "string",
                      "enum": [
                        "replace"
                      ]
                    }
                  }
                }
              ],
              "description": "'replace' operation"
            },
            {
              "allOf": [
                {
                  "$ref": "#/components/schemas/MoveOperation",
                  "description": "'move' operation"
                },
                {
                  "type": "object",
                  "required": [
                    "op"
                  ],
                  "properties": {
                    "op": {
                      "type": "string",
                      "enum": [
                        "move"
                      ]
                    }
                  }
                }
              ],
              "description": "'move' operation"
            },
            {
              "allOf": [
                {
                  "$ref": "#/components/schemas/CopyOperation",
                  "description": "'copy' operation"
                },
                {
                  "type": "object",
                  "required": [
                    "op"
                  ],
                  "properties": {
                    "op": {
                      "type": "string",
                      "enum": [
                        "copy"
                      ]
                    }
                  }
                }
              ],
              "description": "'copy' operation"
            },
            {
              "allOf": [
                {
                  "$ref": "#/components/schemas/TestOperation",
                  "description": "'test' operation"
                },
                {
                  "type": "object",
                  "required": [
                    "op"
                  ],
                  "properties": {
                    "op": {
                      "type": "string",
                      "enum": [
                        "test"
                      ]
                    }
                  }
                }
              ],
              "description": "'test' operation"
            }
          ],
          "description": "JSON Patch single patch operation"
        },
        "description": "RFC 6902 operations applied relative to the principal-settings document root. Supports add, remove, replace, move, copy, and test; test compares JSON numbers by numeric value. The final root must remain an object. The request and result are limited to 2 MiB and 64 nested containers, with a bounded cumulative application-work budget.",
        "examples": [
          [
            {
              "op": "test",
              "path": "/theme",
              "value": "light"
            },
            {
              "op": "replace",
              "path": "/theme",
              "value": "dark"
            }
          ]
        ],
        "maxItems": 1000
      },
      "PrincipalSettingsResponse": {
        "type": "object",
        "required": [
          "revision",
          "settings"
        ],
        "properties": {
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "settings": {
            "$ref": "#/components/schemas/PrincipalSettings"
          }
        }
      },
      "PrincipalTokenMetadata": {
        "type": "object",
        "description": "Public, hash-free projection of a token for listing, including its exact\npermission and resource scope dimensions.",
        "required": [
          "id",
          "principal_id",
          "issued",
          "active",
          "expired",
          "revision"
        ],
        "properties": {
          "active": {
            "type": "boolean",
            "description": "Whether this token can currently authenticate. This uses the same\nexpiry and revocation rules as bearer-token validation."
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "expired": {
            "type": "boolean",
            "description": "Whether this token's effective expiry has elapsed. A revoked token may\nalso be expired, so this is independent of `revoked_at`."
          },
          "expires_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "id": {
            "$ref": "#/components/schemas/TokenID"
          },
          "issued": {
            "type": "string",
            "format": "date-time"
          },
          "last_used_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "principal_id": {
            "$ref": "#/components/schemas/PrincipalID"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "revoked_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "scope": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/TokenScopeDetails",
                "description": "Exact permission and resource boundaries. `None` means that this token\nis unscoped."
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "PrincipalTokenPointResponse": {
        "type": "object",
        "description": "Canonical token representation covered completely by the token revision.\n`last_used_at` remains available in token lists, but is excluded from this\npoint representation because routine activity does not advance revision.",
        "required": [
          "id",
          "principal_id",
          "issued",
          "revision"
        ],
        "properties": {
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "expires_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "id": {
            "$ref": "#/components/schemas/TokenID"
          },
          "issued": {
            "type": "string",
            "format": "date-time"
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "principal_id": {
            "$ref": "#/components/schemas/PrincipalID"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "revoked_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "scope": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/TokenScopeDetails"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "ProbeResponse": {
        "type": "object",
        "required": [
          "status"
        ],
        "properties": {
          "status": {
            "type": "string"
          }
        }
      },
      "Provenance": {
        "type": "object",
        "description": "Shared provenance returned by audit/history APIs and serialized to sinks.",
        "required": [
          "actor"
        ],
        "properties": {
          "actor": {
            "$ref": "#/components/schemas/ProvenanceActor"
          },
          "initiator": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ProvenancePrincipal"
              },
              {
                "type": "null"
              }
            ]
          },
          "task_id": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/TaskID"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "ProvenanceActor": {
        "type": "object",
        "description": "The immediate actor that performed a mutation.",
        "properties": {
          "kind": {
            "type": [
              "string",
              "null"
            ]
          },
          "principal": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ProvenancePrincipal"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "ProvenancePrincipal": {
        "type": "object",
        "description": "Durable principal identity used in provenance responses and sink envelopes.\n\nNames are resolved at read/delivery time rather than copied into immutable\nevent and history storage. The id therefore remains available even when no\ncurrent principal name can be resolved.",
        "required": [
          "principal_id"
        ],
        "properties": {
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "principal_id": {
            "$ref": "#/components/schemas/PrincipalID"
          }
        }
      },
      "RebuildTaskDetails": {
        "type": "object",
        "properties": {
          "class_id": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/HubuumClassID"
              },
              {
                "type": "null"
              }
            ]
          },
          "computation_revision": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          }
        }
      },
      "RelatedClassGraph": {
        "type": "object",
        "required": [
          "classes",
          "relations"
        ],
        "properties": {
          "classes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HubuumClassWithPath"
            }
          },
          "relations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HubuumClassRelation"
            }
          }
        }
      },
      "RelatedObjectGraph": {
        "type": "object",
        "required": [
          "objects",
          "relations"
        ],
        "properties": {
          "objects": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HubuumObjectWithPath"
            }
          },
          "relations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HubuumObjectRelation"
            }
          }
        }
      },
      "ReleaseRateLimitResponse": {
        "type": "object",
        "required": [
          "released"
        ],
        "properties": {
          "released": {
            "type": "boolean"
          }
        }
      },
      "RemoteAuthConfig": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "none"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "secret",
              "type"
            ],
            "properties": {
              "secret": {
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": [
                  "bearer_secret"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "username",
              "secret",
              "type"
            ],
            "properties": {
              "secret": {
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": [
                  "basic_secret"
                ]
              },
              "username": {
                "type": "string"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "header",
              "secret",
              "type"
            ],
            "properties": {
              "header": {
                "type": "string"
              },
              "secret": {
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": [
                  "api_key_secret"
                ]
              }
            }
          }
        ]
      },
      "RemoteCallConfig": {
        "type": "object",
        "required": [
          "timeout_ms",
          "max_response_bytes",
          "allow_private_targets"
        ],
        "properties": {
          "allow_private_targets": {
            "type": "boolean"
          },
          "max_response_bytes": {
            "type": "integer",
            "minimum": 0
          },
          "timeout_ms": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          }
        }
      },
      "RemoteCallResult": {
        "type": "object",
        "required": [
          "id",
          "task_id",
          "subject_type",
          "subject_id",
          "method",
          "rendered_url",
          "duration_ms",
          "success",
          "created_at"
        ],
        "properties": {
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "duration_ms": {
            "type": "integer",
            "format": "int32"
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "method": {
            "type": "string"
          },
          "rendered_url": {
            "type": "string"
          },
          "response_body_preview": {
            "type": [
              "string",
              "null"
            ]
          },
          "response_headers": {},
          "response_status": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "subject_id": {
            "type": "integer",
            "format": "int32"
          },
          "subject_type": {
            "type": "string"
          },
          "success": {
            "type": "boolean"
          },
          "target_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "task_id": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "RemoteCallTaskDetails": {
        "type": "object",
        "properties": {
          "remote_target_id": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RemoteTargetID"
              },
              {
                "type": "null"
              }
            ]
          },
          "target": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/TaskDiscoveryTarget"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "RemoteHttpMethod": {
        "type": "string",
        "enum": [
          "get",
          "post",
          "patch",
          "delete"
        ]
      },
      "RemoteInvocationBodyOverride": {},
      "RemoteInvocationParameters": {},
      "RemoteInvocationSubject": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "collection_id",
              "type"
            ],
            "properties": {
              "collection_id": {
                "$ref": "#/components/schemas/CollectionID"
              },
              "type": {
                "type": "string",
                "enum": [
                  "collection"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "class_id",
              "type"
            ],
            "properties": {
              "class_id": {
                "$ref": "#/components/schemas/HubuumClassID"
              },
              "type": {
                "type": "string",
                "enum": [
                  "class"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "class_id",
              "object_id",
              "type"
            ],
            "properties": {
              "class_id": {
                "$ref": "#/components/schemas/HubuumClassID"
              },
              "object_id": {
                "$ref": "#/components/schemas/HubuumObjectID"
              },
              "type": {
                "type": "string",
                "enum": [
                  "object"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "relation_id",
              "type"
            ],
            "properties": {
              "relation_id": {
                "$ref": "#/components/schemas/HubuumClassRelationID"
              },
              "type": {
                "type": "string",
                "enum": [
                  "class_relation"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "relation_id",
              "type"
            ],
            "properties": {
              "relation_id": {
                "$ref": "#/components/schemas/HubuumObjectRelationID"
              },
              "type": {
                "type": "string",
                "enum": [
                  "object_relation"
                ]
              }
            }
          }
        ]
      },
      "RemoteTarget": {
        "type": "object",
        "required": [
          "id",
          "collection_id",
          "name",
          "description",
          "method",
          "url_template",
          "headers_template",
          "auth_config",
          "allowed_subject_types",
          "timeout_ms",
          "enabled",
          "created_at",
          "updated_at",
          "revision"
        ],
        "properties": {
          "allowed_subject_types": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RemoteTargetSubjectType"
            }
          },
          "auth_config": {
            "$ref": "#/components/schemas/RemoteAuthConfig"
          },
          "body_template": {
            "type": [
              "string",
              "null"
            ]
          },
          "class_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "collection_id": {
            "type": "integer",
            "format": "int32"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "description": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "headers_template": {},
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "method": {
            "$ref": "#/components/schemas/RemoteHttpMethod"
          },
          "name": {
            "type": "string"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "int32"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "url_template": {
            "type": "string"
          }
        }
      },
      "RemoteTargetHistory": {
        "type": "object",
        "required": [
          "id",
          "collection_id",
          "name",
          "description",
          "method",
          "url_template",
          "headers_template",
          "auth_config",
          "allowed_subject_types",
          "timeout_ms",
          "enabled",
          "created_at",
          "updated_at",
          "op",
          "valid_from",
          "history_id",
          "revision"
        ],
        "properties": {
          "actor_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "actor_kind": {
            "type": [
              "string",
              "null"
            ]
          },
          "allowed_subject_types": {},
          "auth_config": {},
          "body_template": {
            "type": [
              "string",
              "null"
            ]
          },
          "class_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "collection_id": {
            "type": "integer",
            "format": "int32"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "description": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "headers_template": {},
          "history_id": {
            "type": "integer",
            "format": "int64"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "initiator_user_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "method": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "op": {
            "type": "string"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "task_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "int32"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "url_template": {
            "type": "string"
          },
          "valid_from": {
            "type": "string",
            "format": "date-time"
          },
          "valid_to": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "RemoteTargetID": {
        "type": "integer",
        "format": "int32",
        "description": "Validated positive remote target id.",
        "minimum": 1
      },
      "RemoteTargetInvokeRequest": {
        "type": "object",
        "required": [
          "subject"
        ],
        "properties": {
          "body_override": {
            "$ref": "#/components/schemas/RemoteInvocationBodyOverride"
          },
          "parameters": {
            "$ref": "#/components/schemas/RemoteInvocationParameters"
          },
          "subject": {
            "$ref": "#/components/schemas/RemoteInvocationSubject"
          }
        }
      },
      "RemoteTargetSubjectType": {
        "type": "string",
        "enum": [
          "collection",
          "class",
          "object",
          "class_relation",
          "object_relation"
        ]
      },
      "RemoveOperation": {
        "type": "object",
        "description": "JSON Patch 'remove' operation representation",
        "required": [
          "path"
        ],
        "properties": {
          "path": {
            "type": "string",
            "description": "JSON-Pointer value [RFC6901](https://tools.ietf.org/html/rfc6901) that references a location\nwithin the target document where the operation is performed."
          }
        }
      },
      "RenewTokenRequest": {
        "type": "object",
        "properties": {
          "expires_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Optional expiry for the new token. When omitted, the server applies its\npublic default token lifetime. The source token's expiry is never\ncopied."
          }
        },
        "additionalProperties": false
      },
      "ReplaceOperation": {
        "type": "object",
        "description": "JSON Patch 'replace' operation representation",
        "required": [
          "path",
          "value"
        ],
        "properties": {
          "path": {
            "type": "string",
            "description": "JSON-Pointer value [RFC6901](https://tools.ietf.org/html/rfc6901) that references a location\nwithin the target document where the operation is performed."
          },
          "value": {
            "description": "Value to replace with."
          }
        }
      },
      "ResourceRevision": {
        "type": "integer",
        "format": "int64",
        "description": "Database-owned positive resource revision.",
        "minimum": 1
      },
      "RestoreConfig": {
        "type": "object",
        "required": [
          "stage_retention_minutes",
          "max_upload_bytes"
        ],
        "properties": {
          "max_upload_bytes": {
            "type": "integer",
            "minimum": 0
          },
          "stage_retention_minutes": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "RestoreConfirmRequest": {
        "type": "object",
        "required": [
          "restore_capability",
          "sha256",
          "confirmation"
        ],
        "properties": {
          "confirmation": {
            "type": "string"
          },
          "restore_capability": {
            "type": "string"
          },
          "sha256": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "RestoreJobID": {
        "type": "integer",
        "format": "int64",
        "description": "Validated positive restore job id.",
        "minimum": 1
      },
      "RestoreJobStatus": {
        "type": "string",
        "enum": [
          "validated",
          "confirmed",
          "succeeded",
          "failed",
          "expired"
        ]
      },
      "RestoreStageResponse": {
        "type": "object",
        "required": [
          "id",
          "status",
          "requested_by_identity_scope",
          "requested_by_name",
          "sha256",
          "byte_size",
          "expires_at",
          "created_at",
          "updated_at",
          "validation"
        ],
        "properties": {
          "byte_size": {
            "type": "integer",
            "format": "int64"
          },
          "confirmed_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "finished_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "requested_by": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "requested_by_identity_scope": {
            "type": "string"
          },
          "requested_by_name": {
            "type": "string"
          },
          "restore_capability": {
            "type": [
              "string",
              "null"
            ],
            "description": "Returned only when a stage is created. It is stored only as a hash and\nmust be supplied to confirm or inspect the restore while its staging\nrecord exists. Success retains only a document-free terminal receipt."
          },
          "sha256": {
            "type": "string"
          },
          "started_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "status": {
            "$ref": "#/components/schemas/RestoreJobStatus"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "validation": {
            "$ref": "#/components/schemas/RestoreValidationSummary"
          }
        }
      },
      "RestoreTimestamps": {
        "type": "object",
        "required": [
          "created_at",
          "updated_at"
        ],
        "properties": {
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "RestoreValidationSummary": {
        "type": "object",
        "required": [
          "backup_version",
          "source_version",
          "includes_history",
          "total_items"
        ],
        "properties": {
          "backup_version": {
            "type": "integer",
            "format": "int32"
          },
          "includes_history": {
            "type": "boolean"
          },
          "source_version": {
            "type": "string"
          },
          "total_items": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "RetainedBackupDetails": {
        "type": "object",
        "required": [
          "output_state"
        ],
        "properties": {
          "include_history": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "output_state": {
            "$ref": "#/components/schemas/TaskOutputDiscoveryState"
          }
        }
      },
      "RetainedExportDetails": {
        "type": "object",
        "required": [
          "output_state"
        ],
        "properties": {
          "max_items": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "minimum": 0
          },
          "max_output_bytes": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "minimum": 0
          },
          "missing_data_policy": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportMissingDataPolicy"
              },
              {
                "type": "null"
              }
            ]
          },
          "output_state": {
            "$ref": "#/components/schemas/TaskOutputDiscoveryState"
          },
          "scope_kind": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportScopeKind"
              },
              {
                "type": "null"
              }
            ]
          },
          "target": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/TaskDiscoveryTarget"
              },
              {
                "type": "null"
              }
            ]
          },
          "template_id": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportTemplateID"
              },
              {
                "type": "null"
              }
            ]
          },
          "truncated": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "warning_count": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          }
        }
      },
      "RetainedImportDetails": {
        "type": "object",
        "properties": {
          "atomicity": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportAtomicity"
              },
              {
                "type": "null"
              }
            ]
          },
          "collision_policy": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportCollisionPolicy"
              },
              {
                "type": "null"
              }
            ]
          },
          "dry_run": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "has_failed_items": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "permission_policy": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportPermissionPolicy"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "RunningConfig": {
        "type": "object",
        "required": [
          "schema_validation",
          "server",
          "database",
          "tasks",
          "events",
          "exports",
          "backups",
          "restores",
          "remote_calls",
          "secrets",
          "authentication",
          "permissions",
          "pagination",
          "network",
          "tracing"
        ],
        "properties": {
          "authentication": {
            "$ref": "#/components/schemas/AuthenticationConfig"
          },
          "backups": {
            "$ref": "#/components/schemas/BackupConfig"
          },
          "database": {
            "$ref": "#/components/schemas/DatabaseConfig"
          },
          "events": {
            "$ref": "#/components/schemas/EventConfig"
          },
          "exports": {
            "$ref": "#/components/schemas/ExportConfig"
          },
          "network": {
            "$ref": "#/components/schemas/NetworkConfig"
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationConfig"
          },
          "permissions": {
            "$ref": "#/components/schemas/PermissionConfig"
          },
          "remote_calls": {
            "$ref": "#/components/schemas/RemoteCallConfig"
          },
          "restores": {
            "$ref": "#/components/schemas/RestoreConfig"
          },
          "schema_validation": {
            "$ref": "#/components/schemas/SchemaValidationConfig"
          },
          "secrets": {
            "$ref": "#/components/schemas/SecretSourceConfig"
          },
          "server": {
            "$ref": "#/components/schemas/ServerConfig"
          },
          "tasks": {
            "$ref": "#/components/schemas/TaskConfig"
          },
          "tracing": {
            "$ref": "#/components/schemas/TracingConfig"
          }
        }
      },
      "SchemaActivationPolicy": {
        "type": "string",
        "enum": [
          "reject_incompatible",
          "allow_pending"
        ]
      },
      "SchemaActivationRequest": {
        "type": "object",
        "required": [
          "expected_active_revision",
          "policy"
        ],
        "properties": {
          "expected_active_revision": {
            "$ref": "#/components/schemas/SchemaRevision"
          },
          "impact_task_id": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/TaskID"
              },
              {
                "type": "null"
              }
            ]
          },
          "policy": {
            "$ref": "#/components/schemas/SchemaActivationPolicy"
          }
        },
        "additionalProperties": false
      },
      "SchemaActivationResponse": {
        "type": "object",
        "required": [
          "active"
        ],
        "properties": {
          "active": {
            "$ref": "#/components/schemas/SchemaRevisionResponse"
          },
          "dependent_rebuild_task_id": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/TaskID"
              },
              {
                "type": "null"
              }
            ]
          },
          "task_id": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/TaskID"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "SchemaActualValue": {
        "oneOf": [
          {
            "type": "string",
            "enum": [
              "null"
            ]
          },
          {
            "type": "string",
            "enum": [
              "boolean"
            ]
          },
          {
            "type": "string",
            "enum": [
              "number"
            ]
          },
          {
            "type": "object",
            "required": [
              "string"
            ],
            "properties": {
              "string": {
                "type": "object",
                "required": [
                  "characters"
                ],
                "properties": {
                  "characters": {
                    "type": "integer",
                    "minimum": 0
                  }
                }
              }
            }
          },
          {
            "type": "object",
            "required": [
              "array"
            ],
            "properties": {
              "array": {
                "type": "object",
                "required": [
                  "items"
                ],
                "properties": {
                  "items": {
                    "type": "integer",
                    "minimum": 0
                  }
                }
              }
            }
          },
          {
            "type": "object",
            "required": [
              "object"
            ],
            "properties": {
              "object": {
                "type": "object",
                "required": [
                  "properties"
                ],
                "properties": {
                  "properties": {
                    "type": "integer",
                    "minimum": 0
                  }
                }
              }
            }
          }
        ],
        "description": "Context deliberately includes types and sizes, never actual scalar values."
      },
      "SchemaComplianceCounts": {
        "type": "object",
        "required": [
          "valid",
          "invalid",
          "pending",
          "not_required"
        ],
        "properties": {
          "invalid": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "not_required": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "pending": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "valid": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          }
        }
      },
      "SchemaCompliancePage": {
        "type": "object",
        "required": [
          "items"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ObjectComplianceResponse"
            }
          },
          "next_after": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "description": "Resume after the last inspected candidate, including hidden candidates."
          }
        }
      },
      "SchemaDiagnosticOmission": {
        "type": "string",
        "enum": [
          "actual_value_redacted",
          "instance_path_redacted_or_too_long",
          "schema_constraint_unavailable_or_too_large"
        ]
      },
      "SchemaDiagnosticSnapshotResponse": {
        "type": "object",
        "required": [
          "object_revision",
          "inspected_at",
          "diagnostics"
        ],
        "properties": {
          "diagnostics": {
            "$ref": "#/components/schemas/SchemaDiagnostics"
          },
          "inspected_at": {
            "type": "string",
            "format": "date-time"
          },
          "object_revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          }
        }
      },
      "SchemaDiagnostics": {
        "type": "object",
        "description": "Diagnostics belong to one inspected snapshot, never to current object data.",
        "required": [
          "issues",
          "truncated"
        ],
        "properties": {
          "issues": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SchemaIssue"
            }
          },
          "truncated": {
            "type": "boolean",
            "description": "At least one further issue exists; the unvisited remainder is not counted."
          }
        }
      },
      "SchemaExpectedValue": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "value",
              "status"
            ],
            "properties": {
              "status": {
                "type": "string",
                "enum": [
                  "available"
                ]
              },
              "value": {}
            }
          },
          {
            "type": "object",
            "required": [
              "status"
            ],
            "properties": {
              "status": {
                "type": "string",
                "enum": [
                  "omitted"
                ]
              }
            }
          }
        ],
        "description": "Distinguishes an expected JSON null from an omitted schema constraint."
      },
      "SchemaFailure": {
        "type": "object",
        "description": "One failure, containing only a keyword and bounded schema-owned metadata.",
        "required": [
          "keyword"
        ],
        "properties": {
          "keyword": {
            "type": "string"
          },
          "missing_property": {
            "type": [
              "string",
              "null"
            ]
          },
          "schema_path": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "SchemaFailureGroup": {
        "type": "object",
        "required": [
          "reason",
          "objects",
          "samples"
        ],
        "properties": {
          "objects": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "reason": {
            "$ref": "#/components/schemas/SchemaFailure"
          },
          "samples": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "All object IDs in this group, in scan order; the field name is retained for compatibility.\nOlder reports may contain only samples. Values and instance paths are omitted."
          }
        }
      },
      "SchemaImpactCounts": {
        "type": "object",
        "description": "Disjoint outcomes; counts sum to examined objects, including unknown comparisons.",
        "required": [
          "newly_invalid",
          "newly_valid",
          "still_invalid",
          "still_valid",
          "newly_required_valid",
          "no_longer_required",
          "unchanged_not_required",
          "uninspectable"
        ],
        "properties": {
          "newly_invalid": {
            "type": "integer",
            "format": "int64",
            "description": "Previously valid or not required, now invalid.",
            "minimum": 0
          },
          "newly_required_valid": {
            "type": "integer",
            "format": "int64",
            "description": "Previously not required, now valid under enforced validation.",
            "minimum": 0
          },
          "newly_valid": {
            "type": "integer",
            "format": "int64",
            "description": "Previously invalid, now valid.",
            "minimum": 0
          },
          "no_longer_required": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "still_invalid": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "still_valid": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "unchanged_not_required": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "uninspectable": {
            "type": "integer",
            "format": "int64",
            "description": "Either policy could not be inspected, or the object changed before commit.",
            "minimum": 0
          }
        }
      },
      "SchemaImpactFindingResponse": {
        "type": "object",
        "required": [
          "object_id",
          "reason"
        ],
        "properties": {
          "object_id": {
            "type": "integer",
            "format": "int32"
          },
          "reason": {
            "$ref": "#/components/schemas/SchemaFailure"
          },
          "snapshot": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/SchemaDiagnosticSnapshotResponse"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "SchemaImpactReadiness": {
        "type": "string",
        "enum": [
          "compatible",
          "incompatible",
          "inconclusive"
        ]
      },
      "SchemaImpactResponse": {
        "type": "object",
        "required": [
          "baseline",
          "counts",
          "failures",
          "ungrouped_failures"
        ],
        "properties": {
          "baseline": {
            "$ref": "#/components/schemas/SchemaReference"
          },
          "counts": {
            "$ref": "#/components/schemas/SchemaImpactCounts"
          },
          "failures": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SchemaFailureGroup"
            },
            "description": "Every committed mismatched object, grouped by its first failure without a group limit."
          },
          "findings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SchemaImpactFindingResponse"
            },
            "description": "Saved diagnostics, object revision and inspection time. Older findings have no snapshot."
          },
          "ungrouped_failures": {
            "type": "integer",
            "format": "int64",
            "description": "Failures omitted by older capped reports; zero for newly started analyses.\nRerun an older analysis to obtain its complete object lists.",
            "minimum": 0
          }
        }
      },
      "SchemaIssue": {
        "type": "object",
        "description": "JSON Pointers use zero-based array indexes; an empty pointer means the root.",
        "required": [
          "reason",
          "message",
          "expected",
          "actual",
          "alternative",
          "omissions"
        ],
        "properties": {
          "actual": {
            "$ref": "#/components/schemas/SchemaActualValue"
          },
          "alternative": {
            "type": "boolean",
            "description": "A failed alternative is explanatory, not an independently required repair."
          },
          "expected": {
            "$ref": "#/components/schemas/SchemaExpectedValue"
          },
          "instance_path": {
            "type": [
              "string",
              "null"
            ]
          },
          "message": {
            "type": "string"
          },
          "omissions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SchemaDiagnosticOmission"
            }
          },
          "reason": {
            "$ref": "#/components/schemas/SchemaFailure"
          }
        }
      },
      "SchemaObjectUrlTemplate": {
        "type": "string",
        "description": "Absolute frontend URL containing exactly one `{object_id}` placeholder.",
        "example": "https://inventory.example/objects/{object_id}"
      },
      "SchemaReference": {
        "type": "object",
        "description": "A dependency on one exact schema document; resource revisions are unrelated.",
        "required": [
          "class_id",
          "revision"
        ],
        "properties": {
          "class_id": {
            "$ref": "#/components/schemas/HubuumClassID"
          },
          "revision": {
            "$ref": "#/components/schemas/SchemaRevision"
          }
        }
      },
      "SchemaRepairReportRequest": {
        "type": "object",
        "required": [
          "object_url_template"
        ],
        "properties": {
          "object_url_template": {
            "$ref": "#/components/schemas/SchemaObjectUrlTemplate"
          },
          "template_id": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportTemplateID",
                "description": "Optional stored HTML layout. It must render `report_content` exactly once."
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false
      },
      "SchemaRevision": {
        "type": "integer",
        "format": "int64",
        "description": "Database-owned positive resource revision.",
        "minimum": 1
      },
      "SchemaRevisionResponse": {
        "type": "object",
        "required": [
          "class_id",
          "revision",
          "validate_schema",
          "status",
          "created_at"
        ],
        "properties": {
          "activated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "activation_policy": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/SchemaActivationPolicy"
              },
              {
                "type": "null"
              }
            ]
          },
          "class_id": {
            "$ref": "#/components/schemas/HubuumClassID"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "created_by": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "json_schema": {},
          "revision": {
            "$ref": "#/components/schemas/SchemaRevision"
          },
          "status": {
            "$ref": "#/components/schemas/SchemaRevisionStatus"
          },
          "validate_schema": {
            "type": "boolean"
          }
        }
      },
      "SchemaRevisionStatus": {
        "type": "string",
        "enum": [
          "staged",
          "active",
          "retired",
          "abandoned"
        ]
      },
      "SchemaStageRequest": {
        "type": "object",
        "required": [
          "validate_schema"
        ],
        "properties": {
          "json_schema": {},
          "validate_schema": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "SchemaTaskDetails": {
        "type": "object",
        "properties": {
          "class_id": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/HubuumClassID"
              },
              {
                "type": "null"
              }
            ]
          },
          "results_url": {
            "type": [
              "string",
              "null"
            ]
          },
          "schema_revision": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/SchemaRevision"
              },
              {
                "type": "null"
              }
            ]
          },
          "work_kind": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/SchemaWorkKind"
              },
              {
                "type": "null"
              }
            ]
          },
          "work_status": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/SchemaWorkStatus"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "SchemaValidationConfig": {
        "type": "object",
        "required": [
          "max_schema_bytes",
          "max_expanded_work",
          "max_instance_bytes",
          "max_instance_work"
        ],
        "properties": {
          "max_expanded_work": {
            "type": "integer",
            "minimum": 0
          },
          "max_instance_bytes": {
            "type": "integer",
            "minimum": 0
          },
          "max_instance_work": {
            "type": "integer",
            "minimum": 0
          },
          "max_schema_bytes": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "SchemaWorkKind": {
        "type": "string",
        "enum": [
          "impact",
          "revalidation"
        ]
      },
      "SchemaWorkResponse": {
        "type": "object",
        "required": [
          "task_id",
          "target",
          "kind",
          "status",
          "start_epoch",
          "upper_bound",
          "cursor",
          "examined",
          "valid",
          "invalid",
          "not_required",
          "uninspectable",
          "stale",
          "invalid_samples",
          "elapsed_millis",
          "batches",
          "created_at"
        ],
        "properties": {
          "batches": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "current_active_schema": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/SchemaReference"
              },
              {
                "type": "null"
              }
            ]
          },
          "current_epoch": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "minimum": 0
          },
          "cursor": {
            "type": "integer",
            "format": "int32"
          },
          "elapsed_millis": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "end_epoch": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "minimum": 0
          },
          "examined": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "impact": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/SchemaImpactResponse"
              },
              {
                "type": "null"
              }
            ]
          },
          "invalid": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "invalid_samples": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Up to 20 summary IDs; impact.failures contains all committed mismatches."
          },
          "kind": {
            "$ref": "#/components/schemas/SchemaWorkKind"
          },
          "not_required": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "readiness": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/SchemaImpactReadiness",
                "description": "Recomputed when this report is read; activation rechecks the same boundaries."
              },
              {
                "type": "null"
              }
            ]
          },
          "stale": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "start_epoch": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "status": {
            "$ref": "#/components/schemas/SchemaWorkStatus"
          },
          "target": {
            "$ref": "#/components/schemas/SchemaReference"
          },
          "task_id": {
            "$ref": "#/components/schemas/TaskID"
          },
          "uninspectable": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "upper_bound": {
            "type": "integer",
            "format": "int32"
          },
          "valid": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          }
        }
      },
      "SchemaWorkStatus": {
        "type": "string",
        "enum": [
          "running",
          "failed",
          "complete",
          "cancelled",
          "superseded"
        ]
      },
      "SecretSourceConfig": {
        "type": "object",
        "required": [
          "provider",
          "file_root_configured",
          "cache_capacity_per_consumer",
          "cache_total_bytes_per_consumer",
          "cache_ttl_seconds",
          "stale_values_allowed",
          "projected_symlinks_confined_to_root"
        ],
        "properties": {
          "cache_capacity_per_consumer": {
            "type": "integer",
            "minimum": 0
          },
          "cache_total_bytes_per_consumer": {
            "type": "integer",
            "minimum": 0
          },
          "cache_ttl_seconds": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "file_root_configured": {
            "type": "boolean",
            "description": "Whether a mounted-secret root was configured. The path is never returned."
          },
          "projected_symlinks_confined_to_root": {
            "type": "boolean"
          },
          "provider": {
            "type": "string",
            "description": "Selected process-wide provider. Values are `environment`, `file`, or\n`invalid` when startup configuration cannot be parsed."
          },
          "stale_values_allowed": {
            "type": "boolean"
          }
        }
      },
      "SecretStatus": {
        "type": "object",
        "required": [
          "configured"
        ],
        "properties": {
          "configured": {
            "type": "boolean",
            "description": "Whether a value is configured. The value itself is never returned."
          }
        }
      },
      "ServerConfig": {
        "type": "object",
        "required": [
          "runtime_role",
          "bind_ip",
          "bind_port",
          "log_level",
          "actix_workers",
          "metrics_enabled",
          "metrics_path",
          "tls"
        ],
        "properties": {
          "actix_workers": {
            "type": "integer",
            "minimum": 0
          },
          "bind_ip": {
            "type": "string"
          },
          "bind_port": {
            "type": "integer",
            "format": "int32",
            "minimum": 0
          },
          "log_level": {
            "type": "string"
          },
          "metrics_enabled": {
            "type": "boolean"
          },
          "metrics_path": {
            "type": "string"
          },
          "runtime_role": {
            "type": "string"
          },
          "tls": {
            "$ref": "#/components/schemas/TlsConfig"
          }
        }
      },
      "ServiceAccountPointResponse": {
        "type": "object",
        "description": "Strongly tagged point representation of a service account.\n\nThe identity-scope name is omitted because that independently revisioned\nresource is not covered by the service account's principal revision.",
        "required": [
          "id",
          "identity_scope_id",
          "name",
          "description",
          "owner_group_id",
          "created_at",
          "updated_at",
          "revision"
        ],
        "properties": {
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "created_by": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "description": {
            "type": "string"
          },
          "disabled_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "identity_scope_id": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string"
          },
          "owner_group_id": {
            "type": "integer",
            "format": "int32"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "ServiceAccountResponse": {
        "type": "object",
        "description": "Public response shape, combining the service-account row with its principal\nname (the name lives on `principals`).",
        "required": [
          "id",
          "identity_scope",
          "name",
          "description",
          "owner_group_id",
          "created_at",
          "updated_at",
          "revision"
        ],
        "properties": {
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "created_by": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "description": {
            "type": "string"
          },
          "disabled_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "identity_scope": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "owner_group_id": {
            "type": "integer",
            "format": "int32"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "SharedComputedScopeResponse": {
        "type": "object",
        "required": [
          "revision",
          "materialization_stale",
          "values",
          "errors"
        ],
        "properties": {
          "errors": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/ComputedFieldErrorResponse"
            },
            "propertyNames": {
              "type": "string"
            }
          },
          "materialization_stale": {
            "type": "boolean"
          },
          "revision": {
            "type": "integer",
            "format": "int64"
          },
          "values": {
            "type": "object",
            "additionalProperties": {},
            "propertyNames": {
              "type": "string"
            }
          }
        }
      },
      "StructuredClassSelector": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "id"
            ],
            "properties": {
              "id": {
                "$ref": "#/components/schemas/HubuumClassID"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "name"
            ],
            "properties": {
              "name": {
                "type": "string",
                "minLength": 1
              }
            }
          }
        ],
        "description": "Exact object-class selector. Exactly one of `id` or `name` is accepted."
      },
      "StructuredRelatedPredicate": {
        "type": "object",
        "description": "Existential object-relation predicate.\n\nThe selected target class and all filters must match one object reachable\nover a visible bidirectional path no deeper than `depth`.",
        "required": [
          "class"
        ],
        "properties": {
          "class": {
            "$ref": "#/components/schemas/StructuredClassSelector"
          },
          "depth": {
            "type": "integer",
            "format": "int32",
            "maximum": 10,
            "minimum": 1
          },
          "filters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StructuredSearchFieldPredicate"
            },
            "maxItems": 16
          }
        },
        "additionalProperties": false
      },
      "StructuredSearchDoneEvent": {
        "type": "object",
        "description": "Terminal success event emitted by the structured-search SSE endpoint.",
        "required": [
          "version",
          "kind",
          "page_limit"
        ],
        "properties": {
          "kind": {
            "$ref": "#/components/schemas/StructuredSearchResourceKind",
            "description": "Resource kind shared by all preceding result events."
          },
          "next": {
            "type": [
              "string",
              "null"
            ],
            "description": "Opaque next-page cursor, or null at the final page."
          },
          "page_limit": {
            "type": "integer",
            "description": "Effective page size after applying server pagination limits.",
            "minimum": 0
          },
          "total": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "description": "Exact authorized count when requested; otherwise null."
          },
          "version": {
            "type": "integer",
            "format": "int32",
            "description": "DSL version used to execute the request.",
            "minimum": 0
          }
        }
      },
      "StructuredSearchErrorEvent": {
        "type": "object",
        "description": "Terminal failure event emitted after an SSE response has started.",
        "required": [
          "version",
          "kind",
          "message"
        ],
        "properties": {
          "kind": {
            "$ref": "#/components/schemas/StructuredSearchResourceKind",
            "description": "Resource kind selected by the request."
          },
          "message": {
            "type": "string",
            "description": "Public API error message."
          },
          "version": {
            "type": "integer",
            "format": "int32",
            "description": "DSL version supplied by the request.",
            "minimum": 0
          }
        }
      },
      "StructuredSearchExpression": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "args",
              "op"
            ],
            "properties": {
              "args": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/StructuredSearchExpression"
                },
                "maxItems": 64,
                "minItems": 2
              },
              "op": {
                "type": "string",
                "enum": [
                  "and"
                ]
              }
            },
            "maxProperties": 2
          },
          {
            "type": "object",
            "required": [
              "args",
              "op"
            ],
            "properties": {
              "args": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/StructuredSearchExpression"
                },
                "maxItems": 64,
                "minItems": 2
              },
              "op": {
                "type": "string",
                "enum": [
                  "or"
                ]
              }
            },
            "maxProperties": 2
          },
          {
            "type": "object",
            "required": [
              "arg",
              "op"
            ],
            "properties": {
              "arg": {
                "$ref": "#/components/schemas/StructuredSearchExpression"
              },
              "op": {
                "type": "string",
                "enum": [
                  "not"
                ]
              }
            },
            "maxProperties": 2
          },
          {
            "type": "object",
            "required": [
              "predicate",
              "op"
            ],
            "properties": {
              "op": {
                "type": "string",
                "enum": [
                  "field"
                ]
              },
              "predicate": {
                "$ref": "#/components/schemas/StructuredSearchFieldPredicate"
              }
            },
            "maxProperties": 2
          },
          {
            "type": "object",
            "required": [
              "predicate",
              "op"
            ],
            "properties": {
              "op": {
                "type": "string",
                "enum": [
                  "related"
                ]
              },
              "predicate": {
                "$ref": "#/components/schemas/StructuredRelatedPredicate"
              }
            },
            "maxProperties": 2
          }
        ],
        "description": "Recursive boolean expression used by version 1 structured search."
      },
      "StructuredSearchField": {
        "type": "string",
        "description": "Searchable and sortable fields across all version 1 target catalogs.\n\nEach request validates this enum against its selected target. See\n`docs/search_api.md` for the target/field matrix.",
        "enum": [
          "id",
          "name",
          "description",
          "collection_id",
          "created_at",
          "updated_at",
          "revision",
          "json_data",
          "validate_schema",
          "json_schema",
          "identity_scope",
          "proper_name",
          "email",
          "occurred_at",
          "entity_type",
          "entity_id",
          "entity_name",
          "action",
          "actor_kind",
          "actor_user_id",
          "initiator_user_id",
          "summary",
          "metadata",
          "managed_by",
          "external_key",
          "last_sync_attempted_at",
          "last_sync_success_at",
          "owner_group_id",
          "created_by",
          "disabled_at"
        ]
      },
      "StructuredSearchFieldPredicate": {
        "type": "object",
        "description": "One typed field predicate.\n\nJSON fields require `path`. `is_null` omits `value`; all other operators\nrequire a scalar or bounded scalar array.",
        "required": [
          "field",
          "operator"
        ],
        "properties": {
          "field": {
            "$ref": "#/components/schemas/StructuredSearchField"
          },
          "operator": {
            "$ref": "#/components/schemas/StructuredSearchOperator"
          },
          "path": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1
          },
          "value": {}
        },
        "additionalProperties": false
      },
      "StructuredSearchOperator": {
        "type": "string",
        "description": "Operators supported by the structured DSL.\n\nOperator applicability depends on the selected target field. JSON-path\nfields additionally support array, key, and network operations.",
        "enum": [
          "equals",
          "iequals",
          "contains",
          "icontains",
          "startswith",
          "istartswith",
          "endswith",
          "iendswith",
          "like",
          "regex",
          "gt",
          "gte",
          "lt",
          "lte",
          "between",
          "within_network",
          "contains_network",
          "contains_ip",
          "overlaps_network",
          "inet_equals",
          "in",
          "all",
          "array_length",
          "has_key",
          "is_null"
        ]
      },
      "StructuredSearchRequest": {
        "type": "object",
        "description": "Version 1 structured resource-search request.",
        "required": [
          "version",
          "target"
        ],
        "properties": {
          "cursor": {
            "type": [
              "string",
              "null"
            ],
            "description": "Opaque cursor returned by an identical prior request and auth context.",
            "minLength": 1
          },
          "filter": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/StructuredSearchExpression",
                "description": "Optional recursive boolean predicate."
              },
              {
                "type": "null"
              }
            ]
          },
          "include_total": {
            "type": "boolean",
            "description": "Compute and return an exact authorized result count when true."
          },
          "limit": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Requested page size, clamped by server pagination configuration.",
            "minimum": 1
          },
          "sort": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StructuredSearchSort"
            },
            "description": "Stable target-specific sort keys. The resource default applies when empty.",
            "maxItems": 8
          },
          "target": {
            "$ref": "#/components/schemas/StructuredSearchTarget",
            "description": "Resource catalog and optional exact object-class constraint."
          },
          "version": {
            "type": "integer",
            "format": "int32",
            "description": "DSL grammar version. Version 1 is currently required.",
            "maximum": 1,
            "minimum": 1
          }
        },
        "additionalProperties": false,
        "example": {
          "filter": {
            "args": [
              {
                "op": "field",
                "predicate": {
                  "field": "description",
                  "operator": "icontains",
                  "value": "production"
                }
              },
              {
                "arg": {
                  "op": "related",
                  "predicate": {
                    "class": {
                      "name": "Room"
                    },
                    "depth": 2,
                    "filters": [
                      {
                        "field": "json_data",
                        "operator": "equals",
                        "path": "status",
                        "value": "retired"
                      }
                    ]
                  }
                },
                "op": "not"
              }
            ],
            "op": "and"
          },
          "include_total": false,
          "limit": 100,
          "sort": [
            {
              "direction": "asc",
              "field": "name"
            }
          ],
          "target": {
            "class": {
              "name": "Server"
            },
            "kind": "object"
          },
          "version": 1
        }
      },
      "StructuredSearchResourceKind": {
        "type": "string",
        "description": "Resource catalogs addressable by version 1 of the structured search DSL.",
        "enum": [
          "collection",
          "class",
          "object",
          "audit_event",
          "user",
          "group",
          "service_account"
        ]
      },
      "StructuredSearchResponse": {
        "type": "object",
        "description": "Cursor-paginated result envelope for structured resource search.",
        "required": [
          "version",
          "kind",
          "results"
        ],
        "properties": {
          "kind": {
            "$ref": "#/components/schemas/StructuredSearchResourceKind",
            "description": "Resource kind shared by every result item."
          },
          "next": {
            "type": [
              "string",
              "null"
            ],
            "description": "Opaque next-page cursor, or null at the final page."
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StructuredSearchResult"
            },
            "description": "Tagged resource values using the normal public list representation."
          },
          "total": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "description": "Exact authorized count when requested; otherwise null."
          },
          "version": {
            "type": "integer",
            "format": "int32",
            "description": "DSL version used to produce this response.",
            "minimum": 0
          }
        }
      },
      "StructuredSearchResult": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "resource",
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "collection"
                ]
              },
              "resource": {
                "$ref": "#/components/schemas/Collection"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "resource",
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "class"
                ]
              },
              "resource": {
                "$ref": "#/components/schemas/HubuumClassExpanded"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "resource",
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "object"
                ]
              },
              "resource": {
                "$ref": "#/components/schemas/HubuumObject"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "resource",
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "audit_event"
                ]
              },
              "resource": {
                "$ref": "#/components/schemas/EventResponse"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "resource",
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "user"
                ]
              },
              "resource": {
                "$ref": "#/components/schemas/UserResponse"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "resource",
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "group"
                ]
              },
              "resource": {
                "$ref": "#/components/schemas/GroupResponse"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "resource",
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "service_account"
                ]
              },
              "resource": {
                "$ref": "#/components/schemas/ServiceAccountResponse"
              }
            }
          }
        ],
        "description": "Tagged union of public resource representations returned by the DSL."
      },
      "StructuredSearchSort": {
        "type": "object",
        "description": "Stable sort key and direction for structured results.",
        "required": [
          "field"
        ],
        "properties": {
          "direction": {
            "$ref": "#/components/schemas/StructuredSearchSortDirection"
          },
          "field": {
            "$ref": "#/components/schemas/StructuredSearchField"
          }
        },
        "additionalProperties": false
      },
      "StructuredSearchSortDirection": {
        "type": "string",
        "enum": [
          "asc",
          "desc"
        ]
      },
      "StructuredSearchStartedEvent": {
        "type": "object",
        "description": "First event emitted by the structured-search SSE endpoint.",
        "required": [
          "version",
          "kind"
        ],
        "properties": {
          "kind": {
            "$ref": "#/components/schemas/StructuredSearchResourceKind",
            "description": "Resource kind selected by the request."
          },
          "version": {
            "type": "integer",
            "format": "int32",
            "description": "DSL version used to execute the request.",
            "minimum": 0
          }
        }
      },
      "StructuredSearchTarget": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "collection"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "class"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "kind"
            ],
            "properties": {
              "class": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/StructuredClassSelector"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "kind": {
                "type": "string",
                "enum": [
                  "object"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "audit_event"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "user"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "group"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "service_account"
                ]
              }
            }
          }
        ],
        "description": "One resource catalog selected by a structured search request.\n\nObject searches may optionally be constrained to one exact class. All\nother target variants are property-free tagged objects."
      },
      "SystemEventSubscription": {
        "type": "object",
        "required": [
          "id",
          "sink_id",
          "name",
          "description",
          "entity_types",
          "actions",
          "routing",
          "enabled",
          "created_at",
          "updated_at",
          "revision"
        ],
        "properties": {
          "actions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "description": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "entity_types": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "filter": {
            "$ref": "#/components/schemas/EventSubscriptionFilter"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "routing": {},
          "sink_id": {
            "type": "integer",
            "format": "int32"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "TaskCancelRequest": {
        "type": "object",
        "description": "An idempotent stop request. The optional expected status protects queued-only withdrawals.",
        "properties": {
          "expected_status": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/TaskStatus"
              },
              {
                "type": "null"
              }
            ]
          },
          "reason": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 512
          }
        },
        "additionalProperties": false
      },
      "TaskConfig": {
        "type": "object",
        "required": [
          "workers",
          "poll_interval_ms",
          "lease_seconds",
          "import_execution_timeout_seconds",
          "export_execution_timeout_seconds",
          "backup_execution_timeout_seconds",
          "reindex_execution_timeout_seconds",
          "remote_call_execution_timeout_seconds",
          "schema_validation_execution_timeout_seconds",
          "heartbeat_seconds",
          "recovery_interval_seconds",
          "computed_reindex_batch_size",
          "import_max_active_per_user",
          "export_max_active_per_user",
          "remote_call_max_active_per_user"
        ],
        "properties": {
          "backup_execution_timeout_seconds": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "computed_reindex_batch_size": {
            "type": "integer",
            "minimum": 0
          },
          "export_execution_timeout_seconds": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "export_max_active_per_user": {
            "type": "integer",
            "minimum": 0
          },
          "heartbeat_seconds": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "import_execution_timeout_seconds": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "import_max_active_per_user": {
            "type": "integer",
            "minimum": 0
          },
          "lease_seconds": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "poll_interval_ms": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "recovery_interval_seconds": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "reindex_execution_timeout_seconds": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "remote_call_execution_timeout_seconds": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "remote_call_max_active_per_user": {
            "type": "integer",
            "minimum": 0
          },
          "schema_validation_execution_timeout_seconds": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "workers": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "TaskDetails": {
        "type": "object",
        "properties": {
          "backup": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/BackupTaskDetails"
              },
              {
                "type": "null"
              }
            ]
          },
          "export": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportTaskDetails"
              },
              {
                "type": "null"
              }
            ]
          },
          "import": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ImportTaskDetails"
              },
              {
                "type": "null"
              }
            ]
          },
          "reindex": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RebuildTaskDetails"
              },
              {
                "type": "null"
              }
            ]
          },
          "remote_call": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RemoteCallTaskDetails"
              },
              {
                "type": "null"
              }
            ]
          },
          "schema_validation": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/SchemaTaskDetails"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false
      },
      "TaskDiscoveryTarget": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "collection_id",
              "type"
            ],
            "properties": {
              "collection_id": {
                "$ref": "#/components/schemas/CollectionID"
              },
              "type": {
                "type": "string",
                "enum": [
                  "collection"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "class_id",
              "type"
            ],
            "properties": {
              "class_id": {
                "$ref": "#/components/schemas/HubuumClassID"
              },
              "type": {
                "type": "string",
                "enum": [
                  "class"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "object_id",
              "type"
            ],
            "properties": {
              "class_id": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/HubuumClassID"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "object_id": {
                "$ref": "#/components/schemas/HubuumObjectID"
              },
              "type": {
                "type": "string",
                "enum": [
                  "object"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "relation_id",
              "type"
            ],
            "properties": {
              "relation_id": {
                "$ref": "#/components/schemas/HubuumClassRelationID"
              },
              "type": {
                "type": "string",
                "enum": [
                  "class_relation"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "relation_id",
              "type"
            ],
            "properties": {
              "relation_id": {
                "$ref": "#/components/schemas/HubuumObjectRelationID"
              },
              "type": {
                "type": "string",
                "enum": [
                  "object_relation"
                ]
              }
            }
          }
        ]
      },
      "TaskEventResponse": {
        "type": "object",
        "required": [
          "id",
          "task_id",
          "event_type",
          "message",
          "created_at",
          "provenance"
        ],
        "properties": {
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "data": {},
          "event_type": {
            "type": "string"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "message": {
            "type": "string"
          },
          "provenance": {
            "$ref": "#/components/schemas/Provenance"
          },
          "task_id": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "TaskID": {
        "type": "integer",
        "format": "int32",
        "description": "Validated positive task id.",
        "minimum": 1
      },
      "TaskKind": {
        "type": "string",
        "enum": [
          "import",
          "export",
          "backup",
          "reindex",
          "remote_call",
          "schema_validation"
        ]
      },
      "TaskLinks": {
        "type": "object",
        "required": [
          "task",
          "events"
        ],
        "properties": {
          "backup": {
            "type": [
              "string",
              "null"
            ]
          },
          "backup_output": {
            "type": [
              "string",
              "null"
            ]
          },
          "events": {
            "type": "string"
          },
          "export": {
            "type": [
              "string",
              "null"
            ]
          },
          "export_output": {
            "type": [
              "string",
              "null"
            ]
          },
          "import": {
            "type": [
              "string",
              "null"
            ]
          },
          "import_results": {
            "type": [
              "string",
              "null"
            ]
          },
          "task": {
            "type": "string"
          }
        }
      },
      "TaskOutputDiscoveryState": {
        "type": "string",
        "enum": [
          "available",
          "expired",
          "not_produced",
          "unknown"
        ]
      },
      "TaskProgress": {
        "type": "object",
        "required": [
          "total_items",
          "processed_items",
          "success_items",
          "failed_items"
        ],
        "properties": {
          "failed_items": {
            "type": "integer",
            "format": "int32"
          },
          "processed_items": {
            "type": "integer",
            "format": "int32"
          },
          "success_items": {
            "type": "integer",
            "format": "int32"
          },
          "total_items": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "TaskQueueStateResponse": {
        "type": "object",
        "required": [
          "actix_workers",
          "configured_task_workers",
          "task_poll_interval_ms",
          "total_tasks",
          "queued_tasks",
          "validating_tasks",
          "running_tasks",
          "active_tasks",
          "succeeded_tasks",
          "failed_tasks",
          "partially_succeeded_tasks",
          "cancelled_tasks",
          "import_tasks",
          "export_tasks",
          "reindex_tasks",
          "total_task_events",
          "total_import_result_rows"
        ],
        "properties": {
          "active_tasks": {
            "type": "integer",
            "format": "int64"
          },
          "actix_workers": {
            "type": "integer",
            "minimum": 0
          },
          "cancelled_tasks": {
            "type": "integer",
            "format": "int64"
          },
          "configured_task_workers": {
            "type": "integer",
            "minimum": 0
          },
          "export_tasks": {
            "type": "integer",
            "format": "int64"
          },
          "failed_tasks": {
            "type": "integer",
            "format": "int64"
          },
          "import_tasks": {
            "type": "integer",
            "format": "int64"
          },
          "oldest_active_at": {
            "type": [
              "string",
              "null"
            ]
          },
          "oldest_queued_at": {
            "type": [
              "string",
              "null"
            ]
          },
          "partially_succeeded_tasks": {
            "type": "integer",
            "format": "int64"
          },
          "queued_tasks": {
            "type": "integer",
            "format": "int64"
          },
          "reindex_tasks": {
            "type": "integer",
            "format": "int64"
          },
          "running_tasks": {
            "type": "integer",
            "format": "int64"
          },
          "succeeded_tasks": {
            "type": "integer",
            "format": "int64"
          },
          "task_poll_interval_ms": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "total_import_result_rows": {
            "type": "integer",
            "format": "int64"
          },
          "total_task_events": {
            "type": "integer",
            "format": "int64"
          },
          "total_tasks": {
            "type": "integer",
            "format": "int64"
          },
          "validating_tasks": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "TaskRemoteSideEffectState": {
        "type": "string",
        "description": "Conservative dispatch evidence. An in-flight request can already have\naffected the remote system even when no HTTP response was received.",
        "enum": [
          "not_sent",
          "possibly_sent",
          "legacy_unknown"
        ]
      },
      "TaskResponse": {
        "type": "object",
        "required": [
          "unattempted_items",
          "id",
          "kind",
          "status",
          "created_at",
          "progress",
          "links"
        ],
        "properties": {
          "cancel_reason": {
            "type": [
              "string",
              "null"
            ]
          },
          "cancel_requested_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "cancel_requested_by": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "details": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/TaskDetails"
              },
              {
                "type": "null"
              }
            ]
          },
          "execution_deadline_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "finished_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "kind": {
            "$ref": "#/components/schemas/TaskKind"
          },
          "links": {
            "$ref": "#/components/schemas/TaskLinks"
          },
          "progress": {
            "$ref": "#/components/schemas/TaskProgress"
          },
          "remote_side_effect_state": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/TaskRemoteSideEffectState"
              },
              {
                "type": "null"
              }
            ]
          },
          "request_redacted_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "started_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "status": {
            "$ref": "#/components/schemas/TaskStatus"
          },
          "submitted_by": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "summary": {
            "type": [
              "string",
              "null"
            ]
          },
          "terminal_reason": {
            "type": [
              "string",
              "null"
            ]
          },
          "unattempted_items": {
            "type": "integer",
            "format": "int32",
            "description": "Items without a committed result; authoritative for a terminal task."
          }
        }
      },
      "TaskStatus": {
        "type": "string",
        "enum": [
          "queued",
          "validating",
          "running",
          "succeeded",
          "failed",
          "partially_succeeded",
          "cancelled"
        ]
      },
      "TestOperation": {
        "type": "object",
        "description": "JSON Patch 'test' operation representation",
        "required": [
          "path",
          "value"
        ],
        "properties": {
          "path": {
            "type": "string",
            "description": "JSON-Pointer value [RFC6901](https://tools.ietf.org/html/rfc6901) that references a location\nwithin the target document where the operation is performed."
          },
          "value": {
            "description": "Value to test against."
          }
        }
      },
      "TlsConfig": {
        "type": "object",
        "required": [
          "enabled",
          "certificate_path_configured",
          "private_key_path",
          "private_key_passphrase"
        ],
        "properties": {
          "backend": {
            "type": [
              "string",
              "null"
            ]
          },
          "certificate_path_configured": {
            "type": "boolean"
          },
          "enabled": {
            "type": "boolean"
          },
          "private_key_passphrase": {
            "$ref": "#/components/schemas/SecretStatus"
          },
          "private_key_path": {
            "$ref": "#/components/schemas/SecretStatus"
          }
        }
      },
      "TokenID": {
        "type": "integer",
        "format": "int32",
        "description": "Validated positive token id.",
        "minimum": 1
      },
      "TokenListState": {
        "type": "string",
        "description": "Lifecycle subset selected by a token-management list endpoint.\n\n`Expired` and `Revoked` intentionally overlap: a revoked token remains\nexpired once its effective expiry elapses. `Active` is the validation\npredicate, while `All` returns every retained row.",
        "enum": [
          "active",
          "expired",
          "revoked",
          "all"
        ]
      },
      "TokenResourceScope": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "id",
              "kind"
            ],
            "properties": {
              "id": {
                "$ref": "#/components/schemas/CollectionID"
              },
              "kind": {
                "type": "string",
                "enum": [
                  "collection"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "kind"
            ],
            "properties": {
              "id": {
                "$ref": "#/components/schemas/HubuumClassID"
              },
              "kind": {
                "type": "string",
                "enum": [
                  "class"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "kind"
            ],
            "properties": {
              "id": {
                "$ref": "#/components/schemas/HubuumObjectID"
              },
              "kind": {
                "type": "string",
                "enum": [
                  "object"
                ]
              }
            }
          }
        ],
        "description": "One resource explicitly included in a token's resource boundary.\n\nResource scopes are additive within the boundary: a collection entry covers\nthat collection, its classes, and their objects; a class entry covers that\nclass and its objects; and an object entry covers only that object. The\nboundary is still intersected with the principal's live group grants."
      },
      "TokenScopeDetails": {
        "type": "object",
        "description": "API representation of a token's independent permission and resource\nboundaries.\n\nThis type is nested under a singular `scope` field. An absent outer\n`scope` means that the token is unscoped; within a present scope, an absent\ndimension is unrestricted.",
        "properties": {
          "permissions": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/Permissions"
            },
            "description": "Permission boundary. `None` leaves this dimension unrestricted."
          },
          "resources": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/TokenResourceScope"
            },
            "description": "Collection, class, and object boundary. `None` leaves this dimension\nunrestricted.",
            "maxItems": 1000
          }
        },
        "additionalProperties": false
      },
      "TracingConfig": {
        "type": "object",
        "required": [
          "enabled",
          "protocol",
          "endpoint",
          "static_headers",
          "ca_certificate_configured",
          "client_certificate_configured",
          "client_private_key",
          "connect_timeout_ms",
          "export_timeout_ms",
          "flush_timeout_ms",
          "queue_capacity",
          "batch_size",
          "sampling_mode",
          "sampling_ratio",
          "service_name",
          "service_namespace",
          "deployment_environment",
          "trust_incoming_sampling",
          "propagate_outbound"
        ],
        "properties": {
          "batch_size": {
            "type": "integer",
            "minimum": 0
          },
          "ca_certificate_configured": {
            "type": "boolean"
          },
          "client_certificate_configured": {
            "type": "boolean"
          },
          "client_private_key": {
            "$ref": "#/components/schemas/SecretStatus"
          },
          "connect_timeout_ms": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "deployment_environment": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "endpoint": {
            "$ref": "#/components/schemas/SecretStatus"
          },
          "export_timeout_ms": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "flush_timeout_ms": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "propagate_outbound": {
            "type": "boolean"
          },
          "protocol": {
            "type": "string"
          },
          "queue_capacity": {
            "type": "integer",
            "minimum": 0
          },
          "sampling_mode": {
            "type": "string"
          },
          "sampling_ratio": {
            "type": "number",
            "format": "double"
          },
          "service_name": {
            "type": "string"
          },
          "service_namespace": {
            "type": "string"
          },
          "static_headers": {
            "$ref": "#/components/schemas/SecretStatus"
          },
          "trust_incoming_sampling": {
            "type": "boolean"
          }
        }
      },
      "UnifiedSearchBatchResponse": {
        "type": "object",
        "required": [
          "kind",
          "collections",
          "classes",
          "objects"
        ],
        "properties": {
          "classes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HubuumClassExpanded"
            }
          },
          "collections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Collection"
            }
          },
          "kind": {
            "type": "string"
          },
          "next": {
            "type": [
              "string",
              "null"
            ]
          },
          "objects": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HubuumObject"
            }
          }
        }
      },
      "UnifiedSearchDoneEvent": {
        "type": "object",
        "required": [
          "query"
        ],
        "properties": {
          "query": {
            "type": "string"
          }
        }
      },
      "UnifiedSearchErrorEvent": {
        "type": "object",
        "required": [
          "message"
        ],
        "properties": {
          "message": {
            "type": "string"
          }
        }
      },
      "UnifiedSearchKind": {
        "type": "string",
        "enum": [
          "collection",
          "class",
          "object"
        ]
      },
      "UnifiedSearchNext": {
        "type": "object",
        "properties": {
          "classes": {
            "type": [
              "string",
              "null"
            ]
          },
          "collections": {
            "type": [
              "string",
              "null"
            ]
          },
          "objects": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "UnifiedSearchResponse": {
        "type": "object",
        "required": [
          "query",
          "results",
          "next"
        ],
        "properties": {
          "next": {
            "$ref": "#/components/schemas/UnifiedSearchNext"
          },
          "query": {
            "type": "string"
          },
          "results": {
            "$ref": "#/components/schemas/UnifiedSearchResults"
          }
        }
      },
      "UnifiedSearchResults": {
        "type": "object",
        "required": [
          "collections",
          "classes",
          "objects"
        ],
        "properties": {
          "classes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HubuumClassExpanded"
            }
          },
          "collections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Collection"
            }
          },
          "objects": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HubuumObject"
            }
          }
        }
      },
      "UnifiedSearchStartedEvent": {
        "type": "object",
        "required": [
          "query"
        ],
        "properties": {
          "query": {
            "type": "string"
          }
        }
      },
      "UpdateCollection": {
        "type": "object",
        "properties": {
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "example": {
          "description": "Shared assets and metadata",
          "name": "global-assets"
        }
      },
      "UpdateCollectionParent": {
        "type": "object",
        "required": [
          "parent_collection_id"
        ],
        "properties": {
          "parent_collection_id": {
            "$ref": "#/components/schemas/CollectionID"
          }
        }
      },
      "UpdateEventSink": {
        "type": "object",
        "properties": {
          "config": {
            "description": "Replacement transport settings, including optional webhook payload and response policies."
          },
          "delivery_policy": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/EventDeliveryPolicy"
              },
              {
                "type": "null"
              }
            ]
          },
          "enabled": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "kind": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/EventSinkKind"
              },
              {
                "type": "null"
              }
            ]
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "secret_ref": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "UpdateEventSubscription": {
        "type": "object",
        "properties": {
          "actions": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            }
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "enabled": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "entity_types": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            }
          },
          "filter": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionFilter"
              },
              {
                "type": "null"
              }
            ]
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "routing": {},
          "sink_id": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/EventSinkID"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "UpdateExportTemplate": {
        "type": "object",
        "properties": {
          "class_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "collection_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "default_limits": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportLimits"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_missing_data_policy": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportMissingDataPolicy"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_query": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "include": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportInclude"
              },
              {
                "type": "null"
              }
            ]
          },
          "kind": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportTemplateKind"
              },
              {
                "type": "null"
              }
            ]
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "relation_context": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportRelationContext"
              },
              {
                "type": "null"
              }
            ]
          },
          "scope_kind": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExportScopeKind"
              },
              {
                "type": "null"
              }
            ]
          },
          "template": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "example": {
          "class_id": null,
          "collection_id": 9,
          "default_query": "sort=name.desc",
          "description": "Updated template description",
          "kind": null,
          "name": "owner-export-v2",
          "scope_kind": null,
          "template": "{% for item in items %}{{ item.name }}\n{% endfor %}"
        }
      },
      "UpdateGroup": {
        "type": "object",
        "properties": {
          "groupname": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "example": {
          "groupname": "platform-ops"
        }
      },
      "UpdateHubuumClass": {
        "type": "object",
        "properties": {
          "collection_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "json_schema": {},
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "validate_schema": {
            "type": [
              "boolean",
              "null"
            ]
          }
        },
        "example": {
          "collection_id": 1,
          "description": "Validated server inventory class",
          "json_schema": null,
          "name": "server",
          "validate_schema": true
        }
      },
      "UpdateHubuumObject": {
        "type": "object",
        "properties": {
          "collection_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "data": {},
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "hubuum_class_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "example": {
          "collection_id": null,
          "data": {
            "hostname": "srv-01",
            "status": "active"
          },
          "description": "Primary application server (updated)",
          "hubuum_class_id": null,
          "name": "srv-01"
        }
      },
      "UpdateHubuumObjectRequest": {
        "type": "object",
        "properties": {
          "collection_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "data": {},
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "hubuum_class_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "UpdateRemoteTarget": {
        "type": "object",
        "properties": {
          "allowed_subject_types": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/RemoteTargetSubjectType"
            }
          },
          "auth_config": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RemoteAuthConfig"
              },
              {
                "type": "null"
              }
            ]
          },
          "body_template": {
            "type": [
              "string",
              "null"
            ]
          },
          "class_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "collection_id": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/CollectionID"
              },
              {
                "type": "null"
              }
            ]
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "enabled": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "headers_template": {},
          "method": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RemoteHttpMethod"
              },
              {
                "type": "null"
              }
            ]
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "timeout_ms": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "url_template": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "UpdateServiceAccount": {
        "type": "object",
        "description": "Mutable fields on a service account.",
        "properties": {
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "owner_group_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          }
        }
      },
      "UpdateUser": {
        "type": "object",
        "description": "Struct to update a user.\n\nThe password, if present, is expected to be plaintext. The name lives on the\nprincipal; renaming is handled via the principal, not here.",
        "properties": {
          "email": {
            "type": [
              "string",
              "null"
            ]
          },
          "password": {
            "type": [
              "string",
              "null"
            ]
          },
          "proper_name": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "example": {
          "email": "alice@example.com",
          "password": "new-password",
          "proper_name": "Alice Doe"
        }
      },
      "UserID": {
        "type": "integer",
        "format": "int32",
        "description": "Validated positive user id.",
        "minimum": 1
      },
      "UserPointResponse": {
        "type": "object",
        "description": "Strongly tagged point representation of a user.\n\nDirectory-provider metadata is intentionally absent: its lifecycle is not\nowned by the principal revision used for this representation's ETag.",
        "required": [
          "id",
          "identity_scope_id",
          "provider_managed",
          "name",
          "created_at",
          "updated_at",
          "revision"
        ],
        "properties": {
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "email": {
            "type": [
              "string",
              "null"
            ]
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "identity_scope_id": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string"
          },
          "proper_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "provider_managed": {
            "type": "boolean"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "UserResponse": {
        "type": "object",
        "description": "Public representation of a user, including the name resolved from the\nprincipal (the name authority).",
        "required": [
          "id",
          "identity_scope",
          "provider_kind",
          "provider_managed",
          "name",
          "created_at",
          "updated_at",
          "revision"
        ],
        "properties": {
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "email": {
            "type": [
              "string",
              "null"
            ]
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "identity_scope": {
            "type": "string"
          },
          "last_sync_attempted_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "last_sync_success_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "name": {
            "type": "string"
          },
          "proper_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "provider_kind": {
            "type": "string"
          },
          "provider_managed": {
            "type": "boolean"
          },
          "revision": {
            "$ref": "#/components/schemas/ResourceRevision"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      }
    },
    "securitySchemes": {
      "bearer_auth": {
        "type": "http",
        "scheme": "bearer"
      },
      "restore_capability": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Hubuum-Restore-Capability",
        "description": "One-time restore capability returned when a backup document is staged"
      }
    }
  },
  "tags": [
    {
      "name": "config",
      "description": "Public client configuration and capability discovery"
    },
    {
      "name": "admin",
      "description": "Administrative process inspection endpoints"
    },
    {
      "name": "meta",
      "description": "Meta and database state endpoints"
    },
    {
      "name": "auth",
      "description": "Authentication and token lifecycle"
    },
    {
      "name": "users",
      "description": "User management endpoints"
    },
    {
      "name": "service-accounts",
      "description": "Service-account (non-human principal) management endpoints"
    },
    {
      "name": "principals",
      "description": "Principal-scoped token, group, and permission endpoints (human users and service accounts)"
    },
    {
      "name": "groups",
      "description": "Group management endpoints"
    },
    {
      "name": "collections",
      "description": "Collection and permission endpoints"
    },
    {
      "name": "relations",
      "description": "Class and object relation endpoints"
    },
    {
      "name": "search",
      "description": "Unified search endpoints"
    },
    {
      "name": "classes",
      "description": "Class and object-in-class endpoints"
    },
    {
      "name": "tasks",
      "description": "Generic long-running task endpoints"
    },
    {
      "name": "imports",
      "description": "Import submission and import-specific result endpoints"
    },
    {
      "name": "exports",
      "description": "Server-side export execution endpoints"
    },
    {
      "name": "backups",
      "description": "Administrator-only full-system logical backup creation and retrieval endpoints"
    },
    {
      "name": "restores",
      "description": "Administrator-only staged, destructive full-system restore endpoints"
    },
    {
      "name": "export-templates",
      "description": "Stored export template management endpoints"
    },
    {
      "name": "remote-targets",
      "description": "Collection-scoped remote target management and invocation endpoints"
    }
  ]
}
