curl -X PUT "https://app.cotool.ai/api/alert-triage-routes" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"routes":[null],"defaultResponseAgentId":"string"}'import requests
url = "https://app.cotool.ai/api/alert-triage-routes"
payload = {
"routes": [
{
"name": "<string>",
"enabled": True,
"conditions": [
{
"type": "codeDetection",
"codeDetectionIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"]
}
],
"responseAgentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"defaultResponseAgentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
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({
routes: [
{
name: '<string>',
enabled: true,
conditions: [
{
type: 'codeDetection',
codeDetectionIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a']
}
],
responseAgentId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
}
],
defaultResponseAgentId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://app.cotool.ai/api/alert-triage-routes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));HttpResponse<String> response = Unirest.put("https://app.cotool.ai/api/alert-triage-routes")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"routes\": [\n {\n \"name\": \"<string>\",\n \"enabled\": true,\n \"conditions\": [\n {\n \"type\": \"codeDetection\",\n \"codeDetectionIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n }\n ],\n \"responseAgentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"defaultResponseAgentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.cotool.ai/api/alert-triage-routes"
payload := strings.NewReader("{\n \"routes\": [\n {\n \"name\": \"<string>\",\n \"enabled\": true,\n \"conditions\": [\n {\n \"type\": \"codeDetection\",\n \"codeDetectionIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n }\n ],\n \"responseAgentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"defaultResponseAgentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\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))
}{
"routes": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"enabled": true,
"conditions": [
{
"type": "codeDetection",
"codeDetectionIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
],
"action": "triage",
"responseAgentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"responseAgentName": "<string>"
}
],
"defaultSettings": {
"organizationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"defaultResponseAgentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"defaultResponseAgentName": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>"
},
"huntAlertRouting": {
"responseAgentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"responseAgentName": "<string>"
},
"responseAgents": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"logTableOptions": [
{
"source": "<string>",
"sourceDisplayName": "<string>",
"toolId": "<string>",
"stream": "<string>",
"streamLabel": "<string>"
}
]
}{
"error": "<string>",
"issues": [
{}
]
}{
"error": "<string>"
}{
"error": "<string>",
"missingPerms": [
"<string>"
]
}{
"error": "<string>"
}Replace alert triage routes
Replace the ordered routes that choose which agent triages a new alert, and optionally the default agent for alerts no route matches, in one change. Routes are checked top to bottom; the first enabled route whose conditions all match wins. Returns 400 when the routes and default would send alerts between agents in a loop.
curl -X PUT "https://app.cotool.ai/api/alert-triage-routes" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"routes":[null],"defaultResponseAgentId":"string"}'import requests
url = "https://app.cotool.ai/api/alert-triage-routes"
payload = {
"routes": [
{
"name": "<string>",
"enabled": True,
"conditions": [
{
"type": "codeDetection",
"codeDetectionIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"]
}
],
"responseAgentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"defaultResponseAgentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
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({
routes: [
{
name: '<string>',
enabled: true,
conditions: [
{
type: 'codeDetection',
codeDetectionIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a']
}
],
responseAgentId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
}
],
defaultResponseAgentId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://app.cotool.ai/api/alert-triage-routes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));HttpResponse<String> response = Unirest.put("https://app.cotool.ai/api/alert-triage-routes")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"routes\": [\n {\n \"name\": \"<string>\",\n \"enabled\": true,\n \"conditions\": [\n {\n \"type\": \"codeDetection\",\n \"codeDetectionIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n }\n ],\n \"responseAgentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"defaultResponseAgentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.cotool.ai/api/alert-triage-routes"
payload := strings.NewReader("{\n \"routes\": [\n {\n \"name\": \"<string>\",\n \"enabled\": true,\n \"conditions\": [\n {\n \"type\": \"codeDetection\",\n \"codeDetectionIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n }\n ],\n \"responseAgentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"defaultResponseAgentId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\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))
}{
"routes": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"enabled": true,
"conditions": [
{
"type": "codeDetection",
"codeDetectionIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
],
"action": "triage",
"responseAgentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"responseAgentName": "<string>"
}
],
"defaultSettings": {
"organizationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"defaultResponseAgentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"defaultResponseAgentName": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>"
},
"huntAlertRouting": {
"responseAgentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"responseAgentName": "<string>"
},
"responseAgents": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"logTableOptions": [
{
"source": "<string>",
"sourceDisplayName": "<string>",
"toolId": "<string>",
"stream": "<string>",
"streamLabel": "<string>"
}
]
}{
"error": "<string>",
"issues": [
{}
]
}{
"error": "<string>"
}{
"error": "<string>",
"missingPerms": [
"<string>"
]
}{
"error": "<string>"
}Authorizations
API Key authentication for programmatic access. Include your API key in the Authorization header as: Bearer your_api_key_here
Body
Routes in the order they are checked: at most 50, or as many as are saved when more are
500Show child attributes
Show child attributes
Default agent for alerts no route matches, saved with the routes; null leaves them unassigned, omitted keeps the saved default
Response
Successful response
Routes in the order they are checked
Show child attributes
Show child attributes
Organization default agent for alerts no route matches
Show child attributes
Show child attributes
Agent that triages new Hunt Alerts, which skip the routes and the default
Show child attributes
Show child attributes
Agents a route can send alerts to
Show child attributes
Show child attributes
Cotool Logs tables a logTable condition can name
Show child attributes
Show child attributes
Was this page helpful?