A job completed successfully
Sent as soon as a job reaches succeeded. data.job is byte-for-byte what
GET /v1/jobs/{id} would return at that instant, result included — no follow-up call
is needed for small results.
Verify Carhub-Signature before trusting the body, answer 2xx within 10 s, and treat
deliveries as at-least-once: retries reuse the same id.
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.succeeded"Contract version the payload was serialised with.
"2026-08-01"
Epoch seconds, UTC.
1755300000
Response
Acknowledged. Any 2xx stops the retry schedule.