api
public json feed of confirmed Windows / M365 / Intune update regressions. ranked by severity + community signal. same data as the homepage, machine readable. no key, no signup. pipe it into Zabbix, Grafana, Slack, cron — your call.
endpoint
GET /api/regressions.json
- // public — no auth, no api key
- // cors: open (Access-Control-Allow-Origin: *)
- // cached 5 min at the edge (s-maxage=300)
- // rows sorted by rank_score desc
query_params
| name | values | default | description |
|---|---|---|---|
since | 1d | 7d | 30d | 90d | 30d | How far back to look at last_seen_at. |
severity | minor | workaround | breaks-prod | — | Filter by classifier severity. Omit for all. |
kb | KB1234567 | — | Return only regressions touching that KB. |
limit | 1 – 500 | 100 | Max rows returned. Sorted by rank_score desc. |
example
$ curl 'https://win-update-tracker.com/api/regressions.json?severity=breaks-prod&since=7d'
response
{
"generated_at": "2026-05-18T20:00:00Z",
"count": 1,
"regressions": [
{
"id": "1a2b3c...",
"kb_numbers": ["KB5089549"],
"component": "windows-update",
"severity": "breaks-prod",
"summary": "May 2026 security update fails to install with error 0x800f0922 on devices with limited EFI System Partition space.",
"first_seen_at": "2026-05-15T14:28:00Z",
"last_seen_at": "2026-05-17T09:12:00Z",
"total_score": 184,
"post_count": 11,
"rank_score": 273.4,
"permalink": "https://win-update-tracker.com/kb/KB5089549",
"sources": [
{
"url": "https://www.reddit.com/r/sysadmin/comments/...",
"source": "reddit:sysadmin",
"title": "KB5089549 won't install — 0x800f0922 on T14s fleet"
}
]
}
]
}integration_tips
zabbix — add an HTTP agent item polling the endpoint every 10 min. preprocess with JSONPath: $.regressions[?(@.severity=='breaks-prod')]. trigger on last() <> prev() or on a regex matching your rollout KBs.
grafana — Infinity datasource, json type, URL the endpoint, drill into $.regressions[*]. plot rank_score vs last_seen_at or table-view by component.
slack — a 5-line bash script in cron: curl …json | jq -r '.regressions[] | select(.severity=="breaks-prod") | "\\(.kb_numbers[0]) \\(.summary)"' | xargs -I{} curl -X POST $SLACK_HOOK …
stability = response shape is additive only. new fields may appear; existing fields will not be removed.
rate_limit = none today. cache the response on your side — fresh once per 5 min anyway.
questions = ping dante.rivadi@anoto.com.py