List Policies
curl --request GET \
--url http://{host}:{port}/{basePath}/policies/{kind} \
--header 'Authorization: <api-key>'import requests
url = "http://{host}:{port}/{basePath}/policies/{kind}"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('http://{host}:{port}/{basePath}/policies/{kind}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "62437",
CURLOPT_URL => "http://{host}:{port}/{basePath}/policies/{kind}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "http://{host}:{port}/{basePath}/policies/{kind}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("http://{host}:{port}/{basePath}/policies/{kind}")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("http://{host}:{port}/{basePath}/policies/{kind}")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"apiVersion": "v1",
"kind": "ApprovalPolicyList",
"metadata": { "totalCount": 1, "page": 1, "pageSize": 20 },
"items": [
{
"name": "prod-rollbacks",
"namespace": "production",
"kind": "ApprovalPolicy",
"creationTimestamp": "2026-09-01T12:00:00Z",
"spec": {
"enabled": true,
"rules": [
{ "name": "rollback-requires-human", "match": { "actionTypes": ["RollbackDeployment"] }, "mode": "manual", "timeoutMinutes": 30, "requiredApprovers": 1 }
]
},
"status": { "totalApproved": 7, "totalRejected": 1 }
}
]
}
Clusters
List Policies
Lists ApprovalPolicy, NotificationPolicy, EscalationPolicy or IncidentSLA objects with their raw spec and status — read-only
GET
/
policies
/
{kind}
List Policies
curl --request GET \
--url http://{host}:{port}/{basePath}/policies/{kind} \
--header 'Authorization: <api-key>'import requests
url = "http://{host}:{port}/{basePath}/policies/{kind}"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('http://{host}:{port}/{basePath}/policies/{kind}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "62437",
CURLOPT_URL => "http://{host}:{port}/{basePath}/policies/{kind}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "http://{host}:{port}/{basePath}/policies/{kind}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("http://{host}:{port}/{basePath}/policies/{kind}")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("http://{host}:{port}/{basePath}/policies/{kind}")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"apiVersion": "v1",
"kind": "ApprovalPolicyList",
"metadata": { "totalCount": 1, "page": 1, "pageSize": 20 },
"items": [
{
"name": "prod-rollbacks",
"namespace": "production",
"kind": "ApprovalPolicy",
"creationTimestamp": "2026-09-01T12:00:00Z",
"spec": {
"enabled": true,
"rules": [
{ "name": "rollback-requires-human", "match": { "actionTypes": ["RollbackDeployment"] }, "mode": "manual", "timeoutMinutes": 30, "requiredApprovers": 1 }
]
},
"status": { "totalApproved": 7, "totalRejected": 1 }
}
]
}
string
required
approval, notification, escalation or slastring
Filter by namespace. Empty lists every namespace.
integer
default:"1"
Page number
integer
default:"20"
Items per page
kubectl or GitOps, where they are reviewed; the API and the dashboard’s Policies tab only read them. Each item carries the CRD spec and status unchanged, so the fields follow the ApprovalPolicy, NotificationPolicy and EscalationPolicy and IncidentSLA definitions.
{
"apiVersion": "v1",
"kind": "ApprovalPolicyList",
"metadata": { "totalCount": 1, "page": 1, "pageSize": 20 },
"items": [
{
"name": "prod-rollbacks",
"namespace": "production",
"kind": "ApprovalPolicy",
"creationTimestamp": "2026-09-01T12:00:00Z",
"spec": {
"enabled": true,
"rules": [
{ "name": "rollback-requires-human", "match": { "actionTypes": ["RollbackDeployment"] }, "mode": "manual", "timeoutMinutes": 30, "requiredApprovers": 1 }
]
},
"status": { "totalApproved": 7, "totalRejected": 1 }
}
]
}
Authorizations
Bearer token issued by the operator. Format: Authorization: Bearer <token>.
Path Parameters
approval, notification, escalation or sla.
Available options:
approval, notification, escalation, sla Query Parameters
Filter by namespace; empty lists every namespace.