curl --request GET \
--url https://api.humanos.tech/actors/events/audit/{did}import requests
url = "https://api.humanos.tech/actors/events/audit/{did}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.humanos.tech/actors/events/audit/{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/actors/events/audit/{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/actors/events/audit/{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/actors/events/audit/{did}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.humanos.tech/actors/events/audit/{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{
"did": "did:web:humanos.tech:agent:2f8b6c41-9d37-4e5a-8b02-6c1d9e7a4f35",
"ok": true,
"settled": true,
"eventCount": 4,
"events": [
{
"urn": "urn:via:event:550e8400-e29b-41d4-a716-446655440000",
"event": "ACTOR_REGISTERED",
"actor": "did:web:humanos.tech:agent:2f8b6c41-9d37-4e5a-8b02-6c1d9e7a4f35",
"issuer": "did:web:humanos.tech",
"validFrom": "2026-05-02T10:15:30.000Z",
"contentBound": false,
"signatureValid": true,
"chainLinkValid": true,
"signerKnown": true
}
],
"fold": {
"ok": true,
"reason": "illegal_transition",
"at": 3
},
"record": {
"ok": true,
"reason": "record_mismatch"
},
"refused": [
{
"urn": "urn:via:event:550e8400-e29b-41d4-a716-446655440000",
"event": "ACTOR_ACCREDITED",
"status": "discarded",
"reason": "fold_failed:illegal_transition",
"createdAt": "2026-10-01T09:12:00.000Z"
}
],
"unresolvedMergedKeys": [],
"mergeClaim": "merge_target_invalid",
"unknownSigners": [],
"totalPages": 1,
"reason": "chain_invalid"
}{
"statusCode": 400,
"message": "pageIndex must not be less than 0",
"error": "Bad Request"
}{
"statusCode": 404,
"message": "actor not found",
"error": "Not Found"
}Audit Actor Chain
Check the actor’s record against its signed chain: every signature and link from genesis, the chain’s fold, and the record’s fields and keys against that fold
It only reports: nothing is written back
While an event is still queued the record is not compared (settled: false); events the chain refused are listed
curl --request GET \
--url https://api.humanos.tech/actors/events/audit/{did}import requests
url = "https://api.humanos.tech/actors/events/audit/{did}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.humanos.tech/actors/events/audit/{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/actors/events/audit/{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/actors/events/audit/{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/actors/events/audit/{did}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.humanos.tech/actors/events/audit/{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{
"did": "did:web:humanos.tech:agent:2f8b6c41-9d37-4e5a-8b02-6c1d9e7a4f35",
"ok": true,
"settled": true,
"eventCount": 4,
"events": [
{
"urn": "urn:via:event:550e8400-e29b-41d4-a716-446655440000",
"event": "ACTOR_REGISTERED",
"actor": "did:web:humanos.tech:agent:2f8b6c41-9d37-4e5a-8b02-6c1d9e7a4f35",
"issuer": "did:web:humanos.tech",
"validFrom": "2026-05-02T10:15:30.000Z",
"contentBound": false,
"signatureValid": true,
"chainLinkValid": true,
"signerKnown": true
}
],
"fold": {
"ok": true,
"reason": "illegal_transition",
"at": 3
},
"record": {
"ok": true,
"reason": "record_mismatch"
},
"refused": [
{
"urn": "urn:via:event:550e8400-e29b-41d4-a716-446655440000",
"event": "ACTOR_ACCREDITED",
"status": "discarded",
"reason": "fold_failed:illegal_transition",
"createdAt": "2026-10-01T09:12:00.000Z"
}
],
"unresolvedMergedKeys": [],
"mergeClaim": "merge_target_invalid",
"unknownSigners": [],
"totalPages": 1,
"reason": "chain_invalid"
}{
"statusCode": 400,
"message": "pageIndex must not be less than 0",
"error": "Bad Request"
}{
"statusCode": 404,
"message": "actor 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-10-16"
Path Parameters
Any of the actor's DIDs, URL-encoded: an organization's, a person's or an agent's, or one it absorbed by a merge.
"did:web:humanos.tech:agent:2f8b6c41-9d37-4e5a-8b02-6c1d9e7a4f35"
Query Parameters
Zero-based page index. 0 returns the first page.
x >= 00
Number of items per page
5 <= x <= 10010
Response
Returns the audit; events is one page of the chain.
The actor's main DID.
"did:web:humanos.tech:agent:2f8b6c41-9d37-4e5a-8b02-6c1d9e7a4f35"
The chain verifies and folds, and once settled the record agrees with it.
true
No event of the actor is queued. The record is compared only then.
true
How many events the whole chain holds, across every page.
4
One page of the chain, oldest first.
Show child attributes
Show child attributes
The chain's fold (v0.3 §5).
Show child attributes
Show child attributes
The record against the chain it names, re-folded and compared. Null while an event is queued, with no event written, or when the chain does not fold.
Show child attributes
Show child attributes
Events of the actor the chain never took, newest first (at most 100); for a person, only those your flows recorded.
Show child attributes
Show child attributes
Keys a merge says survived that resolve to nothing on the successor.
[]
Why the survivor's MERGED does not restate this actor's chain; null when it does, or when there is none.
"merge_target_invalid"
Verification methods with no kept key.
[]
Total number of pages of events available based on the page size and total count
1
The first problem, when not ok.
chain_invalid, signature_or_link_invalid, fold_failed, record_mismatch, chain_binding_mismatch, record_outdated, merged_key_unresolved, merge_claim_invalid, lane_blocked, event_refused, signer_key_unknown