curl --request POST \
--url https://api.phare.io/uptime/maintenance-windows \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Database upgrade",
"starts_at": "2023-11-07T05:31:56Z",
"ends_at": "2023-11-07T05:31:56Z",
"monitors": [
1,
2,
3
],
"description": "Planned database upgrade and maintenance",
"status_pages": [
1,
2
],
"tags": [
"environment:production"
]
}
'import requests
url = "https://api.phare.io/uptime/maintenance-windows"
payload = {
"title": "Database upgrade",
"starts_at": "2023-11-07T05:31:56Z",
"ends_at": "2023-11-07T05:31:56Z",
"monitors": [1, 2, 3],
"description": "Planned database upgrade and maintenance",
"status_pages": [1, 2],
"tags": ["environment:production"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Database upgrade',
starts_at: '2023-11-07T05:31:56Z',
ends_at: '2023-11-07T05:31:56Z',
monitors: [1, 2, 3],
description: 'Planned database upgrade and maintenance',
status_pages: [1, 2],
tags: ['environment:production']
})
};
fetch('https://api.phare.io/uptime/maintenance-windows', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.phare.io/uptime/maintenance-windows",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Database upgrade',
'starts_at' => '2023-11-07T05:31:56Z',
'ends_at' => '2023-11-07T05:31:56Z',
'monitors' => [
1,
2,
3
],
'description' => 'Planned database upgrade and maintenance',
'status_pages' => [
1,
2
],
'tags' => [
'environment:production'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.phare.io/uptime/maintenance-windows"
payload := strings.NewReader("{\n \"title\": \"Database upgrade\",\n \"starts_at\": \"2023-11-07T05:31:56Z\",\n \"ends_at\": \"2023-11-07T05:31:56Z\",\n \"monitors\": [\n 1,\n 2,\n 3\n ],\n \"description\": \"Planned database upgrade and maintenance\",\n \"status_pages\": [\n 1,\n 2\n ],\n \"tags\": [\n \"environment:production\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.phare.io/uptime/maintenance-windows")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Database upgrade\",\n \"starts_at\": \"2023-11-07T05:31:56Z\",\n \"ends_at\": \"2023-11-07T05:31:56Z\",\n \"monitors\": [\n 1,\n 2,\n 3\n ],\n \"description\": \"Planned database upgrade and maintenance\",\n \"status_pages\": [\n 1,\n 2\n ],\n \"tags\": [\n \"environment:production\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.phare.io/uptime/maintenance-windows")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Database upgrade\",\n \"starts_at\": \"2023-11-07T05:31:56Z\",\n \"ends_at\": \"2023-11-07T05:31:56Z\",\n \"monitors\": [\n 1,\n 2,\n 3\n ],\n \"description\": \"Planned database upgrade and maintenance\",\n \"status_pages\": [\n 1,\n 2\n ],\n \"tags\": [\n \"environment:production\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"monitoring_mode": "pause",
"title": "Database upgrade",
"starts_at": "2023-11-07T05:31:56Z",
"ends_at": "2023-11-07T05:31:56Z",
"monitors": [
1,
2,
3
],
"id": 1,
"project_id": 1,
"state": "scheduled",
"description": "Planned database upgrade and maintenance",
"status_pages": [
1,
2
],
"tags": [
"environment:production"
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"message": "Unauthenticated."
}{
"message": "The platform:write permission is required to perform this action."
}{
"message": "<string>",
"errors": {
"key": [
"The key field is required"
]
}
}Create a maintenance window
Create a maintenance window
curl --request POST \
--url https://api.phare.io/uptime/maintenance-windows \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Database upgrade",
"starts_at": "2023-11-07T05:31:56Z",
"ends_at": "2023-11-07T05:31:56Z",
"monitors": [
1,
2,
3
],
"description": "Planned database upgrade and maintenance",
"status_pages": [
1,
2
],
"tags": [
"environment:production"
]
}
'import requests
url = "https://api.phare.io/uptime/maintenance-windows"
payload = {
"title": "Database upgrade",
"starts_at": "2023-11-07T05:31:56Z",
"ends_at": "2023-11-07T05:31:56Z",
"monitors": [1, 2, 3],
"description": "Planned database upgrade and maintenance",
"status_pages": [1, 2],
"tags": ["environment:production"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Database upgrade',
starts_at: '2023-11-07T05:31:56Z',
ends_at: '2023-11-07T05:31:56Z',
monitors: [1, 2, 3],
description: 'Planned database upgrade and maintenance',
status_pages: [1, 2],
tags: ['environment:production']
})
};
fetch('https://api.phare.io/uptime/maintenance-windows', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.phare.io/uptime/maintenance-windows",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Database upgrade',
'starts_at' => '2023-11-07T05:31:56Z',
'ends_at' => '2023-11-07T05:31:56Z',
'monitors' => [
1,
2,
3
],
'description' => 'Planned database upgrade and maintenance',
'status_pages' => [
1,
2
],
'tags' => [
'environment:production'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.phare.io/uptime/maintenance-windows"
payload := strings.NewReader("{\n \"title\": \"Database upgrade\",\n \"starts_at\": \"2023-11-07T05:31:56Z\",\n \"ends_at\": \"2023-11-07T05:31:56Z\",\n \"monitors\": [\n 1,\n 2,\n 3\n ],\n \"description\": \"Planned database upgrade and maintenance\",\n \"status_pages\": [\n 1,\n 2\n ],\n \"tags\": [\n \"environment:production\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.phare.io/uptime/maintenance-windows")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Database upgrade\",\n \"starts_at\": \"2023-11-07T05:31:56Z\",\n \"ends_at\": \"2023-11-07T05:31:56Z\",\n \"monitors\": [\n 1,\n 2,\n 3\n ],\n \"description\": \"Planned database upgrade and maintenance\",\n \"status_pages\": [\n 1,\n 2\n ],\n \"tags\": [\n \"environment:production\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.phare.io/uptime/maintenance-windows")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Database upgrade\",\n \"starts_at\": \"2023-11-07T05:31:56Z\",\n \"ends_at\": \"2023-11-07T05:31:56Z\",\n \"monitors\": [\n 1,\n 2,\n 3\n ],\n \"description\": \"Planned database upgrade and maintenance\",\n \"status_pages\": [\n 1,\n 2\n ],\n \"tags\": [\n \"environment:production\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"monitoring_mode": "pause",
"title": "Database upgrade",
"starts_at": "2023-11-07T05:31:56Z",
"ends_at": "2023-11-07T05:31:56Z",
"monitors": [
1,
2,
3
],
"id": 1,
"project_id": 1,
"state": "scheduled",
"description": "Planned database upgrade and maintenance",
"status_pages": [
1,
2
],
"tags": [
"environment:production"
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"message": "Unauthenticated."
}{
"message": "The platform:write permission is required to perform this action."
}{
"message": "<string>",
"errors": {
"key": [
"The key field is required"
]
}
}Monitoring modes
Choose how monitoring checks and alert notifications should behave during maintenance:pause: Pauses all checks on attached monitors. No incidents are created, keeping your SLA and uptime metrics intact. Paused monitors are automatically resumed when the window ends.mute: Keeps running checks in the background to record telemetry and latency data, but silences all alert notifications (e.g. Slack, email, SMS).normal: Checks and alerts operate as usual, but the maintenance window is announced on connected status pages.
Timings & Format
starts_at: Must be formatted in ISO 8601 with minute precision (e.g.2026-09-05T14:30:00Z). Seconds must be set to:00. Must be greater than or equal to the current time and within 1 year.ends_at: Must be afterstarts_atand within 1 year.
Authorizations
Use a user token to access authenticated routes. The token must be specified in the Authorization HTTP header with the following format 'Authorization: Bearer '.
Headers
A project header is required when using an organization-scoped API key.
1
A project header is required when using an organization-scoped API key.
"luminous-guiding-tower"
Body
Maintenance window request
Maintenance window title
1 - 250"Database upgrade"
Monitoring mode during maintenance
pause, mute, normal Date and time when the maintenance window starts, with minute precision (seconds must be 00). Must be within the next year.
Date and time when the maintenance window ends, with minute precision (seconds must be 00). Must be after starts_at and within the next year.
List of monitor IDs linked to the maintenance window
1 - 100 elements[1, 2, 3]
Description of the maintenance window
1 - 2000"Planned database upgrade and maintenance"
List of status page IDs linked to the maintenance window
100[1, 2]
Resource tags, made of lowercase letters, numbers, ., _, : and -. An organization can have up to 200 tags.
201 - 100Response
Success, maintenance window created
Monitoring mode during maintenance
pause, mute, normal Maintenance window title
1 - 250"Database upgrade"
Date and time when the maintenance window starts, with minute precision (seconds must be 00). Must be within the next year.
Date and time when the maintenance window ends, with minute precision (seconds must be 00). Must be after starts_at and within the next year.
List of monitor IDs linked to the maintenance window
1 - 100 elements[1, 2, 3]
Maintenance window ID
1
Parent project ID
1
Maintenance window state
scheduled, in_progress, completed, cancelled Description of the maintenance window
1 - 2000"Planned database upgrade and maintenance"
List of status page IDs linked to the maintenance window
100[1, 2]
Resource tags, made of lowercase letters, numbers, ., _, : and -. An organization can have up to 200 tags.
201 - 100Date of creation for the entity
Date of last update for the entity
Was this page helpful?