/v3/evaluateX-API-KeyPOST /v3/evaluate before every LLM callfinal_decisionmodified_content · BLOCK reject without LLM call.{
"final_decision": "BLOCK",
// "ALLOW" | "BLOCK" | "MODIFY"
"evaluation_id": "uuid",
"audit_id": "uuid",
"policy_verdicts": [{
"policy": "LLM Agent Safety v1.1",
"verdict": "BLOCK",
"violations": [{
"triggering_fact": "claim.type",
"reason": "PERFORMANCE_GUARANTEE detected",
"remedy": "Remove guarantee language."
}]
}],
"modified_content": "...",
// null if nothing changed
"disclosures_injected": ["Past performance…"],
"enrichment_confidence": 0.94,
"processing_ms": 142
}No rules triggered. Forward the original input to your LLM unchanged. Store evaluation_id in your audit trail.
Content was sanitised or disclosures were injected. Replace the original input with modified_content before calling your LLM, and append any items in disclosures_injected to the model response.
A hard-stop rule fired — do not forward to the LLM. Surface a safe rejection message to the user. Log policy_verdicts[].violations internally.modified_content may contain a safe fallback if configured.
/v3/document-evaluatemultipart/form-data.pdf, .docx, .xlsx, .csv, or .txt file as a multipart upload. The server extracts text from each page/sheet/block and runs it through the governance pipeline automatically.final_decision — same as text evaluatemodified_content · BLOCK reject document. The response also includes file_name, page_count, and a chunks array with per-chunk details.{
// ── Standard evaluate fields ──────────────
"final_decision": "ADJUST",
// "ALLOW" | "ADJUST" | "BLOCK"
"evaluation_id": "uuid",
"audit_id": "uuid",
"policy_verdicts": [ ... ],
"modified_content": "...",
"disclosures_injected": [],
"processing_ms": 380,
// ── Document-specific fields ──────────────
"file_name": "contract.pdf",
"page_count": 12,
"chunks": [{
"label": "chunk_1",
"char_start": 0,
"char_end": 842,
"char_count": 842,
"text": "This agreement is entered into..."
}, ...]
}