Issues API
Prefix: /api/issues | Tag: issues
Alert-based issue tracking. Issues are auto-grouped from Lark alerts by the issue tracker. Supports filtering, pagination, triage workflow, and JIRA integration.
Endpoints
| Method | Path | Description |
|---|---|---|
| GET | /api/issues | List issues (paginated, filterable) |
| GET | /api/issues/kpis | Issue summary KPIs |
| GET | /api/issues/users | Assignable users list |
| GET | /api/issues/{issue_id} | Issue detail with alert timeline |
| GET | /api/issues/{issue_id}/cluster-history | Past issues for the same cluster |
| GET | /api/issues/{issue_id}/evidence | Metrics, alerts, and cluster info evidence |
| POST | /api/issues/{issue_id}/create-jira | Create a JIRA ticket for the issue |
| PATCH | /api/issues/{issue_id} | Update triage status, assignee, notes |
GET /api/issues
Query params:
| Param | Type | Default | Description |
|---|---|---|---|
search | string | "" | Search in issue name, cluster name, customer name |
days | float | 7 | Lookback window. 0 = today, 0.25 = 6h, etc. |
severities | string | "" | Comma-separated: Critical,Warning |
status | string | "" | Ongoing or Resolved |
customer | string | "" | Exact customer name |
cluster | string | "" | Exact cluster name |
triage | string | "" | Triage status filter |
disposition | string | "" | Disposition status filter |
page | int | 1 | Page number (1-indexed) |
page_size | int | 20 | Items per page (max 100) |
Response:
{
"issues": [{ "issue_id": "...", "issue_name": "...", "severity": "Critical", ... }],
"total": 42,
"page": 1,
"page_size": 20,
"total_pages": 3,
"customers": ["Acme Corp", "..."],
"clusters": ["prod-analytics", "..."],
"source": "live"
}
GET /api/issues/kpis
Query params: days (float, default 7)
Response:
{
"total": 42,
"ongoing": 12,
"resolved": 30,
"unassigned": 8,
"avg_duration_minutes": 145.3,
"source": "live"
}
GET /api/issues/{issue_id}
Returns the issue, its alert timeline, and (deferred) cluster info.
{
"issue": { "issue_id": "...", "issue_name": "...", ... },
"alerts": [
{"time": "Mar 25, 10:30 AM", "status": "Firing", "alert_name": "...", "detail": "...", "dashboard_url": "..."}
],
"cluster_info": null,
"source": "live"
}
GET /api/issues/{issue_id}/evidence
Returns recent alerts (7d), key metrics (24h), and cluster info for the issue's cluster.
POST /api/issues/{issue_id}/create-jira
Creates a JIRA ticket and updates the issue with the JIRA key/URL. Returns {"status": "created", "jira_key": "OPS-123", "jira_url": "..."}.
PATCH /api/issues/{issue_id}
Request body:
{
"triage_status": "Investigating",
"disposition_status": "Actionable",
"assignee": "kiran",
"notes": "Checking compaction backlog",
"jira_key": "OPS-123",
"jira_url": "https://..."
}
All fields are optional. Returns {"status": "updated", "source": "live"}.