A job failed
Sent when a job reaches failed (model or infrastructure error) or expired (never
picked up). data.job.result is null and data.job.error explains why; the credit balance
reservation has already been released, so credits.charged is 0.
Headers
t=<epoch>,v1=<hex hmac-sha256 of "<t>.<raw body>">, keyed with the endpoint secret. Compare in constant time and reject a timestamp older than five minutes.
Event identifier, stable across retries — the key to deduplicate on.
^evt_[1-9A-HJ-NP-Za-km-z]{8,32}$1 for the first delivery, incremented on every retry.
x >= 1Body
The envelope of every outgoing webhook. api_version pins the payload shape — it changes only when you upgrade your organisation's API version, never silently.
Stable across retries. Deduplicate on it.
^evt_[1-9A-HJ-NP-Za-km-z]{8,32}$"evt_6HbN4rTfKp2W"
An event your endpoint can subscribe to.
job.succeeded, job.failed, inspection.stage_completed "job.failed"Contract version the payload was serialised with.
"2026-08-01"
Epoch seconds, UTC.
1755300000
Response
Acknowledged. Any 2xx stops the retry schedule.