<- Blog

June 11, 2026

Proving why a claim was denied

Of all the places AI is moving into consequential decisions, insurance may be the cleanest fit for a protocol built on evidence — because the hardest question in claims is one CHP answers by design: why did this decision go the way it did?

The decision is the easy part. Defending it isn't.

Models and agents increasingly approve, deny, and price claims. The outcome is the easy part. The hard part arrives later, from three directions at once: a policyholder disputes it, an adjuster has to stand behind it, and a market-conduct exam asks the carrier to demonstrate how automated decisions are made — and that the record hasn't been altered.

Today that defense is a reconstruction. Someone assembles logs from several services, infers the decision path, and hopes the important step was captured. It's slow, expensive, and contestable — which is exactly what you don't want when the question is adversarial.

Denial as a first-class outcome

Most systems treat a denial as an exception or an absence — a thing that didn't happen, recorded (if at all) as an error. The Capability Host Protocol treats it as a first-class outcome. When a capability is denied at the boundary, the protocol emits a structured record: an explicit reason code, the deciding subject, and an evidence id, all tied to the same correlation as everything else in the case.

That is, almost exactly, what a defensible claim decision needs:

  • The reason, as a stable code, not free-text after the fact.
  • Who or what decided — the model, the rule, or the human who signed off.
  • A replayable trace of the whole case, in order.
  • Tamper-evidence — the record is hash-chained, so an altered or missing step is detectable.

"Show me why this claim was denied" stops being a reconstruction and becomes a query.

decision outcome — with reason
json
{
  "invocation_id": "inv_session_abc_001",
  "capability_id": "claim.decide",
  "correlation": { "correlation_id": "claim-48217" },
  "outcome": "denied",
  "success": false,
  "denial": {
    "code": "coverage_excluded",
    "message": "loss type excluded under policy section 4.2",
    "retryable": false
  },
  "subject": "model://claims-triage@2.3.1",
  "evidence_ids": ["evt_8f3a1c"],
  "completed_at": "2026-06-16T15:14:22.104Z"
}
  • outcomeA denial is a first-class result, not a swallowed error.
  • denial.codeA stable reason code — not free-text written after the fact.
  • subjectExactly what decided, and which version.
  • correlationTies the whole case together for replay.
“Show me why this claim was denied” becomes a field on the record, not a reconstruction.

Honest about what's ready

If you're putting AI into approve/deny decisions and the question "can we defend this later?" is starting to surface, that's the conversation to have. See how it maps on the insurance page.