PageSourceSearch

https://www.traviscistatus.com/uptime

html traviscistatus.com collected 2026-10-02 04:25:42 UTC 59,761 bytes, 1,062 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3  <head>
4    <meta http-equiv="X-UA-Compatible" content="IE=edge">
5    <!-- force IE browsers in compatibility mode to use their most aggressive rendering engine -->
6
7    <meta charset="utf-8">
8    <title>Travis CI Status - Uptime History</title>
9    <meta name="description" content="Travis CI&#39;s Uptime History">
10
11    <!-- Mobile viewport optimization -->
12    <meta name="HandheldFriendly" content="True">
13    <meta name="MobileOptimized" content="320">
14    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0">
15
16    <!-- Time this page was rendered - http://purl.org/dc/terms/issued -->
17    <meta name="issued" content="1790915140">
18
19    <!-- Mobile IE allows us to activate ClearType technology for smoothing fonts for easy reading -->
20    <meta http-equiv="cleartype" content="on">
21
22      <!-- Atlassian Sans & Mono Fonts -->
23<link
24  rel="preconnect"
25  href="https://ds-cdn.prod-east.frontend.public.atl-paas.net" />
26<link
27  rel="preload"
28  href="https://ds-cdn.prod-east.frontend.public.atl-paas.net/assets/fonts/atlassian-sans/v3/AtlassianSans-latin.woff2"
29  as="font" type="font/woff2" crossorigin />
30<link
31  rel="preload"
32  href="https://ds-cdn.prod-east.frontend.public.atl-paas.net/assets/font-rules/v5/atlassian-fonts.css"
33  as="style" crossorigin />
34
35    <style>
36  /* Dynamic Font Stack based on Feature Flag */
37    /* Using Atlassian Sans & Mono */
38    :root {
39      --font-stack-a: "Atlassian Sans", "Helvetica Neue", Helvetica, Arial, Sans-Serif;
40      --font-stack-b: "Atlassian Mono", "SFMono-Medium", "SF Mono", "Segoe UI Mono", "Roboto Mono", "Ubuntu Mono", Menlo, Consolas, Courier, monospace;
41    }
42</style>
43
44
45      <link rel="icon" type="image/x-icon" href="//dka575ofm4ao0.cloudfront.net/pages-favicon_logos/original/27/favicon-3a4bd34c-f8d3-468e-ab94-50c3bef48ddc.png" />
46
47    <link rel="shortcut icon" href='//dka575ofm4ao0.cloudfront.net/pages-favicon_logos/original/27/favicon-3a4bd34c-f8d3-468e-ab94-50c3bef48ddc.png'>
48
49    <link rel="alternate" type="application/atom+xml" href="https://www.traviscistatus.com/history.atom" title="Travis CI Status History - Atom Feed">
50    <link rel="alternate" type="application/rss+xml" href="https://www.traviscistatus.com/history.rss" title="Travis CI Status History - RSS Feed">
51
52      <!-- Canonical Link to ensure that only the custom domain is indexed when present -->
53      <link rel="canonical" href="https://www.traviscistatus.com/uptime">
54
55    <meta name="_globalsign-domain-verification" content="y_VzfckMy4iePo5oDJNivyYIjh8LffYa4jzUndm_bZ"/>
56
57
58    <link rel="alternate" type="application/atom+xml" title="ATOM" href="https://www.traviscistatus.com/history.atom" />
59
60    <!-- Le styles -->
61    <link rel="stylesheet" href="https://dka575ofm4ao0.cloudfront.net/packs/0.a7d86fc6a129fa9540bc.css" media="screen" /><link rel="stylesheet" href="https://dka575ofm4ao0.cloudfront.net/packs/191.a7d86fc6a129fa9540bc.css" media="screen" /><link rel="stylesheet" href="https://dka575ofm4ao0.cloudfront.net/packs/155.a7d86fc6a129fa9540bc.css" media="screen" />
62    <link rel="stylesheet" href="https://dka575ofm4ao0.cloudfront.net/assets/status/status_manifest-e7416fcfeedbe261454d619d119599335f4c7b18c9e245c13722dbb0998dc023.css" media="all" />
63
64    
64<script src="https://dka575ofm4ao0.cloudfront.net/assets/jquery-3.5.1.min-729e416557a365062a8a20f0562f18aa171da57298005d392312670c706c68de.js"></script>
64
65
66    
66<script>
67      window.pageColorData = {"blue":"#0068FF","border":"#CCE1FF","body_background":"#fff","font":"#333333","graph":"#0068FF","green":"#05c47a","light_font":"#8794A0","link":"#0068FF","orange":"#FF8C3E","red":"#FF5050","yellow":"#efcc00","no_data":"#b3bac5"};
68    </script>
68
69    <style>
70  /* BODY BACKGROUND */ /* BODY BACKGROUND */ /* BODY BACKGROUND */ /* BODY BACKGROUND */ /* BODY BACKGROUND */
71  body,
72  .layout-content.status.status-api .section .example-container .example-opener .color-secondary,
73  .grouped-items-selector,
74  .layout-content.status.status-full-history .history-nav a.current,
75  div[id^="subscribe-modal"] .modal-footer,
76  div[id^="subscribe-modal"],
77  div[id^="updates-dropdown"] .updates-dropdown-section,
78  #uptime-tooltip .tooltip-box {
79    background-color:#fff;
80  }
81
82  #uptime-tooltip .pointer-container .pointer-smaller {
83    border-bottom-color:#fff;
84  }
85
86
87
88
89  /* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */
90  body.status,
91  .color-primary,
92  .color-primary:hover,
93  .layout-content.status-index .status-day .update-title.impact-none a,
94  .layout-content.status-index .status-day .update-title.impact-none a:hover,
95  .layout-content.status-index .timeframes-container .timeframe.active,
96  .layout-content.status-full-history .month .incident-container .impact-none,
97  .layout-content.status.status-index .incidents-list .incident-title.impact-none a,
98  .incident-history .impact-none,
99  .layout-content.status .grouped-items-selector.inline .grouped-item.active,
100  .layout-content.status.status-full-history .history-nav a.current,
101  .layout-content.status.status-full-history .history-nav a:not(.current):hover,
102  div[id^="subscribe-modal"] .modal-header .close,
103  .grouped-item-label,
104  #uptime-tooltip .tooltip-box .tooltip-content .related-events .related-event a.related-event-link {
105    color:#333333;
106  }
107
108  .layout-content.status.status-index .components-statuses .component-container .name {
109    color:#333333;
110    color:rgba(51,51,51,.8);
111  }
112
113
114
115
116  /* SECONDARY FONT COLOR */ /* SECONDARY FONT COLOR */ /* SECONDARY FONT COLOR */ /* SECONDARY FONT COLOR */
117  small,
118  .layout-content.status .table-row .date,
119  .color-secondary,
120  .layout-content.status .grouped-items-selector.inline .grouped-item,
121  .layout-content.status.status-full-history .history-footer .pagination a.disabled,
122  .layout-content.status.status-full-history .history-nav a,
123  #uptime-tooltip .tooltip-box .tooltip-content .related-events #related-event-header {
124    color:#8794A0;
125  }
126
127
128
129
130  /* BORDER COLOR */  /* BORDER COLOR */  /* BORDER COLOR */  /* BORDER COLOR */  /* BORDER COLOR */  /* BORDER COLOR */
131  body.status .layout-content.status .border-color,
132  hr,
133  .tooltip-base,
134  .markdown-display table,
135  div[id^="subscribe-modal"],
136  #uptime-tooltip .tooltip-box {
137    border-color:#CCE1FF;
138  }
139
140  div[id^="subscribe-modal"] .modal-footer,
141  .markdown-display table td {
142    border-top-color:#CCE1FF;
143  }
144
145  .markdown-display table td + td, .markdown-display table th + th {
146    border-left-color:#CCE1FF;
147  }
148
149  div[id^="subscribe-modal"] .modal-header,
150  #uptime-tooltip .pointer-container .pointer-larger {
151    border-bottom-color:#CCE1FF;
152  }
153
154  #uptime-tooltip .tooltip-box .outage-field {
155    /*
156      Generate the background-color for the outage-field from the css_body_background_color and css_border_color.
157
158      For the default background (#ffffff) and default css_border_color (#e0e0e0), use the luminosity of the default background with a magic number to arrive at
159      the original outage-field background color (#f4f5f7). I used the formula Target Color = Color * alpha + Background * (1 - alpha) to find the magic number of ~0.08.
160
161      For darker css_body_background_color, luminosity values are lower so alpha trends toward becoming transparent (thus outage-field background becomes same as css_body_background_color).
162    */
163    background-color: rgba(204,225,255,0.31);
164
165    /*
166      outage-field border-color alpha is inverse to the luminosity of css_body_background_color.
167      That is to say, with a default white background this border is transparent, but on a black background, it's opaque css_border_color.
168    */
169    border-color: rgba(204,225,255,0.0);
170  }
171
172
173
174
175  /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */
176  .layout-content.status.status-index .status-day .update-title.impact-critical a,
177  .layout-content.status.status-index .status-day .update-title.impact-critical a:hover,
178  .layout-content.status.status-index .page-status.status-critical,
179  .layout-content.status.status-index .unresolved-incident.impact-critical .incident-title,
180  .flat-button.background-red {
181    background-color:#FF5050;
182  }
183
184  .layout-content.status-index .components-statuses .component-container.status-red:after,
185  .layout-content.status-full-history .month .incident-container .impact-critical,
186  .layout-content.status-incident .incident-name.impact-critical,
187  .layout-content.status.status-index .incidents-list .incident-title.impact-critical a,
188  .status-red .icon-indicator,
189  .incident-history .impact-critical,
190  .components-container .component-inner-container.status-red .component-status,
191  .components-container .component-inner-container.status-red .icon-indicator {
192    color:#FF5050;
193  }
194
195  .layout-content.status.status-index .unresolved-incident.impact-critical .updates {
196    border-color:#FF5050;
197  }
198
199
200
201
202  /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */
203  .layout-content.status.status-index .status-day .update-title.impact-major a,
204  .layout-content.status.status-index .status-day .update-title.impact-major a:hover,
205  .layout-content.status.status-index .page-status.status-major,
206  .layout-content.status.status-index .unresolved-incident.impact-major .incident-title {
207    background-color:#FF8C3E;
208  }
209
210  .layout-content.status-index .components-statuses .component-container.status-orange:after,
211  .layout-content.status-full-history .month .incident-container .impact-major,
212  .layout-content.status-incident .incident-name.impact-major,
213  .layout-content.status.status-index .incidents-list .incident-title.impact-major a,
214  .status-orange .icon-indicator,
215  .incident-history .impact-major,
216  .components-container .component-inner-container.status-orange .component-status,
217  .components-container .component-inner-container.status-orange .icon-indicator {
218    color:#FF8C3E;
219  }
220
221  .layout-content.status.status-index .unresolved-incident.impact-major .updates {
222    border-color:#FF8C3E;
223  }
224
225
226
227
228  /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */
229  .layout-content.status.status-index .status-day .update-title.impact-minor a,
230  .layout-content.status.status-index .status-day .update-title.impact-minor a:hover,
231  .layout-content.status.status-index .page-status.status-minor,
232  .layout-content.status.status-index .unresolved-incident.impact-minor .incident-title,
233  .layout-content.status.status-index .scheduled-incidents-container .tab {
234    background-color:#efcc00;
235  }
236
237  .layout-content.status-index .components-statuses .component-container.status-yellow:after,
238  .layout-content.status-full-history .month .incident-container .impact-minor,
239  .layout-content.status-incident .incident-name.impact-minor,
240  .layout-content.status.status-index .incidents-list .incident-title.impact-minor a,
241  .status-yellow .icon-indicator,
242  .incident-history .impact-minor,
243  .components-container .component-inner-container.status-yellow .component-status,
244  .components-container .component-inner-container.status-yellow .icon-indicator,
245  .layout-content.status.manage-subscriptions .confirmation-infobox .fa {
246    color:#efcc00;
247  }
248
249  .layout-content.status.status-index .unresolved-incident.impact-minor .updates,
250  .layout-content.status.status-index .scheduled-incidents-container {
251    border-color:#efcc00;
252  }
253
254
255
256
257  /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */
258  .layout-content.status.status-index .status-day .update-title.impact-maintenance a,
259  .layout-content.status.status-index .status-day .update-title.impact-maintenance a:hover,
260  .layout-content.status.status-index .page-status.status-maintenance,
261  .layout-content.status.status-index .unresolved-incident.impact-maintenance .incident-title,
262  .layout-content.status.status-index .scheduled-incidents-container .tab {
263    background-color:#0068FF;
264  }
265
266  .layout-content.status-index .components-statuses .component-container.status-blue:after,
267  .layout-content.status-full-history .month .incident-container .impact-maintenance,
268  .layout-content.status-incident .incident-name.impact-maintenance,
269  .layout-content.status.status-index .incidents-list .incident-title.impact-maintenance a,
270  .status-blue .icon-indicator,
271  .incident-history .impact-maintenance,
272  .components-container .component-inner-container.status-blue .component-status,
273  .components-container .component-inner-container.status-blue .icon-indicator {
274    color:#0068FF;
275  }
276
277  .layout-content.status.status-index .unresolved-incident.impact-maintenance .updates,
278  .layout-content.status.status-index .scheduled-incidents-container {
279    border-color:#0068FF;
280  }
281
282
283
284
285  /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */
286  .layout-content.status.status-index .page-status.status-none {
287    background-color:#05c47a;
288  }
289  .layout-content.status-index .components-statuses .component-container.status-green:after,
290  .status-green .icon-indicator,
291  .components-container .component-inner-container.status-green .component-status,
292  .components-container .component-inner-container.status-green .icon-indicator {
293    color:#05c47a;
294  }
295
296
297
298
299  /* CSS LINK COLOR */  /* CSS LINK COLOR */  /* CSS LINK COLOR */  /* CSS LINK COLOR */  /* CSS LINK COLOR */  /* CSS LINK COLOR */
300  a,
301  a:hover,
302  .layout-content.status-index .page-footer span a:hover,
303  .layout-content.status-index .timeframes-container .timeframe:not(.active):hover,
304  .layout-content.status-incident .subheader a:hover {
305    color:#0068FF;
306  }
307
308  .flat-button,
309  .masthead .updates-dropdown-container .show-updates-dropdown,
310  .layout-content.status-full-history .show-filter.open  {
311    background-color:#0068FF;
312  }
313
314
315
316
317  /* CUSTOM COLOR OVERRIDES FOR UPTIME SHOWCASE */
318  .components-section .components-uptime-link {
319    color: #8794a0;
320  }
321
322  .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .legend-item {
323    color: #8794a0;
324    opacity: 1;
325  }
326  .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .legend-item.light {
327    color: #8794a0;
328    opacity: 1;
329  }
330  .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .spacer {
331    background: #8794a0;
332    opacity: 1;
333  }
334</style>
335
336
337    <!-- custom css -->
338
339      <!-- polyfills -->
340        
340<script crossorigin="anonymous" src="https://cdnjs.cloudflare.com/polyfill/v3/polyfill.js"></script>
340
341
342    <!-- Le HTML5 shim -->
343    <!--[if lt IE 9]>
344      
344<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
344
345    <![endif]-->
346
347    <!-- injection for static -->
348
349
350    
351  </head>
352
353
354  <body class="status uptime status-none sp-a11y-status-focus-visibility a11y-focus-indicators">
355
356    
357<div class="layout-content status status-full-history premium">
358
359    <div class="masthead-container premium">
360    <div class="masthead">
361      <div class="images-container" id="cover-image-container" data-js-hook="images-container"></div>
362      <style>
363          #cover-image-container {
364            background-image:url("//dka575ofm4ao0.cloudfront.net/pages-hero_covers/normal/27/tci-logo_w1700h630-e25efd0e-8bda-4e6f-b5ca-e6ba7eb2ab65.png");
365          }
366
367          @media only screen and (-webkit-min-device-pixel-ratio: 2),
368                 only screen and (min-resolution: 192dpi) {
369            #cover-image-container {
370              background-image:url("//dka575ofm4ao0.cloudfront.net/pages-hero_covers/retina/27/tci-logo_w1700h630-e25efd0e-8bda-4e6f-b5ca-e6ba7eb2ab65.png") !important;
371            }
372          }
373      </style>
374
375      <div class="text-container">
376        <span class="page-name font-largest">
377            <a href="https://travis-ci.com">Travis CI</a>
378        </span>
379          
380  <div class="updates-dropdown-container" data-js-hook="updates-dropdown-container">
381    <a href="#" data-js-hook="show-updates-dropdown" id="show-updates-dropdown" class="show-updates-dropdown" aria-label="Subscribe to updates" aria-expanded="false" aria-haspopup="dialog" role="button">
382      <span class="subscribe-text-full">Subscribe to Updates</span><span class="subscribe-text-short">Subscribe</span>
383    </a>
384
385<!--    Accessibility guidelines for tabs: https://www.w3.org/TR/wai-aria-practices-1.1/examples/tabs/tabs-1/tabs.html -->
386    <div class="updates-dropdown" data-js-hook="updates-dropdown" id="updates-dropdown" style="display:none" role="dialog" aria-modal="false" aria-label="Subscribe to updates">
387      <div class="updates-dropdown-nav nav-items-5" role="tablist" aria-label="Subscribe to updates">
388          <a href="#updates-dropdown-email" aria-controls="updates-dropdown-email" aria-label="Subscribe via email" role="tab" aria-selected="true" id="updates-dropdown-email-btn">
389            <span class="icon-container email">
390          </a>
391          <a href="#updates-dropdown-slack" aria-controls="updates-dropdown-slack" aria-label="Subscribe via slack" role="tab" id="updates-dropdown-slack-btn">
392            <span class="icon-container slack">
393          </a>
394          <a href="#updates-dropdown-webhook" aria-controls="updates-dropdown-webhook" aria-label="Subscribe via webhook" role="tab" id="updates-dropdown-webhook-btn">
395            <span class="icon-container webhook">
396          </a>
397          <a href="#updates-dropdown-atom" aria-controls="updates-dropdown-atom" aria-label="Subscribe via RSS" role="tab" id="updates-dropdown-atom-btn">
398            <span class="icon-container rss">
399          </a>
400        <button data-js-hook="updates-dropdown-close" aria-label="Close subscribe form" id="updates-dropdown-close-btn">
401          x
402        </button>
403      </div>
404      <div class="updates-dropdown-sections-container">
405          <div class="updates-dropdown-section email" id="updates-dropdown-email" style="display:none" role="tabpanel" aria-labelledby="updates-dropdown-email-btn">
406            <div class="directions">
407              Get email notifications whenever Travis CI <strong>creates</strong>,  <strong>updates</strong> or <strong>resolves</strong> an incident.
408            </div>
409            <form id="subscribe-form-email" action="/subscriptions/new-email" accept-charset="UTF-8" data-remote="true" method="post"><input type="hidden" name="authenticity_token" value="cpOAZgrz56LJ-G_FdrQWBmzL8X3N6rWAtj6nWpxbD6I2rmoUzMIdxkuSKQx3yRhNlIkUSdpdOiISEcKJFIdL7w" autocomplete="off" />
410              <input type="hidden" name="email_otp_verify_flow" id="email_otp_verify_flow" value="false" autocomplete="off" />
411                <!-- make sure not to put cookie values in here since this gets cached -->
412                <label for="email">Email address:</label>
413                <input name="email" id="email" type="text" class="full-width" data-js-hook="email-notification-field" autocomplete="email">
414                <input name="email_otp_auth_token" type='hidden' id="email-
414otp-token-field">
415                <div class="opt-container-section" id="email-otp-container", style="display:none" >
416                  <label for="email-otp">Enter OTP:</label>
417                  <input name="otp" id="email-otp" type="text" value="" class="prepend full-width">
418                  <p id="email-otp-timer">Resend OTP in: <span id="email-otp-countdown"></span> seconds </p>
419                  <p id="resend-email-otp">
420                    Didn't receive the OTP?
421                    <a href="#" id="resend-email-otp-btn" >Resend OTP </a>
422                  </p>
423                </div>
424                  <input type="hidden" name="captcha_error" id="captcha_error" value="false" autocomplete="off" />
425                  <input type="submit" value="Subscribe via Email" class="flat-button full-width g-recaptcha" id="subscribe-btn-email" data-disabled-text="Subscribing..." data-sitekey=6LdTS8AUAAAAAOIbCKoCAP4LQku1olYGrywPTaZz data-callback="submitNewEmailSubscriber" data-error-callback="emailSubscriberCaptchaError" >
426                  <div class="terms_and_privacy_information bottom small"><div class="privacy_policy_information small">By subscribing you agree to our <a target="_blank" rel="noopener" class="accessible-link" href="https://www.ideracorp.com/Legal/PrivacyPolicy">Privacy Policy</a>.</div> This site is protected by reCAPTCHA and the Google <a target="_blank" rel="noopener" class="accessible-link" href="https://policies.google.com/privacy">Privacy Policy</a> and <a target="_blank" rel="noopener" class="accessible-link" data-js-hook="captcha-terms-of-service-link" href="https://policies.google.com/terms">Terms of Service</a> apply.</div>
427</form>          </div>
428
429
430          <div class="updates-dropdown-section slack" id="updates-dropdown-slack" style="display:none" role="tabpanel" aria-labelledby="updates-dropdown-slack-btn">
431            <div class="directions">
432              Get incident updates and maintenance status messages in Slack.
433            </div>
434            <a value="Subscribe via Slack" class="flat-button full-width" id="subscribe-btn-slack" data-disabled-text="Subscribing..." data-revert-on-success="true" style="margin-top:.75rem" href="https://subscriptions.statuspage.io/slack_authentication/kickoff?page_code=pnpcptp8xh9k">Subscribe via Slack</a>
435            <div class="terms_and_privacy_information bottom small">By subscribing you acknowledge our <a target="_blank" rel="noopener" class="accessible-link" href="https://www.ideracorp.com/Legal/PrivacyPolicy">Privacy Policy</a>. In addition, you agree to the Atlassian <a target="_blank" rel="noopener" class="accessible-link" href="https://www.atlassian.com/legal/cloud-terms-of-service">Cloud Terms of Service</a> and acknowledge Atlassian's <a target="_blank" rel="noopener" class="accessible-link" href="https://www.atlassian.com/legal/privacy-policy">Privacy Policy</a>.</div>
436          </div>
437
438
439          <div class="updates-dropdown-section webhook" id="updates-dropdown-webhook" style="display:none" role="tabpanel" aria-labelledby="updates-dropdown-webhook-btn">
440            <div class="directions">
441              Get webhook notifications whenever Travis CI <strong>creates</strong> an incident, <strong>updates</strong> an incident, <strong>resolves</strong> an incident or <strong>changes</strong> a component status.
442            </div>
443            <form id="subscribe-form-webhook" action="/subscriptions/webhook.json" accept-charset="UTF-8" data-remote="true" method="post"><input type="hidden" name="authenticity_token" value="WSE01XiIiO188ySfHJL4-j4Y8CWaqsM577rxWvazhZMdHN6nvrlyif6ZYlYd7_axxloVEY0dTJtLlZSJfm_B3g" autocomplete="off" />
444              <div class="control-group">
445                <div class="controls">
446                  <label for="endpoint-webhooks">Webhook URL:</label>
447                  <input type="text" name="endpoint" id="endpoint-webhooks" data-js-hook="endpoint" class="full-width" aria-describedby="url-help-block" />
448                  <p class="help-block" id="url-help-block">The URL we should send the webhooks to</p>
449                </div>
450              </div>
451
452              <div class="control-group">
453                <div class="controls">
454                  <label for="email-webhooks">Email address:</label>
455                  <input type="text" name="email" id="email-webhooks" data-js-hook="email" class="full-width" aria-describedby="email-help-block" />
456                  <p class="help-block" id="email-help-block">We'll send you email if your endpoint fails</p>
457                </div>
458              </div>
459
460                <input type="hidden" name="captcha_error" id="captcha_error" value="false" autocomplete="off" />
461                <input type="submit" value=Subscribe To Notifications class="flat-button full-width g-recaptcha" id="subscribe-btn-webhook" data-disabled-text="Subscribing..." data-sitekey=6LcQ-b0UAAAAAJjfdwO_-ozGC-CzWDj4Pm1kJ2Ah data-callback="submitNewWebhookSubscriber" data-error-callback="webhookSubscriberCaptchaError">
462                <div class="terms_and_privacy_information bottom small"><div class="privacy_policy_information small">By subscribing you agree to our <a target="_blank" rel="noopener" class="accessible-link" href="https://www.ideracorp.com/Legal/PrivacyPolicy">Privacy Policy</a>.</div> This site is protected by reCAPTCHA and the Google <a target="_blank" rel="noopener" class="accessible-link" href="https://policies.google.com/privacy">Privacy Policy</a> and <a target="_blank" rel="noopener" class="accessible-link" data-js-hook="captcha-terms-of-service-link" href="https://policies.google.com/terms">Terms of Service</a> apply.</div>
463
464</form>          </div>
465
466
467
468          <div class="updates-dropdown-section atom" id="updates-dropdown-atom" role="tabpanel" aria-labelledby="updates-dropdown-atom-btn">
469            Get the <a href="https://www.traviscistatus.com/history.atom" target="_blank">Atom Feed</a> or <a href="https://www.traviscistatus.com/history.rss" target="_blank">RSS Feed</a>.
470          </div>
471      </div>
472    </div>
473  </div>
474
475<script>
476  $(function () {
477    const phoneNumberInput = $('#phone-number');
478    const errorDiv = $('#sms-atl-error')
479    if(errorDiv.length){
480      function checkSelectedCountry() {
481        const selectedCountry = $('#phone-country').val();
482        const isOtpEnabled = $('#phone-number-country-code').attr('data-otp-enabled') === 'true';
483        const form = document.getElementById('subscribe-form-sms');
484        form.action = '/subscriptions/new-sms';
485        const isOtpFlow = document.getElementById('otp_verify_flow');
486        document.getElementById('otp-container').style.display = "none";
487        if(false && selectedCountry === 'sg') { // Replace 'SG' with the actual value representing Singapore in your select tag
488          phoneNumberInput.prop('disabled', true);
489          errorDiv.html(`Due to new Singapore government regulations, we're currently not supporting text subscriptions in Singapore.<a href="https://community.atlassian.com/t5/Statuspage-articles/Attention-SMS-notifications-will-be-disabled-on-August-1st-2023/ba-p/2424398" target="_blank"> Learn more.</a> <br> Select another method to subscribe.`);
490        } else {
491          phoneNumberInput.prop('readonly', false);
492          errorDiv.html('');
493          if(false){
494            if(isOtpEnabled){
495              document.getElementById('subscribe-btn-sms').value = "Send OTP";
496            }
497            else {
498              isOtpFlow.value = false;
499              document.getElementById('subscribe-btn-sms').value = "Subscribe via Text Message";
500            }
501          }
502        }
503      }
504
505      $('#phone-country').on('change', checkSelectedCountry);
506      checkSelectedCountry();
507    }
508  });
509
510  document.addEventListener('DOMContentLoaded', function() {
511    const dropdown = document.querySelector('#phone-number-country-code .phone-country');
512    if (dropdown){
513      const wrapperDiv = document.getElementById('phone-number-country-code');
514      const selectedOption = dropdown.options[dropdown.selectedIndex];
515      const otpEnabled = selectedOption.getAttribute('data-otp-enabled');
516
517      wrapperDiv.setAttribute('data-otp-enabled', otpEnabled);
518
519      dropdown.addEventListener('change', function() {
520        const selectedOption = dropdown.options[dropdown.selectedIndex];
521        const otpEnabled = selectedOption.getAttribute('data-otp-enabled');
522
523        wrapperDiv.setAttribute('data-otp-enabled', otpEnabled);
524      });
525    }
526  });
527
528  var countdownTimer;
529  var resendBtn = document.getElementById('resend');
530  var timer = document.getElementById('timer');
531  var form = document.getElementById('subscribe-form-sms');
532  var RESEND_TIMER = 30;
533  $(function() {
534    $('#subscribe-form-sms').on('ajax:success', function(e, data, status, xhr){
535      const form = this;
536      const action = form.getAttribute('action');
537      if (data.type === 'success' && data.otp_flow === true) {
538        document.getElementById('subscriber_code').value = data.subscriber_code
539        document.getElementById('otp-container').style.display = "block";
540        $('#phone-number').prop('readonly', true);
541        var display = document.getElementById('countdown');
542        disableResend();
543        startTimer(RESEND_TIMER, display)
544        document.getElementById('subscribe-btn-sms').value = "Verify OTP and Subscribe";
545        document.getElementById('otp_verify_flow').value = true;
546        form.action = '/subscriptions/verify-otp';
547      } else if (data.type === 'success' && action.includes('verify')){
548        document.getElementById('otp-container').style.display = "none";
549        $('#phone-number').val('').prop('readonly', false);
550        $('#otp').val('');
551        document.getElementById('subscribe-btn-sms').value = "Send OTP";
552        document.getElementById('otp_verify_flow').value = false;
553        form.action = '/subscriptions/new-sms';
554        SP.currentPage.updatesDropdown.hide();
555      }
556    });
557    $("#btn-subcriber-change-number").on('click', () => {
558      document.getElementById('otp-container').style.display = "none";
559      $('#phone-number').prop('readonly', false);
560      document.getElementById('subscribe-btn-sms').value = "Send OTP";
561      form.action = '/subscriptions/new-sms';
562      return false
563    })
564    $('#resend-otp-btn').on('click', function(e) {
565      e.preventDefault();
566      let phoneNumber = $('#phone-number').val();
567      let countryCode = $('.phone-country').val();
568      $.ajax({
569        type: 'POST',
570        url: "/subscriptions/new-sms",
571        data: {
572          phone_number: phoneNumber,
573          phone_country: countryCode,
574          type: 'resend'
575        },
576      }).done(function(data) {
577        var messageOptions = (data.type !== undefined && data.type !== null) ? { cssClass: data.type } : {};
578        HRB.utils.notify(data.text, messageOptions);
579        var display = document.getElementById('countdown');
580        disableResend();
581        timer.style.display = "none"
582        if (data.type === 'success') {
583          startTimer(RESEND_TIMER, display);
584        }
585      })
586    });
587  })
588
589  function startTimer(duration, display){
590    var timer = duration, seconds;
591    clearInterval(countdownTimer);
592    countdownTimer = setInterval(function () {
593      seconds = parseInt(timer % 60, 10);
594      display.textContent = seconds;
595      if(--timer < 0){
596        enableResend();
597        clearInterval(countdownTimer);
598      }
599    }, 1000);
600    disableResend();
601  }
602  function enableResend(){
603    resendBtn.style.display = "block";
604    timer.style.display = "none"
605  }
606  function disableResend(){
607    resendBtn.style.display = "none";
608    timer.style.display = "block"
609  }
610
611  $(function() {
612    $('#subscribe-form-email').on('submit', function() {
613      var tokenField = document.getElementById('email-otp-token-field');
614      if (!tokenField) {
615        return;
616      }
617      let page_code = "pnpcptp8xh9k"
618      let key = keyForEmailOtpToken($('#email').val(), page_code);
619      tokenField.value = localStorage.getItem(key);
620    });
621  });
622
623  var emailOtpCountdownTimer;
624  var emailOtpResendBtn = document.getElementById('resend-email-otp');
625  var emailOtpTimer = document.getElementById('email-otp-timer');
626  var emailOtpForm = document.getElementById('subscribe-form-email');
627  var EMAIL_OTP_RESEND_TIMER = 600;
628  $(function() {
629    $('#subscribe-form-email').on('ajax:success', function(e, data, status, xhr){
630      const form = this;
631      const action = form.getAttribute('action');
632      if (data.type === 'success' && data.email_otp_verify_flow === true) {
633        document.getElementById('email-otp-container').style.display = "block";
634        var display = document.getElementById('email-otp-countdown');
635        display.textContent = EMAIL_OTP_RESEND_TIMER;
636        disableEmailOtpResend();
637        startEmailOtpTimer(EMAIL_OTP_RESEND_TIMER, display)
638        document.getElementById('subscribe-btn-email').value = "Verify OTP and Subscribe";
639        document.getElementById('email_otp_verify_flow').value = true;
640        form.action = '/subscriptions/verify-email-otp';
641      } else if (data.type === 'success' && action.includes('verify')){
642        let email =  $('#email')
643        let page_code = "pnpcptp8xh9k"
644        let key = keyForEmailOtpToken(email.val(), page_code);
645        localStorage.setItem(key, data.email_otp_auth_token);
646
647        document.getElementById('email-otp-container').style.display = "none";
648        email.val('').prop('readonly', false);
649        $('#email-otp').val('');
650        document.getElementById('subscribe-btn-email').value = "Send OTP";
651        document.getElementById('email_otp_verify_flow').value = false;
652        form.action = '/subscriptions/new-email';
653        SP.currentPage.updatesDropdown.hide();
654      }
655    });
656    $('#resend-email-otp-btn').on('click', function(e) {
657      e.preventDefault();
658      let email = $('#email').val();
659      $.ajax({
660        type: 'POST',
661        url: "/subscriptions/new-email",
662        data: {
663          email: email
664        },
665      }).done(function(data) {
666        var messageOptions = (data.type !== undefined && data.type !== null) ? { cssClass: data.type } : {};
667        HRB.utils.notify(data.text, messageOptions);
668        if (data.type === 'success') {
669          var display = document.getElementById('email-otp-countdown');
670          display.textContent = EMAIL_OTP_RESEND_TIMER;
671          disableEmailOtpResend();
672          emailOtpTimer.style.display = "none"
673          startEmailOtpTimer(EMAIL_OTP_RESEND_TIMER, display);
674        }
675      })
676    });
677  })
678
679  function startEmailOtpTimer(duration, display){
680    var timer = duration, seconds;
681    clearInterval(emailOtpCountdownTimer);
682    emailOtpCountdownTimer = setInterval(function () {
683      seconds = parseInt(timer, 10);
684      display.textContent = seconds;
685      if(--timer < 0){
686        enableEmailOtpResend();
687        clearInterval(emailOtpCountdownTimer);
688      }
689    }, 1000);
690    disableEmailOtpResend();
691  }
692
693  function enableEmailOtpResend(){
694    emailOtpResendBtn.style.display = "block";
695    emailOtpTimer.style.display = "none"
696  }
697  function disableEmailOtpResend(){
698    emailOtpResendBtn.style.display = "none";
699    emailOtpTimer.style.display = "block"
700  }
701  function keyForEmailOtpToken(email, pageCode) {
702    return email + '|' + pageCode+ '|SUBSCRIBE_VIA_EMAIL';
703  }
704</script>
704
705
706      </div>
707    </div>
708
709</div>
710 <!-- this is outside of the .container so that the cover photo can go full width on mobile -->
711
712
713  <div class="container history-container">
714    <div class="history-nav border-color">
715  <ul>
716    <li>
717      <a class="button border-color"  href="https://www.traviscistatus.com/history" aria-label="Incidents" >Incidents</a>
718    </li>
719    <li>
720      <a class="button current border-color" href="https://www.traviscistatus.com/uptime" aria-label="Uptime" aria-current=page>Uptime</a>
721    </li>
722  </ul>
723</div>
724
725
726    <div data-react-class="UptimeCalendar" data-react-props="{&quot;component&quot;:{&quot;status&quot;:&quot;operational&quot;,&quot;name&quot;:&quot;API&quot;,&quot;created_at&quot;:&quot;2013-02-27T10:18:04.923Z&quot;,&quot;updated_at&quot;:&quot;2026-04-11T13:16:07.497Z&quot;,&quot;position&quot;:1,&quot;description&quot;:null,&quot;showcase&quot;:true,&quot;start_date&quot;:null,&quot;id&quot;:&quot;v3pv505czcvn&quot;,&quot;group_id&quot;:null,&quot;page_id&quot;:&quot;pnpcptp8xh9k&quot;},&quot;component_select_list&quot;:[{&quot;name&quot;:&quot;API&quot;,&quot;value&quot;:&quot;v3pv505czcvn&quot;},{&quot;name&quot;:&quot;Background Processing&quot;,&quot;value&quot;:&quot;43255b952p01&quot;},{&quot;name&quot;:&quot;Background Processing - Log Processing&quot;,&quot;value&quot;:&quot;pw8ss5jcjb45&quot;},{&quot;name&quot;:&quot;Background Processing - User Sync&quot;,&quot;value&quot;:&quot;vmgk8phkxfdf&quot;},{&quot;name&quot;:&quot;Background Processing - Notifications&quot;,&quot;value&quot;:&quot;y0v5kvk1msqy&quot;},{&quot;name&quot;:&quot;Builds Processing&quot;,&quot;value&quot;:&quot;zd1jfc33yt1p&quot;},{&quot;name&quot;:&quot;Builds Processing - Linux and Windows Builds&quot;,&quot;value&quot;:&quot;fv408yjjqhv6&quot;},{&quot;name&quot;:&quot;Web App&quot;,&quot;value&quot;:&quot;x0lpb7qzw919&quot;}],&quot;is_group&quot;:false,&quot;months&quot;:[{&quot;name&quot;:&quot;August&quot;,&quot;year&quot;:2026,&quot;start_offset&quot;:6,&quot;uptime_percentage&quot;:1.0,&quot;days&quot;:[{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-01T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-02T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-03T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-04T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-05T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-06T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-07T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-08T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-09T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-10T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-11T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-12T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-13T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-14T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-15T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-16T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-17T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-18T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-19T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-20T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-21T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-22T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-23T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-24T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-25T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-26T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-27T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-28T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-29T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-30T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-08-31T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0}]},{&quot;name&quot;:&quot;September&quot;,&quot;year&quot;:2026,&quot;start_offset&quot;:2,&quot;uptime_percentage&quot;:1.0,&quot;days&quot;:[{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-01T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-02T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-03T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-04T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-05T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-06T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-07T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-08T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-09T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-10T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-11T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-12T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-13T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-14T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-15T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-16T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-17T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;
7262026-09-18T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-19T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-20T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-21T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-22T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-23T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-24T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-25T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-26T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-27T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-28T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-29T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-09-30T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0}]},{&quot;name&quot;:&quot;October&quot;,&quot;year&quot;:2026,&quot;start_offset&quot;:4,&quot;uptime_percentage&quot;:1.0,&quot;days&quot;:[{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-10-01T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#05c47a&quot;,&quot;date&quot;:&quot;2026-10-02T00:00:00.000Z&quot;,&quot;events&quot;:[],&quot;p&quot;:0,&quot;m&quot;:0},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;}]}],&quot;group_component_data&quot;:null,&quot;renderUptimePatternFF&quot;:false,&quot;a11ySeptHeadings&quot;:true}"></div>
727
728    <div class="page-footer border-color font-small">
729  <a href="/" aria-label="Back to current status">
730    <span class="current-status-arrow">&larr;</span> Current Status
731  </a>
732  <span class="color-secondary powered-by"><a class="color-secondary" target="_blank" rel="noopener noreferrer nofollow" href="https://www.atlassian.com/software/statuspage?utm_campaign=www.traviscistatus.com&amp;utm_content=SP-notifications&amp;utm_medium=powered-by&amp;utm_source=inapp">Powered by Atlassian Statuspage</a></span>
733</div>
734
735  </div>
736
737
738  
739</div>
740
741
742    
742<script src="https://dka575ofm4ao0.cloudfront.net/assets/status_manifest-b790849ccb41192b3f7d9c14d5a4a6d5142add81fc8522649ca5c82f6a1fbb0e.js"></script>
742
743    <div id="cpt-notification-container" role="status" aria-live="polite" aria-atomic="true"></div>
744    
745
746
747
748
749    <!-- all of the content_for stuff -->
750      
750<script src="https://dka575ofm4ao0.cloudfront.net/assets/register_subscription_form-589b657fec607087fc5c740c568270907310bc4f6aaa20256e70f01b103025ca.js"></script>
750
751
752  
752<script type="text/javascript">
753      $(function() {
754          SP.currentPage.registerSubscriptionForm('email');
755
756
757          SP.currentPage.registerSubscriptionForm('webhook');
758
759      });
760
761
762
763
764
765  </script>
765
766    
766<script src="https://dka575ofm4ao0.cloudfront.net/assets/status_common-a7b1e9f22a2c94a83d347ec517cabf21494ca11867ebf891f46f89c9b4101811.js"></script>
766
767    
768
769
770      
770<script>
771  /** INITIALIZATION **/
772  var recaptchaIds = {}
773
774  // Unfortunately there's no unique selectors on the parent divs that recaptcha adds. The first unique selector
775  // is the iframe rendered 2 levels deep. So this waits until the iframes are added to the page, then finds
776  // the parent div and sets the z index so that it'll render above our modals & dropdowns from the start.
777  function setZIndex(captchaCount, startTime) {
778    // bail after 10s just in case so we don't do this forever if something whaky happens
779    if (new Date() - startTime > 10000) {
780      return;
781    }
782
783    var iframes = document.querySelectorAll('iframe[title="recaptcha challenge"]');
784    if (iframes.length != captchaCount) {
785      setTimeout(function() {
786        setZIndex(captchaCount, startTime);
787      }, 500);
788    }
789
790    for (var i = 0; i < iframes.length; i++) {
791      // incident subscribe modal is 1050, so this has to be above that
792      iframes[i].parentElement.parentElement.style.zIndex = "1100";
793    }
794  }
795
796  function updateCaptchaIframeTitle(captchaCount, startTime, updates=0) {
797
798    if (new Date() - startTime > 10000 || captchaCount === updates) {
799      return;
800    }
801    var iframesWithTitle = document.querySelectorAll('iframe[title="recaptcha challenge expires in two minutes"]');
802
803    if (iframesWithTitle.length != captchaCount) {
804      setTimeout(function() {
805        updateCaptchaIframeTitle(captchaCount, startTime, iframesWithTitle.length + updates);
806      }, 500);
807    }
808
809    for (var i = 0; i < iframesWithTitle.length; i++) {
810      iframesWithTitle[i].title = "recaptcha";
811    }
812  }
813
814  function addIncidentCaptcha() {
815    var incidentCaptcha = document.createElement('div');
816    incidentCaptcha.setAttribute('id', 'subscribe-incident-recaptcha');
817    incidentCaptcha.setAttribute('class', 'g-recaptcha');
818    incidentCaptcha.setAttribute('data-sitekey', '6LcZ-b0UAAAAAENi956aWzynTT2ZJ80dGU3F80Op');
819    incidentCaptcha.setAttribute('data-callback', 'submitIncidentSubscriberSuccess');
820    incidentCaptcha.setAttribute('data-error-callback', 'submitIncidentSubscriberError');
821    incidentCaptcha.setAttribute('data-size', 'invisible');
822    document.body.appendChild(incidentCaptcha);
823    var incidentCode = document.createElement('input');
824    incidentCode.setAttribute('type', 'hidden');
825    incidentCode.setAttribute('id', 'submit_incident_code');
826    document.body.appendChild(incidentCode);
827  }
828
829  var onloadCallback = function() {
830    // if there is an incident, then add incident captcha element
831    if (document.getElementsByClassName('modal-open-incident-subscribe').length > 0) {
832      addIncidentCaptcha();
833    }
834
835    var captchas = document.getElementsByClassName("g-recaptcha");
836
837    for(var i = 0; i < captchas.length; i++) {
838      var elId = captchas[i].id;
839      recaptchaIds[elId] = grecaptcha.enterprise.render(elId);
840    }
841
842    setZIndex(captchas.length, new Date());
843    updateCaptchaIframeTitle(captchas.length, new Date());
844  }
845
846
847  /** SUBSCRIBE DROPDOWN */
848
849  // callbacks for captcha success
850  function submitNewSubscriber(type, error) {
851    if (error) document.querySelector('#subscribe-form-' + type + ' #captcha_error').value = 'true';
852
853    document.getElementById('subscribe-form-' + type).dispatchEvent(new Event('submit', {bubbles: true, cancelable: true}));
854    grecaptcha.enterprise.reset(recaptchaIds['subscribe-btn-' + type]);
855  }
856  function submitNewEmailSubscriber(token) {
857    submitNewSubscriber('email');
858  }
859  function submitNewSmsSubscriber(token) {
860    submitNewSubscriber('sms');
861  }
862  function submitNewWebhookSubscriber(token) {
863    submitNewSubscriber('webhook');
864  }
865  function submitIncidentSubscriber(token, error, incidentCodeOverride) {
866    var incidentCode = incidentCodeOverride;
867    if (!incidentCode) {
868      var incidentCodeEl = document.getElementById('submit_incident_code');
869      incidentCode = incidentCodeEl && incidentCodeEl.value;
870    }
871    var incidentForm = incidentCode && document.getElementById('subscribe-form-' + incidentCode);
872    if (!incidentForm) {
873      return;
874    }
875
876    var captchaError = incidentForm.querySelector('input[name="captcha_error"]');
877    var recaptchaResponse = incidentForm.querySelector('input[name="g-recaptcha-response"]');
878    if (captchaError) {
879      captchaError.value = error;
880    }
881    if (recaptchaResponse) {
882      recaptchaResponse.value = token;
883    }
884    incidentForm.dispatchEvent(new Event('submit', {bubbles: true, cancelable: true}));
885    if (window.grecaptcha && grecaptcha.enterprise && recaptchaIds['subscribe-incident-recaptcha'] != null) {
886      grecaptcha.enterprise.reset(recaptchaIds['subscribe-incident-recaptcha']);
887    }
888  }
889  function submitIncidentSubscriberSuccess(token) {
890    submitIncidentSubscriber(token, 'false');
891  }
892
893  // callbacks if we get captcha network errors
894  function emailSubscriberCaptchaError(token) {
895    submitNewSubscriber('email', true);
896  }
897  function smsSubscriberCaptchaError(token) {
898    submitNewSubscriber('sms', true);
899  }
900  function webhookSubscriberCaptchaError(token) {
901    submitNewSubscriber('webhook', true);
902  }
903  function submitIncidentSubscriberError(token) {
904    submitIncidentSubscriber(token, 'true');
905  }
906
907  // tracking clicks
908  ['email', 'sms', 'webhook'].forEach(function(type) {
909    var el = document.getElementById('subscribe-btn-' + type);
910    el && el.addEventListener("click", function() {
911      $.ajax({
912        type: "POST",
913        url: "/subscriptions/track_attempt",
914        data: {
915          type: type
916        }
917      })
918    })
919  })
920
921  // form submission success callbacks
922  $('#subscribe-form-email').on('ajax:success', function(e, data, status, xhr){
923    if (data.type === 'success') {
924      SP.currentPage.updatesDropdown.hide();
925      var emailField = document.getElementById('email');
926      if (emailField) {
927        emailField.value = '';
928      }
929    }
930  });
931  $('#subscribe-form-sms').on('ajax:success', function(e, data, status, xhr){
932    if (data.type === 'success' && data.otp_flow !== true) {
933      SP.currentPage.updatesDropdown.hide();
934      var phoneField = document.getElementById('phone-number');
935      if (phoneField) {
936        phoneField.value = '';
937      }
938    }
939  });
940  $('#subscribe-form-webhook').on('ajax:success', function(e, data, status, xhr){
941    if (data.type === 'success') {
942      SP.currentPage.updatesDropdown.hide();
943      document.getElementById('endpoint-webhooks').value = '';
944      document.getElementById('email-webhooks').value = '';
945    }
946  });
947
948  $('a.subscribe').on('click', function() {
949    document.body.style.overflow = "hidden";
950    document.body.style.height = "100vh";
951  });
952
953  $('div.modal-open-incident-subscribe').on('hidden', function(){
954    document.body.style.overflow = "";
955    document.body.style.height = "";
956  });
957
958  function submitCaptchaIncidentSubscribe(event) {
959    var incidentCode = event.target.id.split('-')[2];
960    event.preventDefault();
961
962    $.ajax({
963      type: "POST",
964      url: "/subscriptions/track_attempt",
965      data: {
966        type: 'incident'
967      }
968    })
969
970    var incidentCodeField = document.getElementById('submit_incident_code');
971    if (incidentCodeField) {
972      incidentCodeField.value = incidentCode;
973    }
974
975    // Recaptcha's onloadCallback is what creates #submit_incident_code and the
976    // widget id. If the enterprise.js script is blocked (ad blockers, CI url
977    // blacklist), execute() and .value on a null node throw and the subscribe
978    // click never reaches the server.
979    var recaptchaId = recaptchaIds['subscribe-incident-recaptcha'];
980    if (window.grecaptcha && grecaptcha.enterprise && typeof grecaptcha.enterprise.execute === 'function' && recaptchaId != null) {
981      grecaptcha.enterprise.execute(recaptchaId);
982    } else {
983      submitIncidentSubscriber('', 'true', incidentCode);
984    }
985  }
986</script>
vendor: 135 bytes, lines 986-992
986
987
988<script src='https://www.recaptcha.net/recaptcha/enterprise.js?onload=onloadCallback&render=explicit' async defer></script>
989
990
991    
992  
992<script src="https://dka575ofm4ao0.cloudfront.net/packs/common-b57e85f6a60348cdd566.chunk.js"></script>
992
993  
993<script src="https://dka575ofm4ao0.cloudfront.net/packs/globals-79d49f8cfe179f020629.chunk.js"></script>
993
994
995    
995<script src="https://dka575ofm4ao0.cloudfront.net/packs/runtime-e9fe27ac357824763c7d.js"></script>
995
996    
997    
998    
998<script src="https://dka575ofm4ao0.cloudfront.net/packs/status-46c9a85ee33b4106a045.chunk.js"></script>
998
999    
999<script src="https://dka575ofm4ao0.cloudfront.net/packs/components-95f0cadd8954a909f19d.chunk.js"></script>
999
1000
1001
1002    
1002<script>
1003  window.addEventListener('load', function () {
1004    const urlParams = new URLSearchParams(window.location.search);
1005    const messageToken = urlParams.get('slack_message_token');
1006    const channelName = escape(urlParams.get('channel_name'));
1007
1008    if(!!messageToken) {
1009      switch(messageToken) {
1010        case 'slack_auth_error':
1011          HRB.utils.notify('The Slack authorization attempt was unsuccessful. Try again.', {cssClass:'error'});
1012          break;
1013        case 'subscribers_disabled_error':
1014          HRB.utils.notify('Slack subscriptions are not enabled on this page.', {cssClass:'error'});
1015          break;
1016        case 'direct_message_channel_error':
1017          HRB.utils.notify('Subscriptions aren’t supported in direct messages. Try subscribing again and choose a channel instead.', {cssClass:'error'});
1018          break
1019        case 'duplicate_error':
1020          HRB.utils.notify("You're already subscribed to get Slack notifications in that channel.", {cssClass:'error'});
1021          break;
1022        case 'duplicate_private_channel_error':
1023          HRB.utils.notify(`You're already subscribed to get Slack notifications in #${channelName}. Invite the @Statuspage app to that channel to start getting status updates.`, {cssClass: 'error'});
1024          break;
1025        case 'default_success':
1026          HRB.utils.notify("You're now subscribed to get Statuspage updates in Slack!", {cssClass:'success'});
1027          break;
1028        case 'private_channel_success':
1029          HRB.utils.notify(`IMPORTANT: Invite the @Statuspage app to your Slack channel #${channelName} to start getting status updates.`, {cssClass:'success'});
1030          break;
1031      }
1032    }
1033  });
1034</script>
1034
1035
1036    
1037<!-- FOR FLASH NOTICES -->
1038
1039<!-- FOR ERROR -->
1040
1041
1042    
1042<script>
1043  $(function() {
1044    var $link = $('<span class="color-secondary powered-by"><a class="color-secondary" target="_blank" rel="noopener noreferrer nofollow" href="https://www.atlassian.com/software/statuspage?utm_campaign=www.traviscistatus.com&amp;utm_content=SP-notifications&amp;utm_medium=powered-by&amp;utm_source=inapp">Powered by Atlassian Statuspage</a></span>');
1045
1046  	var setPoweredByStyles = function() {
1047  		if (!$('.powered-by').length) {
1048  			$link.appendTo($('.page-footer'))
1049  		}
1050  		$('.powered-by').attr('style', 'display: inline !important; visibility:visible !important; opacity: 1 !important; position:static !important; text-indent:0px !important; transform:scale(1) !important');
1051  	}
1052
1053  	setInterval(setPoweredByStyles, 1000);
1054  });
1055</script>
1055
1056
1057
1058
1059
1060
1061  </body>
1062</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.