curl --request POST \
--url http://localhost:3000/api/v1/permissions/allow \
--header 'Content-Type: application/json' \
--data '
{
"profile": "<string>",
"agent": "<string>",
"apply": true,
"capabilities": "<string>",
"chat": "<string>",
"chatTag": "<string>",
"description": "<string>",
"force": true,
"label": "<string>",
"to": "<string>"
}
'import requests
url = "http://localhost:3000/api/v1/permissions/allow"
payload = {
"profile": "<string>",
"agent": "<string>",
"apply": True,
"capabilities": "<string>",
"chat": "<string>",
"chatTag": "<string>",
"description": "<string>",
"force": True,
"label": "<string>",
"to": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
profile: '<string>',
agent: '<string>',
apply: true,
capabilities: '<string>',
chat: '<string>',
chatTag: '<string>',
description: '<string>',
force: true,
label: '<string>',
to: '<string>'
})
};
fetch('http://localhost:3000/api/v1/permissions/allow', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "3000",
CURLOPT_URL => "http://localhost:3000/api/v1/permissions/allow",
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([
'profile' => '<string>',
'agent' => '<string>',
'apply' => true,
'capabilities' => '<string>',
'chat' => '<string>',
'chatTag' => '<string>',
'description' => '<string>',
'force' => true,
'label' => '<string>',
'to' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"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 := "http://localhost:3000/api/v1/permissions/allow"
payload := strings.NewReader("{\n \"profile\": \"<string>\",\n \"agent\": \"<string>\",\n \"apply\": true,\n \"capabilities\": \"<string>\",\n \"chat\": \"<string>\",\n \"chatTag\": \"<string>\",\n \"description\": \"<string>\",\n \"force\": true,\n \"label\": \"<string>\",\n \"to\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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("http://localhost:3000/api/v1/permissions/allow")
.header("Content-Type", "application/json")
.body("{\n \"profile\": \"<string>\",\n \"agent\": \"<string>\",\n \"apply\": true,\n \"capabilities\": \"<string>\",\n \"chat\": \"<string>\",\n \"chatTag\": \"<string>\",\n \"description\": \"<string>\",\n \"force\": true,\n \"label\": \"<string>\",\n \"to\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:3000/api/v1/permissions/allow")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"profile\": \"<string>\",\n \"agent\": \"<string>\",\n \"apply\": true,\n \"capabilities\": \"<string>\",\n \"chat\": \"<string>\",\n \"chatTag\": \"<string>\",\n \"description\": \"<string>\",\n \"force\": true,\n \"label\": \"<string>\",\n \"to\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"agentCeilings": [
"<string>"
],
"capabilities": [
{
"objectId": "<string>",
"objectType": "<string>",
"permission": "<string>"
}
],
"changedCount": 123,
"confirmation": {
"action": "allow",
"agents": [
"<string>"
],
"capabilities": [
"<string>"
],
"contacts": [
"<string>"
],
"dryRun": true,
"force": true,
"global": true,
"message": "<string>",
"scopes": [
"<string>"
],
"profile": "<string>"
},
"dryRun": true,
"force": true,
"hints": [
"<string>"
],
"label": "<string>",
"operations": [
{
"kind": "<string>",
"message": "<string>",
"status": "planned",
"capability": "<string>",
"target": "<string>"
}
],
"profile": "<string>",
"scopes": [
{
"label": "<string>",
"type": "chat",
"channel": "<string>",
"chatId": "<string>",
"chatTag": "<string>",
"known": true,
"requestedChatId": "<string>",
"taggedChatCount": 123,
"threadChatId": "<string>",
"title": "<string>"
}
],
"tagSlug": "<string>",
"targets": [
{
"id": "<string>",
"type": "<string>"
}
],
"description": "<string>",
"nextCommand": "<string>"
}Plan or apply a provider-owned permission profile to subjects
curl --request POST \
--url http://localhost:3000/api/v1/permissions/allow \
--header 'Content-Type: application/json' \
--data '
{
"profile": "<string>",
"agent": "<string>",
"apply": true,
"capabilities": "<string>",
"chat": "<string>",
"chatTag": "<string>",
"description": "<string>",
"force": true,
"label": "<string>",
"to": "<string>"
}
'import requests
url = "http://localhost:3000/api/v1/permissions/allow"
payload = {
"profile": "<string>",
"agent": "<string>",
"apply": True,
"capabilities": "<string>",
"chat": "<string>",
"chatTag": "<string>",
"description": "<string>",
"force": True,
"label": "<string>",
"to": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
profile: '<string>',
agent: '<string>',
apply: true,
capabilities: '<string>',
chat: '<string>',
chatTag: '<string>',
description: '<string>',
force: true,
label: '<string>',
to: '<string>'
})
};
fetch('http://localhost:3000/api/v1/permissions/allow', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "3000",
CURLOPT_URL => "http://localhost:3000/api/v1/permissions/allow",
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([
'profile' => '<string>',
'agent' => '<string>',
'apply' => true,
'capabilities' => '<string>',
'chat' => '<string>',
'chatTag' => '<string>',
'description' => '<string>',
'force' => true,
'label' => '<string>',
'to' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"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 := "http://localhost:3000/api/v1/permissions/allow"
payload := strings.NewReader("{\n \"profile\": \"<string>\",\n \"agent\": \"<string>\",\n \"apply\": true,\n \"capabilities\": \"<string>\",\n \"chat\": \"<string>\",\n \"chatTag\": \"<string>\",\n \"description\": \"<string>\",\n \"force\": true,\n \"label\": \"<string>\",\n \"to\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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("http://localhost:3000/api/v1/permissions/allow")
.header("Content-Type", "application/json")
.body("{\n \"profile\": \"<string>\",\n \"agent\": \"<string>\",\n \"apply\": true,\n \"capabilities\": \"<string>\",\n \"chat\": \"<string>\",\n \"chatTag\": \"<string>\",\n \"description\": \"<string>\",\n \"force\": true,\n \"label\": \"<string>\",\n \"to\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:3000/api/v1/permissions/allow")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"profile\": \"<string>\",\n \"agent\": \"<string>\",\n \"apply\": true,\n \"capabilities\": \"<string>\",\n \"chat\": \"<string>\",\n \"chatTag\": \"<string>\",\n \"description\": \"<string>\",\n \"force\": true,\n \"label\": \"<string>\",\n \"to\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"agentCeilings": [
"<string>"
],
"capabilities": [
{
"objectId": "<string>",
"objectType": "<string>",
"permission": "<string>"
}
],
"changedCount": 123,
"confirmation": {
"action": "allow",
"agents": [
"<string>"
],
"capabilities": [
"<string>"
],
"contacts": [
"<string>"
],
"dryRun": true,
"force": true,
"global": true,
"message": "<string>",
"scopes": [
"<string>"
],
"profile": "<string>"
},
"dryRun": true,
"force": true,
"hints": [
"<string>"
],
"label": "<string>",
"operations": [
{
"kind": "<string>",
"message": "<string>",
"status": "planned",
"capability": "<string>",
"target": "<string>"
}
],
"profile": "<string>",
"scopes": [
{
"label": "<string>",
"type": "chat",
"channel": "<string>",
"chatId": "<string>",
"chatTag": "<string>",
"known": true,
"requestedChatId": "<string>",
"taggedChatCount": 123,
"threadChatId": "<string>",
"title": "<string>"
}
],
"tagSlug": "<string>",
"targets": [
{
"id": "<string>",
"type": "<string>"
}
],
"description": "<string>",
"nextCommand": "<string>"
}Body
Permission profile/tag name, with or without permission- prefix
Comma-separated executor agents whose runtime ceiling must include the profile capabilities
Apply the planned provider-owned mutations
Comma-separated capabilities, e.g. mutate:image:generate,execute:executable:curl
Scope contact grants to one chat (canonical chat id, platform chat id, or 'current'). Threads inherit their chat.
Scope contact grants to every chat carrying this chat tag
Description when creating/updating the profile tag
Explicitly use the global (all chats) contact scope. Prefer --chat; ask the human before going global.
Human label when creating/updating the profile tag
Comma-separated subjects to receive the profile: agent: (identity ceiling) or contact: (user overlay; requires --chat, --chat-tag or --force).
Response
Success — body conforms to the @Returns schema.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes