{
"id": "evt_6HbN4rTfKp2W",
"type": "job.succeeded",
"api_version": "2026-09-11",
"livemode": true,
"is_staging": false,
"created": 1755300002,
"data": {
"job": {
"id": "job_3ZxK9pQr7TnW",
"object": "job",
"endpoint": "plate.read",
"status": "succeeded",
"livemode": true,
"is_staging": false,
"created": 1755300000,
"started_at": 1755300001,
"completed_at": 1755300002,
"model_version": "plate-reader@2026-08-27",
"credits": {
"reserved": 1,
"charged": 1
},
"result": {
"plates": [
{
"text": "AB123CD",
"country": "FR",
"region": null,
"confidence": 0.97,
"bbox": {
"x": 120,
"y": 340,
"width": 180,
"height": 48
}
}
]
},
"error": null
}
}
}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.
{
"id": "evt_6HbN4rTfKp2W",
"type": "job.succeeded",
"api_version": "2026-09-11",
"livemode": true,
"is_staging": false,
"created": 1755300002,
"data": {
"job": {
"id": "job_3ZxK9pQr7TnW",
"object": "job",
"endpoint": "plate.read",
"status": "succeeded",
"livemode": true,
"is_staging": false,
"created": 1755300000,
"started_at": 1755300001,
"completed_at": 1755300002,
"model_version": "plate-reader@2026-08-27",
"credits": {
"reserved": 1,
"charged": 1
},
"result": {
"plates": [
{
"text": "AB123CD",
"country": "FR",
"region": null,
"confidence": 0.97,
"bbox": {
"x": 120,
"y": 340,
"width": 180,
"height": 48
}
}
]
},
"error": null
}
}
}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.partial, job.failed "job.succeeded"Contract version the payload was serialised with.
"2026-09-11"
Epoch seconds, UTC.
1755300000
Show child attributes
Show child attributes
Staging classification. Absent on events recorded before staging was introduced; treat absence as false.
Response
Acknowledged. Any 2xx stops the retry schedule.