Order Notification

*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, see the link below;

▶ See POS Order Model

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.

TypeInteger Value
pickup1
delivery2
eat in3

Direct Table Ordering

To see how to include support for table ordering for 'eat in' orders, see more details in the link below;

▶ Direct Table Ordering

Payments

Details on processing payments, taxes, discounts and other charges in the link below

▶ Payments, Taxes, Discounts

Order Cancellations

To see how to receive and process cancellations, see the guide below;

▶ Order Cancellations

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**********65,
                -90.3**********14
            ]
        }
    },
    "orderIsAlreadyPaid": true,
    "taxes": [],
    "payment": {
        "amount": 650,
        "type": 0,
        "due": 0,
        "rebate": 0
    },
    "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
We assume this endpoint to respond quickly. You are encouraged to do things asynchronously. When everything has been done, just call the update order status endpoint to let us know. When you receive an order successfully, we expect a HTTP 200 or 201 status response back. Any other HTTP status will cause the order to be retried after a couple of seconds. After a couple of failed retries, we will mark the order as failed.

Content-Type: application/json
Language