Webhook Payload
All webhook events share the same payload structure. The payload is wrapped in a data envelope.
Full Example
{
"data": {
"accountId": "acc-123",
"locationId": "loc-001",
"event": "distributed",
"payload": {
"orderId": "order-123",
"orderStatus": 10,
"stationId": "station-001",
"pickpadIds": ["pad-1"],
"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 additional fields are added at the top level: _method ("POST") and _url (your webhook URL). The request is sent to the proxy, which forwards it.
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 |
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 |
order | object | Full order data (same format as Sending Orders) |
pickpads | object[] | null | Assigned Pickpad device details |
Order Object
The order field contains the order data in the same format used for Sending Orders, including user, dishes, fulfillment flags, and pricing.
Pickpad Object
Each item 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
Present 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 |