curl --request PUT \
--url https://www.sentivel.com/api/v1/status-pages/{id}/layout \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"sections": [
{
"items": [
{
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"publicName": "<string>",
"description": "<string>",
"showHistory": true
}
],
"name": "<string>"
}
]
}
'import requests
url = "https://www.sentivel.com/api/v1/status-pages/{id}/layout"
payload = { "sections": [
{
"items": [
{
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"publicName": "<string>",
"description": "<string>",
"showHistory": True
}
],
"name": "<string>"
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
sections: [
{
items: [
{
componentId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
publicName: '<string>',
description: '<string>',
showHistory: true
}
],
name: '<string>'
}
]
})
};
fetch('https://www.sentivel.com/api/v1/status-pages/{id}/layout', 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://www.sentivel.com/api/v1/status-pages/{id}/layout",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'sections' => [
[
'items' => [
[
'componentId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'publicName' => '<string>',
'description' => '<string>',
'showHistory' => true
]
],
'name' => '<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://www.sentivel.com/api/v1/status-pages/{id}/layout"
payload := strings.NewReader("{\n \"sections\": [\n {\n \"items\": [\n {\n \"componentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"publicName\": \"<string>\",\n \"description\": \"<string>\",\n \"showHistory\": true\n }\n ],\n \"name\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("PUT", 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.put("https://www.sentivel.com/api/v1/status-pages/{id}/layout")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"sections\": [\n {\n \"items\": [\n {\n \"componentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"publicName\": \"<string>\",\n \"description\": \"<string>\",\n \"showHistory\": true\n }\n ],\n \"name\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.sentivel.com/api/v1/status-pages/{id}/layout")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"sections\": [\n {\n \"items\": [\n {\n \"componentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"publicName\": \"<string>\",\n \"description\": \"<string>\",\n \"showHistory\": true\n }\n ],\n \"name\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"error": {
"code": "unauthorized",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "unauthorized",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "unauthorized",
"message": "<string>",
"details": {}
}
}Replace a status page's layout
Order and group the components shown on the page. REPLACES the whole layout: a component omitted from the body stops being displayed on this page (it is not deleted, and its monitoring is unaffected), so GET the layout first unless you are defining the entire page. Component ids must belong to the workspace, and each may appear only once across all sections — either mistake is rejected with the offending ids named, rather than silently dropped.
curl --request PUT \
--url https://www.sentivel.com/api/v1/status-pages/{id}/layout \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"sections": [
{
"items": [
{
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"publicName": "<string>",
"description": "<string>",
"showHistory": true
}
],
"name": "<string>"
}
]
}
'import requests
url = "https://www.sentivel.com/api/v1/status-pages/{id}/layout"
payload = { "sections": [
{
"items": [
{
"componentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"publicName": "<string>",
"description": "<string>",
"showHistory": True
}
],
"name": "<string>"
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
sections: [
{
items: [
{
componentId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
publicName: '<string>',
description: '<string>',
showHistory: true
}
],
name: '<string>'
}
]
})
};
fetch('https://www.sentivel.com/api/v1/status-pages/{id}/layout', 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://www.sentivel.com/api/v1/status-pages/{id}/layout",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'sections' => [
[
'items' => [
[
'componentId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'publicName' => '<string>',
'description' => '<string>',
'showHistory' => true
]
],
'name' => '<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://www.sentivel.com/api/v1/status-pages/{id}/layout"
payload := strings.NewReader("{\n \"sections\": [\n {\n \"items\": [\n {\n \"componentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"publicName\": \"<string>\",\n \"description\": \"<string>\",\n \"showHistory\": true\n }\n ],\n \"name\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("PUT", 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.put("https://www.sentivel.com/api/v1/status-pages/{id}/layout")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"sections\": [\n {\n \"items\": [\n {\n \"componentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"publicName\": \"<string>\",\n \"description\": \"<string>\",\n \"showHistory\": true\n }\n ],\n \"name\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.sentivel.com/api/v1/status-pages/{id}/layout")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"sections\": [\n {\n \"items\": [\n {\n \"componentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"publicName\": \"<string>\",\n \"description\": \"<string>\",\n \"showHistory\": true\n }\n ],\n \"name\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"error": {
"code": "unauthorized",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "unauthorized",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "unauthorized",
"message": "<string>",
"details": {}
}
}Authorizations
Sent as Authorization: Bearer <token>. Three kinds are accepted: an ORG token (sv_…), bound to one workspace with a fixed role; a PERSONAL token (svu_…), which acts as you with your own live role in whichever workspace it is pointed at; and an OAUTH access token (mcp_at_…) from a connected app, limited to the workspaces you granted it. A personal or OAuth token names its workspace with the X-Sentivel-Workspace header (a slug or an id). Without it an OAuth token falls back to the connection's primary workspace, while a personal token in more than one workspace is rejected 400 invalid_request with the choices in error.details.workspaces. Membership is re-read every request, so leaving a workspace or revoking the grant takes effect at once.
Path Parameters
Body
The complete set of components the page displays, in render order. Sending this REPLACES the existing layout.
50Show child attributes
Show child attributes
Response
The saved layout.