curl --request PATCH \
--url https://api.getoneprofile.ai/assistant/conversations/{conversation_id}/grants/ \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"granted_tools": [
"<string>"
],
"granted_verbs": []
}
'import requests
url = "https://api.getoneprofile.ai/assistant/conversations/{conversation_id}/grants/"
payload = {
"granted_tools": ["<string>"],
"granted_verbs": []
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({granted_tools: ['<string>'], granted_verbs: []})
};
fetch('https://api.getoneprofile.ai/assistant/conversations/{conversation_id}/grants/', 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.getoneprofile.ai/assistant/conversations/{conversation_id}/grants/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'granted_tools' => [
'<string>'
],
'granted_verbs' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.getoneprofile.ai/assistant/conversations/{conversation_id}/grants/"
payload := strings.NewReader("{\n \"granted_tools\": [\n \"<string>\"\n ],\n \"granted_verbs\": []\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.patch("https://api.getoneprofile.ai/assistant/conversations/{conversation_id}/grants/")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"granted_tools\": [\n \"<string>\"\n ],\n \"granted_verbs\": []\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/assistant/conversations/{conversation_id}/grants/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"granted_tools\": [\n \"<string>\"\n ],\n \"granted_verbs\": []\n}"
response = http.request(request)
puts response.read_body{
"follows_defaults": true,
"granted_tools": [
"<string>"
],
"granted_verbs": [
"create_table_from_search"
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>",
"issues": [
{
"input": "<string>",
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Change what a conversation may apply without asking
Change the conversation’s grant list. Take one operation back by sending granted_tools without it, or one verb by sending granted_verbs without it; a field left out keeps its half as it was. Send granted_verbs as null to follow the workspace defaults again, operations included. An empty list allows nothing and still stops following the defaults. A verb that always asks (pushing to a destination) cannot be granted and is refused.
curl --request PATCH \
--url https://api.getoneprofile.ai/assistant/conversations/{conversation_id}/grants/ \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"granted_tools": [
"<string>"
],
"granted_verbs": []
}
'import requests
url = "https://api.getoneprofile.ai/assistant/conversations/{conversation_id}/grants/"
payload = {
"granted_tools": ["<string>"],
"granted_verbs": []
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({granted_tools: ['<string>'], granted_verbs: []})
};
fetch('https://api.getoneprofile.ai/assistant/conversations/{conversation_id}/grants/', 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.getoneprofile.ai/assistant/conversations/{conversation_id}/grants/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'granted_tools' => [
'<string>'
],
'granted_verbs' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.getoneprofile.ai/assistant/conversations/{conversation_id}/grants/"
payload := strings.NewReader("{\n \"granted_tools\": [\n \"<string>\"\n ],\n \"granted_verbs\": []\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.patch("https://api.getoneprofile.ai/assistant/conversations/{conversation_id}/grants/")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"granted_tools\": [\n \"<string>\"\n ],\n \"granted_verbs\": []\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/assistant/conversations/{conversation_id}/grants/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"granted_tools\": [\n \"<string>\"\n ],\n \"granted_verbs\": []\n}"
response = http.request(request)
puts response.read_body{
"follows_defaults": true,
"granted_tools": [
"<string>"
],
"granted_verbs": [
"create_table_from_search"
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>",
"issues": [
{
"input": "<string>",
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Authorizations
Path Parameters
Body
Change a conversation's grant list, or hand it back to the workspace defaults.
The verbs and the operations are two halves of one list, and a field left out keeps its half exactly as it was.
The write operations the AI Assistant may run without asking in this conversation. Send the current list minus one to take it back; an empty list allows none. A verb's name is ignored here.
2001 - 255The verbs this conversation may apply without asking. Send the current list minus one verb to take that verb back. Send null to follow the workspace defaults again, operations included; an empty list allows nothing. A send is refused.
8The eight things an AI may do to a workspace.
Exactly eight, not sixty: today's cell-level actions all run against one cell, and building a table, adding contacts to a sequence and starting a search had no home at all. Anything new here is a product decision about what an assistant may touch, not a convenience for a planner.
create_table_from_search, add_column, run_column, enrich_rows, add_contacts_to_sequence, push_to_destination, call_endpoint, start_search Response
Successful Response
What one conversation may apply without asking: the list, and where it comes from.
Read for the shield in the chat header. follows_defaults tells the
header whether to show the list as the workspace's (change it in
Settings) or as this thread's own (take one back here, or return to the
defaults). granted_tools is what the shield lists: the AI Assistant's
cards are decided by tool, and the verbs decide only an agent's.
Whether the list is the workspace defaults, read live. False once the conversation has a list of its own, which a change in Settings no longer reaches.
The write operations the AI Assistant runs without asking in this conversation, in effect now: operation names as GET /assistant/tools/ lists them, and family:<area> for the rest of one part of the product. Approving a card for this conversation adds its operation here. Only what still allows something is listed, by the name its operation has today.
The verbs this conversation applies without asking, in effect now.
The eight things an AI may do to a workspace.
Exactly eight, not sixty: today's cell-level actions all run against one cell, and building a table, adding contacts to a sequence and starting a search had no home at all. Anything new here is a product decision about what an assistant may touch, not a convenience for a planner.
create_table_from_search, add_column, run_column, enrich_rows, add_contacts_to_sequence, push_to_destination, call_endpoint, start_search Was this page helpful?