WebhooksOrdersTimesheets & Billing
Timesheet Updated
Webhook payload sent when the timesheets of an order change.
Timesheet Updated Webhook Payload
{
"created_at": "2026-04-10T22:11:32.111Z",
"recorded_at": "2026-04-10T22:11:32.111Z",
"worker_handle": "Worker-1",
"driver_handle": "Worker-1",
"account_id": "6784e919-7168-4f61-b686-2020f547637f",
"type": "order",
"data": {
"value": "timesheet_updated",
"order_handle": "DGC127092",
"status": "ongoing",
"share_url": "https://trck.at/vr1RNLq",
"timesheets": [
{
"type": "system",
"source": "api",
"start_time": "2026-04-10T08:00:00Z",
"end_time": "2026-04-10T17:30:00Z",
"total_duration_worked": 34200,
"total_break_duration": 1800,
"breaks": [
{
"start_time": "2026-04-10T12:00:00Z",
"end_time": "2026-04-10T12:30:00Z",
"duration": 1800,
"type": "meal"
}
]
}
],
"agent": {
"timesheets": [
{
"type": "reconciled",
"source": "agent",
"start_time": "2026-04-10T08:00:00Z",
"end_time": "2026-04-10T17:30:00Z",
"total_duration_worked": 34200,
"total_break_duration": 1800
}
]
},
"metadata": {
"storeId": "123490809808",
"customerName": "Andrew"
}
},
"version": "3.0.0"
}| Name | Type | Mandatory | Description |
|---|---|---|---|
| data.value | string | Yes | timesheet_updated |
| data.order_handle | string | Yes | Unique handle for the Order |
| data.status | string | Yes | Current status of the order |
| data.share_url | string | Yes | Tracking URL for the order |
| data.metadata | object | No | Metadata that you have assigned to this order |
| data.timesheets | array | No | Customer-provided timesheets for this order |
| data.timesheets[].type | string | Yes | Origin of the entry: system, worker, or requester |
| data.timesheets[].source | string | No | Channel: api, sms, email, phone, agent |
| data.timesheets[].start_time | string | No | ISO-8601 timestamp when the shift started |
| data.timesheets[].end_time | string | No | ISO-8601 timestamp when the shift ended |
| data.timesheets[].total_duration_worked | integer | No | Total worked duration in seconds |
| data.timesheets[].total_break_duration | integer | No | Total break duration in seconds |
| data.timesheets[].breaks | array | No | List of breaks within this entry |
| data.timesheets[].breaks[].start_time | string | Yes | ISO-8601 timestamp when the break started |
| data.timesheets[].breaks[].end_time | string | Yes | ISO-8601 timestamp when the break ended |
| data.timesheets[].breaks[].duration | integer | No | Break duration in seconds |
| data.timesheets[].breaks[].type | string | No | Break type: meal, rest, other |
| data.agent | object | No | Agent-produced timesheet data, present when the reconciliation agent has collected or reconciled hours |
| data.agent.timesheets | array | No | Agent-collected timesheet entries |
| data.agent.timesheets[].type | string | Yes | worker, facility, or reconciled (final determination) |
| data.agent.timesheets[].source | string | No | Channel: sms, email, phone, in_app, agent, ops |
| data.agent.timesheets[].start_time | string | No | ISO-8601 timestamp when the shift started |
| data.agent.timesheets[].end_time | string | No | ISO-8601 timestamp when the shift ended |
| data.agent.timesheets[].total_duration_worked | integer | No | Total worked duration in seconds |
| data.agent.timesheets[].total_break_duration | integer | No | Total break duration in seconds |
| data.agent.timesheets[].breaks | array | No | List of breaks (same shape as data.timesheets[].breaks) |
| data.agent.timesheets[].notes | string | No | Free-form notes recorded by the agent |