DigitalOcean Status - API


DigitalOcean Services Status

DigitalOcean Status API
Documentation and functionality
Basics
The following documentation is provided to let users of the DigitalOcean status page programmatically access various elements on the page. Endpoints are displayed with examples using cURL and our embeded javascript widget (if available).
Javascript library
A wrapper for the page status api, exposing convenient actions useful for embedding your status anywhere.
https://cdn.statuspage.io/se-v2.js
Summary
Get a summary of the status page, including a status indicator, component statuses, unresolved incidents, and any upcoming or in-progress scheduled maintenances.
https://status.digitalocean.com/api/v2/summary.json Click for example
Status
Get the status rollup for the whole page. This endpoint includes an indicator - one of none, minor, major, or critical, as well as a human description of the blended component status. Examples of the blended status include "All Systems Operational", "Partial System Outage", and "Major Service Outage".
https://status.digitalocean.com/api/v2/status.json Click for example
Components
Get the components for the page. Each component is listed along with its status - one of operational, degraded_performance, partial_outage, or major_outage.
https://status.digitalocean.com/api/v2/components.json Click for example
Incidents
Incidents are the cornerstone of any status page, being composed of many incident updates. Each incident usually goes through a progression of statuses listed below, with an impact calculated from a blend of component statuses (or an optional override).
Status: Investigating, Identified, Monitoring, Resolved, or Postmortem
Impact: None (black), Minor (yellow), Major (orange), or Critical (red)
Unresolved incidents
Get a list of any unresolved incidents. This endpoint will only return incidents in the Investigating, Identified, or Monitoring state.
https://status.digitalocean.com/api/v2/incidents/unresolved.json Click for example
All incidents
Get a list of the 50 most recent incidents. This includes all unresolved incidents as described above, as well as those in the Resolved and Postmortem state.
https://status.digitalocean.com/api/v2/incidents.json Click for example
Scheduled maintenances
Scheduled maintenances are planned outages, upgrades, or general notices that you're working on infrastructure and disruptions may occurr. A close sibling of Incidents, each usually goes through a progression of statuses listed below, with an impact calculated from a blend of component statuses (or an optional override).
Status: Scheduled, In Progress, Verifying, or Completed
Impact: None (black), Minor (yellow), Major (orange), or Critical (red)
Upcoming scheduled maintenances
Get a list of any upcoming maintenances. This endpoint will only return scheduled maintenances still in the Scheduled state.
https://status.digitalocean.com/api/v2/scheduled-maintenances/upcoming.json Click for example
Active scheduled maintenances
Get a list of any active maintenances. This endpoint will only return scheduled maintenances in the In Progress or Verifying state.
https://status.digitalocean.com/api/v2/scheduled-maintenances/active.json Click for example
All scheduled maintenances
Get a list of the 50 most recent scheduled maintenances. This includes scheduled maintenances as described in the above two endpoints, as well as those in the Completed state.
https://status.digitalocean.com/api/v2/scheduled-maintenances.json Click for example
' }, showLink: false, cookie: { domain: '.digitalocean.com', expiryDays: '-1' }, onStatusChange: function(status) { onCookieConsentStatusChange(status); } }); }); } })(); const incidentStates = [ 'investigating' , 'identified' , 'monitoring' , 'resolved' ]; $(function() { // Add the twitter button $('').appendTo('.updates-dropdown-container'); if ($('.status.incident').length == 1) { $('.components-affected').insertAfter('.page-title'); } if ($('.status.status-index').length == 1) { // Make the incident titles h3s and add links below the bodies $('.incident-container').each(function() { updateTitle($(this), 'h3', 'Incident Details'); }); $('.scheduled-maintenance').each(function() { $(this). children('.incident-title'). prepend('
'); updateTitle($(this), 'h3', 'Maintenance Details'); }); // move the outage to the header $('.page-status').appendTo('#header-incidents-inner-container'); // move the incidents to the header $('.unresolved-incidents').appendTo('#header-incidents-inner-container').removeClass('unresolved-incidents'); // move the scheduled maintenance to the header $('.scheduled-maintenances-container').appendTo('#header-incidents-inner-container'); // set the border-radius on second group $('.component-container').attr('style','border-radius:3px !important'); // add the icon div $('.unresolved-incident').each(function() { var state; $(this).children('.updates').children('.update').each(function() { state = $(this). children('strong'). text(). toLowerCase(); if (incidentStates.indexOf(state) !== -1) { return false; } }); $(this). children('.incident-title'). prepend('
'); updateTitle($(this), 'h2', 'Incident Details'); }); // rename "Past Incidents" to "Status History" $('.incidents-list .font-largest').html('Status History'); // rename "Incident History" to "Show History" $('.history-footer-link').html('Show History') // weird opacity trick i'm doing don't touch $('.layout-content').css('opacity',1); } else { $('#header-incidents-outer-container').remove(); $('.custom-header-container').addClass('bottom-padded'); } }); function updateTitle(element, type, linkText) { var titleCont = element.children('.incident-title'); var link = titleCont.children('a:not(.subscribe)'); var title = link.html(); $('<'+type+' class="title">'+title+''+type+'>').prependTo(titleCont); link.html(linkText); link.removeClass('actual-title'). removeClass('with-ellipsis'). addClass('incident-details'); link.appendTo(element); } $(function() { $('.component-container').toggleClass('closed') }); // Regional services layout $('
').prependTo('.components-section') $('

