curl --request POST \
--url https://sreagent.app/api/v1/config/deploy_policies \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"service": "<string>",
"burn_rate_block_enabled": true,
"enabled": true,
"error_budget_threshold": 123,
"incident_block_enabled": true
}
'import requests
url = "https://sreagent.app/api/v1/config/deploy_policies"
payload = {
"service": "<string>",
"burn_rate_block_enabled": True,
"enabled": True,
"error_budget_threshold": 123,
"incident_block_enabled": True
}
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({
service: '<string>',
burn_rate_block_enabled: true,
enabled: true,
error_budget_threshold: 123,
incident_block_enabled: true
})
};
fetch('https://sreagent.app/api/v1/config/deploy_policies', 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/deploy_policies",
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([
'service' => '<string>',
'burn_rate_block_enabled' => true,
'enabled' => true,
'error_budget_threshold' => 123,
'incident_block_enabled' => true
]),
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/deploy_policies"
payload := strings.NewReader("{\n \"service\": \"<string>\",\n \"burn_rate_block_enabled\": true,\n \"enabled\": true,\n \"error_budget_threshold\": 123,\n \"incident_block_enabled\": true\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/deploy_policies")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"service\": \"<string>\",\n \"burn_rate_block_enabled\": true,\n \"enabled\": true,\n \"error_budget_threshold\": 123,\n \"incident_block_enabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sreagent.app/api/v1/config/deploy_policies")
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 \"service\": \"<string>\",\n \"burn_rate_block_enabled\": true,\n \"enabled\": true,\n \"error_budget_threshold\": 123,\n \"incident_block_enabled\": true\n}"
response = http.request(request)
puts response.read_body{
"error": "<string>",
"message": "<string>"
}Create a deploy policy
Create the deploy gate’s policy for one service: the error budget threshold under which its deploys are held, and whether a high burn rate or an active critical incident holds them too. One policy per service. It freezes nothing: a freeze is set_deploy_freeze, and the audited override is not available over MCP.
curl --request POST \
--url https://sreagent.app/api/v1/config/deploy_policies \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"service": "<string>",
"burn_rate_block_enabled": true,
"enabled": true,
"error_budget_threshold": 123,
"incident_block_enabled": true
}
'import requests
url = "https://sreagent.app/api/v1/config/deploy_policies"
payload = {
"service": "<string>",
"burn_rate_block_enabled": True,
"enabled": True,
"error_budget_threshold": 123,
"incident_block_enabled": True
}
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({
service: '<string>',
burn_rate_block_enabled: true,
enabled: true,
error_budget_threshold: 123,
incident_block_enabled: true
})
};
fetch('https://sreagent.app/api/v1/config/deploy_policies', 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/deploy_policies",
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([
'service' => '<string>',
'burn_rate_block_enabled' => true,
'enabled' => true,
'error_budget_threshold' => 123,
'incident_block_enabled' => true
]),
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/deploy_policies"
payload := strings.NewReader("{\n \"service\": \"<string>\",\n \"burn_rate_block_enabled\": true,\n \"enabled\": true,\n \"error_budget_threshold\": 123,\n \"incident_block_enabled\": true\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/deploy_policies")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"service\": \"<string>\",\n \"burn_rate_block_enabled\": true,\n \"enabled\": true,\n \"error_budget_threshold\": 123,\n \"incident_block_enabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sreagent.app/api/v1/config/deploy_policies")
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 \"service\": \"<string>\",\n \"burn_rate_block_enabled\": true,\n \"enabled\": true,\n \"error_budget_threshold\": 123,\n \"incident_block_enabled\": true\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 service whose deploys this policy gates, spelled as the deploy events and the gate API name it. One policy per service in an organization.
Hold a deploy while an SLO is burning its budget fast. On by default. Switched off, the gate still reports what it would have held for, as an advisory.
Whether the gate reads this policy at all. It resolves only enabled policies, so a disabled one gates nothing and the service falls back to the defaults.
Hold a deploy while less than this percent of an SLO's error budget is left, 0 to 100. Defaults to 10, and 0 switches the budget block off.
Hold a deploy while a critical incident affecting the service is open. On by default, and switched off it becomes an advisory in the same way.
Response
Created.

