curl --request POST \
--url https://sreagent.app/api/v1/config/status_page_incidents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"first_update": "<string>",
"title": "<string>",
"component_ids": [
"<string>"
],
"impact": "<string>",
"scheduled_for": "<string>",
"scheduled_until": "<string>",
"status": "<string>"
}
'import requests
url = "https://sreagent.app/api/v1/config/status_page_incidents"
payload = {
"first_update": "<string>",
"title": "<string>",
"component_ids": ["<string>"],
"impact": "<string>",
"scheduled_for": "<string>",
"scheduled_until": "<string>",
"status": "<string>"
}
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({
first_update: '<string>',
title: '<string>',
component_ids: ['<string>'],
impact: '<string>',
scheduled_for: '<string>',
scheduled_until: '<string>',
status: '<string>'
})
};
fetch('https://sreagent.app/api/v1/config/status_page_incidents', 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://sreagent.app/api/v1/config/status_page_incidents",
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([
'first_update' => '<string>',
'title' => '<string>',
'component_ids' => [
'<string>'
],
'impact' => '<string>',
'scheduled_for' => '<string>',
'scheduled_until' => '<string>',
'status' => '<string>'
]),
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://sreagent.app/api/v1/config/status_page_incidents"
payload := strings.NewReader("{\n \"first_update\": \"<string>\",\n \"title\": \"<string>\",\n \"component_ids\": [\n \"<string>\"\n ],\n \"impact\": \"<string>\",\n \"scheduled_for\": \"<string>\",\n \"scheduled_until\": \"<string>\",\n \"status\": \"<string>\"\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://sreagent.app/api/v1/config/status_page_incidents")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"first_update\": \"<string>\",\n \"title\": \"<string>\",\n \"component_ids\": [\n \"<string>\"\n ],\n \"impact\": \"<string>\",\n \"scheduled_for\": \"<string>\",\n \"scheduled_until\": \"<string>\",\n \"status\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sreagent.app/api/v1/config/status_page_incidents")
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 \"first_update\": \"<string>\",\n \"title\": \"<string>\",\n \"component_ids\": [\n \"<string>\"\n ],\n \"impact\": \"<string>\",\n \"scheduled_for\": \"<string>\",\n \"scheduled_until\": \"<string>\",\n \"status\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"error": "<string>",
"message": "<string>"
}Create a status page incident
Publish an incident on the public page. first_update is the opening note customers read, and it is part of the incident rather than a follow-up: every incident the page opens posts one. An incident of major, critical or maintenance impact also emails this organization’s own notification recipients, which is the page’s rule and not a second one. scheduled_for and scheduled_until describe a maintenance window; both are ISO 8601 timestamps carrying an offset, not the page’s local time.
curl --request POST \
--url https://sreagent.app/api/v1/config/status_page_incidents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"first_update": "<string>",
"title": "<string>",
"component_ids": [
"<string>"
],
"impact": "<string>",
"scheduled_for": "<string>",
"scheduled_until": "<string>",
"status": "<string>"
}
'import requests
url = "https://sreagent.app/api/v1/config/status_page_incidents"
payload = {
"first_update": "<string>",
"title": "<string>",
"component_ids": ["<string>"],
"impact": "<string>",
"scheduled_for": "<string>",
"scheduled_until": "<string>",
"status": "<string>"
}
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({
first_update: '<string>',
title: '<string>',
component_ids: ['<string>'],
impact: '<string>',
scheduled_for: '<string>',
scheduled_until: '<string>',
status: '<string>'
})
};
fetch('https://sreagent.app/api/v1/config/status_page_incidents', 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://sreagent.app/api/v1/config/status_page_incidents",
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([
'first_update' => '<string>',
'title' => '<string>',
'component_ids' => [
'<string>'
],
'impact' => '<string>',
'scheduled_for' => '<string>',
'scheduled_until' => '<string>',
'status' => '<string>'
]),
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://sreagent.app/api/v1/config/status_page_incidents"
payload := strings.NewReader("{\n \"first_update\": \"<string>\",\n \"title\": \"<string>\",\n \"component_ids\": [\n \"<string>\"\n ],\n \"impact\": \"<string>\",\n \"scheduled_for\": \"<string>\",\n \"scheduled_until\": \"<string>\",\n \"status\": \"<string>\"\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://sreagent.app/api/v1/config/status_page_incidents")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"first_update\": \"<string>\",\n \"title\": \"<string>\",\n \"component_ids\": [\n \"<string>\"\n ],\n \"impact\": \"<string>\",\n \"scheduled_for\": \"<string>\",\n \"scheduled_until\": \"<string>\",\n \"status\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sreagent.app/api/v1/config/status_page_incidents")
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 \"first_update\": \"<string>\",\n \"title\": \"<string>\",\n \"component_ids\": [\n \"<string>\"\n ],\n \"impact\": \"<string>\",\n \"scheduled_for\": \"<string>\",\n \"scheduled_until\": \"<string>\",\n \"status\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"error": "<string>",
"message": "<string>"
}Authorizations
An sre_ak_* API key holding the api:admin scope (or api:config_read, which every write refuses with read_only_key).
Body
The opening note, 1 to 2000 characters. It becomes the first entry in the timeline, recorded under the phase the incident opens at.
The incident's heading, as customers read it, up to 200 characters.
The components this incident affects, which is what the page colours. get_status_page answers the ids. An id this organization does not own, or one that has been archived off the page, refuses the whole call rather than being dropped from the list.
The headline severity the page shows, and what it colours the named components with: none, minor, major, critical, maintenance. Defaults to minor. major, critical and maintenance also email this organization's notification recipients; none and minor are a line on the page and nothing more. maintenance marks planned work rather than a fault.
When a maintenance window starts, as an ISO 8601 timestamp with an offset (2026-10-01T01:00:00Z). The page's form takes its own configured time zone; this argument does not, so the value is unambiguous whoever sends it.
When that window ends, same format, and it has to be after scheduled_for.
The phase: investigating, identified, monitoring, resolved. Defaults to investigating, which is what the page's form opens on. Opening straight at resolved is allowed and stamps the resolution time.
Response
Created.

