Status API
JSON for every Microsoft service we track: free, no key, CORS enabled. The /api/v2 endpoints use the Atlassian Statuspage format, so existing Statuspage clients work unchanged. What Statuspage has no field for is in an extra x_radar object.
Statuspage v2 endpoints
| Endpoint | What it returns |
|---|---|
/api/v2/summary.json | Page, all components, unresolved incidents, scheduled maintenance and the overall status, in one document. |
/api/v2/status.json | Only the overall indicator: none, minor, major, critical or maintenance. |
/api/v2/components.json | Every service as a component; in the whole-site document each product family is a component group. |
/api/v2/incidents.json | The 50 most recent incidents, every unresolved one included, newest first. |
/api/v2/incidents/unresolved.json | Unresolved incidents only. |
/api/v2/scheduled-maintenances.json | The 50 most recent scheduled maintenances. |
/api/v2/scheduled-maintenances/upcoming.json, /api/v2/scheduled-maintenances/active.json | Maintenance that has not started, and maintenance in progress. |
curl -s https://microsoftradar.com/api/v2/summary.json \
| jq '.components[] | select(.status != "operational") | {id, status}'Component ids are our service slugs (exchange-online, teams, azure-devops) and never change. Incident ids are the ids in our incident URLs. Updates are newest first, as on Statuspage.
One service, family or Azure region
Many tools take a Statuspage URL and add /api/v2/summary.json themselves. Give them a scoped base URL and they see only what you care about:
| Base URL | Covers |
|---|---|
https://microsoftradar.com/scope/exchange-online | One service (any id from /api/v1/status.json) |
https://microsoftradar.com/scope/microsoft-365 | One product family: microsoft-365, azure, power-platform, windows, xbox, github … |
https://microsoftradar.com/scope/region/west-europe | One Azure region: every Azure service with its status in that region |
curl -s https://microsoftradar.com/scope/region/west-europe/api/v2/components.jsonThe x_radar fields
Statuspage clients ignore fields they do not know. Ours are all under x_radar:
- On every document
scope,generated_at,stale_sources(status sources we could not read recently: treat the answer with care),observed(freshness of our own probes),attribution, and insummary.jsonthesourceswith their freshness and theunknown_components: services no source reports on right now. Those are left out ofcomponents, because no Statuspage value would be true for them.- On a component
official_status(Microsoft’s data on our scale, which also hasadvisory),status_basis(component: the source reports this service;incident: an open incident names it;absence: Microsoft lists no incident on a fresh status page, which is not a measurement),observed_statusfrom our own probes (detected: our signal sees a problem Microsoft has not confirmed;watch: an early sign;normal;unknown: not measured), andregions: how many regions the service is listed in and every region that is not operational.- On an incident
official_ids(Microsoft’s ids such as EX1234567 when a public source names them),official_status(Microsoft’s own words, such as “Service degradation”),sourcewith a link,official_started_at,official_posted_at(the earliest publication time Microsoft gives for the text we captured),first_seen_at(when we first saw it),detected_at(when our own signal flagged the problem),first_anomaly_at(its first abnormal measurement) anddetection_lead_seconds(how long before the public post we knew),resolution(source: the source said resolved;missing: it stopped listing the incident without saying so), andrevisions.- On a revision
version,captured_at,source_updated_at,revision_id(Microsoft’s id for that revision, when it has one),field_changes(status, phase, title, services, regions: from and to) andchanged_words: the words Microsoft removed and added, up to six changes of at most 25 words each.
curl -s https://microsoftradar.com/api/v2/incidents.json | jq '.incidents[0].x_radar | {official_ids, official_posted_at, first_seen_at, detected_at,
revisions: [.revisions[] | {version, captured_at, changed_words}]}'How statuses map
| Our status | Component status | Incident impact |
|---|---|---|
| operational | operational | none |
| maintenance | under_maintenance | maintenance |
| advisory | degraded_performance | minor |
| degraded | degraded_performance | minor |
| partial outage | partial_outage | major |
| major outage | major_outage | critical |
| unknown | left out; see x_radar.unknown_components | none |
Incident phases map to investigating, identified, monitoring, resolved and postmortem. When a source says an incident is ongoing without a phase, it is investigating, and x_radar.phase says active.
Native v1 endpoints
/api/v1/status.json: families, services with status and basis, and open incidents./api/v1/incidents.json: open and recent incidents withofficialIds, phase, services, regions and links./api/v1/health.json: freshness of every source. Answers 503 when a status source is stale, so an uptime monitor can watch it.
Version 1 only grows: fields are added, never renamed or removed.
Caching and limits
- Responses may be cached for 30 seconds. The data changes at most once a minute.
- Send
If-None-Matchwith the lastETag, orIf-Modified-Since: unchanged data answers304 Not Modified. - Requests that miss our cache are limited to 240 a minute per client address. Above that you get
429withRetry-After.
Microsoft’s text
We archive every version of what Microsoft publishes, but the API does not republish it. You get facts (services, regions, statuses, times, ids), our own one-line summaries, the words Microsoft changed and one short quote of the latest text (at most 25 words, the same quote our pages show), with a link to the source and to the full history on our incident page.
Licence
Our data is CC BY 4.0. Credit it as “Data: MicrosoftRadar (microsoftradar.com)”, with a link where you can. Quoted text belongs to its publishers. MicrosoftRadar is independent and not affiliated with Microsoft.
Last updated