*This is a webhook endpoint set by the POS
When a customer orders from a Deliverect integrated channel, it will immediately deliver a webhook to a specified webhook endpoint provided by the POS.
This order will contain the products, prices, payment information and any customer info provided by the channel. See an example of an order payload at the end of this page.
Order Model
For a full list of all order attributes and their definition, see the link below;
Order Types
Each orderType
listed below should be supported as part of a POS integration, where the type of order is clearly displayed to the user in the POS interface and on related printed checks and receipts.
Type | Integer Value |
---|---|
pickup | 1 |
delivery | 2 |
eat in | 3 |
curbside | 4 |
Direct Table Ordering
To see how to include support for table ordering for 'eat in' orders, see more details in the link below;
Payments
Details on processing payments, taxes, discounts and other charges in the link below
Order Cancellations
To see how to receive and process cancellations, see the guide below;
Example order payload
{
"_created": "YYYY-MM-DDTHH:mm:ss.SSSSSSZ",
"_updated": "YYYY-MM-DDT08:36:46.SSSSSSZ",
"_id": "62********************7c",
"account": "61********************a1",
"channelOrderId": "TEST******4206",
"channelOrderDisplayId": "T**4206",
"posId": "",
"posReceiptId": "",
"posLocationId": "",
"location": "61********************b4",
"channelLink": "61********************c3",
"status": 1,
"statusHistory": [
{
"timeStamp": "YYYY-MM-DDTHH:mm:ss.SSSSSSZ",
"status": 4,
"response": "",
"source": 2
},
{
"timeStamp": "YYYY-MM-DDTHH:mm:ss.SSSSSSZ",
"status": 1,
"response": "",
"source": 5
}
],
"packaging": {
"includeCutlery": false
},
"by": "Deliverect",
"orderType": 2,
"channel": 1,
"pos": 10000,
"rating": [],
"pickupTime": "YYYY-MM-DDTHH:mm:ss.SSSSSSZ",
"deliveryTime": "YYYY-MM-DDTHH:mm:ss.SSSSSSZ",
"deliveryIsAsap": true,
"courier": {
"firstName": "",
"lastName": "",
"phoneNumber": "",
"deliveryBy": "restaurant"
},
"courierUpdateHistory": [
{
"status": 72,
"received": "YYYY-MM-DDTHH:mm:ss.SSSSSSZ",
"courier": {},
"arrivalTime": "YYYY-MM-DDTHH:mm:ss.SSSSSSZ",
"deliveryTime": "YYYY-MM-DDTHH:mm:ss.SSSSSSZ",
"source": 5
}
],
"customer": {
"name": "Jack",
"companyName": "Deliverect",
"phoneNumber": "+31615887898",
"phoneAccessCode": "0020",
"email": "[email protected]",
"note": "call me when you arrive",
"tin": ""
},
"deliveryAddress": {
"street": "",
"postalCode": "",
"area": "",
"city": "",
"country": "",
"extraAddressInfo": "",
"coordinates": {
"coordinates": [
80.9,
-90.3
]
}
},
"orderIsAlreadyPaid": true,
"taxes": [],
"payment": {
"amount": 650,
"type": 0,
"due": 0,
"rebate": 0,
"commissionType": ""
},
"note": "",
"items": [
{
"plu": "P-BRGR",
"name": "Burger Combo (Drink not Included)",
"sortOrder": 0,
"price": 500,
"quantity": 1,
"productType": 1,
"isCombo": true,
"subItems": [
{
"plu": "DRK-01",
"name": "Diet Soda",
"sortOrder": 0,
"price": 100,
"quantity": 1,
"productType": 1,
"subItems": []
},
{
"plu": "P-BURG-CHE",
"name": "Cheeseburger",
"sortOrder": 0,
"price": 0,
"quantity": 1,
"productType": 1,
"inBundle": true,
"subItems": [
{
"plu": "P-GHRK",
"name": "Extra Gherkin",
"sortOrder": 0,
"price": 50,
"quantity": 2,
"productType": 1,
"subItems": [],
"productTags": []
}
],
"productTags": []
}
],
"productTags": [
14
]
}
],
"decimalDigits": 2,
"numberOfCustomers": 1,
"channelOrderRawId": "62********************73",
"channelOrderHistoryRawIds": [],
"serviceCharge": 0,
"deliveryCost": 0,
"bagFee": 0,
"tip": 0,
"driverTip": 0,
"discountTotal": -50,
"discounts": [
{
"type": "order_flat_off",
"provider": "channel",
"name": "Discount",
"channelDiscountCode": "50OFF",
"referenceId": "1",
"value": 50,
"amount": 50
}
],
"capacityUsages": [],
"recent": true,
"resolvedBy": "",
"brandId": "61********************60",
"testOrder": true,
"timezone": "Europe/Amsterdam",
"date": 20230414,
"tags": [
"BRAND X"
]
}
Response
The initial response to the order notification webhook should be a HTTP 200
or 201
received within 30 seconds. Any other HTTP status will cause the order to be retried after a couple of seconds. After six failed retries, we will mark the order as 'Failed' and update the ordering platform of this status.
Processing satus updates of the order thereafter should be done asynchronously via the endpoint Update Order Status
Content-Type: application/json