Verify API
POST /api/v1/verify — scope required: verify:write
{
"proposition_subject": "string, required",
"boundary_scope": "string, optional",
"application_id": "uuid, optional",
"correlation_id": "string, optional -- generated if omitted",
"evidence": [
{"object_value": "string", "source": "string", "verification_status": "unverified|verified|disputed"}
],
"invoke_primewave": false,
"invoke_peip": false
}
Response:
{
"verification_id": "uuid", "receipt_id": "uuid", "correlation_id": "string",
"commercial_verdict": "SUPPORTED | UNSUPPORTED | INSUFFICIENT",
"engine_state": "the raw underlying state",
"can_assert": true,
"provenance": {"evidence_count": 1, "independent_corroborator_count": 1},
"primewave": {"invoked": false, "native_verdict": null, "agreement_with_spp": null},
"peip": {"invoked": false, "native_verdict": null, "agreement_with_spp": null},
"latency_ms": 0.6, "engine_version": "2.0.0", "contract_version": "2.0.0"
}
The commercial verdict is a stable, simplified taxonomy. The engine state field carries the underlying vocabulary alongside it — neither ever silently overrides the other. See Errors for the engine-failure shape.