List Healing Changes
curl --request GET \
--url https://api.60db.ai/deep-analytics/analysis-agents/:agentId/healing \
--header 'Authorization: <authorization>'import requests
url = "https://api.60db.ai/deep-analytics/analysis-agents/:agentId/healing"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.60db.ai/deep-analytics/analysis-agents/:agentId/healing', 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.60db.ai/deep-analytics/analysis-agents/:agentId/healing",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$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.60db.ai/deep-analytics/analysis-agents/:agentId/healing"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
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.60db.ai/deep-analytics/analysis-agents/:agentId/healing")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.60db.ai/deep-analytics/analysis-agents/:agentId/healing")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_bodyCall Analysis
List Healing Changes
Changes that self healing drafted, applied or measured for an analyzer
GET
/
deep-analytics
/
analysis-agents
/
:agentId
/
healing
List Healing Changes
curl --request GET \
--url https://api.60db.ai/deep-analytics/analysis-agents/:agentId/healing \
--header 'Authorization: <authorization>'import requests
url = "https://api.60db.ai/deep-analytics/analysis-agents/:agentId/healing"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.60db.ai/deep-analytics/analysis-agents/:agentId/healing', 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.60db.ai/deep-analytics/analysis-agents/:agentId/healing",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$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.60db.ai/deep-analytics/analysis-agents/:agentId/healing"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
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.60db.ai/deep-analytics/analysis-agents/:agentId/healing")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.60db.ai/deep-analytics/analysis-agents/:agentId/healing")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_bodyReturns the newest 50 changes self healing made for the AI agents this analyzer watches, with the evidence and the instructions before and after. See Self healing.
Needs view access to the analyzer.
can_manage is true when the caller can also approve, dismiss and undo (manage access plus permission to edit agents). Not available to API keys.Request
Headers
Bearer token of a signed-in user (dashboard session). API keys cannot call healing endpoints
Path
Response
200{
"success": true,
"data": {
"items": [
{
"id": "<change-uuid>",
"agent": { "id": "<ai-agent-uuid>", "name": "Front desk" },
"status": "proposed",
"applied_by": null,
"created_at": "2026-11-13T09:00:00.000Z",
"applied_at": null,
"decided_at": null,
"problems": [
{ "category": "wrong_information", "severity": "high", "reason": "Quoted the old price", "count": 3, "call_ids": ["<call-uuid>"] }
],
"changes": ["State the current price from the price list"],
"previous_script": "…",
"new_script": "…",
"base_hash": "<sha256 of previous_script>",
"verification": {
"target_calls": 10,
"baseline": { "calls": 20, "problem_calls": 3, "rate": 0.15 },
"after": null,
"outcome": null
},
"can_manage": true
}
],
"pending_review_count": 1
}
}
status | Meaning |
|---|---|
proposed | Waiting for review |
verifying | Applied; measuring the next target_calls calls |
improved / no_change | Measured; the change stays |
rolled_back | Undone automatically because the problem got worse |
superseded | The agent was edited by someone else, so the change was neither applied nor undone |
undone / dismissed | A person undid or dismissed it |
failed | The update of the agent was refused |
applied_by is auto or person. call_ids are call IDs you can open in call analysis.
Errors
| Status | Code | When |
|---|---|---|
| 404 | NOT_FOUND | The analyzer does not exist or is not visible |
| 503 | AUTHZ_UNAVAILABLE | The permission check could not be made |