curl --request GET \
--url https://api.humanos.tech/agents/policy/{did}import requests
url = "https://api.humanos.tech/agents/policy/{did}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.humanos.tech/agents/policy/{did}', 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.humanos.tech/agents/policy/{did}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.humanos.tech/agents/policy/{did}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.humanos.tech/agents/policy/{did}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.humanos.tech/agents/policy/{did}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"policy": {
"version": 3,
"default": "deny",
"publishedAt": "2026-10-20T09:00:00.000Z"
},
"tools": [
{
"name": "send_payment",
"access": "rules",
"service": "Stripe",
"controls": [
{
"id": "urn:via:action:0193a4b2-7c1d-7e4f-9a8b-2c3d4e5f6a7b",
"name": "Payment limits",
"rules": [
"The amount is at most the organization limit"
],
"limits": [
{
"name": "maxAmount",
"value": 500,
"description": "Most per payment"
}
]
}
],
"mandateControls": [
{
"id": "urn:via:action:0193a4b2-7c1d-7e4f-9a8b-2c3d4e5f6a7b",
"name": "Refunds"
}
]
}
],
"everyCall": {
"id": "urn:via:action:0193a4b2-7c1d-7e4f-9a8b-2c3d4e5f6a7b",
"name": "Payment limits",
"rules": [
"The amount is at most the organization limit"
],
"limits": [
{
"name": "maxAmount",
"value": 500,
"description": "Most per payment"
}
]
}
}{
"statusCode": 404,
"message": "policy version not found",
"error": "Not Found"
}Get Agent Policy
A published version of the organization’s policy as it applies to the agent: for each tool its latest declaration lists, the access the version gives it and the controls that guard it
Without version, the version in force. An earlier version is applied to the tools and controls as they are today; what was decided then is on the chains
curl --request GET \
--url https://api.humanos.tech/agents/policy/{did}import requests
url = "https://api.humanos.tech/agents/policy/{did}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.humanos.tech/agents/policy/{did}', 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.humanos.tech/agents/policy/{did}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.humanos.tech/agents/policy/{did}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.humanos.tech/agents/policy/{did}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.humanos.tech/agents/policy/{did}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"policy": {
"version": 3,
"default": "deny",
"publishedAt": "2026-10-20T09:00:00.000Z"
},
"tools": [
{
"name": "send_payment",
"access": "rules",
"service": "Stripe",
"controls": [
{
"id": "urn:via:action:0193a4b2-7c1d-7e4f-9a8b-2c3d4e5f6a7b",
"name": "Payment limits",
"rules": [
"The amount is at most the organization limit"
],
"limits": [
{
"name": "maxAmount",
"value": 500,
"description": "Most per payment"
}
]
}
],
"mandateControls": [
{
"id": "urn:via:action:0193a4b2-7c1d-7e4f-9a8b-2c3d4e5f6a7b",
"name": "Refunds"
}
]
}
],
"everyCall": {
"id": "urn:via:action:0193a4b2-7c1d-7e4f-9a8b-2c3d4e5f6a7b",
"name": "Payment limits",
"rules": [
"The amount is at most the organization limit"
],
"limits": [
{
"name": "maxAmount",
"value": 500,
"description": "Most per payment"
}
]
}
}{
"statusCode": 404,
"message": "policy version not found",
"error": "Not Found"
}Headers
Pin request, response, and webhook shapes to a specific dated API version (YYYY-MM-DD). Omit to use the version pinned to your API key (set when the key is created; new keys default to the latest version). New integrations should target the latest version.
^\d{4}-\d{2}-\d{2}$"2026-11-02"
Path Parameters
The agent's DID, URL-encoded.
"did:web:humanos.tech:agent:2f8b6c41-9d37-4e5a-8b02-6c1d9e7a4f35"
Query Parameters
A published version of the policy, by its number; the version in force when absent.
x >= 02
Response
Returns the policy version and each tool as it treats it.
The version read; null when the organization has none.
Show child attributes
Show child attributes
Each tool its latest declaration lists, as the version treats it.
Show child attributes
Show child attributes
The control every call must also pass, when the version names one.
Show child attributes
Show child attributes