Skip to main content

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

FieldTypeDescription
accountIdstringYour account ID
locationIdstringLocation where the order was placed
eventstringEvent type: distributed, placed, taken, canceled, weight_deviation
queueIdstring | nullNon-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.
payloadobjectEvent data (see below)

Payload Fields

FieldTypeDescription
orderIdstringOrder identifier (external ID)
orderStatusnumberCurrent order status
stationIdstring | nullStation the Pickpad belongs to
pickpadIdsstring[]IDs of assigned Pickpad devices. Empty while the order is still queued (queueId set).
orderobjectFull order data (same format as Sending Orders)
pickpadsobject[] | nullAssigned Pickpad device details
clusterobject | nullThe 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.

FieldTypeDescription
idstringPickpad device ID
namestringPickpad display name
orderIdstring | nullCurrent order ID on this Pickpad
stationIdstringStation this Pickpad belongs to
prioritynumberDevice priority in the station
customerNamestring | nullCustomer name displayed on screen
shortNumberstring | nullOrder number displayed on screen
hasCurrentOrderbooleanWhether the Pickpad currently has an active order
hasCompletedOrderbooleanWhether the current order is completed (taken/finished)
hasReadyOrderbooleanWhether the current order is ready for pickup
propertiesobject | undefinedWeight and accuracy data (present when device has sensor data)
dishesobject[]Dishes assigned to this Pickpad

Pickpad Properties Object

Included when the Pickpad device has weight sensor data available.

FieldTypeDescription
targetWeightnumberExpected order weight in grams (sum of dish weights)
currentWeightnumberActual measured weight on the device in grams
accuracynumberWeight accuracy percentage (0–100)

Pickpad Dish Object

FieldTypeDescription
idstringDish identifier
namestringDish name
countnumberQuantity
pricenumberPrice per item
weightnumberWeight per item in grams
variationstringSize/variant
categoryIdstringCategory identifier

Cluster Object

Present (non-null) when the order was routed to a cluster rather than — or in addition to — an individual Pickpad.

FieldTypeDescription
idstringCluster identifier
namestringCluster display name
typenumber10 = static, 20 = dynamic, 30 = virtual (no physical pads — see Orders Queue)
stationIdstringStation the cluster belongs to