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",
"description": "Planned database upgrade and maintenance",
"monitors": [
1,
2,
3
],
"status_pages": [
1,
2
]
}
'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",
"description": "Planned database upgrade and maintenance",
"monitors": [1, 2, 3],
"status_pages": [1, 2]
}
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',
description: 'Planned database upgrade and maintenance',
monitors: [1, 2, 3],
status_pages: [1, 2]
})
};
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',
'description' => 'Planned database upgrade and maintenance',
'monitors' => [
1,
2,
3
],
'status_pages' => [
1,
2
]
]),
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 \"description\": \"Planned database upgrade and maintenance\",\n \"monitors\": [\n 1,\n 2,\n 3\n ],\n \"status_pages\": [\n 1,\n 2\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 \"description\": \"Planned database upgrade and maintenance\",\n \"monitors\": [\n 1,\n 2,\n 3\n ],\n \"status_pages\": [\n 1,\n 2\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 \"description\": \"Planned database upgrade and maintenance\",\n \"monitors\": [\n 1,\n 2,\n 3\n ],\n \"status_pages\": [\n 1,\n 2\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",
"id": 1,
"project_id": 1,
"state": "scheduled",
"description": "Planned database upgrade and maintenance",
"monitors": [
1,
2,
3
],
"status_pages": [
1,
2
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"message": "Unauthorized"
}{
"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",
"description": "Planned database upgrade and maintenance",
"monitors": [
1,
2,
3
],
"status_pages": [
1,
2
]
}
'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",
"description": "Planned database upgrade and maintenance",
"monitors": [1, 2, 3],
"status_pages": [1, 2]
}
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',
description: 'Planned database upgrade and maintenance',
monitors: [1, 2, 3],
status_pages: [1, 2]
})
};
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',
'description' => 'Planned database upgrade and maintenance',
'monitors' => [
1,
2,
3
],
'status_pages' => [
1,
2
]
]),
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 \"description\": \"Planned database upgrade and maintenance\",\n \"monitors\": [\n 1,\n 2,\n 3\n ],\n \"status_pages\": [\n 1,\n 2\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 \"description\": \"Planned database upgrade and maintenance\",\n \"monitors\": [\n 1,\n 2,\n 3\n ],\n \"status_pages\": [\n 1,\n 2\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 \"description\": \"Planned database upgrade and maintenance\",\n \"monitors\": [\n 1,\n 2,\n 3\n ],\n \"status_pages\": [\n 1,\n 2\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",
"id": 1,
"project_id": 1,
"state": "scheduled",
"description": "Planned database upgrade and maintenance",
"monitors": [
1,
2,
3
],
"status_pages": [
1,
2
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"message": "Unauthorized"
}{
"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
"Database upgrade"
pause, mute, normal Date and time when the maintenance window starts
Date and time when the maintenance window ends
Description of the maintenance window
"Planned database upgrade and maintenance"
List of monitor IDs linked to the maintenance window
[1, 2, 3]
List of status page IDs linked to the maintenance window
[1, 2]
Response
Success, maintenance window created
pause, mute, normal Maintenance window title
"Database upgrade"
Date and time when the maintenance window starts
Date and time when the maintenance window ends
Maintenance window ID
1
Parent project ID
1
scheduled, in_progress, completed, cancelled Description of the maintenance window
"Planned database upgrade and maintenance"
List of monitor IDs linked to the maintenance window
[1, 2, 3]
List of status page IDs linked to the maintenance window
[1, 2]
Date of creation for the entity
Date of last update for the entity
Was this page helpful?