curl --request POST \
--url https://sreagent.app/api/v1/config/prompt_templates \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"content": "<string>",
"name": "<string>",
"description": "<string>",
"enabled": true,
"is_default": true
}
'import requests
url = "https://sreagent.app/api/v1/config/prompt_templates"
payload = {
"content": "<string>",
"name": "<string>",
"description": "<string>",
"enabled": True,
"is_default": 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({
content: '<string>',
name: '<string>',
description: '<string>',
enabled: true,
is_default: true
})
};
fetch('https://sreagent.app/api/v1/config/prompt_templates', 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/prompt_templates",
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([
'content' => '<string>',
'name' => '<string>',
'description' => '<string>',
'enabled' => true,
'is_default' => 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/prompt_templates"
payload := strings.NewReader("{\n \"content\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"enabled\": true,\n \"is_default\": 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/prompt_templates")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"content\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"enabled\": true,\n \"is_default\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sreagent.app/api/v1/config/prompt_templates")
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 \"content\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"enabled\": true,\n \"is_default\": true\n}"
response = http.request(request)
puts response.read_body{
"error": "<string>",
"message": "<string>"
}Create a prompt template
Write a new prompt template for this organization. prompt_type is one of investigation_system, investigation_user, slack_assistant, root_cause, custom and is fixed once written: a template for another type is another template. The content is scanned for injection patterns as it is stored, and a template that matches one is kept flagged and disabled with the answer saying so. Nothing on this surface approves a flagged template: somebody reads it on the Settings page and approves it there.
curl --request POST \
--url https://sreagent.app/api/v1/config/prompt_templates \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"content": "<string>",
"name": "<string>",
"description": "<string>",
"enabled": true,
"is_default": true
}
'import requests
url = "https://sreagent.app/api/v1/config/prompt_templates"
payload = {
"content": "<string>",
"name": "<string>",
"description": "<string>",
"enabled": True,
"is_default": 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({
content: '<string>',
name: '<string>',
description: '<string>',
enabled: true,
is_default: true
})
};
fetch('https://sreagent.app/api/v1/config/prompt_templates', 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/prompt_templates",
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([
'content' => '<string>',
'name' => '<string>',
'description' => '<string>',
'enabled' => true,
'is_default' => 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/prompt_templates"
payload := strings.NewReader("{\n \"content\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"enabled\": true,\n \"is_default\": 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/prompt_templates")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"content\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"enabled\": true,\n \"is_default\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sreagent.app/api/v1/config/prompt_templates")
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 \"content\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"enabled\": true,\n \"is_default\": 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 prompt itself, 1 to 10000 characters. This is the text the model is given, so it is scanned for injection patterns on every write and answered in full by list_prompt_templates.
What the template is called, 1 to 255 characters, unique within this organization.
What the prompt is for: investigation_system, investigation_user, slack_assistant, root_cause, custom. It decides which lookup serves the template, and it cannot be changed afterwards.
investigation_system, investigation_user, slack_assistant, root_cause, custom A line saying what this prompt is for, for whoever reads the list next. Pass null to clear it.
Whether the template may be served at all. The scanner sets it to false on a template it flags, and re-enabling one whose content still matches a pattern is refused by the scanner rather than by this argument.
Make this the default for its type, which demotes whatever held that place. Only an approved, enabled default is actually served.
Response
Created.

