Skip to main content

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

MethodPathDescription
GET/api/issuesList issues (paginated, filterable)
GET/api/issues/kpisIssue summary KPIs
GET/api/issues/usersAssignable users list
GET/api/issues/{issue_id}Issue detail with alert timeline
GET/api/issues/{issue_id}/cluster-historyPast issues for the same cluster
GET/api/issues/{issue_id}/evidenceMetrics, alerts, and cluster info evidence
POST/api/issues/{issue_id}/create-jiraCreate a JIRA ticket for the issue
PATCH/api/issues/{issue_id}Update triage status, assignee, notes

GET /api/issues

Query params:

ParamTypeDefaultDescription
searchstring""Search in issue name, cluster name, customer name
daysfloat7Lookback window. 0 = today, 0.25 = 6h, etc.
severitiesstring""Comma-separated: Critical,Warning
statusstring""Ongoing or Resolved
customerstring""Exact customer name
clusterstring""Exact cluster name
triagestring""Triage status filter
dispositionstring""Disposition status filter
pageint1Page number (1-indexed)
page_sizeint20Items 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"}.