Files
cameleer-server/ui/src/api/openapi.json

4516 lines
110 KiB
JSON
Raw Normal View History

{
"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"
}
}
}
}