{ "openapi": "3.1.0", "info": { "title": "Cameleer3 Server API", "version": "1.0" }, "servers": [], "security": [ { "bearer": [] } ], "tags": [ { "name": "Agent Events", "description": "Agent lifecycle event log" }, { "name": "Database Admin", "description": "Database monitoring and management (ADMIN only)" }, { "name": "Threshold Admin", "description": "Monitoring threshold configuration (ADMIN only)" }, { "name": "Agent Commands", "description": "Command push endpoints for agent communication" }, { "name": "User Admin", "description": "User management (ADMIN only)" }, { "name": "Agent Management", "description": "Agent registration and lifecycle endpoints" }, { "name": "Authentication", "description": "Login and token refresh endpoints" }, { "name": "Role Admin", "description": "Role management (ADMIN only)" }, { "name": "RBAC Stats", "description": "RBAC statistics (ADMIN only)" }, { "name": "OIDC Config Admin", "description": "OIDC provider configuration (ADMIN only)" }, { "name": "Route Metrics", "description": "Route performance metrics" }, { "name": "Search", "description": "Transaction search endpoints" }, { "name": "Agent SSE", "description": "Server-Sent Events endpoint for agent communication" }, { "name": "Ingestion", "description": "Data ingestion endpoints" }, { "name": "Audit Log", "description": "Audit log viewer (ADMIN only)" }, { "name": "Group Admin", "description": "Group management (ADMIN only)" }, { "name": "Diagrams", "description": "Diagram rendering endpoints" }, { "name": "OpenSearch Admin", "description": "OpenSearch monitoring and management (ADMIN only)" }, { "name": "Detail", "description": "Execution detail and processor snapshot endpoints" }, { "name": "Route Catalog", "description": "Route catalog and discovery" } ], "paths": { "/admin/users/{userId}": { "get": { "tags": [ "User Admin" ], "summary": "Get user by ID with RBAC detail", "operationId": "getUser", "parameters": [ { "name": "userId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "User found", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/UserDetail" } } } }, "404": { "description": "User not found", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/UserDetail" } } } } } }, "put": { "tags": [ "User Admin" ], "summary": "Update user display name or email", "operationId": "updateUser", "parameters": [ { "name": "userId", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateUserRequest" } } }, "required": true }, "responses": { "200": { "description": "User updated" }, "404": { "description": "User not found" } } }, "delete": { "tags": [ "User Admin" ], "summary": "Delete user", "operationId": "deleteUser", "parameters": [ { "name": "userId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "204": { "description": "User deleted" } } } }, "/admin/thresholds": { "get": { "tags": [ "Threshold Admin" ], "summary": "Get current threshold configuration", "operationId": "getThresholds", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ThresholdConfig" } } } } } }, "put": { "tags": [ "Threshold Admin" ], "summary": "Update threshold configuration", "operationId": "updateThresholds", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ThresholdConfigRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ThresholdConfig" } } } } } } }, "/admin/roles/{id}": { "get": { "tags": [ "Role Admin" ], "summary": "Get role by ID with effective principals", "operationId": "getRole", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Role found", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/RoleDetail" } } } }, "404": { "description": "Role not found", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/RoleDetail" } } } } } }, "put": { "tags": [ "Role Admin" ], "summary": "Update a custom role", "operationId": "updateRole", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateRoleRequest" } } }, "required": true }, "responses": { "200": { "description": "Role updated" }, "403": { "description": "Cannot modify system role" }, "404": { "description": "Role not found" } } }, "delete": { "tags": [ "Role Admin" ], "summary": "Delete a custom role", "operationId": "deleteRole", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "204": { "description": "Role deleted" }, "403": { "description": "Cannot delete system role" }, "404": { "description": "Role not found" } } } }, "/admin/oidc": { "get": { "tags": [ "OIDC Config Admin" ], "summary": "Get OIDC configuration", "operationId": "getConfig", "responses": { "200": { "description": "Current OIDC configuration (client_secret masked)", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/OidcAdminConfigResponse" } } } } } }, "put": { "tags": [ "OIDC Config Admin" ], "summary": "Save OIDC configuration", "operationId": "saveConfig", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OidcAdminConfigRequest" } } }, "required": true }, "responses": { "200": { "description": "Configuration saved", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/OidcAdminConfigResponse" } } } }, "400": { "description": "Invalid configuration", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "delete": { "tags": [ "OIDC Config Admin" ], "summary": "Delete OIDC configuration", "operationId": "deleteConfig", "responses": { "204": { "description": "Configuration deleted" } } } }, "/admin/groups/{id}": { "get": { "tags": [ "Group Admin" ], "summary": "Get group by ID with effective roles", "operationId": "getGroup", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Group found", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/GroupDetail" } } } }, "404": { "description": "Group not found", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/GroupDetail" } } } } } }, "put": { "tags": [ "Group Admin" ], "summary": "Update group name or parent", "operationId": "updateGroup", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateGroupRequest" } } }, "required": true }, "responses": { "200": { "description": "Group updated" }, "404": { "description": "Group not found" }, "409": { "description": "Cycle detected in group hierarchy" } } }, "delete": { "tags": [ "Group Admin" ], "summary": "Delete group", "operationId": "deleteGroup", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "204": { "description": "Group deleted" }, "404": { "description": "Group not found" } } } }, "/search/executions": { "get": { "tags": [ "Search" ], "summary": "Search executions with basic filters", "operationId": "searchGet", "parameters": [ { "name": "status", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "timeFrom", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time" } }, { "name": "timeTo", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time" } }, { "name": "correlationId", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "text", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "routeId", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "agentId", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "processorType", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "group", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "offset", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 50 } }, { "name": "sortField", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "sortDir", "in": "query", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/SearchResultExecutionSummary" } } } } } }, "post": { "tags": [ "Search" ], "summary": "Advanced search with all filters", "operationId": "searchPost", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SearchRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/SearchResultExecutionSummary" } } } } } } }, "/data/metrics": { "post": { "tags": [ "Ingestion" ], "summary": "Ingest agent metrics", "description": "Accepts an array of MetricsSnapshot objects", "operationId": "ingestMetrics", "requestBody": { "content": { "application/json": { "schema": { "type": "string" } } }, "required": true }, "responses": { "202": { "description": "Data accepted for processing" }, "503": { "description": "Buffer full, retry later" } } } }, "/data/executions": { "post": { "tags": [ "Ingestion" ], "summary": "Ingest route execution data", "description": "Accepts a single RouteExecution or an array of RouteExecutions", "operationId": "ingestExecutions", "requestBody": { "content": { "application/json": { "schema": { "type": "string" } } }, "required": true }, "responses": { "202": { "description": "Data accepted for processing" } } } }, "/data/diagrams": { "post": { "tags": [ "Ingestion" ], "summary": "Ingest route diagram data", "description": "Accepts a single RouteGraph or an array of RouteGraphs", "operationId": "ingestDiagrams", "requestBody": { "content": { "application/json": { "schema": { "type": "string" } } }, "required": true }, "responses": { "202": { "description": "Data accepted for processing" } } } }, "/auth/refresh": { "post": { "tags": [ "Authentication" ], "summary": "Refresh access token", "operationId": "refresh", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RefreshRequest" } } }, "required": true }, "responses": { "200": { "description": "Token refreshed", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/AuthTokenResponse" } } } }, "401": { "description": "Invalid refresh token", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/auth/oidc/callback": { "post": { "tags": [ "Authentication" ], "summary": "Exchange OIDC authorization code for JWTs", "operationId": "callback", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CallbackRequest" } } }, "required": true }, "responses": { "200": { "description": "Authentication successful", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/AuthTokenResponse" } } } }, "401": { "description": "OIDC authentication failed", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "403": { "description": "Account not provisioned", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "OIDC not configured or disabled", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/AuthTokenResponse" } } } } } } }, "/auth/login": { "post": { "tags": [ "Authentication" ], "summary": "Login with local credentials", "operationId": "login", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LoginRequest" } } }, "required": true }, "responses": { "200": { "description": "Login successful", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/AuthTokenResponse" } } } }, "401": { "description": "Invalid credentials", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/agents/{id}/refresh": { "post": { "tags": [ "Agent Management" ], "summary": "Refresh access token", "description": "Issues a new access JWT from a valid refresh token", "operationId": "refresh_1", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AgentRefreshRequest" } } }, "required": true }, "responses": { "200": { "description": "New access token issued", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/AgentRefreshResponse" } } } }, "401": { "description": "Invalid or expired refresh token", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/AgentRefreshResponse" } } } }, "404": { "description": "Agent not found", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/AgentRefreshResponse" } } } } } } }, "/agents/{id}/heartbeat": { "post": { "tags": [ "Agent Management" ], "summary": "Agent heartbeat ping", "description": "Updates the agent's last heartbeat timestamp", "operationId": "heartbeat", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Heartbeat accepted" }, "404": { "description": "Agent not registered" } } } }, "/agents/{id}/commands": { "post": { "tags": [ "Agent Commands" ], "summary": "Send command to a specific agent", "description": "Sends a config-update, deep-trace, or replay command to the specified agent", "operationId": "sendCommand", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CommandRequest" } } }, "required": true }, "responses": { "202": { "description": "Command accepted", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/CommandSingleResponse" } } } }, "400": { "description": "Invalid command payload", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/CommandSingleResponse" } } } }, "404": { "description": "Agent not registered", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/CommandSingleResponse" } } } } } } }, "/agents/{id}/commands/{commandId}/ack": { "post": { "tags": [ "Agent Commands" ], "summary": "Acknowledge command receipt", "description": "Agent acknowledges that it has received and processed a command", "operationId": "acknowledgeCommand", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "commandId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Command acknowledged" }, "404": { "description": "Command not found" } } } }, "/agents/register": { "post": { "tags": [ "Agent Management" ], "summary": "Register an agent", "description": "Registers a new agent or re-registers an existing one. Requires bootstrap token in Authorization header.", "operationId": "register", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AgentRegistrationRequest" } } }, "required": true }, "responses": { "200": { "description": "Agent registered successfully", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/AgentRegistrationResponse" } } } }, "400": { "description": "Invalid registration payload", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Missing or invalid bootstrap token", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/AgentRegistrationResponse" } } } } } } }, "/agents/groups/{group}/commands": { "post": { "tags": [ "Agent Commands" ], "summary": "Send command to all agents in a group", "description": "Sends a command to all LIVE agents in the specified group", "operationId": "sendGroupCommand", "parameters": [ { "name": "group", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CommandRequest" } } }, "required": true }, "responses": { "202": { "description": "Commands accepted", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/CommandBroadcastResponse" } } } }, "400": { "description": "Invalid command payload", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/CommandBroadcastResponse" } } } } } } }, "/agents/commands": { "post": { "tags": [ "Agent Commands" ], "summary": "Broadcast command to all live agents", "description": "Sends a command to all agents currently in LIVE state", "operationId": "broadcastCommand", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CommandRequest" } } }, "required": true }, "responses": { "202": { "description": "Commands accepted", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/CommandBroadcastResponse" } } } }, "400": { "description": "Invalid command payload", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/CommandBroadcastResponse" } } } } } } }, "/admin/users": { "get": { "tags": [ "User Admin" ], "summary": "List all users with RBAC detail", "operationId": "listUsers", "responses": { "200": { "description": "User list returned", "content": { "*/*": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/UserDetail" } } } } } } }, "post": { "tags": [ "User Admin" ], "summary": "Create a local user", "operationId": "createUser", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateUserRequest" } } }, "required": true }, "responses": { "200": { "description": "User created", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/UserDetail" } } } } } } }, "/admin/users/{userId}/roles/{roleId}": { "post": { "tags": [ "User Admin" ], "summary": "Assign a role to a user", "operationId": "assignRoleToUser", "parameters": [ { "name": "userId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "roleId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Role assigned" }, "404": { "description": "User or role not found" } } }, "delete": { "tags": [ "User Admin" ], "summary": "Remove a role from a user", "operationId": "removeRoleFromUser", "parameters": [ { "name": "userId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "roleId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "204": { "description": "Role removed" } } } }, "/admin/users/{userId}/groups/{groupId}": { "post": { "tags": [ "User Admin" ], "summary": "Add a user to a group", "operationId": "addUserToGroup", "parameters": [ { "name": "userId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "groupId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "User added to group" } } }, "delete": { "tags": [ "User Admin" ], "summary": "Remove a user from a group", "operationId": "removeUserFromGroup", "parameters": [ { "name": "userId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "groupId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "204": { "description": "User removed from group" } } } }, "/admin/roles": { "get": { "tags": [ "Role Admin" ], "summary": "List all roles (system and custom)", "operationId": "listRoles", "responses": { "200": { "description": "Role list returned", "content": { "*/*": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/RoleDetail" } } } } } } }, "post": { "tags": [ "Role Admin" ], "summary": "Create a custom role", "operationId": "createRole", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateRoleRequest" } } }, "required": true }, "responses": { "200": { "description": "Role created", "content": { "*/*": { "schema": { "type": "object", "additionalProperties": { "type": "string", "format": "uuid" } } } } } } } }, "/admin/oidc/test": { "post": { "tags": [ "OIDC Config Admin" ], "summary": "Test OIDC provider connectivity", "operationId": "testConnection", "responses": { "200": { "description": "Provider reachable", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/OidcTestResult" } } } }, "400": { "description": "Provider unreachable or misconfigured", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/admin/groups": { "get": { "tags": [ "Group Admin" ], "summary": "List all groups with hierarchy and effective roles", "operationId": "listGroups", "responses": { "200": { "description": "Group list returned", "content": { "*/*": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/GroupDetail" } } } } } } }, "post": { "tags": [ "Group Admin" ], "summary": "Create a new group", "operationId": "createGroup", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateGroupRequest" } } }, "required": true }, "responses": { "200": { "description": "Group created", "content": { "*/*": { "schema": { "type": "object", "additionalProperties": { "type": "string", "format": "uuid" } } } } } } } }, "/admin/groups/{id}/roles/{roleId}": { "post": { "tags": [ "Group Admin" ], "summary": "Assign a role to a group", "operationId": "assignRoleToGroup", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "roleId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Role assigned to group" }, "404": { "description": "Group not found" } } }, "delete": { "tags": [ "Group Admin" ], "summary": "Remove a role from a group", "operationId": "removeRoleFromGroup", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "roleId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "204": { "description": "Role removed from group" }, "404": { "description": "Group not found" } } } }, "/admin/database/queries/{pid}/kill": { "post": { "tags": [ "Database Admin" ], "summary": "Terminate a query by PID", "operationId": "killQuery", "parameters": [ { "name": "pid", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "OK" } } } }, "/search/stats": { "get": { "tags": [ "Search" ], "summary": "Aggregate execution stats (P99 latency, active count)", "operationId": "stats", "parameters": [ { "name": "from", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time" } }, { "name": "to", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time" } }, { "name": "routeId", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "group", "in": "query", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ExecutionStats" } } } } } } }, "/search/stats/timeseries": { "get": { "tags": [ "Search" ], "summary": "Bucketed time-series stats over a time window", "operationId": "timeseries", "parameters": [ { "name": "from", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time" } }, { "name": "to", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time" } }, { "name": "buckets", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 24 } }, { "name": "routeId", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "group", "in": "query", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/StatsTimeseries" } } } } } } }, "/routes/metrics": { "get": { "tags": [ "Route Metrics" ], "summary": "Get route metrics", "description": "Returns aggregated performance metrics per route for the given time window", "operationId": "getMetrics", "parameters": [ { "name": "from", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "to", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "appId", "in": "query", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Metrics returned", "content": { "*/*": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/RouteMetrics" } } } } } } } }, "/routes/catalog": { "get": { "tags": [ "Route Catalog" ], "summary": "Get route catalog", "description": "Returns all applications with their routes, agents, and health status", "operationId": "getCatalog", "responses": { "200": { "description": "Catalog returned", "content": { "*/*": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AppCatalogEntry" } } } } } } } }, "/executions/{executionId}": { "get": { "tags": [ "Detail" ], "summary": "Get execution detail with nested processor tree", "operationId": "getDetail", "parameters": [ { "name": "executionId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Execution detail found", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ExecutionDetail" } } } }, "404": { "description": "Execution not found", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ExecutionDetail" } } } } } } }, "/executions/{executionId}/processors/{index}/snapshot": { "get": { "tags": [ "Detail" ], "summary": "Get exchange snapshot for a specific processor", "operationId": "getProcessorSnapshot", "parameters": [ { "name": "executionId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "index", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Snapshot data", "content": { "*/*": { "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } }, "404": { "description": "Snapshot not found", "content": { "*/*": { "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } } } }, "/diagrams": { "get": { "tags": [ "Diagrams" ], "summary": "Find diagram by application group and route ID", "description": "Resolves group to agent IDs and finds the latest diagram for the route", "operationId": "findByGroupAndRoute", "parameters": [ { "name": "group", "in": "query", "required": true, "schema": { "type": "string" } }, { "name": "routeId", "in": "query", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Diagram layout returned", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/DiagramLayout" } } } }, "404": { "description": "No diagram found for the given group and route", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/DiagramLayout" } } } } } } }, "/diagrams/{contentHash}/render": { "get": { "tags": [ "Diagrams" ], "summary": "Render a route diagram", "description": "Returns SVG (default) or JSON layout based on Accept header", "operationId": "renderDiagram", "parameters": [ { "name": "contentHash", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Diagram rendered successfully", "content": { "image/svg+xml": { "schema": { "type": "string" } }, "application/json": { "schema": { "$ref": "#/components/schemas/DiagramLayout" } } } }, "404": { "description": "Diagram not found", "content": { "*/*": { "schema": { "type": "object" } } } } } } }, "/auth/oidc/config": { "get": { "tags": [ "Authentication" ], "summary": "Get OIDC config for SPA login flow", "operationId": "getConfig_1", "responses": { "200": { "description": "OIDC configuration", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/OidcPublicConfigResponse" } } } }, "404": { "description": "OIDC not configured or disabled", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/OidcPublicConfigResponse" } } } }, "500": { "description": "Failed to retrieve OIDC provider metadata", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/agents": { "get": { "tags": [ "Agent Management" ], "summary": "List all agents", "description": "Returns all registered agents with runtime metrics, optionally filtered by status and/or group", "operationId": "listAgents", "parameters": [ { "name": "status", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "group", "in": "query", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Agent list returned", "content": { "*/*": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AgentInstanceResponse" } } } } }, "400": { "description": "Invalid status filter", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/agents/{id}/events": { "get": { "tags": [ "Agent SSE" ], "summary": "Open SSE event stream", "description": "Opens a Server-Sent Events stream for the specified agent. Commands (config-update, deep-trace, replay) are pushed as events. Ping keepalive comments sent every 15 seconds.", "operationId": "events", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "Last-Event-ID", "in": "header", "description": "Last received event ID (no replay, acknowledged only)", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "SSE stream opened", "content": { "text/event-stream": { "schema": { "$ref": "#/components/schemas/SseEmitter" } } } }, "404": { "description": "Agent not registered", "content": { "text/event-stream": { "schema": { "$ref": "#/components/schemas/SseEmitter" } } } } } } }, "/agents/events-log": { "get": { "tags": [ "Agent Events" ], "summary": "Query agent events", "description": "Returns agent lifecycle events, optionally filtered by app and/or agent ID", "operationId": "getEvents", "parameters": [ { "name": "appId", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "agentId", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "from", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "to", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 50 } } ], "responses": { "200": { "description": "Events returned", "content": { "*/*": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AgentEventResponse" } } } } } } } }, "/admin/rbac/stats": { "get": { "tags": [ "RBAC Stats" ], "summary": "Get RBAC statistics for the dashboard", "operationId": "getStats", "responses": { "200": { "description": "RBAC stats returned", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/RbacStats" } } } } } } }, "/admin/opensearch/status": { "get": { "tags": [ "OpenSearch Admin" ], "summary": "Get OpenSearch cluster status and version", "operationId": "getStatus", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/OpenSearchStatusResponse" } } } } } } }, "/admin/opensearch/pipeline": { "get": { "tags": [ "OpenSearch Admin" ], "summary": "Get indexing pipeline statistics", "operationId": "getPipeline", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/PipelineStatsResponse" } } } } } } }, "/admin/opensearch/performance": { "get": { "tags": [ "OpenSearch Admin" ], "summary": "Get OpenSearch performance metrics", "operationId": "getPerformance", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/PerformanceResponse" } } } } } } }, "/admin/opensearch/indices": { "get": { "tags": [ "OpenSearch Admin" ], "summary": "Get OpenSearch indices with pagination", "operationId": "getIndices", "parameters": [ { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 20 } }, { "name": "search", "in": "query", "required": false, "schema": { "type": "string", "default": "" } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/IndicesPageResponse" } } } } } } }, "/admin/database/tables": { "get": { "tags": [ "Database Admin" ], "summary": "Get table sizes and row counts", "operationId": "getTables", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/TableSizeResponse" } } } } } } } }, "/admin/database/status": { "get": { "tags": [ "Database Admin" ], "summary": "Get database connection status and version", "operationId": "getStatus_1", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/DatabaseStatusResponse" } } } } } } }, "/admin/database/queries": { "get": { "tags": [ "Database Admin" ], "summary": "Get active queries", "operationId": "getQueries", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ActiveQueryResponse" } } } } } } } }, "/admin/database/pool": { "get": { "tags": [ "Database Admin" ], "summary": "Get HikariCP connection pool stats", "operationId": "getPool", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ConnectionPoolResponse" } } } } } } }, "/admin/audit": { "get": { "tags": [ "Audit Log" ], "summary": "Search audit log entries with pagination", "operationId": "getAuditLog", "parameters": [ { "name": "username", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "category", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "search", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "from", "in": "query", "required": false, "schema": { "type": "string", "format": "date" } }, { "name": "to", "in": "query", "required": false, "schema": { "type": "string", "format": "date" } }, { "name": "sort", "in": "query", "required": false, "schema": { "type": "string", "default": "timestamp" } }, { "name": "order", "in": "query", "required": false, "schema": { "type": "string", "default": "desc" } }, { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 0 } }, { "name": "size", "in": "query", "required": false, "schema": { "type": "integer", "format": "int32", "default": 25 } } ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/AuditLogPageResponse" } } } } } } }, "/admin/opensearch/indices/{name}": { "delete": { "tags": [ "OpenSearch Admin" ], "summary": "Delete an OpenSearch index", "operationId": "deleteIndex", "parameters": [ { "name": "name", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } } } } }, "components": { "schemas": { "UpdateUserRequest": { "type": "object", "properties": { "displayName": { "type": "string" }, "email": { "type": "string" } } }, "DatabaseThresholdsRequest": { "type": "object", "description": "Database monitoring thresholds", "properties": { "connectionPoolWarning": { "type": "integer", "format": "int32", "description": "Connection pool usage warning threshold (percentage)", "maximum": 100, "minimum": 0 }, "connectionPoolCritical": { "type": "integer", "format": "int32", "description": "Connection pool usage critical threshold (percentage)", "maximum": 100, "minimum": 0 }, "queryDurationWarning": { "type": "number", "format": "double", "description": "Query duration warning threshold (seconds)" }, "queryDurationCritical": { "type": "number", "format": "double", "description": "Query duration critical threshold (seconds)" } } }, "OpenSearchThresholdsRequest": { "type": "object", "description": "OpenSearch monitoring thresholds", "properties": { "clusterHealthWarning": { "type": "string", "description": "Cluster health warning threshold (GREEN, YELLOW, RED)", "minLength": 1 }, "clusterHealthCritical": { "type": "string", "description": "Cluster health critical threshold (GREEN, YELLOW, RED)", "minLength": 1 }, "queueDepthWarning": { "type": "integer", "format": "int32", "description": "Queue depth warning threshold", "minimum": 0 }, "queueDepthCritical": { "type": "integer", "format": "int32", "description": "Queue depth critical threshold", "minimum": 0 }, "jvmHeapWarning": { "type": "integer", "format": "int32", "description": "JVM heap usage warning threshold (percentage)", "maximum": 100, "minimum": 0 }, "jvmHeapCritical": { "type": "integer", "format": "int32", "description": "JVM heap usage critical threshold (percentage)", "maximum": 100, "minimum": 0 }, "failedDocsWarning": { "type": "integer", "format": "int32", "description": "Failed document count warning threshold", "minimum": 0 }, "failedDocsCritical": { "type": "integer", "format": "int32", "description": "Failed document count critical threshold", "minimum": 0 } } }, "ThresholdConfigRequest": { "type": "object", "description": "Threshold configuration for admin monitoring", "properties": { "database": { "$ref": "#/components/schemas/DatabaseThresholdsRequest" }, "opensearch": { "$ref": "#/components/schemas/OpenSearchThresholdsRequest" } }, "required": [ "database", "opensearch" ] }, "DatabaseThresholds": { "type": "object", "properties": { "connectionPoolWarning": { "type": "integer", "format": "int32" }, "connectionPoolCritical": { "type": "integer", "format": "int32" }, "queryDurationWarning": { "type": "number", "format": "double" }, "queryDurationCritical": { "type": "number", "format": "double" } } }, "OpenSearchThresholds": { "type": "object", "properties": { "clusterHealthWarning": { "type": "string" }, "clusterHealthCritical": { "type": "string" }, "queueDepthWarning": { "type": "integer", "format": "int32" }, "queueDepthCritical": { "type": "integer", "format": "int32" }, "jvmHeapWarning": { "type": "integer", "format": "int32" }, "jvmHeapCritical": { "type": "integer", "format": "int32" }, "failedDocsWarning": { "type": "integer", "format": "int32" }, "failedDocsCritical": { "type": "integer", "format": "int32" } } }, "ThresholdConfig": { "type": "object", "properties": { "database": { "$ref": "#/components/schemas/DatabaseThresholds" }, "opensearch": { "$ref": "#/components/schemas/OpenSearchThresholds" } } }, "UpdateRoleRequest": { "type": "object", "properties": { "name": { "type": "string" }, "description": { "type": "string" }, "scope": { "type": "string" } } }, "OidcAdminConfigRequest": { "type": "object", "description": "OIDC configuration update request", "properties": { "enabled": { "type": "boolean" }, "issuerUri": { "type": "string" }, "clientId": { "type": "string" }, "clientSecret": { "type": "string" }, "rolesClaim": { "type": "string" }, "defaultRoles": { "type": "array", "items": { "type": "string" } }, "autoSignup": { "type": "boolean" }, "displayNameClaim": { "type": "string" } } }, "ErrorResponse": { "type": "object", "description": "Error response", "properties": { "message": { "type": "string" } }, "required": [ "message" ] }, "OidcAdminConfigResponse": { "type": "object", "description": "OIDC configuration for admin management", "properties": { "configured": { "type": "boolean" }, "enabled": { "type": "boolean" }, "issuerUri": { "type": "string" }, "clientId": { "type": "string" }, "clientSecretSet": { "type": "boolean" }, "rolesClaim": { "type": "string" }, "defaultRoles": { "type": "array", "items": { "type": "string" } }, "autoSignup": { "type": "boolean" }, "displayNameClaim": { "type": "string" } } }, "UpdateGroupRequest": { "type": "object", "properties": { "name": { "type": "string" }, "parentGroupId": { "type": "string", "format": "uuid" } } }, "SearchRequest": { "type": "object", "properties": { "status": { "type": "string" }, "timeFrom": { "type": "string", "format": "date-time" }, "timeTo": { "type": "string", "format": "date-time" }, "durationMin": { "type": "integer", "format": "int64" }, "durationMax": { "type": "integer", "format": "int64" }, "correlationId": { "type": "string" }, "text": { "type": "string" }, "textInBody": { "type": "string" }, "textInHeaders": { "type": "string" }, "textInErrors": { "type": "string" }, "routeId": { "type": "string" }, "agentId": { "type": "string" }, "processorType": { "type": "string" }, "group": { "type": "string" }, "agentIds": { "type": "array", "items": { "type": "string" } }, "offset": { "type": "integer", "format": "int32" }, "limit": { "type": "integer", "format": "int32" }, "sortField": { "type": "string" }, "sortDir": { "type": "string" } } }, "ExecutionSummary": { "type": "object", "properties": { "executionId": { "type": "string" }, "routeId": { "type": "string" }, "agentId": { "type": "string" }, "status": { "type": "string" }, "startTime": { "type": "string", "format": "date-time" }, "endTime": { "type": "string", "format": "date-time" }, "durationMs": { "type": "integer", "format": "int64" }, "correlationId": { "type": "string" }, "errorMessage": { "type": "string" }, "diagramContentHash": { "type": "string" } }, "required": [ "agentId", "correlationId", "diagramContentHash", "durationMs", "endTime", "errorMessage", "executionId", "routeId", "startTime", "status" ] }, "SearchResultExecutionSummary": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ExecutionSummary" } }, "total": { "type": "integer", "format": "int64" }, "offset": { "type": "integer", "format": "int32" }, "limit": { "type": "integer", "format": "int32" } }, "required": [ "data", "limit", "offset", "total" ] }, "RefreshRequest": { "type": "object", "properties": { "refreshToken": { "type": "string" } } }, "AuthTokenResponse": { "type": "object", "description": "JWT token pair", "properties": { "accessToken": { "type": "string" }, "refreshToken": { "type": "string" }, "displayName": { "type": "string" }, "idToken": { "type": "string", "description": "OIDC id_token for end-session logout (only present after OIDC login)" } }, "required": [ "accessToken", "displayName", "refreshToken" ] }, "CallbackRequest": { "type": "object", "properties": { "code": { "type": "string" }, "redirectUri": { "type": "string" } } }, "LoginRequest": { "type": "object", "properties": { "username": { "type": "string" }, "password": { "type": "string" } } }, "AgentRefreshRequest": { "type": "object", "description": "Agent token refresh request", "properties": { "refreshToken": { "type": "string" } }, "required": [ "refreshToken" ] }, "AgentRefreshResponse": { "type": "object", "description": "Refreshed access and refresh tokens", "properties": { "accessToken": { "type": "string" }, "refreshToken": { "type": "string" } }, "required": [ "accessToken", "refreshToken" ] }, "CommandRequest": { "type": "object", "description": "Command to send to agent(s)", "properties": { "type": { "type": "string", "description": "Command type: config-update, deep-trace, or replay" }, "payload": { "type": "object", "description": "Command payload JSON" } }, "required": [ "type" ] }, "CommandSingleResponse": { "type": "object", "description": "Result of sending a command to a single agent", "properties": { "commandId": { "type": "string" }, "status": { "type": "string" } }, "required": [ "commandId", "status" ] }, "AgentRegistrationRequest": { "type": "object", "description": "Agent registration payload", "properties": { "agentId": { "type": "string" }, "name": { "type": "string" }, "group": { "type": "string", "default": "default" }, "version": { "type": "string" }, "routeIds": { "type": "array", "items": { "type": "string" } }, "capabilities": { "type": "object", "additionalProperties": { "type": "object" } } }, "required": [ "agentId", "name" ] }, "AgentRegistrationResponse": { "type": "object", "description": "Agent registration result with JWT tokens and SSE endpoint", "properties": { "agentId": { "type": "string" }, "sseEndpoint": { "type": "string" }, "heartbeatIntervalMs": { "type": "integer", "format": "int64" }, "serverPublicKey": { "type": "string" }, "accessToken": { "type": "string" }, "refreshToken": { "type": "string" } }, "required": [ "accessToken", "agentId", "refreshToken", "serverPublicKey", "sseEndpoint" ] }, "CommandBroadcastResponse": { "type": "object", "description": "Result of broadcasting a command to multiple agents", "properties": { "commandIds": { "type": "array", "items": { "type": "string" } }, "targetCount": { "type": "integer", "format": "int32" } }, "required": [ "commandIds" ] }, "CreateUserRequest": { "type": "object", "properties": { "username": { "type": "string" }, "displayName": { "type": "string" }, "email": { "type": "string" }, "password": { "type": "string" } } }, "GroupSummary": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "name": { "type": "string" } } }, "RoleSummary": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "name": { "type": "string" }, "system": { "type": "boolean" }, "source": { "type": "string" } } }, "UserDetail": { "type": "object", "properties": { "userId": { "type": "string" }, "provider": { "type": "string" }, "email": { "type": "string" }, "displayName": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" }, "directRoles": { "type": "array", "items": { "$ref": "#/components/schemas/RoleSummary" } }, "directGroups": { "type": "array", "items": { "$ref": "#/components/schemas/GroupSummary" } }, "effectiveRoles": { "type": "array", "items": { "$ref": "#/components/schemas/RoleSummary" } }, "effectiveGroups": { "type": "array", "items": { "$ref": "#/components/schemas/GroupSummary" } } } }, "CreateRoleRequest": { "type": "object", "properties": { "name": { "type": "string" }, "description": { "type": "string" }, "scope": { "type": "string" } } }, "OidcTestResult": { "type": "object", "description": "OIDC provider connectivity test result", "properties": { "status": { "type": "string" }, "authorizationEndpoint": { "type": "string" } }, "required": [ "authorizationEndpoint", "status" ] }, "CreateGroupRequest": { "type": "object", "properties": { "name": { "type": "string" }, "parentGroupId": { "type": "string", "format": "uuid" } } }, "ExecutionStats": { "type": "object", "properties": { "totalCount": { "type": "integer", "format": "int64" }, "failedCount": { "type": "integer", "format": "int64" }, "avgDurationMs": { "type": "integer", "format": "int64" }, "p99LatencyMs": { "type": "integer", "format": "int64" }, "activeCount": { "type": "integer", "format": "int64" }, "totalToday": { "type": "integer", "format": "int64" }, "prevTotalCount": { "type": "integer", "format": "int64" }, "prevFailedCount": { "type": "integer", "format": "int64" }, "prevAvgDurationMs": { "type": "integer", "format": "int64" }, "prevP99LatencyMs": { "type": "integer", "format": "int64" } }, "required": [ "activeCount", "avgDurationMs", "failedCount", "p99LatencyMs", "prevAvgDurationMs", "prevFailedCount", "prevP99LatencyMs", "prevTotalCount", "totalCount", "totalToday" ] }, "StatsTimeseries": { "type": "object", "properties": { "buckets": { "type": "array", "items": { "$ref": "#/components/schemas/TimeseriesBucket" } } }, "required": [ "buckets" ] }, "TimeseriesBucket": { "type": "object", "properties": { "time": { "type": "string", "format": "date-time" }, "totalCount": { "type": "integer", "format": "int64" }, "failedCount": { "type": "integer", "format": "int64" }, "avgDurationMs": { "type": "integer", "format": "int64" }, "p99DurationMs": { "type": "integer", "format": "int64" }, "activeCount": { "type": "integer", "format": "int64" } }, "required": [ "activeCount", "avgDurationMs", "failedCount", "p99DurationMs", "time", "totalCount" ] }, "RouteMetrics": { "type": "object", "description": "Aggregated route performance metrics", "properties": { "routeId": { "type": "string" }, "appId": { "type": "string" }, "exchangeCount": { "type": "integer", "format": "int64" }, "successRate": { "type": "number", "format": "double" }, "avgDurationMs": { "type": "number", "format": "double" }, "p99DurationMs": { "type": "number", "format": "double" }, "errorRate": { "type": "number", "format": "double" }, "throughputPerSec": { "type": "number", "format": "double" }, "sparkline": { "type": "array", "items": { "type": "number", "format": "double" } } }, "required": [ "appId", "avgDurationMs", "errorRate", "exchangeCount", "p99DurationMs", "routeId", "sparkline", "successRate", "throughputPerSec" ] }, "AgentSummary": { "type": "object", "description": "Summary of an agent instance for sidebar display", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "status": { "type": "string" }, "tps": { "type": "number", "format": "double" } }, "required": [ "id", "name", "status", "tps" ] }, "AppCatalogEntry": { "type": "object", "description": "Application catalog entry with routes and agents", "properties": { "appId": { "type": "string" }, "routes": { "type": "array", "items": { "$ref": "#/components/schemas/RouteSummary" } }, "agents": { "type": "array", "items": { "$ref": "#/components/schemas/AgentSummary" } }, "agentCount": { "type": "integer", "format": "int32" }, "health": { "type": "string" }, "exchangeCount": { "type": "integer", "format": "int64" } }, "required": [ "agentCount", "agents", "appId", "exchangeCount", "health", "routes" ] }, "RouteSummary": { "type": "object", "description": "Summary of a route within an application", "properties": { "routeId": { "type": "string" }, "exchangeCount": { "type": "integer", "format": "int64" }, "lastSeen": { "type": "string", "format": "date-time" } }, "required": [ "exchangeCount", "lastSeen", "routeId" ] }, "ExecutionDetail": { "type": "object", "properties": { "executionId": { "type": "string" }, "routeId": { "type": "string" }, "agentId": { "type": "string" }, "status": { "type": "string" }, "startTime": { "type": "string", "format": "date-time" }, "endTime": { "type": "string", "format": "date-time" }, "durationMs": { "type": "integer", "format": "int64" }, "correlationId": { "type": "string" }, "exchangeId": { "type": "string" }, "errorMessage": { "type": "string" }, "errorStackTrace": { "type": "string" }, "diagramContentHash": { "type": "string" }, "processors": { "type": "array", "items": { "$ref": "#/components/schemas/ProcessorNode" } }, "groupName": { "type": "string" }, "children": { "type": "array", "items": { "$ref": "#/components/schemas/ProcessorNode" } } }, "required": [ "agentId", "correlationId", "diagramContentHash", "durationMs", "endTime", "errorMessage", "errorStackTrace", "exchangeId", "executionId", "processors", "routeId", "startTime", "status" ] }, "ProcessorNode": { "type": "object", "properties": { "processorId": { "type": "string" }, "processorType": { "type": "string" }, "status": { "type": "string" }, "startTime": { "type": "string", "format": "date-time" }, "endTime": { "type": "string", "format": "date-time" }, "durationMs": { "type": "integer", "format": "int64" }, "diagramNodeId": { "type": "string" }, "errorMessage": { "type": "string" }, "errorStackTrace": { "type": "string" }, "children": { "type": "array", "items": { "$ref": "#/components/schemas/ProcessorNode" } } }, "required": [ "children", "diagramNodeId", "durationMs", "endTime", "errorMessage", "errorStackTrace", "processorId", "processorType", "startTime", "status" ] }, "DiagramLayout": { "type": "object", "properties": { "width": { "type": "number", "format": "double" }, "height": { "type": "number", "format": "double" }, "nodes": { "type": "array", "items": { "$ref": "#/components/schemas/PositionedNode" } }, "edges": { "type": "array", "items": { "$ref": "#/components/schemas/PositionedEdge" } } } }, "PositionedEdge": { "type": "object", "properties": { "sourceId": { "type": "string" }, "targetId": { "type": "string" }, "label": { "type": "string" }, "points": { "type": "array", "items": { "type": "array", "items": { "type": "number", "format": "double" } } } } }, "PositionedNode": { "type": "object", "properties": { "id": { "type": "string" }, "label": { "type": "string" }, "type": { "type": "string" }, "x": { "type": "number", "format": "double" }, "y": { "type": "number", "format": "double" }, "width": { "type": "number", "format": "double" }, "height": { "type": "number", "format": "double" } } }, "OidcPublicConfigResponse": { "type": "object", "description": "OIDC configuration for SPA login flow", "properties": { "issuer": { "type": "string" }, "clientId": { "type": "string" }, "authorizationEndpoint": { "type": "string" }, "endSessionEndpoint": { "type": "string", "description": "Present if the provider supports RP-initiated logout" } }, "required": [ "authorizationEndpoint", "clientId", "issuer" ] }, "AgentInstanceResponse": { "type": "object", "description": "Agent instance summary with runtime metrics", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "group": { "type": "string" }, "status": { "type": "string" }, "routeIds": { "type": "array", "items": { "type": "string" } }, "registeredAt": { "type": "string", "format": "date-time" }, "lastHeartbeat": { "type": "string", "format": "date-time" }, "tps": { "type": "number", "format": "double" }, "errorRate": { "type": "number", "format": "double" }, "activeRoutes": { "type": "integer", "format": "int32" }, "totalRoutes": { "type": "integer", "format": "int32" }, "uptimeSeconds": { "type": "integer", "format": "int64" } }, "required": [ "activeRoutes", "errorRate", "group", "id", "lastHeartbeat", "name", "registeredAt", "routeIds", "status", "totalRoutes", "tps", "uptimeSeconds" ] }, "SseEmitter": { "type": "object", "properties": { "timeout": { "type": "integer", "format": "int64" } } }, "AgentEventResponse": { "type": "object", "description": "Agent lifecycle event", "properties": { "id": { "type": "integer", "format": "int64" }, "agentId": { "type": "string" }, "appId": { "type": "string" }, "eventType": { "type": "string" }, "detail": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } }, "required": [ "agentId", "appId", "detail", "eventType", "id", "timestamp" ] }, "RoleDetail": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "name": { "type": "string" }, "description": { "type": "string" }, "scope": { "type": "string" }, "system": { "type": "boolean" }, "createdAt": { "type": "string", "format": "date-time" }, "assignedGroups": { "type": "array", "items": { "$ref": "#/components/schemas/GroupSummary" } }, "directUsers": { "type": "array", "items": { "$ref": "#/components/schemas/UserSummary" } }, "effectivePrincipals": { "type": "array", "items": { "$ref": "#/components/schemas/UserSummary" } } } }, "UserSummary": { "type": "object", "properties": { "userId": { "type": "string" }, "displayName": { "type": "string" }, "provider": { "type": "string" } } }, "RbacStats": { "type": "object", "properties": { "userCount": { "type": "integer", "format": "int32" }, "activeUserCount": { "type": "integer", "format": "int32" }, "groupCount": { "type": "integer", "format": "int32" }, "maxGroupDepth": { "type": "integer", "format": "int32" }, "roleCount": { "type": "integer", "format": "int32" } } }, "OpenSearchStatusResponse": { "type": "object", "description": "OpenSearch cluster status", "properties": { "reachable": { "type": "boolean", "description": "Whether the cluster is reachable" }, "clusterHealth": { "type": "string", "description": "Cluster health status (GREEN, YELLOW, RED)" }, "version": { "type": "string", "description": "OpenSearch version" }, "nodeCount": { "type": "integer", "format": "int32", "description": "Number of nodes in the cluster" }, "host": { "type": "string", "description": "OpenSearch host" } } }, "PipelineStatsResponse": { "type": "object", "description": "Search indexing pipeline statistics", "properties": { "queueDepth": { "type": "integer", "format": "int32", "description": "Current queue depth" }, "maxQueueSize": { "type": "integer", "format": "int32", "description": "Maximum queue size" }, "failedCount": { "type": "integer", "format": "int64", "description": "Number of failed indexing operations" }, "indexedCount": { "type": "integer", "format": "int64", "description": "Number of successfully indexed documents" }, "debounceMs": { "type": "integer", "format": "int64", "description": "Debounce interval in milliseconds" }, "indexingRate": { "type": "number", "format": "double", "description": "Current indexing rate (docs/sec)" }, "lastIndexedAt": { "type": "string", "format": "date-time", "description": "Timestamp of last indexed document" } } }, "PerformanceResponse": { "type": "object", "description": "OpenSearch performance metrics", "properties": { "queryCacheHitRate": { "type": "number", "format": "double", "description": "Query cache hit rate (0.0-1.0)" }, "requestCacheHitRate": { "type": "number", "format": "double", "description": "Request cache hit rate (0.0-1.0)" }, "searchLatencyMs": { "type": "number", "format": "double", "description": "Average search latency in milliseconds" }, "indexingLatencyMs": { "type": "number", "format": "double", "description": "Average indexing latency in milliseconds" }, "jvmHeapUsedBytes": { "type": "integer", "format": "int64", "description": "JVM heap used in bytes" }, "jvmHeapMaxBytes": { "type": "integer", "format": "int64", "description": "JVM heap max in bytes" } } }, "IndexInfoResponse": { "type": "object", "description": "OpenSearch index information", "properties": { "name": { "type": "string", "description": "Index name" }, "docCount": { "type": "integer", "format": "int64", "description": "Document count" }, "size": { "type": "string", "description": "Human-readable index size" }, "sizeBytes": { "type": "integer", "format": "int64", "description": "Index size in bytes" }, "health": { "type": "string", "description": "Index health status" }, "primaryShards": { "type": "integer", "format": "int32", "description": "Number of primary shards" }, "replicaShards": { "type": "integer", "format": "int32", "description": "Number of replica shards" } } }, "IndicesPageResponse": { "type": "object", "description": "Paginated list of OpenSearch indices", "properties": { "indices": { "type": "array", "description": "Index list for current page", "items": { "$ref": "#/components/schemas/IndexInfoResponse" } }, "totalIndices": { "type": "integer", "format": "int64", "description": "Total number of indices" }, "totalDocs": { "type": "integer", "format": "int64", "description": "Total document count across all indices" }, "totalSize": { "type": "string", "description": "Human-readable total size" }, "page": { "type": "integer", "format": "int32", "description": "Current page number (0-based)" }, "pageSize": { "type": "integer", "format": "int32", "description": "Page size" }, "totalPages": { "type": "integer", "format": "int32", "description": "Total number of pages" } } }, "GroupDetail": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "name": { "type": "string" }, "parentGroupId": { "type": "string", "format": "uuid" }, "createdAt": { "type": "string", "format": "date-time" }, "directRoles": { "type": "array", "items": { "$ref": "#/components/schemas/RoleSummary" } }, "effectiveRoles": { "type": "array", "items": { "$ref": "#/components/schemas/RoleSummary" } }, "members": { "type": "array", "items": { "$ref": "#/components/schemas/UserSummary" } }, "childGroups": { "type": "array", "items": { "$ref": "#/components/schemas/GroupSummary" } } } }, "TableSizeResponse": { "type": "object", "description": "Table size and row count information", "properties": { "tableName": { "type": "string", "description": "Table name" }, "rowCount": { "type": "integer", "format": "int64", "description": "Approximate row count" }, "dataSize": { "type": "string", "description": "Human-readable data size" }, "indexSize": { "type": "string", "description": "Human-readable index size" }, "dataSizeBytes": { "type": "integer", "format": "int64", "description": "Data size in bytes" }, "indexSizeBytes": { "type": "integer", "format": "int64", "description": "Index size in bytes" } } }, "DatabaseStatusResponse": { "type": "object", "description": "Database connection and version status", "properties": { "connected": { "type": "boolean", "description": "Whether the database is reachable" }, "version": { "type": "string", "description": "PostgreSQL version string" }, "host": { "type": "string", "description": "Database host" }, "schema": { "type": "string", "description": "Current schema search path" }, "timescaleDb": { "type": "boolean", "description": "Whether TimescaleDB extension is available" } } }, "ActiveQueryResponse": { "type": "object", "description": "Currently running database query", "properties": { "pid": { "type": "integer", "format": "int32", "description": "Backend process ID" }, "durationSeconds": { "type": "number", "format": "double", "description": "Query duration in seconds" }, "state": { "type": "string", "description": "Backend state (active, idle, etc.)" }, "query": { "type": "string", "description": "SQL query text" } } }, "ConnectionPoolResponse": { "type": "object", "description": "HikariCP connection pool statistics", "properties": { "activeConnections": { "type": "integer", "format": "int32", "description": "Number of currently active connections" }, "idleConnections": { "type": "integer", "format": "int32", "description": "Number of idle connections" }, "pendingThreads": { "type": "integer", "format": "int32", "description": "Number of threads waiting for a connection" }, "maxWaitMs": { "type": "integer", "format": "int64", "description": "Maximum wait time in milliseconds" }, "maxPoolSize": { "type": "integer", "format": "int32", "description": "Maximum pool size" } } }, "AuditLogPageResponse": { "type": "object", "description": "Paginated audit log entries", "properties": { "items": { "type": "array", "description": "Audit log entries", "items": { "$ref": "#/components/schemas/AuditRecord" } }, "totalCount": { "type": "integer", "format": "int64", "description": "Total number of matching entries" }, "page": { "type": "integer", "format": "int32", "description": "Current page number (0-based)" }, "pageSize": { "type": "integer", "format": "int32", "description": "Page size" }, "totalPages": { "type": "integer", "format": "int32", "description": "Total number of pages" } } }, "AuditRecord": { "type": "object", "properties": { "id": { "type": "integer", "format": "int64" }, "timestamp": { "type": "string", "format": "date-time" }, "username": { "type": "string" }, "action": { "type": "string" }, "category": { "type": "string", "enum": [ "INFRA", "AUTH", "USER_MGMT", "CONFIG", "RBAC" ] }, "target": { "type": "string" }, "detail": { "type": "object", "additionalProperties": { "type": "object" } }, "result": { "type": "string", "enum": [ "SUCCESS", "FAILURE" ] }, "ipAddress": { "type": "string" }, "userAgent": { "type": "string" } } } }, "securitySchemes": { "bearer": { "type": "http", "scheme": "bearer", "bearerFormat": "JWT" } } } }