curl --request GET \
--url http://localhost:8080/api/v1/incidents/{id}/evidence \
--header 'x-api-key: <api-key>'import requests
url = "http://localhost:8080/api/v1/incidents/{id}/evidence"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('http://localhost:8080/api/v1/incidents/{id}/evidence', 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 => "8080",
CURLOPT_URL => "http://localhost:8080/api/v1/incidents/{id}/evidence",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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 := "http://localhost:8080/api/v1/incidents/{id}/evidence"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("http://localhost:8080/api/v1/incidents/{id}/evidence")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:8080/api/v1/incidents/{id}/evidence")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"baseline": {
"runId": "<string>",
"source": "landed-sample",
"recordCount": 123,
"columns": [
{
"name": "<string>",
"inferredType": "number",
"nullRate": 123,
"distinct": 123,
"quantiles": {
"p1": 123,
"p25": 123,
"p50": 123,
"p75": 123,
"p99": 123
},
"lengthQuantiles": {
"p1": 123,
"p25": 123,
"p50": 123,
"p75": 123,
"p99": 123
},
"topK": [
{
"value": "<string>",
"count": 123
}
]
}
],
"dqFailures": 123,
"dqPassRate": 123,
"durationMs": 123,
"scriptSha": "<string>",
"tapVersion": 123,
"pipelineVersion": 123,
"sampledRows": 123,
"computedAt": "<string>"
},
"candidate": {
"runId": "<string>",
"source": "landed-sample",
"recordCount": 123,
"columns": [
{
"name": "<string>",
"inferredType": "number",
"nullRate": 123,
"distinct": 123,
"quantiles": {
"p1": 123,
"p25": 123,
"p50": 123,
"p75": 123,
"p99": 123
},
"lengthQuantiles": {
"p1": 123,
"p25": 123,
"p50": 123,
"p75": 123,
"p99": 123
},
"topK": [
{
"value": "<string>",
"count": 123
}
]
}
],
"dqFailures": 123,
"dqPassRate": 123,
"durationMs": 123,
"scriptSha": "<string>",
"tapVersion": 123,
"pipelineVersion": 123,
"sampledRows": 123,
"computedAt": "<string>"
},
"real": {
"runId": "<string>",
"source": "landed-sample",
"recordCount": 123,
"columns": [
{
"name": "<string>",
"inferredType": "number",
"nullRate": 123,
"distinct": 123,
"quantiles": {
"p1": 123,
"p25": 123,
"p50": 123,
"p75": 123,
"p99": 123
},
"lengthQuantiles": {
"p1": 123,
"p25": 123,
"p50": 123,
"p75": 123,
"p99": 123
},
"topK": [
{
"value": "<string>",
"count": 123
}
]
}
],
"dqFailures": 123,
"dqPassRate": 123,
"durationMs": 123,
"scriptSha": "<string>",
"tapVersion": 123,
"pipelineVersion": 123,
"sampledRows": 123,
"computedAt": "<string>"
},
"diff": {
"columnsAdded": [
"<string>"
],
"columnsRemoved": [
"<string>"
],
"typeChanges": [
{
"column": "<string>",
"from": "<string>",
"to": "<string>"
}
],
"recordDeltaPct": 123,
"recordDeltaVsMeanOfLastN": 123,
"lastN": 123,
"nullRateDeltas": [
{
"column": "<string>",
"delta": 123
}
],
"quantileShift": [
{
"column": "<string>",
"shift": 123
}
],
"dqPassRateDelta": 123
},
"blastRadius": {
"downstreamPipelines": [
"<string>"
],
"downstreamDatasets": [
{
"kind": "<string>",
"coords": "<string>"
}
],
"ucTables": [
"<string>"
],
"consumersFromContracts": [
"<string>"
],
"lastDownstreamRunAt": "<string>",
"agentsThatQueriedLast7d": [
"<string>"
],
"secretName": "<string>"
},
"thresholds": {
"maxRecordDeltaPct": 123,
"allowColumnRemoval": true,
"allowTypeChange": true,
"minDqPassRate": 123,
"maxNullRateIncrease": 123
},
"checks": [
{
"name": "<string>",
"passed": true,
"observed": "<string>",
"limit": "<string>"
}
],
"verdict": "pending",
"computedAt": "<string>",
"scriptVersions": [
{
"kind": "dataQuality",
"before": 123,
"after": 123
}
]
}Read one incident's evidence
The deterministic evidence the platform computed for the incident — baseline and after-fix run profiles, their diff, blast radius, thresholds in force, threshold checks and verdict.
curl --request GET \
--url http://localhost:8080/api/v1/incidents/{id}/evidence \
--header 'x-api-key: <api-key>'import requests
url = "http://localhost:8080/api/v1/incidents/{id}/evidence"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('http://localhost:8080/api/v1/incidents/{id}/evidence', 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 => "8080",
CURLOPT_URL => "http://localhost:8080/api/v1/incidents/{id}/evidence",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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 := "http://localhost:8080/api/v1/incidents/{id}/evidence"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("http://localhost:8080/api/v1/incidents/{id}/evidence")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:8080/api/v1/incidents/{id}/evidence")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"baseline": {
"runId": "<string>",
"source": "landed-sample",
"recordCount": 123,
"columns": [
{
"name": "<string>",
"inferredType": "number",
"nullRate": 123,
"distinct": 123,
"quantiles": {
"p1": 123,
"p25": 123,
"p50": 123,
"p75": 123,
"p99": 123
},
"lengthQuantiles": {
"p1": 123,
"p25": 123,
"p50": 123,
"p75": 123,
"p99": 123
},
"topK": [
{
"value": "<string>",
"count": 123
}
]
}
],
"dqFailures": 123,
"dqPassRate": 123,
"durationMs": 123,
"scriptSha": "<string>",
"tapVersion": 123,
"pipelineVersion": 123,
"sampledRows": 123,
"computedAt": "<string>"
},
"candidate": {
"runId": "<string>",
"source": "landed-sample",
"recordCount": 123,
"columns": [
{
"name": "<string>",
"inferredType": "number",
"nullRate": 123,
"distinct": 123,
"quantiles": {
"p1": 123,
"p25": 123,
"p50": 123,
"p75": 123,
"p99": 123
},
"lengthQuantiles": {
"p1": 123,
"p25": 123,
"p50": 123,
"p75": 123,
"p99": 123
},
"topK": [
{
"value": "<string>",
"count": 123
}
]
}
],
"dqFailures": 123,
"dqPassRate": 123,
"durationMs": 123,
"scriptSha": "<string>",
"tapVersion": 123,
"pipelineVersion": 123,
"sampledRows": 123,
"computedAt": "<string>"
},
"real": {
"runId": "<string>",
"source": "landed-sample",
"recordCount": 123,
"columns": [
{
"name": "<string>",
"inferredType": "number",
"nullRate": 123,
"distinct": 123,
"quantiles": {
"p1": 123,
"p25": 123,
"p50": 123,
"p75": 123,
"p99": 123
},
"lengthQuantiles": {
"p1": 123,
"p25": 123,
"p50": 123,
"p75": 123,
"p99": 123
},
"topK": [
{
"value": "<string>",
"count": 123
}
]
}
],
"dqFailures": 123,
"dqPassRate": 123,
"durationMs": 123,
"scriptSha": "<string>",
"tapVersion": 123,
"pipelineVersion": 123,
"sampledRows": 123,
"computedAt": "<string>"
},
"diff": {
"columnsAdded": [
"<string>"
],
"columnsRemoved": [
"<string>"
],
"typeChanges": [
{
"column": "<string>",
"from": "<string>",
"to": "<string>"
}
],
"recordDeltaPct": 123,
"recordDeltaVsMeanOfLastN": 123,
"lastN": 123,
"nullRateDeltas": [
{
"column": "<string>",
"delta": 123
}
],
"quantileShift": [
{
"column": "<string>",
"shift": 123
}
],
"dqPassRateDelta": 123
},
"blastRadius": {
"downstreamPipelines": [
"<string>"
],
"downstreamDatasets": [
{
"kind": "<string>",
"coords": "<string>"
}
],
"ucTables": [
"<string>"
],
"consumersFromContracts": [
"<string>"
],
"lastDownstreamRunAt": "<string>",
"agentsThatQueriedLast7d": [
"<string>"
],
"secretName": "<string>"
},
"thresholds": {
"maxRecordDeltaPct": 123,
"allowColumnRemoval": true,
"allowTypeChange": true,
"minDqPassRate": 123,
"maxNullRateIncrease": 123
},
"checks": [
{
"name": "<string>",
"passed": true,
"observed": "<string>",
"limit": "<string>"
}
],
"verdict": "pending",
"computedAt": "<string>",
"scriptVersions": [
{
"kind": "dataQuality",
"before": 123,
"after": 123
}
]
}Authorizations
Optional API key for authentication (enabled via application.yaml)
Path Parameters
Response
The evidence
Computed by platform code, never by a model. Record deltas are percentages; null rates and DQ pass rates are fractions.
Deterministic profile of one run. Values from protected or sensitive-looking columns never appear (no topK, no value quantiles).
Show child attributes
Show child attributes
Deterministic profile of one run. Values from protected or sensitive-looking columns never appear (no topK, no value quantiles).
Show child attributes
Show child attributes
Deterministic profile of one run. Values from protected or sensitive-looking columns never appear (no topK, no value quantiles).
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
pending, pass, fail, needs-human Pipeline incidents only (absent otherwise) — each stored AI script the agent regenerated, with its script version before the first action and after; after equals before once a failed verification restored it
Show child attributes
Show child attributes