Regional Services Status

').appendTo('.regional') $('.components-container').appendTo('.regional') // Global services layout $('
').prependTo('.components-section') $('

Global Services Status

').appendTo('.global') $('.components-container').clone().appendTo('.global') // build layout table for global services with three rows var global_containers = $('.global > .components-container').find('.component-container'); global_containers.each(function(){ if($(this).find('.status-red').length || $(this).find('.status-yellow').length || $(this).find('.status-orange').length || $(this).find('.status-blue').length){ $(this).prependTo('.global > .components-container'); } if($(this).find('.child-components-container').length){ $(this).remove(); } }); $(function() { $('.components-container').toggleClass('one-column').toggleClass('three-columns') }); // build layout table for regional services var regional_containers = $('.regional > .components-container').find('.component-container'); regional_containers.each(function(){ if($(this).find('.status-red').length || $(this).find('.status-yellow').length || $(this).find('.status-orange').length || $(this).find('.status-blue').length){ $(this).find('.child-components-container > .component-inner-container').each(function(){ if(!$(this).hasClass('status-green')) { this.style.setProperty('background-color', 'rgba(243, 245, 249, 0.97)','important'); this.style.setProperty('margin-bottom', '0','important'); } }); $(this).prependTo('.regional > .components-container'); } if($(this).find('.child-components-container').length == 0){ $(this).remove(); } }) // remove uptime $(function() { $('.components-section > .components-uptime-link').remove(); }); // tooltips for status images in incident header $(function() { $('.icon-indicator.investigating').attr('title','Investigating'); $('.icon-indicator.identified').attr('title','Issue Identified'); $('.icon-indicator.monitoring').attr('title','Monitoring'); $('.icon-indicator.maintenance').attr('title','Maintenance'); }); // add aria-labels $(function() { $('.fa-check').attr('aria-label','Operational'); $('.fa-minus-square').attr('aria-label','Degraded Performance'); $('.fa-exclamation-triangle').attr('aria-label','Partial Outage'); $('.fa-times').attr('aria-label','Major Outage'); $('.fa-wrench').attr('aria-label','Maintenance'); $('.component-statuses-legend').attr('aria-label','Statuses Legend'); $('.container > .logo > img').attr('alt','DigitalOcean logo'); }); // spacer to visually separate main page legend $(function() { $('
').prependTo('.container > .components-section > .component-statuses-legend'); }); // add legend to history page $(function() { if ($('[data-react-class=HistoryIndex]').length) { $('
Impact levels• Critical • Major • Minor • Maintenance • Retroactive
').insertAfter('.pagination'); } }); // Filter button UX improvements function resetSelection() { $("input:checkbox").each(function() { if(this.checked == true) { this.click(); } }); } $(function() { if ($('[data-react-class=HistoryIndex]').length) { window.addEventListener('click', function(e) { if($(event.target).closest('.grouped-items-selector').length === 0 && $(event.target).closest('.component-selector').length === 0 && $(event.target).closest('.cc-window').length === 0 ){ if ($('.grouped-items-selector').length) { $('.component-selector > span').click(); e.stopImmediatePropagation(); } } else { if ($('.grouped-items-selector').length && !$('#reset-selection').length) { $('
  - Clear selection
').prependTo('.grouped-items-selector'); $('#reset-selection').click(resetSelection); e.stopImmediatePropagation(); } } }); } }); $(function() { $('* Note: Incidents before May 10th, 2023 were backfilled and don\'t support the filter feature.').prependTo('.months-container'); }); $(function() { if (/Android|iPhone/i.test(navigator.userAgent)) { $( '.component-container' ).each(function () { this.style.setProperty( 'width', '95%', 'important' ); }); } }); // Shorten header incident describtions function revealTruncated (incidentID) { let truncateDivName = "#truncate_" + incidentID; let expandLinkDivName = "#expand_" + incidentID; let truncateLink = " [less] " $(truncateDivName).css('display','inline'); $(expandLinkDivName).insertAfter(truncateDivName) $(expandLinkDivName).html(truncateLink); } function hideTruncated (incidentID) { let truncateDivName = "#truncate_" + incidentID; let expandLinkDivName = "#expand_" + incidentID; let truncateLink = " [...] " $(truncateDivName).css('display','None'); $(expandLinkDivName).insertBefore(truncateDivName) $(expandLinkDivName).html(truncateLink); } $('.update > span.whitespace-pre-wrap').each(function() { let textLength = $(this).text().split(/\s+/).length; if (textLength > 81){ // get incident ID let incidentUrl = $(this).closest('.unresolved-incident').find('a')[0]; let incidentID = (String(incidentUrl)).split("incidents/")[1]; let firstPart = $(this).html().split(/\s+/).slice(0,80).join(' '); let secondPart = ''; let expandLink = "
 [...] 
" $(this).html(firstPart + expandLink + secondPart); } });