AI Issues API
Prefix: /api/ai-issues | Tag: ai-issues
Same structure as the Issues API but backed by alerts.ai_issues -- issues grouped and enriched by the AI agent. Includes AI-generated reasoning and summaries.
Endpoints
| Method | Path | Description |
|---|---|---|
| GET | /api/ai-issues | List AI issues (paginated, filterable) |
| GET | /api/ai-issues/kpis | AI issue summary KPIs |
| GET | /api/ai-issues/users | Assignable users list |
| GET | /api/ai-issues/{issue_id} | AI issue detail with linked alerts |
| PATCH | /api/ai-issues/{issue_id} | Update triage status, assignee, notes |
GET /api/ai-issues
Query params: Same as /api/issues (search, days, severities, status, customer, cluster, triage, disposition, page, page_size).
Response: Same shape as /api/issues with "source": "ai". Each issue includes extra fields:
ai_reasoning-- the AI's reasoning for grouping/severityai_summary-- AI-generated summary
GET /api/ai-issues/kpis
Query params: days (float, default 7)
Response:
{
"total": 42,
"ongoing": 12,
"resolved": 30,
"unassigned": 8,
"total_alerts": 156,
"avg_duration_minutes": 145.3,
"source": "ai"
}
GET /api/ai-issues/{issue_id}
Returns the issue with linked alert details (resolved via alert_message_ids).
{
"issue": { "issue_id": "...", "ai_reasoning": "...", "ai_summary": "...", ... },
"alerts": [
{"time": "Mar 25, 10:30 AM", "status": "Firing", "alert_name": "...", "detail": "...", "dashboard_url": "..."}
],
"cluster_info": null
}
PATCH /api/ai-issues/{issue_id}
Request body (all fields optional):
{
"triage_status": "Investigating",
"disposition_status": "Actionable",
"assignee": "me",
"notes": "Looking into this"
}
Setting assignee to "me" resolves to the current user's name. Returns {"status": "ok"}.