Skip to content

Hourly digest of failed checks

POST

Sent instead of individual check.failed events by a route set to deliver as an hourly digest.

Midwater-Signature
required
string

Example

t=1791493920,v1=5f1410b3599929147ad7559ca8423d05b723079614d80aa9763d17b440a899e3

t=<unix seconds>,v1=<hex>: HMAC-SHA256 of <t>.<raw body> keyed with the environment’s signing secret (whsec_…). Verify with a 5-minute tolerance and a constant-time compare, and accept the delivery if any v1= value matches.

Midwater-Event
required
string

The event type, the same as the body’s type.

Midwater-Delivery
required
string

The delivery ID; the same on every retry of one delivery. Deduplicate on it.

Media typeapplication/json
object
id
required

Event ID, evt_….

string
type
required
string
environment
required

Webhooks fire for live conversations, and for test ones only when the destination or route opts in.

string
Allowed values: test live
created_at
required
string format: date-time
data
required
object
type
required
Allowed value: check.failed.digest
data
required
object
count
required
integer
items
required
Array<object>
object
conversation
required
object
id
string
external_id
string
channel
string
Allowed values: voice chat
agent_version
string | null
ended_at
string | null format: date-time
agent
required
object
id
required
string
name
required
string
health_status
required

not_enough_calls: fewer than 5 calls with an outcome in the last 7 days, so nothing is measured yet, unless a high-severity compliance failure puts the agent in watch (1) or at_risk (2 or more).

string
Allowed values: healthy watch at_risk not_enough_calls
group
object
id
required
string
name
required
string
check
required
object
key
string
name
string
severity
string
Allowed values: low medium high
version
integer
result
required
object
score
number | null
verdict

pass: no problem found. fail: Midwater found this problem. uncertain: unclear; a person should look. not_applicable: didn’t apply to this conversation. met / not_met: for gating questions (for example, whether this was a real customer inquiry).

string
Allowed values: pass fail uncertain not_applicable met not_met
decided_by

rule: decided from the events you sent. model: Midwater’s model read the whole conversation. llm_judge: a second review for unclear conversations (planned rename: second_review; accept both). human: someone on your team.

string | null
Allowed values: rule model llm_judge second_review human
reason
string | null
url
required
string format: uri

Any 2xx within 5 seconds marks the delivery as delivered. Anything else, or no answer in time, is retried: today 3 retries about 2, 8 and 30 seconds apart; planned: 8 attempts over about 24 hours.