Webhook Events
distributed
Fires when an incoming order gets assigned to a Pickpad device.
When: Right after order distribution finishes — the order matched a station and landed on an available Pickpad.
Webhook URL setting: Order distributed webhook
{
"accountId": "acc-123",
"locationId": "loc-001",
"event": "distributed",
"queueId": null,
"payload": {
"orderId": "order-123",
"orderStatus": 10,
"stationId": "station-001",
"pickpadIds": ["pad-1"],
"order": { ... },
"pickpads": [{ "id": "pad-1", "name": "Pickpad #1", "stationId": "station-001" }],
"cluster": null
}
}
placed
Fires when an order is marked ready/prepared on the Pickpad.
When: The order status moves to READY (20) or PICKPAD (25) — usually when the kitchen marks the order as prepared.
Webhook URL setting: Order prepared webhook
{
"accountId": "acc-123",
"locationId": "loc-001",
"event": "placed",
"queueId": null,
"payload": {
"orderId": "order-123",
"orderStatus": 20,
"stationId": "station-001",
"pickpadIds": ["pad-1"],
"order": { ... },
"pickpads": [{ ... }],
"cluster": null
}
}
taken
Fires when an order is physically picked up from the Pickpad device.
When: The Pickpad's weight sensor detects the order has been removed. There's a configurable delay (default 30 seconds) between that detection and the webhook actually going out, so the weight reading has time to settle.
Webhook URL setting: Order taken webhook
Additional behavior:
- If Check order accuracy is enabled, the webhook includes the measured weight
- The webhook only goes out after the delay set in Taken webhook delay (0–60 seconds)
- If the order weight is still above the minimum threshold when it's time to send, delivery is retried
{
"accountId": "acc-123",
"locationId": "loc-001",
"event": "taken",
"queueId": null,
"payload": {
"orderId": "order-123",
"orderStatus": 30,
"stationId": "station-001",
"pickpadIds": ["pad-1"],
"order": { ... },
"pickpads": [{ ... }],
"cluster": null
}
}
canceled
Fires when an order is canceled.
When: The order status moves to CANCELED (50) — from a POS webhook reporting the cancellation, or from staff canceling the order manually on the dashboard.
Webhook URL setting: Order canceled webhook
{
"accountId": "acc-123",
"locationId": "loc-001",
"event": "canceled",
"queueId": null,
"payload": {
"orderId": "order-123",
"orderStatus": 50,
"stationId": "station-001",
"pickpadIds": ["pad-1"],
"order": { ... },
"pickpads": [{ ... }],
"cluster": null
}
}
weight_deviation
Fires when the weight measured on a Pickpad doesn't match what's expected for the order that's currently on it.
When: The order is still actively in progress on the pad (placed but not yet ready, taken, or completed) when a weight mismatch is detected. If the order has already moved past that point, no webhook is sent.
Webhook URL setting: Order accuracy webhook
Additional behavior:
- Only sent when Check order accuracy is enabled — see Order Accuracy.
- Includes the live weight reading off the device at send time (the cluster's combined weight if the pad is part of a cluster, otherwise the pad's own current weight).
{
"accountId": "acc-123",
"locationId": "loc-001",
"event": "weight_deviation",
"queueId": null,
"payload": {
"orderId": "order-123",
"orderStatus": 25,
"stationId": "station-001",
"pickpadIds": ["pad-1"],
"order": { ... },
"pickpads": [{ ... }],
"cluster": null
}
}
Event Lifecycle
Here's the sequence of webhook events a typical order goes through:
Order received → (queued) → distributed → placed → taken
↘ weight_deviation (while placed, if the weight is off)
↘ canceled (at any point)
| Step | What happens | Webhook event |
|---|---|---|
| 0 | No pad free (or account always queues) — order waits in the queue | (none — queueId set in the API response, no webhook until placed) |
| 1 | Order distributed, assigned to a Pickpad or cluster | distributed |
| 2 | Kitchen prepares order, marks ready | placed |
| 3 | Customer picks up order from Pickpad | taken (after delay) |
queueId and cluster appear on every event above — see Webhook Payload
for the full field reference, and Orders Queue
for how the queue and virtual clusters affect distribution.
Responding to Webhooks
Your server should return a 2xx status code to acknowledge receipt. Anything outside the 2xx range triggers up to 3 retries with exponential backoff.
There's no required response body.