Update Tali workspace policy settings
Requires the configured Aida workspace feature (aida_workspace by default). View permits aida_view/capture/review/settings_manage or full access; mutation requires the action-specific capture, review or settings permission. All records belong to the current organization. Requires aida_settings_manage or full access. Submitted sources/freshness/notifications/pause replace their stored sections; automation merges. External send always requires approval. Increasing autonomy needs explicit level_change_approval.status approved and cannot exceed the platform routine_internal_autonomy ceiling. Experiments require approved governance before enabled; rejected requests are reflected in returned settings.
curl --request PUT \
--url https://api.gratona.com/v1/admin/aida/settings \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"sources": [
{
"key": "<string>",
"enabled": true
}
],
"freshness": {
"stale_after_days": 123,
"recheck_before_approval": true,
"block_external_send_when_stale": true
},
"automation": {
"level": "<string>",
"external_send_requires_approval": true,
"enabled_work_types": [
"<string>"
],
"allowed_tool_paths": [
"<string>"
],
"available_tool_paths": [
"<string>"
],
"max_supported_level": "<string>",
"autonomy_policy": {
"approval_required_for_increase": true,
"future_autonomy_blocked": true,
"policy_source": "<string>"
},
"level_change_approval": {
"status": "<string>",
"note": "<string>"
},
"level_change_request": {},
"experiments": {}
},
"notifications": {
"daily_brief": true,
"approval_digest": true,
"blocked_work_alerts": true
},
"pause": {
"paused": true,
"reason": "<string>",
"until": "2023-11-07T05:31:56Z"
},
"experiments": {}
}
'import requests
url = "https://api.gratona.com/v1/admin/aida/settings"
payload = {
"sources": [
{
"key": "<string>",
"enabled": True
}
],
"freshness": {
"stale_after_days": 123,
"recheck_before_approval": True,
"block_external_send_when_stale": True
},
"automation": {
"level": "<string>",
"external_send_requires_approval": True,
"enabled_work_types": ["<string>"],
"allowed_tool_paths": ["<string>"],
"available_tool_paths": ["<string>"],
"max_supported_level": "<string>",
"autonomy_policy": {
"approval_required_for_increase": True,
"future_autonomy_blocked": True,
"policy_source": "<string>"
},
"level_change_approval": {
"status": "<string>",
"note": "<string>"
},
"level_change_request": {},
"experiments": {}
},
"notifications": {
"daily_brief": True,
"approval_digest": True,
"blocked_work_alerts": True
},
"pause": {
"paused": True,
"reason": "<string>",
"until": "2023-11-07T05:31:56Z"
},
"experiments": {}
}
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({
sources: [{key: '<string>', enabled: true}],
freshness: {
stale_after_days: 123,
recheck_before_approval: true,
block_external_send_when_stale: true
},
automation: {
level: '<string>',
external_send_requires_approval: true,
enabled_work_types: ['<string>'],
allowed_tool_paths: ['<string>'],
available_tool_paths: ['<string>'],
max_supported_level: '<string>',
autonomy_policy: {
approval_required_for_increase: true,
future_autonomy_blocked: true,
policy_source: '<string>'
},
level_change_approval: {status: '<string>', note: '<string>'},
level_change_request: {},
experiments: {}
},
notifications: {daily_brief: true, approval_digest: true, blocked_work_alerts: true},
pause: {paused: true, reason: '<string>', until: '2023-11-07T05:31:56Z'},
experiments: {}
})
};
fetch('https://api.gratona.com/v1/admin/aida/settings', 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://api.gratona.com/v1/admin/aida/settings",
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([
'sources' => [
[
'key' => '<string>',
'enabled' => true
]
],
'freshness' => [
'stale_after_days' => 123,
'recheck_before_approval' => true,
'block_external_send_when_stale' => true
],
'automation' => [
'level' => '<string>',
'external_send_requires_approval' => true,
'enabled_work_types' => [
'<string>'
],
'allowed_tool_paths' => [
'<string>'
],
'available_tool_paths' => [
'<string>'
],
'max_supported_level' => '<string>',
'autonomy_policy' => [
'approval_required_for_increase' => true,
'future_autonomy_blocked' => true,
'policy_source' => '<string>'
],
'level_change_approval' => [
'status' => '<string>',
'note' => '<string>'
],
'level_change_request' => [
],
'experiments' => [
]
],
'notifications' => [
'daily_brief' => true,
'approval_digest' => true,
'blocked_work_alerts' => true
],
'pause' => [
'paused' => true,
'reason' => '<string>',
'until' => '2023-11-07T05:31:56Z'
],
'experiments' => [
]
]),
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://api.gratona.com/v1/admin/aida/settings"
payload := strings.NewReader("{\n \"sources\": [\n {\n \"key\": \"<string>\",\n \"enabled\": true\n }\n ],\n \"freshness\": {\n \"stale_after_days\": 123,\n \"recheck_before_approval\": true,\n \"block_external_send_when_stale\": true\n },\n \"automation\": {\n \"level\": \"<string>\",\n \"external_send_requires_approval\": true,\n \"enabled_work_types\": [\n \"<string>\"\n ],\n \"allowed_tool_paths\": [\n \"<string>\"\n ],\n \"available_tool_paths\": [\n \"<string>\"\n ],\n \"max_supported_level\": \"<string>\",\n \"autonomy_policy\": {\n \"approval_required_for_increase\": true,\n \"future_autonomy_blocked\": true,\n \"policy_source\": \"<string>\"\n },\n \"level_change_approval\": {\n \"status\": \"<string>\",\n \"note\": \"<string>\"\n },\n \"level_change_request\": {},\n \"experiments\": {}\n },\n \"notifications\": {\n \"daily_brief\": true,\n \"approval_digest\": true,\n \"blocked_work_alerts\": true\n },\n \"pause\": {\n \"paused\": true,\n \"reason\": \"<string>\",\n \"until\": \"2023-11-07T05:31:56Z\"\n },\n \"experiments\": {}\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://api.gratona.com/v1/admin/aida/settings")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"sources\": [\n {\n \"key\": \"<string>\",\n \"enabled\": true\n }\n ],\n \"freshness\": {\n \"stale_after_days\": 123,\n \"recheck_before_approval\": true,\n \"block_external_send_when_stale\": true\n },\n \"automation\": {\n \"level\": \"<string>\",\n \"external_send_requires_approval\": true,\n \"enabled_work_types\": [\n \"<string>\"\n ],\n \"allowed_tool_paths\": [\n \"<string>\"\n ],\n \"available_tool_paths\": [\n \"<string>\"\n ],\n \"max_supported_level\": \"<string>\",\n \"autonomy_policy\": {\n \"approval_required_for_increase\": true,\n \"future_autonomy_blocked\": true,\n \"policy_source\": \"<string>\"\n },\n \"level_change_approval\": {\n \"status\": \"<string>\",\n \"note\": \"<string>\"\n },\n \"level_change_request\": {},\n \"experiments\": {}\n },\n \"notifications\": {\n \"daily_brief\": true,\n \"approval_digest\": true,\n \"blocked_work_alerts\": true\n },\n \"pause\": {\n \"paused\": true,\n \"reason\": \"<string>\",\n \"until\": \"2023-11-07T05:31:56Z\"\n },\n \"experiments\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/aida/settings")
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 \"sources\": [\n {\n \"key\": \"<string>\",\n \"enabled\": true\n }\n ],\n \"freshness\": {\n \"stale_after_days\": 123,\n \"recheck_before_approval\": true,\n \"block_external_send_when_stale\": true\n },\n \"automation\": {\n \"level\": \"<string>\",\n \"external_send_requires_approval\": true,\n \"enabled_work_types\": [\n \"<string>\"\n ],\n \"allowed_tool_paths\": [\n \"<string>\"\n ],\n \"available_tool_paths\": [\n \"<string>\"\n ],\n \"max_supported_level\": \"<string>\",\n \"autonomy_policy\": {\n \"approval_required_for_increase\": true,\n \"future_autonomy_blocked\": true,\n \"policy_source\": \"<string>\"\n },\n \"level_change_approval\": {\n \"status\": \"<string>\",\n \"note\": \"<string>\"\n },\n \"level_change_request\": {},\n \"experiments\": {}\n },\n \"notifications\": {\n \"daily_brief\": true,\n \"approval_digest\": true,\n \"blocked_work_alerts\": true\n },\n \"pause\": {\n \"paused\": true,\n \"reason\": \"<string>\",\n \"until\": \"2023-11-07T05:31:56Z\"\n },\n \"experiments\": {}\n}"
response = http.request(request)
puts response.read_body{
"data": {
"sources": [
{
"key": "<string>",
"enabled": true
}
],
"freshness": {
"stale_after_days": 123,
"recheck_before_approval": true,
"block_external_send_when_stale": true
},
"automation": {
"level": "<string>",
"external_send_requires_approval": true,
"enabled_work_types": [
"<string>"
],
"allowed_tool_paths": [
"<string>"
],
"available_tool_paths": [
"<string>"
],
"max_supported_level": "<string>",
"autonomy_policy": {
"approval_required_for_increase": true,
"future_autonomy_blocked": true,
"policy_source": "<string>"
},
"level_change_approval": {
"status": "<string>",
"note": "<string>"
},
"level_change_request": {},
"experiments": {}
},
"notifications": {
"daily_brief": true,
"approval_digest": true,
"blocked_work_alerts": true
},
"pause": {
"paused": true,
"reason": "<string>",
"until": "2023-11-07T05:31:56Z"
},
"workflows": [
{}
],
"actions": [
{}
],
"experiments": [
{}
]
}
}{
"message": "Unauthorized",
"status": "error"
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}Authorizations
Passport bearer token authentication for legacy admin sessions.
Body
Request fields accepted by this operation. Omitted optional properties retain the behavior described above.
Response
Update Tali workspace policy settings response.
Show child attributes
Show child attributes
curl --request PUT \
--url https://api.gratona.com/v1/admin/aida/settings \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"sources": [
{
"key": "<string>",
"enabled": true
}
],
"freshness": {
"stale_after_days": 123,
"recheck_before_approval": true,
"block_external_send_when_stale": true
},
"automation": {
"level": "<string>",
"external_send_requires_approval": true,
"enabled_work_types": [
"<string>"
],
"allowed_tool_paths": [
"<string>"
],
"available_tool_paths": [
"<string>"
],
"max_supported_level": "<string>",
"autonomy_policy": {
"approval_required_for_increase": true,
"future_autonomy_blocked": true,
"policy_source": "<string>"
},
"level_change_approval": {
"status": "<string>",
"note": "<string>"
},
"level_change_request": {},
"experiments": {}
},
"notifications": {
"daily_brief": true,
"approval_digest": true,
"blocked_work_alerts": true
},
"pause": {
"paused": true,
"reason": "<string>",
"until": "2023-11-07T05:31:56Z"
},
"experiments": {}
}
'import requests
url = "https://api.gratona.com/v1/admin/aida/settings"
payload = {
"sources": [
{
"key": "<string>",
"enabled": True
}
],
"freshness": {
"stale_after_days": 123,
"recheck_before_approval": True,
"block_external_send_when_stale": True
},
"automation": {
"level": "<string>",
"external_send_requires_approval": True,
"enabled_work_types": ["<string>"],
"allowed_tool_paths": ["<string>"],
"available_tool_paths": ["<string>"],
"max_supported_level": "<string>",
"autonomy_policy": {
"approval_required_for_increase": True,
"future_autonomy_blocked": True,
"policy_source": "<string>"
},
"level_change_approval": {
"status": "<string>",
"note": "<string>"
},
"level_change_request": {},
"experiments": {}
},
"notifications": {
"daily_brief": True,
"approval_digest": True,
"blocked_work_alerts": True
},
"pause": {
"paused": True,
"reason": "<string>",
"until": "2023-11-07T05:31:56Z"
},
"experiments": {}
}
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({
sources: [{key: '<string>', enabled: true}],
freshness: {
stale_after_days: 123,
recheck_before_approval: true,
block_external_send_when_stale: true
},
automation: {
level: '<string>',
external_send_requires_approval: true,
enabled_work_types: ['<string>'],
allowed_tool_paths: ['<string>'],
available_tool_paths: ['<string>'],
max_supported_level: '<string>',
autonomy_policy: {
approval_required_for_increase: true,
future_autonomy_blocked: true,
policy_source: '<string>'
},
level_change_approval: {status: '<string>', note: '<string>'},
level_change_request: {},
experiments: {}
},
notifications: {daily_brief: true, approval_digest: true, blocked_work_alerts: true},
pause: {paused: true, reason: '<string>', until: '2023-11-07T05:31:56Z'},
experiments: {}
})
};
fetch('https://api.gratona.com/v1/admin/aida/settings', 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://api.gratona.com/v1/admin/aida/settings",
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([
'sources' => [
[
'key' => '<string>',
'enabled' => true
]
],
'freshness' => [
'stale_after_days' => 123,
'recheck_before_approval' => true,
'block_external_send_when_stale' => true
],
'automation' => [
'level' => '<string>',
'external_send_requires_approval' => true,
'enabled_work_types' => [
'<string>'
],
'allowed_tool_paths' => [
'<string>'
],
'available_tool_paths' => [
'<string>'
],
'max_supported_level' => '<string>',
'autonomy_policy' => [
'approval_required_for_increase' => true,
'future_autonomy_blocked' => true,
'policy_source' => '<string>'
],
'level_change_approval' => [
'status' => '<string>',
'note' => '<string>'
],
'level_change_request' => [
],
'experiments' => [
]
],
'notifications' => [
'daily_brief' => true,
'approval_digest' => true,
'blocked_work_alerts' => true
],
'pause' => [
'paused' => true,
'reason' => '<string>',
'until' => '2023-11-07T05:31:56Z'
],
'experiments' => [
]
]),
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://api.gratona.com/v1/admin/aida/settings"
payload := strings.NewReader("{\n \"sources\": [\n {\n \"key\": \"<string>\",\n \"enabled\": true\n }\n ],\n \"freshness\": {\n \"stale_after_days\": 123,\n \"recheck_before_approval\": true,\n \"block_external_send_when_stale\": true\n },\n \"automation\": {\n \"level\": \"<string>\",\n \"external_send_requires_approval\": true,\n \"enabled_work_types\": [\n \"<string>\"\n ],\n \"allowed_tool_paths\": [\n \"<string>\"\n ],\n \"available_tool_paths\": [\n \"<string>\"\n ],\n \"max_supported_level\": \"<string>\",\n \"autonomy_policy\": {\n \"approval_required_for_increase\": true,\n \"future_autonomy_blocked\": true,\n \"policy_source\": \"<string>\"\n },\n \"level_change_approval\": {\n \"status\": \"<string>\",\n \"note\": \"<string>\"\n },\n \"level_change_request\": {},\n \"experiments\": {}\n },\n \"notifications\": {\n \"daily_brief\": true,\n \"approval_digest\": true,\n \"blocked_work_alerts\": true\n },\n \"pause\": {\n \"paused\": true,\n \"reason\": \"<string>\",\n \"until\": \"2023-11-07T05:31:56Z\"\n },\n \"experiments\": {}\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://api.gratona.com/v1/admin/aida/settings")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"sources\": [\n {\n \"key\": \"<string>\",\n \"enabled\": true\n }\n ],\n \"freshness\": {\n \"stale_after_days\": 123,\n \"recheck_before_approval\": true,\n \"block_external_send_when_stale\": true\n },\n \"automation\": {\n \"level\": \"<string>\",\n \"external_send_requires_approval\": true,\n \"enabled_work_types\": [\n \"<string>\"\n ],\n \"allowed_tool_paths\": [\n \"<string>\"\n ],\n \"available_tool_paths\": [\n \"<string>\"\n ],\n \"max_supported_level\": \"<string>\",\n \"autonomy_policy\": {\n \"approval_required_for_increase\": true,\n \"future_autonomy_blocked\": true,\n \"policy_source\": \"<string>\"\n },\n \"level_change_approval\": {\n \"status\": \"<string>\",\n \"note\": \"<string>\"\n },\n \"level_change_request\": {},\n \"experiments\": {}\n },\n \"notifications\": {\n \"daily_brief\": true,\n \"approval_digest\": true,\n \"blocked_work_alerts\": true\n },\n \"pause\": {\n \"paused\": true,\n \"reason\": \"<string>\",\n \"until\": \"2023-11-07T05:31:56Z\"\n },\n \"experiments\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/aida/settings")
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 \"sources\": [\n {\n \"key\": \"<string>\",\n \"enabled\": true\n }\n ],\n \"freshness\": {\n \"stale_after_days\": 123,\n \"recheck_before_approval\": true,\n \"block_external_send_when_stale\": true\n },\n \"automation\": {\n \"level\": \"<string>\",\n \"external_send_requires_approval\": true,\n \"enabled_work_types\": [\n \"<string>\"\n ],\n \"allowed_tool_paths\": [\n \"<string>\"\n ],\n \"available_tool_paths\": [\n \"<string>\"\n ],\n \"max_supported_level\": \"<string>\",\n \"autonomy_policy\": {\n \"approval_required_for_increase\": true,\n \"future_autonomy_blocked\": true,\n \"policy_source\": \"<string>\"\n },\n \"level_change_approval\": {\n \"status\": \"<string>\",\n \"note\": \"<string>\"\n },\n \"level_change_request\": {},\n \"experiments\": {}\n },\n \"notifications\": {\n \"daily_brief\": true,\n \"approval_digest\": true,\n \"blocked_work_alerts\": true\n },\n \"pause\": {\n \"paused\": true,\n \"reason\": \"<string>\",\n \"until\": \"2023-11-07T05:31:56Z\"\n },\n \"experiments\": {}\n}"
response = http.request(request)
puts response.read_body{
"data": {
"sources": [
{
"key": "<string>",
"enabled": true
}
],
"freshness": {
"stale_after_days": 123,
"recheck_before_approval": true,
"block_external_send_when_stale": true
},
"automation": {
"level": "<string>",
"external_send_requires_approval": true,
"enabled_work_types": [
"<string>"
],
"allowed_tool_paths": [
"<string>"
],
"available_tool_paths": [
"<string>"
],
"max_supported_level": "<string>",
"autonomy_policy": {
"approval_required_for_increase": true,
"future_autonomy_blocked": true,
"policy_source": "<string>"
},
"level_change_approval": {
"status": "<string>",
"note": "<string>"
},
"level_change_request": {},
"experiments": {}
},
"notifications": {
"daily_brief": true,
"approval_digest": true,
"blocked_work_alerts": true
},
"pause": {
"paused": true,
"reason": "<string>",
"until": "2023-11-07T05:31:56Z"
},
"workflows": [
{}
],
"actions": [
{}
],
"experiments": [
{}
]
}
}{
"message": "Unauthorized",
"status": "error"
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}