curl --request GET \
--url https://api.humanos.tech/intelligence/risk/signalimport requests
url = "https://api.humanos.tech/intelligence/risk/signal"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.humanos.tech/intelligence/risk/signal', 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/intelligence/risk/signal",
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/intelligence/risk/signal"
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/intelligence/risk/signal")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.humanos.tech/intelligence/risk/signal")
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{
"urn": "urn:via:signal:11111111-2222-4333-8444-555555555555",
"did": "did:web:humanos.tech:agent:2f8b6c41-9d37-4e5a-8b02-6c1d9e7a4f35",
"score": 31,
"issuedAt": "2026-09-10T04:30:00.000Z",
"validFrom": "2026-09-10T04:30:00.000Z",
"validUntil": "2026-09-12T04:30:00.000Z",
"previousUrn": "urn:via:signal:00000000-1111-4222-8333-444444444444",
"digest": "sha256-…",
"sdJwt": "eyJhbGciOiJFZERTQSIsInR5cCI6ImRjK3NkLWp3dCJ9.eyJzdWIiOiJkaWQ6d2ViOi4uLiJ9.c2lnbmF0dXJl~WyJzYWx0IiwiZXZpZGVuY2UiLFtdXQ~"
}{
"statusCode": 400,
"message": "did must be a string",
"error": "Bad Request"
}{
"statusCode": 404,
"message": "sharing_not_enabled: the organization does not share with you",
"error": "Not Found"
}Get Risk Signal
The latest VIASignal for one agent: its risk score at one instant as an SD-JWT signed by the platform’s key (did:web:humanos.tech), verifiable offline and recomputable from the chain.
Issued daily for every scored agent and on demand by its organization; valid 48 hours; each names the one before it.
Your own organization receives every disclosure (the evidence behind each factor, the remediations, the posture). A partner organization, under a sharing grant, receives the same signature with those disclosures withheld.
curl --request GET \
--url https://api.humanos.tech/intelligence/risk/signalimport requests
url = "https://api.humanos.tech/intelligence/risk/signal"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.humanos.tech/intelligence/risk/signal', 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/intelligence/risk/signal",
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/intelligence/risk/signal"
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/intelligence/risk/signal")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.humanos.tech/intelligence/risk/signal")
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{
"urn": "urn:via:signal:11111111-2222-4333-8444-555555555555",
"did": "did:web:humanos.tech:agent:2f8b6c41-9d37-4e5a-8b02-6c1d9e7a4f35",
"score": 31,
"issuedAt": "2026-09-10T04:30:00.000Z",
"validFrom": "2026-09-10T04:30:00.000Z",
"validUntil": "2026-09-12T04:30:00.000Z",
"previousUrn": "urn:via:signal:00000000-1111-4222-8333-444444444444",
"digest": "sha256-…",
"sdJwt": "eyJhbGciOiJFZERTQSIsInR5cCI6ImRjK3NkLWp3dCJ9.eyJzdWIiOiJkaWQ6d2ViOi4uLiJ9.c2lnbmF0dXJl~WyJzYWx0IiwiZXZpZGVuY2UiLFtdXQ~"
}{
"statusCode": 400,
"message": "did must be a string",
"error": "Bad Request"
}{
"statusCode": 404,
"message": "sharing_not_enabled: the organization does not share with you",
"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-10-16"
Query Parameters
DID of the organization whose data is consulted. Your own organization DID needs no grant; any other requires an active sharing grant from that organization to yours.
"did:web:org-a.example"
DID of the agent to score.
"did:web:humanos.tech:agent:RRJyvYvj0T-ZRBU-"
Behaviour window in days, ending now. Default 30, at most 366.
30
Response
Returns the latest signal, or an empty body when none has been issued yet.
The signal's URN.
"urn:via:signal:11111111-2222-4333-8444-555555555555"
DID of the agent the signal scores.
"did:web:humanos.tech:agent:2f8b6c41-9d37-4e5a-8b02-6c1d9e7a4f35"
The score the signal carries.
31
When the platform signed it.
"2026-09-10T04:30:00.000Z"
When it starts to hold.
"2026-09-10T04:30:00.000Z"
Two days after issuance.
"2026-09-12T04:30:00.000Z"
The prior signal for this agent, so the sequence is checkable; null on the first.
"urn:via:signal:00000000-1111-4222-8333-444444444444"
SRI digest of the issuer-signed JWT — the stable name of these bytes.
"sha256-…"
The SD-JWT (dc+sd-jwt, EdDSA). Verify against the platform key at did:web:humanos.tech. Disclosures follow the ~ separators; a partner copy carries none.
"eyJhbGciOiJFZERTQSIsInR5cCI6ImRjK3NkLWp3dCJ9.eyJzdWIiOiJkaWQ6d2ViOi4uLiJ9.c2lnbmF0dXJl~WyJzYWx0IiwiZXZpZGVuY2UiLFtdXQ~"