{ "openapi": "3.1.0", "info": { "title": "OpenAPI definition", "version": "v0" }, "servers": [ { "url": "http://192.168.50.86:30081", "description": "Generated server url" } ], "tags": [ { "name": "Agent SSE", "description": "Server-Sent Events endpoint for agent communication" }, { "name": "Agent Commands", "description": "Command push endpoints for agent communication" }, { "name": "Agent Management", "description": "Agent registration and lifecycle endpoints" }, { "name": "Ingestion", "description": "Data ingestion endpoints" }, { "name": "Diagrams", "description": "Diagram rendering endpoints" }, { "name": "Detail", "description": "Execution detail and processor snapshot endpoints" }, { "name": "Search", "description": "Transaction search endpoints" } ], "paths": { "/api/v1/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": "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 } } ], "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" } } } } } } }, "/api/v1/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" } } } }, "/api/v1/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" }, "503": { "description": "Buffer full, retry later" } } } }, "/api/v1/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" }, "503": { "description": "Buffer full, retry later" } } } }, "/api/v1/auth/refresh": { "post": { "tags": [ "ui-auth-controller" ], "operationId": "refresh", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RefreshRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "type": "object" } } } } } } }, "/api/v1/auth/login": { "post": { "tags": [ "ui-auth-controller" ], "operationId": "login", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LoginRequest" } } }, "required": true }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "type": "object" } } } } } } }, "/api/v1/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": { "type": "string" } } }, "required": true }, "responses": { "200": { "description": "New access token issued", "content": { "*/*": { "schema": { "type": "string" } } } }, "401": { "description": "Invalid or expired refresh token", "content": { "*/*": { "schema": { "type": "string" } } } }, "404": { "description": "Agent not found", "content": { "*/*": { "schema": { "type": "string" } } } } } } }, "/api/v1/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" } } } }, "/api/v1/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": { "type": "string" } } }, "required": true }, "responses": { "202": { "description": "Command accepted", "content": { "*/*": { "schema": { "type": "string" } } } }, "400": { "description": "Invalid command payload", "content": { "*/*": { "schema": { "type": "string" } } } }, "404": { "description": "Agent not registered", "content": { "*/*": { "schema": { "type": "string" } } } } } } }, "/api/v1/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" } } } }, "/api/v1/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": { "type": "string" } } }, "required": true }, "responses": { "200": { "description": "Agent registered successfully", "content": { "*/*": { "schema": { "type": "string" } } } }, "400": { "description": "Invalid registration payload", "content": { "*/*": { "schema": { "type": "string" } } } }, "401": { "description": "Missing or invalid bootstrap token", "content": { "*/*": { "schema": { "type": "string" } } } } } } }, "/api/v1/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": { "type": "string" } } }, "required": true }, "responses": { "202": { "description": "Commands accepted", "content": { "*/*": { "schema": { "type": "string" } } } }, "400": { "description": "Invalid command payload", "content": { "*/*": { "schema": { "type": "string" } } } } } } }, "/api/v1/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": { "type": "string" } } }, "required": true }, "responses": { "202": { "description": "Commands accepted", "content": { "*/*": { "schema": { "type": "string" } } } }, "400": { "description": "Invalid command payload", "content": { "*/*": { "schema": { "type": "string" } } } } } } }, "/api/v1/search/stats": { "get": { "tags": [ "Search" ], "summary": "Aggregate execution stats (P99 latency, active count)", "operationId": "stats", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ExecutionStats" } } } } } } }, "/api/v1/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": "OK", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ExecutionDetail" } } } } } } }, "/api/v1/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": "OK", "content": { "*/*": { "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } } } }, "/api/v1/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": { "*/*": { "schema": { "type": "object" } } } }, "404": { "description": "Diagram not found", "content": { "*/*": { "schema": { "type": "object" } } } } } } }, "/api/v1/agents": { "get": { "tags": [ "Agent Management" ], "summary": "List all agents", "description": "Returns all registered agents, optionally filtered by status", "operationId": "listAgents", "parameters": [ { "name": "status", "in": "query", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Agent list returned", "content": { "*/*": { "schema": { "type": "string" } } } }, "400": { "description": "Invalid status filter", "content": { "*/*": { "schema": { "type": "string" } } } } } } }, "/api/v1/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" } } } } } } } }, "components": { "schemas": { "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" }, "offset": { "type": "integer", "format": "int32" }, "limit": { "type": "integer", "format": "int32" } } }, "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" } } }, "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" } } }, "RefreshRequest": { "type": "object", "properties": { "refreshToken": { "type": "string" } } }, "LoginRequest": { "type": "object", "properties": { "username": { "type": "string" }, "password": { "type": "string" } } }, "ExecutionStats": { "type": "object", "properties": { "p99LatencyMs": { "type": "integer", "format": "int64" }, "activeCount": { "type": "integer", "format": "int64" } } }, "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" } } } }, "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" } } }, "SseEmitter": { "type": "object", "properties": { "timeout": { "type": "integer", "format": "int64" } } } } } }