DigitalOcean Status API
Read DigitalOcean's live component health, incidents and maintenance windows as JSON. No key. The same Statuspage v2 schema works for hundreds of other vendors.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the DigitalOcean Status API?
DigitalOcean publishes its status page as a JSON API. `GET https://status.digitalocean.com/api/v2/summary.json` returns every component with its current status, plus open incidents and scheduled maintenance. It needs no API key, and the schema is the standard Atlassian Statuspage v2 format.
The genuinely useful thing about this endpoint is not DigitalOcean specifically, it is the schema. Any vendor hosted on Atlassian Statuspage exposes the same `/api/v2/` paths with the same field names, so one parser handles hundreds of providers. Learn it here and you can point the identical code at your CDN, your payment processor and your error tracker.
Choose the right path for the job, because `summary.json` is by far the largest. `status.json` is a two-field answer to 'is it up', `components.json` is the per-service breakdown, and `incidents/unresolved.json` gives only what is currently broken. Polling `summary.json` every minute for a dashboard is the mistake most people make first: pick the narrowest endpoint that answers your question and you will move a fraction of the bytes.
Quick facts
- Base URL
https://status.digitalocean.com/api/v2- Authentication
- No key or account. Statuspage endpoints are public by design so that customers can monitor a vendor without credentials.
- Rate limit
- Not published. Status data changes slowly; polling once a minute is ample and once every five minutes is kinder.
- Pricing
- Free.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the DigitalOcean Status API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. Fetch the full status summary
GET https://status.digitalocean.com/api/v2/summary.json
curl 'https://status.digitalocean.com/api/v2/summary.json'const res = await fetch("https://status.digitalocean.com/api/v2/summary.json");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://status.digitalocean.com/api/v2/summary.json", timeout=20)
res.raise_for_status()
print(res.json()){
"page": {
"id": "w4cz49tckxhp",
"name": "DigitalOcean",
"url": "http://status.digitalocean.com",
"time_zone": "Etc/UTC",
"updated_at": "2026-08-19T19:37:57.235Z"
},
"components": [
{
"id": "p1x9rv4137gx",
"name": "API",
"status": "operational",
"created_at": "2023-03-06T18:42:45.160Z",
"updated_at": "2026-05-08T19:59:48.833Z",
"position": 1,
"description": null,
"showcase": false,
"start_date": "2023-03-06",
"group_id": null,
"page_id": "w4cz49tckxhp",
"group": false,
"only_show_if_degraded": false
},
{
"id": "yht2qc1zfp6x",
"name": "Global",
"status": "operational",
"created_at": "2023-03-28T21:01:01.809Z",
"updated_at": "2026-06-19T14:50:38.370Z",
"position": 1,
"description": null,
"showcase": false,
"start_date": "2023-03-28",
"group_id": "2d23wwyqgq6m",
"page_id": "w4cz49tckxhp",
"group": false,
"only_show_if_degraded": false
},
{
"id": "5rzxjrq10gb2",
"name": "Global",
"status": "operational",
"created_at": "2023-03-28T21:01:02.121Z",
"updated_at": "2026-05-07T21:00:07.224Z",
"position": 1,
"description": null,
"showcase": false,
"start_date": "2023-03-28",
"group_id": "sjlhrm4vf4pr",
"page_id": "w4cz49tckxhp",
"group": false,
"only_show_if_degraded": false
},
{
"id": "txysr8r0gn1n",
"name": "Global",
"status": "operational",
"created_at": "2023-03-28T21:01:12Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
(endpoint) | path | Optional | `summary.json` for everything, `status.json` for the one-line indicator, `components.json` for per-service health, `incidents.json` or `incidents/unresolved.json` for incidents, `scheduled-maintenances/upcoming.json` for planned work. summary.json |
Response fields
pageobject- Identity of the status page itself: `id`, `name`, `url`, `time_zone` and `updated_at`. `updated_at` is the freshness stamp for the whole payload.
componentsarray- One entry per service. The interesting fields are `name`, `status` and `group_id`.
components[].statusstring- One of `operational`, `degraded_performance`, `partial_outage`, `major_outage` or `under_maintenance`. Treat anything other than `operational` as a problem.
components[].group_idstring or null- Parent group id for nested components. Several components share the name `Global`, so you must resolve `group_id` to know which region a row belongs to.
components[].descriptionstring or null- Usually `null`. Do not rely on it for display text; use `name` plus the resolved group.
incidentsarray- Currently open incidents, each with `impact`, `status` and a chronological `incident_updates` array. An empty array means no active incidents.
status.indicatorstring- Overall roll-up: `none`, `minor`, `major` or `critical`. Present on `summary.json` and `status.json`.
What you can build with the DigitalOcean Status API
- Show a vendor health widget on an internal operations dashboard
- Correlate your own error spikes with a provider incident before paging an engineer
- Alert your team automatically when a dependency reports a major outage
- Archive incident history to measure a supplier against its SLA
- Write one Statuspage parser and reuse it across every vendor you depend on
Common errors and how to fix them
404
Wrong path. The `.json` extension is part of the route.
Fix: Use `/api/v2/summary.json`, not `/api/v2/summary`.
Duplicate component names
Statuspage nests components in groups, and children often share generic names like `Global`.
Fix: Build a lookup from component id to name first, then resolve each `group_id` to label rows correctly.
Stale data
You are reading a CDN-cached copy of the page payload.
Fix: Check `page.updated_at` rather than assuming the response is second-fresh, and do not build sub-minute alerting on it.
DigitalOcean Status API — frequently asked questions
Does the DigitalOcean status API need a key?
No. Statuspage publishes these endpoints anonymously so customers can monitor the provider without an account.
Will this schema work for other vendors?
Yes. Any provider on Atlassian Statuspage exposes the same `/api/v2/` paths and field names on their own status domain, so a single parser covers many suppliers.
Which endpoint should I poll for alerting?
`incidents/unresolved.json` or `status.json`. Both are small and answer the operational question directly, whereas `summary.json` returns the entire component tree on every call.
How quickly does it reflect an outage?
It reflects what the vendor has published, which is a human process. Expect a lag between customer impact and a status page update, and never treat it as your only monitoring signal.
Tools that pair with this API
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
JSON Viewer
View JSON as a collapsible interactive tree online. Expand and collapse nodes, search keys and values, and copy the JSONPath of any node privately.
HTTP Status Code Lookup
Search HTTP status codes from 100 to 599 with name, category and clear description. Filter by number or text — a fast, free, private in-browser reference.
Timestamp Converter
Convert timestamps to human-readable dates and dates back to timestamps. Auto-detects seconds vs milliseconds, shows local, UTC and ISO 8601 formats.
DigitalOcean Status is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.