Advisory Ai API Reference
| Field | Value |
|---|---|
| Source spec | advisory-ai/openapi/v1.json |
| OpenAPI version | 3.1.1 |
| API version | 1.0.0 |
| Operations | 85 |
| Path filter | All paths |
Operations
GET /api/v1/buildinfo
API alias for /buildinfo.json (same payload).
| Property | Value |
|---|---|
| Operation ID | StellaOpsBuildInfoApi |
| Tags | StellaOps.AdvisoryAI.WebService |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
GET /api/v1/chat/doctor
Returns chat limit status and tool access diagnostics
Returns a diagnostics report for the current tenant and user, including remaining quota across all dimensions (requests/min, requests/day, tokens/day, tool calls/day), tool provider availability, and the last quota denial if any. Referenced by error responses via the doctor action hint.
| Property | Value |
|---|---|
| Operation ID | GetChatDoctor |
| Tags | Advisory Chat |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
POST /api/v1/chat/evidence-preview
Previews the evidence bundle that would be assembled for a query
Assembles and returns a preview of the evidence bundle that would be passed to the LLM for the specified finding, without generating an AI response. Indicates which evidence types are available (VEX, reachability, binary patch, provenance, policy, ops memory, fix options) and their status.
| Property | Value |
|---|---|
| Operation ID | PreviewEvidenceBundle |
| Tags | Advisory Chat |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
X-Correlation-Id | header | no |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Bad Request | application/json |
POST /api/v1/chat/intent
Detects intent from a user query without generating a full response
Classifies the user query into one of the advisory chat intents (explain, remediate, assess-risk, compare, etc.) and extracts structured parameters such as finding ID, package PURL, image reference, and environment. Useful for pre-routing or UI intent indicators without consuming LLM quota.
| Property | Value |
|---|---|
| Operation ID | DetectChatIntent |
| Tags | Advisory Chat |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Bad Request | application/problem+json |
POST /api/v1/chat/query
Processes a chat query and returns an evidence-grounded response
Analyzes the user query, assembles evidence bundle, and generates a response with citations.
| Property | Value |
|---|---|
| Operation ID | ProcessChatQuery |
| Tags | Advisory Chat |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
X-Correlation-Id | header | no |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Bad Request | application/problem+json |
503 | Service Unavailable | application/json |
POST /api/v1/chat/query/stream
Streams a chat response as Server-Sent Events
Processes the query and streams the response tokens as SSE events.
| Property | Value |
|---|---|
| Operation ID | StreamChatQuery |
| Tags | Advisory Chat |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
X-Correlation-Id | header | no |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
400 | Bad Request | application/json |
503 | Service Unavailable | application/json |
GET /api/v1/chat/settings
Gets effective chat settings for the caller
Returns the effective advisory chat settings for the current tenant and user, merging global defaults, tenant overrides, and user overrides. Includes quota limits and tool access configuration.
| Property | Value |
|---|---|
| Operation ID | GetChatSettings |
| Tags | Advisory Chat |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
PUT /api/v1/chat/settings
Updates chat settings overrides (tenant or user)
Applies quota and tool access overrides for the current tenant (default) or a specific user (scope=user). Overrides are layered on top of global defaults; only fields present in the request body are changed.
| Property | Value |
|---|---|
| Operation ID | UpdateChatSettings |
| Tags | Advisory Chat |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
scope | query | no |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Bad Request | application/json |
DELETE /api/v1/chat/settings
Clears chat settings overrides (tenant or user)
Removes all tenant-level or user-level chat settings overrides, reverting the affected scope to global defaults. Use scope=user to clear only the user-level override for the current user.
| Property | Value |
|---|---|
| Operation ID | ClearChatSettings |
| Tags | Advisory Chat |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
scope | query | no |
Responses:
| Status | Description | Content types |
|---|---|---|
204 | No Content | - |
GET /api/v1/chat/status
Gets the status of the advisory chat service
Returns the current operational status of the advisory chat service, including whether chat is enabled, the configured inference provider and model, maximum token limit, and whether guardrails and audit logging are active.
| Property | Value |
|---|---|
| Operation ID | GetChatStatus |
| Tags | Advisory Chat |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
GET /buildinfo.json
Image build provenance (module, gitSha, gitCommitTime, imageBuiltAt, branch) for drift detection.
| Property | Value |
|---|---|
| Operation ID | StellaOpsBuildInfoFile |
| Tags | StellaOps.AdvisoryAI.WebService |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
GET /health
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | StellaOps.AdvisoryAI.WebService |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
GET /health/live
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | StellaOps.AdvisoryAI.WebService |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
GET /health/model
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
GET /health/ready
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
GET /v1/advisory-ai/adapters/llm/providers
Lists LLM providers exposed via the unified adapter layer.
Returns all LLM providers registered in the unified plugin catalog, including their configuration status, validation result, availability, and the completion path to use for each provider. Configured-but-invalid providers are included with error details. Use this endpoint to discover which providers are ready to serve completions before invoking them.
| Property | Value |
|---|---|
| Operation ID | ListLlmProviders |
| Tags | Advisory AI - LLM Adapters |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
403 | Forbidden | - |
POST /v1/advisory-ai/adapters/llm/{providerId}/chat/completions
OpenAI-compatible chat completion for a specific unified provider.
Submits a chat completion request to the specified LLM provider via the unified adapter layer using an OpenAI-compatible message format. Streaming is not supported; use non-streaming mode only. Returns 404 if the provider is not configured for adapter exposure, 503 if the provider is temporarily unavailable. Caller scopes are validated against gateway-managed headers.
| Property | Value |
|---|---|
| Operation ID | LlmProviderChatCompletions |
| Tags | Advisory AI - LLM Adapters |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
providerId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Bad Request | - |
403 | Forbidden | - |
404 | Not Found | - |
503 | Service Unavailable | - |
POST /v1/advisory-ai/adapters/openai/v1/chat/completions
OpenAI-compatible chat completion alias backed by providerId=openai.
Convenience alias that routes chat completion requests to the provider with id ‘openai’, using the same OpenAI-compatible request/response format as the generic provider endpoint. Intended for drop-in compatibility with clients expecting the standard OpenAI path. Streaming is not supported.
| Property | Value |
|---|---|
| Operation ID | OpenAiAdapterChatCompletions |
| Tags | Advisory AI - LLM Adapters |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Bad Request | - |
403 | Forbidden | - |
404 | Not Found | - |
503 | Service Unavailable | - |
GET /v1/advisory-ai/attestations/recent
List recent AI attestations for the current tenant
Returns the most recent AI run attestations for the authenticated tenant, ordered by creation time descending. Limit defaults to 20 and is capped at 100. Use this endpoint to monitor recent AI activity and surface attestations for downstream signing or audit workflows.
| Property | Value |
|---|---|
| Operation ID | advisory-ai.attestations.recent |
| Tags | Attestations |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
limit | query | no |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
401 | Unauthorized | - |
POST /v1/advisory-ai/attestations/verify
Verify the cryptographic integrity of an AI run attestation
Verifies the content digest and DSSE envelope signature of a previously recorded AI run attestation. Returns a structured result including per-component validity flags (digest, signature) and the signing key ID. Returns 400 if the attestation is not found, is tampered, or belongs to a different tenant.
| Property | Value |
|---|---|
| Operation ID | advisory-ai.attestations.verify |
| Tags | Attestations |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Bad Request | application/json |
401 | Unauthorized | - |
POST /v1/advisory-ai/companion/explain
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
GET /v1/advisory-ai/consent
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
POST /v1/advisory-ai/consent
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
DELETE /v1/advisory-ai/consent
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
GET /v1/advisory-ai/conversations
Legacy conversation list endpoint (deprecated).
Lists conversations from the legacy conversation surface. Migrate listing flows to /api/v1/chat/* before the 2026-12-31 UTC sunset.
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
limit | query | no | |
tenantId | query | no |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
POST /v1/advisory-ai/conversations
Legacy conversation-creation endpoint (deprecated).
Creates a chat conversation using the legacy conversation surface. This endpoint family is deprecated in favor of /api/v1/chat/* and is scheduled for sunset on 2026-12-31 UTC.
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
GET /v1/advisory-ai/conversations/{conversationId}
Legacy conversation-read endpoint (deprecated).
Returns conversation state from the legacy conversation surface. Migrate readers to /api/v1/chat/* before the 2026-12-31 UTC sunset.
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
conversationId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
DELETE /v1/advisory-ai/conversations/{conversationId}
Legacy conversation delete endpoint (deprecated).
Deletes a conversation on the legacy conversation surface. Migrate clients to /api/v1/chat/* before the 2026-12-31 UTC sunset.
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
conversationId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
POST /v1/advisory-ai/conversations/{conversationId}/turns
Legacy conversation add-turn endpoint (deprecated).
Adds a conversational turn on the legacy conversation surface. Canonical payload field is content. Legacy message is accepted for compatibility only during the migration window ending 2026-12-31 UTC.
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
conversationId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
POST /v1/advisory-ai/explain
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
GET /v1/advisory-ai/explain/{explanationId}/replay
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
explanationId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
POST /v1/advisory-ai/index/rebuild
Rebuilds AdvisoryAI knowledge search index from deterministic local sources.
Triggers a full rebuild of the knowledge search index from local deterministic sources: product documentation files, embedded OpenAPI specs, and Doctor health check metadata. The rebuild is synchronous and returns document, chunk, and operation counts with duration. Requires admin-level scope; does not fetch external content.
| Property | Value |
|---|---|
| Operation ID | AdvisoryAiKnowledgeIndexRebuild |
| Tags | Advisory AI - Knowledge Search |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
403 | Forbidden | - |
POST /v1/advisory-ai/justify
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
GET /v1/advisory-ai/outputs/{cacheKey}
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
cacheKey | path | yes | |
profile | query | no | |
taskType | query | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
POST /v1/advisory-ai/pipeline/{taskType}
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
taskType | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
POST /v1/advisory-ai/pipeline:batch
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
POST /v1/advisory-ai/policy/studio/compile
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
POST /v1/advisory-ai/policy/studio/generate
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
POST /v1/advisory-ai/policy/studio/parse
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
POST /v1/advisory-ai/policy/studio/validate
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
GET /v1/advisory-ai/rate-limits
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
POST /v1/advisory-ai/remediate
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
POST /v1/advisory-ai/remediation/apply
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
POST /v1/advisory-ai/remediation/plan
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
GET /v1/advisory-ai/remediation/status/{prId}
| Property | Value |
|---|---|
| Operation ID | - |
| Tags | Program |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
prId | path | yes | |
scmType | query | no |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
GET /v1/advisory-ai/runs
Queries runs with filters
Returns a paginated list of AI investigation runs for the current tenant, optionally filtered by initiator, CVE ID, component, and status. Supports skip/take pagination. Results are ordered by creation time descending.
| Property | Value |
|---|---|
| Operation ID | QueryRuns |
| Tags | Runs |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
component | query | no | |
cveId | query | no | |
initiatedBy | query | no | |
skip | query | no | |
status | query | no | |
take | query | no |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
POST /v1/advisory-ai/runs
Creates a new AI investigation run
Creates a new AI investigation run scoped to the authenticated tenant, capturing the title, objective, and optional CVE/component/SBOM context. The run begins in the Created state and accumulates events as the investigation progresses. Returns 201 with the initial run state and a Location header.
| Property | Value |
|---|---|
| Operation ID | CreateRun |
| Tags | Runs |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
201 | Created | application/json |
400 | Bad Request | application/problem+json |
GET /v1/advisory-ai/runs/active
Gets active runs for the current user
Returns up to 50 AI investigation runs in Created, Active, or PendingApproval state that were initiated by the current user within the authenticated tenant. Use this endpoint to resume in-progress investigations or surface runs awaiting user input.
| Property | Value |
|---|---|
| Operation ID | GetActiveRuns |
| Tags | Runs |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
GET /v1/advisory-ai/runs/pending-approval
Gets runs pending approval
Returns up to 50 AI investigation runs in the PendingApproval state for the authenticated tenant. Use this endpoint to surface runs that are blocked on a human approval decision before their proposed actions can be executed.
| Property | Value |
|---|---|
| Operation ID | GetPendingApproval |
| Tags | Runs |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
GET /v1/advisory-ai/runs/{runId}
Gets a run by ID
Returns the current state of an AI investigation run, including status, event count, artifact count, content digest, attestation flag, context, and approval info. Returns 404 if the run does not exist or belongs to a different tenant.
| Property | Value |
|---|---|
| Operation ID | GetRun |
| Tags | Runs |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
runId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
404 | Not Found | - |
POST /v1/advisory-ai/runs/{runId}/actions
Proposes an action in the run
Records an AI-proposed action in a run, including the action type, subject, rationale, parameters, and whether human approval is required before execution. Actions flagged as requiring approval transition the run to PendingApproval once approval is requested. Returns 404 if the run is not active.
| Property | Value |
|---|---|
| Operation ID | ProposeAction |
| Tags | Runs |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
runId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
201 | Created | application/json |
404 | Not Found | - |
POST /v1/advisory-ai/runs/{runId}/actions/{actionEventId}/execute
Executes an approved action
Marks a previously proposed and approved action as executed, recording the execution result in the run timeline. Only actions that have been approved may be executed; attempting to execute a pending or rejected action returns 400. Returns 404 if the run or action event does not exist.
| Property | Value |
|---|---|
| Operation ID | ExecuteAction |
| Tags | Runs |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
actionEventId | path | yes | |
runId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Bad Request | - |
404 | Not Found | - |
POST /v1/advisory-ai/runs/{runId}/approval/decide
Approves or rejects a run
Records an approval or rejection decision for a run in PendingApproval state. On approval, the run transitions back to Active so approved actions can be executed. On rejection, the run is cancelled. Returns 400 if the run is not in an approvable state.
| Property | Value |
|---|---|
| Operation ID | ApproveRun |
| Tags | Runs |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
runId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Bad Request | - |
404 | Not Found | - |
POST /v1/advisory-ai/runs/{runId}/approval/request
Requests approval for pending actions
Transitions a run to the PendingApproval state and notifies the designated approvers. The request body specifies the approver IDs and an optional reason. Returns the updated run state. Returns 404 if the run does not exist or is not in a state that allows approval requests.
| Property | Value |
|---|---|
| Operation ID | RequestApproval |
| Tags | Runs |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
runId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
404 | Not Found | - |
POST /v1/advisory-ai/runs/{runId}/artifacts
Adds an artifact to the run
Attaches an artifact (evidence pack, report, SBOM snippet, or other typed asset) to an active run. The artifact is recorded with its content digest, media type, size, and optional inline content. Adding an artifact updates the run’s content digest, contributing to its attestation chain.
| Property | Value |
|---|---|
| Operation ID | AddArtifact |
| Tags | Runs |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
runId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
404 | Not Found | - |
POST /v1/advisory-ai/runs/{runId}/attest
Creates an attestation for a completed run
Generates and persists a cryptographic attestation for a completed AI investigation run, recording the content digest, model metadata, and claim hashes. The attestation can optionally be signed via the attestation sign endpoint. Returns 400 if the run is not in a terminal state or has already been attested.
| Property | Value |
|---|---|
| Operation ID | AttestRun |
| Tags | Runs |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
runId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Bad Request | - |
404 | Not Found | - |
GET /v1/advisory-ai/runs/{runId}/attestation
Get the attestation record for a completed AI run
Returns the AI attestation for a completed investigation run, including the DSSE envelope if the run was cryptographically signed. Tenant isolation is enforced; requests for runs belonging to a different tenant return 404. Returns 404 if the run has not been attested.
| Property | Value |
|---|---|
| Operation ID | advisory-ai.runs.attestation.get |
| Tags | Attestations |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
runId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
401 | Unauthorized | - |
404 | Not Found | - |
POST /v1/advisory-ai/runs/{runId}/cancel
Cancels a run
Transitions an active or pending-approval AI investigation run to the Cancelled terminal state, optionally recording a cancellation reason. Cancelled runs are immutable and excluded from active and pending-approval queries. Returns 400 if the run is already in a terminal state.
| Property | Value |
|---|---|
| Operation ID | CancelRun |
| Tags | Runs |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
runId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Bad Request | - |
404 | Not Found | - |
GET /v1/advisory-ai/runs/{runId}/claims
List AI-generated claims for a run
Returns all claim-level attestations recorded during an AI investigation run, each describing an individual assertion made by the AI (e.g. reachability verdict, remediation recommendation, risk rating). Claims are linked to the parent run attestation and can be independently verified.
| Property | Value |
|---|---|
| Operation ID | advisory-ai.runs.claims.list |
| Tags | Attestations |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
runId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
401 | Unauthorized | - |
404 | Not Found | - |
POST /v1/advisory-ai/runs/{runId}/complete
Completes a run
Transitions an active AI investigation run to the Completed terminal state, optionally recording a summary of findings. Once completed, the run is immutable and ready for attestation. Returns 400 if the run is already in a terminal state.
| Property | Value |
|---|---|
| Operation ID | CompleteRun |
| Tags | Runs |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
runId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Bad Request | - |
404 | Not Found | - |
POST /v1/advisory-ai/runs/{runId}/events
Adds an event to a run
Appends a typed event to an active AI investigation run, supporting arbitrary event types with optional content payload, evidence links, and parent event reference for threading. Returns 201 with the created event. Returns 404 if the run does not exist or is in a terminal state.
| Property | Value |
|---|---|
| Operation ID | AddRunEvent |
| Tags | Runs |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
runId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
201 | Created | application/json |
404 | Not Found | - |
POST /v1/advisory-ai/runs/{runId}/handoff
Hands off a run to another user
Transfers ownership of an active AI investigation run to another user within the same tenant. A hand-off event is recorded in the run timeline with the target user ID and an optional message. Returns 404 if the run does not exist or the target user is not valid.
| Property | Value |
|---|---|
| Operation ID | HandOffRun |
| Tags | Runs |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
runId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
404 | Not Found | - |
GET /v1/advisory-ai/runs/{runId}/timeline
Gets the event timeline for a run
Returns the ordered event timeline for an AI investigation run, including user turns, assistant turns, proposed actions, approvals, and artifact additions. Supports skip/take pagination over the event sequence. Returns 404 if the run does not exist.
| Property | Value |
|---|---|
| Operation ID | GetRunTimeline |
| Tags | Runs |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
runId | path | yes | |
skip | query | no | |
take | query | no |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
404 | Not Found | - |
POST /v1/advisory-ai/runs/{runId}/turns/assistant
Adds an assistant turn to the run
Appends an AI assistant conversational turn to an active run, recording the generated message and optional evidence links. Assistant turns are included in the run content digest and contribute to the attestable evidence chain for the investigation.
| Property | Value |
|---|---|
| Operation ID | AddAssistantTurn |
| Tags | Runs |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
runId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
201 | Created | application/json |
404 | Not Found | - |
POST /v1/advisory-ai/runs/{runId}/turns/user
Adds a user turn to the run
Appends a user conversational turn to an active AI investigation run, recording the message text, actor ID, and optional evidence links. User turns drive the investigation dialogue and are included in the run content digest for attestation purposes.
| Property | Value |
|---|---|
| Operation ID | AddUserTurn |
| Tags | Runs |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
runId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
201 | Created | application/json |
404 | Not Found | - |
POST /v1/advisory-ai/search
Searches AdvisoryAI deterministic knowledge index (docs/api/doctor).
Performs a hybrid full-text and vector similarity search over the AdvisoryAI deterministic knowledge index, which is composed of product documentation, OpenAPI specs, and Doctor health check projections. Supports filtering by content type (docs, api, doctor), product, version, service, and tags. Returns ranked result snippets with actionable open-actions for UI navigation.
| Property | Value |
|---|---|
| Operation ID | AdvisoryAiKnowledgeSearch |
| Tags | Advisory AI - Knowledge Search |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Bad Request | - |
403 | Forbidden | - |
POST /v1/advisory-ai/search/analytics
Records batch search analytics events (query, click, zero_result, synthesis, answer_frame, reformulation, rescue_action).
Accepts a batch of search analytics events for tracking query frequency, click-through rates, zero-result queries, self-serve answer states, reformulations, rescue-action usage, and synthesis usage. Queries and user/session identifiers are pseudonymized before persistence. Fire-and-forget from the client; failures do not affect search functionality.
| Property | Value |
|---|---|
| Operation ID | SearchAnalyticsRecord |
| Tags | Unified Search - Analytics & History |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
204 | No Content | - |
400 | Bad Request | - |
403 | Forbidden | - |
POST /v1/advisory-ai/search/feedback
Submits user feedback (helpful/not_helpful) for a search result or synthesis.
Records a thumbs-up or thumbs-down signal for a specific search result, identified by entity key and domain. Query/user dimensions are pseudonymized for analytics privacy. Fire-and-forget from the UI perspective.
| Property | Value |
|---|---|
| Operation ID | SearchFeedbackSubmit |
| Tags | Advisory AI - Search Feedback & Quality |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
201 | Created | - |
400 | Bad Request | - |
403 | Forbidden | - |
GET /v1/advisory-ai/search/history
Returns the authenticated user’s recent search queries.
Returns up to 50 recent search queries for the current user, ordered by recency. Server-side history supplements localStorage-based history in the UI.
| Property | Value |
|---|---|
| Operation ID | SearchHistoryGet |
| Tags | Unified Search - Analytics & History |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Bad Request | - |
403 | Forbidden | - |
DELETE /v1/advisory-ai/search/history
Clears the authenticated user’s search history.
Removes all server-side search history entries for the current user and tenant.
| Property | Value |
|---|---|
| Operation ID | SearchHistoryClear |
| Tags | Unified Search - Analytics & History |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|---|---|
204 | No Content | - |
400 | Bad Request | - |
403 | Forbidden | - |
DELETE /v1/advisory-ai/search/history/{historyId}
Removes a single search history entry.
Removes a specific search history entry by ID for the current user and tenant.
| Property | Value |
|---|---|
| Operation ID | SearchHistoryDeleteEntry |
| Tags | Unified Search - Analytics & History |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
historyId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
204 | No Content | - |
400 | Bad Request | - |
403 | Forbidden | - |
GET /v1/advisory-ai/search/quality/alerts
Lists open search quality alerts (zero-result, high negative feedback, fallback loops, abandoned fallback).
Returns search quality alerts ordered by occurrence count. Filterable by status (open, acknowledged, resolved) and alert type (zero_result, high_negative_feedback, fallback_loop, abandoned_fallback). Requires admin scope.
| Property | Value |
|---|---|
| Operation ID | SearchQualityAlertsList |
| Tags | Advisory AI - Search Feedback & Quality |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
alertType | query | no | |
status | query | no |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
403 | Forbidden | - |
PATCH /v1/advisory-ai/search/quality/alerts/{alertId}
Updates a search quality alert status (acknowledge or resolve).
Transitions a search quality alert to acknowledged or resolved status. Optionally includes a resolution description text.
| Property | Value |
|---|---|
| Operation ID | SearchQualityAlertUpdate |
| Tags | Advisory AI - Search Feedback & Quality |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
alertId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Bad Request | - |
403 | Forbidden | - |
404 | Not Found | - |
GET /v1/advisory-ai/search/quality/metrics
Returns aggregate search quality metrics for the dashboard.
Provides total searches, zero-result rate, average result count, and feedback score for a specified period (24h, 7d, 30d). Requires admin scope.
| Property | Value |
|---|---|
| Operation ID | SearchQualityMetrics |
| Tags | Advisory AI - Search Feedback & Quality |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
period | query | no |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
403 | Forbidden | - |
GET /v1/evidence-packs
List evidence packs
Returns a paginated list of evidence packs for the current tenant, optionally filtered by CVE ID or run ID. Supports limit up to 100. Results include pack summaries with subject type, claim count, and evidence count.
| Property | Value |
|---|---|
| Operation ID | evidence-packs.list |
| Tags | EvidencePacks |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
cveId | query | no | |
limit | query | no | |
runId | query | no |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
401 | Unauthorized | - |
POST /v1/evidence-packs
Create an evidence pack
Creates a new evidence pack containing AI-generated claims and supporting evidence items for a vulnerability subject. Claims are linked to evidence items by ID. The pack is assigned a content digest for tamper detection and can subsequently be signed via the sign endpoint.
| Property | Value |
|---|---|
| Operation ID | evidence-packs.create |
| Tags | EvidencePacks |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
201 | Created | application/json |
400 | Bad Request | - |
401 | Unauthorized | - |
GET /v1/evidence-packs/{packId}
Get an evidence pack by ID
Returns the full evidence pack record including all claims, evidence items, subject, context, and related links (sign, verify, export). Access is tenant-scoped; packs from other tenants return 404.
| Property | Value |
|---|---|
| Operation ID | evidence-packs.get |
| Tags | EvidencePacks |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
packId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
401 | Unauthorized | - |
404 | Not Found | - |
GET /v1/evidence-packs/{packId}/export
Export an evidence pack in a specified format
Exports an evidence pack in the requested format. Supported formats: json (default), markdown, html, pdf, signedjson, evidencecard, and evidencecardcompact. The format query parameter controls the output; the appropriate Content-Type and filename are set in the response.
| Property | Value |
|---|---|
| Operation ID | evidence-packs.export |
| Tags | EvidencePacks |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
packId | path | yes | |
format | query | no |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
401 | Unauthorized | - |
404 | Not Found | - |
POST /v1/evidence-packs/{packId}/sign
Sign an evidence pack
Signs the specified evidence pack using DSSE (Dead Simple Signing Envelope), producing a cryptographic attestation over the pack’s content digest. The resulting signed pack and DSSE envelope are returned and stored for subsequent verification.
| Property | Value |
|---|---|
| Operation ID | evidence-packs.sign |
| Tags | EvidencePacks |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
packId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
401 | Unauthorized | - |
404 | Not Found | - |
POST /v1/evidence-packs/{packId}/verify
Verify an evidence pack’s signature and integrity
Verifies the cryptographic signature and content digest of a signed evidence pack. Returns per-evidence URI resolution results, digest match status, and signing key ID. Returns 400 if the pack has not been signed or verification fails.
| Property | Value |
|---|---|
| Operation ID | evidence-packs.verify |
| Tags | EvidencePacks |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
packId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
401 | Unauthorized | - |
404 | Not Found | - |
GET /v1/runs/{runId}/evidence-packs
List evidence packs for a run
Returns all evidence packs associated with a specific AI investigation run, filtered to the current tenant. Includes pack summaries with claim count, evidence count, subject type, and CVE ID.
| Property | Value |
|---|---|
| Operation ID | evidence-packs.list-by-run |
| Tags | EvidencePacks |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
runId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
401 | Unauthorized | - |
POST /v1/search/index/rebuild
Rebuilds unified search index from configured ingestion sources.
Triggers a full unified index rebuild across all registered ingestion adapters (knowledge, findings, vex, policy, platform). Existing domain rows are replaced deterministically.
| Property | Value |
|---|---|
| Operation ID | UnifiedSearchRebuild |
| Tags | Unified Search |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Bad Request | - |
403 | Forbidden | - |
POST /v1/search/query
Searches across all Stella Ops domains with weighted fusion and entity grouping.
Performs a unified search across knowledge base, findings, VEX statements, policy rules, and platform catalog entities. Returns entity-grouped cards with domain-weighted RRF scoring and optional deterministic synthesis. Supports domain/entity-type filtering and ambient context-aware search.
| Property | Value |
|---|---|
| Operation ID | UnifiedSearchQuery |
| Tags | Unified Search |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Bad Request | - |
403 | Forbidden | - |
POST /v1/search/suggestions/evaluate
Preflights contextual search suggestions against the active corpus.
Evaluates a bounded list of suggested queries without recording user-search analytics so the UI can suppress dead suggestion chips. Returns per-query viability plus aggregate domain coverage for the active context.
| Property | Value |
|---|---|
| Operation ID | UnifiedSearchEvaluateSuggestions |
| Tags | Unified Search |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Bad Request | - |
403 | Forbidden | - |
POST /v1/search/synthesize
Streams deterministic-first search synthesis as SSE.
Produces deterministic synthesis first, then optional LLM synthesis chunks, grounding score, and actions. Requires search synthesis scope and tenant context.
| Property | Value |
|---|---|
| Operation ID | UnifiedSearchSynthesize |
| Tags | Unified Search |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
400 | Bad Request | - |
403 | Forbidden | - |
