Webhook event
payout_batch.completed
Every row is final. status is completed (all rows confirmed) or completed_with_failures; read counts.
- Type
payout_batch.completed- The object it carries
- the
payout_batchobject - Subscribe with
payout_batch.completed,payout_batch.*or*
Example payload
The body of the request your endpoint receives, shown here over several lines. On the wire it is compact JSON; check its signature over the bytes exactly as they arrive.
Example payload
{
"id": "evt_02nxzybsp33web5gtz1dm3n8",
"object": "event",
"livemode": true,
"created": "2026-10-12T09:40:00.000Z",
"type": "payout_batch.completed",
"api_version": "2026-10-11",
"data": {
"object": {
"id": "pob_b1xkj45rqwdaf7j2bc94pef3",
"object": "payout_batch",
"livemode": true,
"created": "2026-10-12T09:40:00.000Z",
"status": "completed",
"description": "October contractor payments",
"row_count": 2,
"total_value": {
"amount": "1700.00",
"currency": "USD"
},
"counts": {
"draft": 0,
"awaiting_approval": 0,
"signed": 0,
"sent": 0,
"confirmed": 2,
"failed": 0,
"unknown": 0,
"cancelled": 0
},
"payouts": [
"po_crs9tp390f2yjremph9m0npb",
"po_kyrcy0h8t43wvedbxe5v40bp"
],
"requested_by": {
"type": "api_key",
"id": "key_6e3gg2c6ea176xxdek2nar6v"
},
"approved_by": "mem_ceh1wpzdrpk13cnpcjy9w0fa",
"approval_url": null,
"approval_expires_at": "2026-10-19T09:40:00.000Z",
"approved_at": "2026-10-12T09:50:00.000Z",
"completed_at": "2026-10-12T09:54:00.000Z",
"cancellation_reason": null,
"metadata": {}
},
"previous_attributes": {
"status": "processing",
"completed_at": null
}
},
"request": {
"id": null,
"idempotency_key": null
},
"pending_webhooks": 1
}Fields of data.object
| Field | In this example |
|---|---|
id | "pob_ |
object | "payout_batch" |
livemode | true |
created | "2026-10-12T09: |
status | "completed" |
description | "October contractor payments" |
row_count | 2 |
total_value | An object with amount, currency |
counts | An object with draft, awaiting_approval, signed, sent, confirmed, failed, unknown, cancelled |
payouts | A list of 2 items |
requested_by | An object with type, id |
approved_by | "mem_ |
approval_url | null |
approval_expires_at | "2026-10-19T09: |
approved_at | "2026-10-12T09: |
completed_at | "2026-10-12T09: |
cancellation_reason | null |
metadata | An object with no fields |
What each field means is on the page of the payout_batch object. data.previous_attributes holds the old values of exactly the fields that changed: here status, completed_at.
Endpoints behind it
Calls that change payouts. An event is also sent when a payer, the network, a timer or a person in the dashboard causes the change; the sentence above says which.