{
"batch_id": "<string>",
"counts": {
"pending": 0,
"running": 0,
"succeeded": 0,
"failed": 0,
"cancelled": 0
},
"total_items": 123,
"type": "batch.update",
"metadata": {},
"completed_at": "<string>",
"results_expires_at": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}batch.update webhook
Delivered when an async batch reaches a terminal status.
{
"batch_id": "<string>",
"counts": {
"pending": 0,
"running": 0,
"succeeded": 0,
"failed": 0,
"cancelled": 0
},
"total_items": 123,
"type": "batch.update",
"metadata": {},
"completed_at": "<string>",
"results_expires_at": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Body
The webhook body delivered when a batch reaches a terminal status
(plan 083). Documentation-only model — registered on app.webhooks so it
renders in the API reference; nothing calls this as an endpoint. The live
serializer is extract.core.webhooks.build_batch_update_body.
The batch that reached a terminal status.
Terminal batch status. Treat completed AND partially_failed as 'results are ready' — partially_failed means some items succeeded and some failed (check counts), not a total failure.
completed, partially_failed, failed, cancelled Per-item-status counts at completion.
Show child attributes
Show child attributes
Number of items in the batch.
Event type. Only batch.update exists today.
"batch.update"The metadata you passed on POST /v1/batches, echoed verbatim.
ISO-8601 UTC timestamp when the batch reached its terminal status.
ISO-8601 UTC timestamp after which this batch's results are deleted (3-day default retention). Fetch results before then; a resend after this point is refused.
Response
Successful Response