Insights endpoints
GET /api/v1/projects/{project_id}/detector-runs
Section titled “GET /api/v1/projects/{project_id}/detector-runs”List recent detector runs
Newest first: what ran, over which window, how many findings, and what failed.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
project_id |
path | string (uuid) | yes | |
limit |
query | integer | no | min 1, max 100 Default 100. |
| Status | Description | Body |
|---|---|---|
| 200 | Successful Response | application/json: array of DetectorRunOut |
| 422 | Validation Error | application/json: HTTPValidationError |
GET /api/v1/projects/{project_id}/health
Section titled “GET /api/v1/projects/{project_id}/health”Score the project’s health
0 to 100 over the window (default the last 24 h); value is null without LLM calls.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
project_id |
path | string (uuid) | yes | |
environment |
query | string or null | no | max length 64, pattern ^[^\x00]*$ |
from |
query | string (date-time) or null | no | |
to |
query | string (date-time) or null | no |
| Status | Description | Body |
|---|---|---|
| 200 | Successful Response | application/json: HealthOut |
| 422 | Validation Error | application/json: HTTPValidationError |
GET /api/v1/projects/{project_id}/insights
Section titled “GET /api/v1/projects/{project_id}/insights”List insights
Most recently seen first. status may repeat; trace_id keeps insights citing the trace.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
project_id |
path | string (uuid) | yes | |
status |
query | array of InsightStatus or null | no | |
severity |
query | Severity or null | no | |
kind |
query | string or null | no | min length 1, max length 64, pattern ^[^\x00]*$ |
trace_id |
query | string or null | no | min length 1, max length 64, pattern ^[^\x00]*$ |
limit |
query | integer | no | min 1, max 200 Default 50. |
cursor |
query | string or null | no |
| Status | Description | Body |
|---|---|---|
| 200 | Successful Response | application/json: Page_InsightOut_ |
| 422 | Validation Error | application/json: HTTPValidationError |
GET /api/v1/projects/{project_id}/insights/{insight_id}
Section titled “GET /api/v1/projects/{project_id}/insights/{insight_id}”Read one insight
The insight, its completed explanations, newest first (at most 20), and the feedback:
the caller’s own vote (mine, null when they have not voted) and every member’s counts.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
project_id |
path | string (uuid) | yes | |
insight_id |
path | string (uuid) | yes |
| Status | Description | Body |
|---|---|---|
| 200 | Successful Response | application/json: InsightDetailOut |
| 422 | Validation Error | application/json: HTTPValidationError |
POST /api/v1/projects/{project_id}/insights/{insight_id}/acknowledge
Section titled “POST /api/v1/projects/{project_id}/insights/{insight_id}/acknowledge”Acknowledge an insight
Record that you have seen it. 409 INVALID_TRANSITION unless it is open.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
project_id |
path | string (uuid) | yes | |
insight_id |
path | string (uuid) | yes |
| Status | Description | Body |
|---|---|---|
| 200 | Successful Response | application/json: InsightOut |
| 422 | Validation Error | application/json: HTTPValidationError |
POST /api/v1/projects/{project_id}/insights/{insight_id}/explain
Section titled “POST /api/v1/projects/{project_id}/insights/{insight_id}/explain”Ask Claude to explain an insight
Claude explains the insight from its evidence; the answer is advisory plain text.
Sent with the organization’s oldest Anthropic credential and counted against its monthly
explain budget. 409 NOT_CONFIGURED without a credential, CREDENTIALS_KEYS or a budget;
409 EXPLAIN_MODEL_UNPRICED; 402 EXPLAIN_BUDGET_EXCEEDED; 502 EXPLAIN_FAILED.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
project_id |
path | string (uuid) | yes | |
insight_id |
path | string (uuid) | yes |
| Status | Description | Body |
|---|---|---|
| 201 | Successful Response | application/json: ExplanationOut |
| 422 | Validation Error | application/json: HTTPValidationError |
DELETE /api/v1/projects/{project_id}/insights/{insight_id}/feedback
Section titled “DELETE /api/v1/projects/{project_id}/insights/{insight_id}/feedback”Withdraw your verdict on an insight
404 when you have no vote on the insight.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
project_id |
path | string (uuid) | yes | |
insight_id |
path | string (uuid) | yes |
| Status | Description | Body |
|---|---|---|
| 204 | Successful Response | none |
| 422 | Validation Error | application/json: HTTPValidationError |
PUT /api/v1/projects/{project_id}/insights/{insight_id}/feedback
Section titled “PUT /api/v1/projects/{project_id}/insights/{insight_id}/feedback”Say whether an insight was right
Record your verdict (right or wrong) with an optional note of at most 500 characters,
replacing your earlier vote. Allowed on a resolved or muted insight. 404 when the insight
is not in the project.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
project_id |
path | string (uuid) | yes | |
insight_id |
path | string (uuid) | yes |
Request body (application/json, required): FeedbackIn
| Status | Description | Body |
|---|---|---|
| 200 | Successful Response | application/json: FeedbackOut |
| 422 | Validation Error | application/json: HTTPValidationError |
POST /api/v1/projects/{project_id}/insights/{insight_id}/mute
Section titled “POST /api/v1/projects/{project_id}/insights/{insight_id}/mute”Mute an insight
Silence it until until (at most 90 days ahead); 422 INVALID_MUTE otherwise.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
project_id |
path | string (uuid) | yes | |
insight_id |
path | string (uuid) | yes |
Request body (application/json, required): MuteIn
| Status | Description | Body |
|---|---|---|
| 200 | Successful Response | application/json: InsightOut |
| 422 | Validation Error | application/json: HTTPValidationError |
POST /api/v1/projects/{project_id}/insights/{insight_id}/resolve
Section titled “POST /api/v1/projects/{project_id}/insights/{insight_id}/resolve”Resolve an insight
Mark it fixed. Detecting the problem again reopens it.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
project_id |
path | string (uuid) | yes | |
insight_id |
path | string (uuid) | yes |
| Status | Description | Body |
|---|---|---|
| 200 | Successful Response | application/json: InsightOut |
| 422 | Validation Error | application/json: HTTPValidationError |
POST /api/v1/projects/{project_id}/insights/{insight_id}/unmute
Section titled “POST /api/v1/projects/{project_id}/insights/{insight_id}/unmute”Unmute an insight
End a mute early. 409 INVALID_TRANSITION unless it is muted.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
project_id |
path | string (uuid) | yes | |
insight_id |
path | string (uuid) | yes |
| Status | Description | Body |
|---|---|---|
| 200 | Successful Response | application/json: InsightOut |
| 422 | Validation Error | application/json: HTTPValidationError |
GET /api/v1/projects/{project_id}/insights/precision
Section titled “GET /api/v1/projects/{project_id}/insights/precision”Doctor precision per detector
Right and wrong votes per detector kind, with every kind the project has an insight of.
precision is right / n and wilson_low/wilson_high its Wilson 95 % interval, decimal
strings to four places, null when the kind has no votes. meets_target is precision
= 0.8 with
wilson_low>= 0.6 on n >= 20.from/tofilter on when a vote was last cast (default: all time).
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
project_id |
path | string (uuid) | yes | |
from |
query | string (date-time) or null | no | |
to |
query | string (date-time) or null | no |
| Status | Description | Body |
|---|---|---|
| 200 | Successful Response | application/json: PrecisionOut |
| 422 | Validation Error | application/json: HTTPValidationError |
GET /api/v1/projects/{project_id}/insights/summary
Section titled “GET /api/v1/projects/{project_id}/insights/summary”Count the insights to act on
Open and acknowledged insights by severity, for the navigation badge.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
project_id |
path | string (uuid) | yes |
| Status | Description | Body |
|---|---|---|
| 200 | Successful Response | application/json: InsightSummaryOut |
| 422 | Validation Error | application/json: HTTPValidationError |