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

EndpointWhat it returns
/api/v2/summary.jsonPage, all components, unresolved incidents, scheduled maintenance and the overall status, in one document.
/api/v2/status.jsonOnly the overall indicator: none, minor, major, critical or maintenance.
/api/v2/components.jsonEvery service as a component; in the whole-site document each product family is a component group.
/api/v2/incidents.jsonThe 50 most recent incidents, every unresolved one included, newest first.
/api/v2/incidents/unresolved.jsonUnresolved incidents only.
/api/v2/scheduled-maintenances.jsonThe 50 most recent scheduled maintenances.
/api/v2/scheduled-maintenances/upcoming.json, /api/v2/scheduled-maintenances/active.jsonMaintenance 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 URLCovers
https://microsoftradar.com/scope/exchange-onlineOne service (any id from /api/v1/status.json)
https://microsoftradar.com/scope/microsoft-365One product family: microsoft-365, azure, power-platform, windows, xbox, github …
https://microsoftradar.com/scope/region/west-europeOne Azure region: every Azure service with its status in that region
curl -s https://microsoftradar.com/scope/region/west-europe/api/v2/components.json

The 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 in summary.json the sources with their freshness and the unknown_components: services no source reports on right now. Those are left out of components, because no Statuspage value would be true for them.
On a component
official_status (Microsoft’s data on our scale, which also has advisory), 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_status from our own probes (detected: our signal sees a problem Microsoft has not confirmed; watch: an early sign; normal; unknown: not measured), and regions: 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”), source with 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) and detection_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), and revisions.
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) and changed_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 statusComponent statusIncident impact
operationaloperationalnone
maintenanceunder_maintenancemaintenance
advisorydegraded_performanceminor
degradeddegraded_performanceminor
partial outagepartial_outagemajor
major outagemajor_outagecritical
unknownleft out; see x_radar.unknown_componentsnone

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

Version 1 only grows: fields are added, never renamed or removed.

Caching and limits

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