Webhook Payload
Every webhook event shares the same payload structure, wrapped in a data envelope.
Full Example
{
"data": {
"accountId": "acc-123",
"locationId": "loc-001",
"event": "distributed",
"queueId": null,
"payload": {
"orderId": "order-123",
"orderStatus": 10,
"stationId": "station-001",
"pickpadIds": ["pad-1"],
"cluster": null,
"order": {
"id": "order-123",
"status": 10,
"locationId": "loc-001",
"shortNumber": "A123",
"basePrice": 27.48,
"isPickup": true,
"isDelivery": false,
"isAsap": true,
"inPlace": false,
"weight": 700,
"autoComplete": true,
"autoPickpad": true,
"stationId": "station-001",
"expectedPickupTime": 1712678400,
"user": {
"name": "John",
"fullName": "John Doe",
"phone": "+1234567890",
"email": "john@example.com",
"id": "customer-456"
},
"dishes": [
{
"id": "dish-1",
"name": "Classic Burger",
"count": 2,
"price": 12.99,
"categoryId": "cat-burgers",
"variation": "Large",
"weight": 350
}
]
},
"pickpads": [
{
"id": "pad-1",
"name": "Pickpad #1",
"orderId": "order-123",
"stationId": "station-001",
"priority": 1,
"customerName": "John",
"shortNumber": "A123",
"hasCurrentOrder": true,
"hasCompletedOrder": false,
"hasReadyOrder": false,
"properties": {
"targetWeight": 700,
"currentWeight": 685,
"accuracy": 97.8
},
"dishes": [
{
"id": "dish-1",
"name": "Classic Burger",
"count": 2,
"price": 12.99,
"weight": 350,
"variation": "Large",
"categoryId": "cat-burgers"
}
]
}
]
}
}
}
Envelope
The webhook body is wrapped in a data object:
{ "data": { ... } }
When Use static IP for webhooks is enabled, two extra fields get added at the top level: _method ("POST") and _url (your webhook URL). The request goes to the proxy first, which then forwards it on to you.
Data Fields
| Field | Type | Description |
|---|---|---|
accountId | string | Your account ID |
locationId | string | Location where the order was placed |
event | string | Event type: distributed, placed, taken, canceled, weight_deviation |
queueId | string | null | Non-null only while the order is waiting in the orders queue — the id of its queue entry. null once the order is actually placed on a Pickpad or cluster. |
payload | object | Event data (see below) |
Payload Fields
| Field | Type | Description |
|---|---|---|
orderId | string | Order identifier (external ID) |
orderStatus | number | Current order status |
stationId | string | null | Station the Pickpad belongs to |
pickpadIds | string[] | IDs of assigned Pickpad devices. Empty while the order is still queued (queueId set). |
order | object | Full order data (same format as Sending Orders) |
pickpads | object[] | null | Assigned Pickpad device details |
cluster | object | null | The cluster the order was assigned to, if any — see Cluster Object below |
Order Object
The order field holds the order data in the same format used for Sending Orders, including user, dishes, fulfillment flags, and pricing.
Pickpad Object
Each entry in the pickpads array describes the physical device the order was assigned to.
| Field | Type | Description |
|---|---|---|
id | string | Pickpad device ID |
name | string | Pickpad display name |
orderId | string | null | Current order ID on this Pickpad |
stationId | string | Station this Pickpad belongs to |
priority | number | Device priority in the station |
customerName | string | null | Customer name displayed on screen |
shortNumber | string | null | Order number displayed on screen |
hasCurrentOrder | boolean | Whether the Pickpad currently has an active order |
hasCompletedOrder | boolean | Whether the current order is completed (taken/finished) |
hasReadyOrder | boolean | Whether the current order is ready for pickup |
properties | object | undefined | Weight and accuracy data (present when device has sensor data) |
dishes | object[] | Dishes assigned to this Pickpad |
Pickpad Properties Object
Included when the Pickpad device has weight sensor data available.
| Field | Type | Description |
|---|---|---|
targetWeight | number | Expected order weight in grams (sum of dish weights) |
currentWeight | number | Actual measured weight on the device in grams |
accuracy | number | Weight accuracy percentage (0–100) |
Pickpad Dish Object
| Field | Type | Description |
|---|---|---|
id | string | Dish identifier |
name | string | Dish name |
count | number | Quantity |
price | number | Price per item |
weight | number | Weight per item in grams |
variation | string | Size/variant |
categoryId | string | Category identifier |
Cluster Object
Present (non-null) when the order was routed to a cluster
rather than — or in addition to — an individual Pickpad.
| Field | Type | Description |
|---|---|---|
id | string | Cluster identifier |
name | string | Cluster display name |
type | number | 10 = static, 20 = dynamic, 30 = virtual (no physical pads — see Orders Queue) |
stationId | string | Station the cluster belongs to |