Verify Signals
Verify reports findings as Public Signals: the stable categories that can appear in output.signals[].type. A run returns at most one signal per category, carrying one summary, one riskAssessment, and every piece of evidence found in that category. Every supported check runs on every run, and signals that were not detected are not returned: absence means “not detected,” never “checked and clean.”
Signal categories
Categories activate over time without a change to the enum, so handle every value. Content-based categories are found by reading the parsed document, which only verify_agentic does.
Evidence codes
Each signal’s evidence carries codes that say what was detected: the code on a validation finding, a history event, a value_comparison, or an inventory, and the code and component roles on a structural_pattern. Codes are stable SCREAMING_SNAKE identifiers. The set grows as new checks are implemented, so treat the codes you receive as an open list and handle values you do not recognise rather than rejecting them. An evidenceId is unique within the run; treat it as an opaque identifier.
For the list of codes currently in use, or to understand a particular code, contact support@extend.ai.
How signals are graded
Each signal’s riskAssessment is graded LOW, MEDIUM, or HIGH in the context of the whole document, because many anomalies are normal consequences of ordinary document workflows and only the surrounding context separates a benign re-save from a suspicious one. The document riskLevel is the highest grade among its signals, and a run with no detections returns LOW. See Response Format for the riskAssessment shape.

