Menu Update (Async)

The Menu Async flow is designed for integrating partners to notify Deliverect whenever a published menu is fully processed and updated in an asynchronous manner

📘

Channel 'Scope'

The {channelname} represents the Scope provided to create orders.

If the channelname used is invalid or does not have access to an account, the request is considered unauthorised. Remember to write the channelname in lowercase letters.

For channels enabled with this async flow, a "callback" endpoint will be included in the menu payload as below.

Channel partners can POST to this endpoint with a status to confirm success "ONLINE" or in any case where unsuccessful, send "FAILED"

This gives customers full visibility on menu publish events and their success, particularly where bulk operations across multiple locations are actioned.

"callback": "https://api.staging.deliverect.com/{channelName}/menuStatus/649ea********b9a98d"

Path Parameters

ParametersDescriptionType
channelNameThe channel 'Scope' that is provided to you when you receive your API keysstring
_idThe id that shows in the end of the callback urlstring

Body Parameters (Fields marked with ( * )are required.

ParametersDescriptionType
status * status of the menu operationstring
commentany comment (optional)string

List of Status Values:

ValueDescription
ONLINEIt signifies that the menu is now successfully published and available to users. No additional information is required in the request body for this status.
FAILEDIt indicates that the operation has failed. Partners should include relevant error details or error codes in the request body to assist in troubleshooting.

❗️

Respond within 30 minutes

Please ensure that the menu is published successfully within a maximum of 30 minutes. If the process exceeds this time limit, Deliverect will classify the operation as "Failed"

Currently we support menu publishing for one store/channelLinkId. In the payload you will find "stores" array where in the future you may receive more channelLinkIds.

 "stores": [
        "649a**********9ea9"
    ],

For already integrated partners, the menu payload has some differences.

See below two examples showing the difference between async Menu Push and Sync equivalent.

Primarily, async format has "menus" , "stores" and "callback" as keys within a "body"which isn't a format followed with the sync menu payload which shows only an array of various properties e.g. "availabilities", "bundles", "categories" etc.

{
    "body": {
        "menus": [
            {
                "availabilities": [],
                "bundles": {},
                "categories": []
                // ... other properties
            }
        ],
        "stores": [
            "64*******************a9"
        ],
        "callback": "https://api.staging.deliverect.com/{channelName}/menuStatus/64*******************2d"
    }
}
[
    {
        "availabilities": [],
        "bundles": {},
        "categories": [],
        // ... other properties
    }
]
"body": {
    "menus": [
        {
            "availabilities": [
                {
                    "dayOfWeek": 1,
                    "endTime": "17:00",
                    "startTime": "10:00"
                },
                {
                    "dayOfWeek": 2,
                    "endTime": "10:00",
                    "startTime": "09:00"
                },
                {
                    "dayOfWeek": 2,
                    "endTime": "12:00",
                    "startTime": "11:00"
                }
            ],
            "bundles": {},
            "categories": [
                {
                    "_id": "6464**********6dd6010",
                    "name": "test",
                    "description": "",
                    "descriptionTranslations": {},
                    "nameTranslations": {},
                    "account": "61c3**********dd0306de1",
                    "posLocationId": "",
                    "posCategoryType": "",
                    "posCategoryId": "",
                    "imageUrl": "",
                    "subCategories": [],
                    "products": [
                        "649ea**********db4a92c"
                    ],
                    "availabilities": [],
                    "level": 1,
                    "menu": "6464**********f80406",
                    "sortedChannelProductIds": [],
                    "subProducts": [
                        "649eab**********6cdb4a92c"
                    ],
                    "subProductSortOrder": []
                }
            ],
            "channelLinkId": "649ad021949cfa36470f9ea9",
            "currency": 1,
            "description": "",
            "descriptionTranslations": {},
            "menu": "test",
            "menuId": "64648bd2a28d59a83ff80406",
            "menuType": 1,
            "modifierGroups": {
                "64776b3879e36bee40db37b0": {
                    "_id": "64776b3879e36bee40db37b0",
                    "name": "Cooking instructions",
                    "description": "Cooking Instructions",
                    "descriptionTranslations": {
                        "ar": "تعليمات الطبخ"
                    },
                    "nameTranslations": {
                        "en": "Cooking Instructions",
                        "ar": "تعليمات الطبخ"
                    },
                    "account": "61c3070ae41eefadd0306de1",
                    "capacityUsages": [],
                    "deliveryTax": 6000,
                    "imageUrl": "",
                    "location": "61c30761e41eefadd03072af",
                    "max": 1,
                    "min": 1,
                    "multiply": 1,
                    "plu": "MOD-01",
                    "posCategoryIds": [
                        "POS-CAT-001"
                    ],
                    "posProductCategoryId": "",
                    "posProductId": "POS-ID-009",
                    "price": 900,
                    "productTags": [],
                    "productType": 3,
                    "subProducts": [
                        "64776b3879e36bee40db37ba",
                        "64776b3879e36bee40db37bc",
                        "64776b3879e36bee40db37be"
                    ],
                    "takeawayTax": 6000,
                    "parentId": "64776b3879e36bee40db37ae",
                    "snoozed": false,
                    "subProductSortOrder": []
                },
                "64776b3879e36bee40db37b2": {
                    "_id": "64776b3879e36bee40db37b2",
                    "name": "Add a side",
                    "description": "Pizza made for cheese fanatics",
                    "descriptionTranslations": {},
                    "nameTranslations": {
                        "en": "Choose a side",
                        "ar": "اختر طبقك الجانبي"
                    },
                    "account": "61c3070ae41eefadd0306de1",
                    "capacityUsages": [],
                    "deliveryTax": 6000,
                    "imageUrl": "https://www.stockvault.net/data/2009/07/20/109569/preview16.jpg",
                    "location": "61c30761e41eefadd03072af",
                    "max": 0,
                    "min": 0,
                    "multiMax": 3,
                    "multiply": 1,
                    "plu": "MOD-02",
                    "posCategoryIds": [
                        "INTERNAL-POS-CAT-2"
                    ],
                    "posProductCategoryId": "",
                    "posProductId": "POS-ID-014",
                    "price": 900,
                    "productTags": [],
                    "productType": 3,
                    "subProducts": [
                        "64776b3879e36bee40db37c0",
                        "64776b3879e36bee40db37c2",
                        "64776b3879e36bee40db37c4"
                    ],
                    "takeawayTax": 6000,
                    "parentId": "64776b3879e36bee40db37ae",
                    "snoozed": false,
                    "subProductSortOrder": []
                }
            },
            "modifiers": {
                "64776b3879e36bee40db37ba": {
                    "_id": "64776b3879e36bee40db37ba",
                    "name": "Rare",
                    "description": "",
                    "descriptionTranslations": {},
                    "nameTranslations": {
                        "en": "Rare",
                        "ar": "غير ناضج جيدا"
                    },
                    "account": "61c3070ae41eefadd0306de1",
                    "capacityUsages": [],
                    "deliveryTax": 9000,
                    "imageUrl": "",
                    "location": "61c30761e41eefadd03072af",
                    "max": 0,
                    "min": 0,
                    "multiply": 1,
                    "plu": "COOK-01",
                    "posCategoryIds": [
                        "POS-CAT-001"
                    ],
                    "posProductCategoryId": "",
                    "posProductId": "POS-ID-003",
                    "price": 0,
                    "productTags": [],
                    "productType": 2,
                    "subProducts": [],
                    "takeawayTax": 9000,
                    "parentId": "64776b3879e36bee40db37b0",
                    "snoozed": false,
                    "subProductSortOrder": []
                },
                "64776b3879e36bee40db37bc": {
                    "_id": "64776b3879e36bee40db37bc",
                    "name": "Medium Rare",
                    "description": "",
                    "descriptionTranslations": {},
                    "nameTranslations": {
                        "en": "Medium Rare",
                        "ar": "مُتَوَسِّط النُضْجِ"
                    },
                    "account": "61c3070ae41eefadd0306de1",
                    "capacityUsages": [],
                    "deliveryTax": 9000,
                    "imageUrl": "",
                    "location": "61c30761e41eefadd03072af",
                    "max": 0,
                    "min": 0,
                    "multiply": 1,
                    "plu": "COOK-02",
                    "posCategoryIds": [
                        "INTERNAL-POS-CAT-2"
                    ],
                    "posProductCategoryId": "",
                    "posProductId": "POS-ID-004",
                    "price": 0,
                    "productTags": [],
                    "productType": 2,
                    "subProducts": [],
                    "takeawayTax": 9000,
                    "parentId": "64776b3879e36bee40db37b0",
                    "snoozed": false,
                    "subProductSortOrder": []
                },
                "64776b3879e36bee40db37be": {
                    "_id": "64776b3879e36bee40db37be",
                    "name": "Well Done",
                    "description": "",
                    "descriptionTranslations": {},
                    "nameTranslations": {
                        "en": "Well done",
                        "ar": "مطبوخ جيدا"
                    },
                    "account": "61c3070ae41eefadd0306de1",
                    "capacityUsages": [],
                    "deliveryTax": 9000,
                    "imageUrl": "",
                    "location": "61c30761e41eefadd03072af",
                    "max": 0,
                    "min": 0,
                    "multiply": 1,
                    "plu": "COOK-03",
                    "posCategoryIds": [
                        "INTERNAL-POS-CAT-2"
                    ],
                    "posProductCategoryId": "",
                    "posProductId": "POS-ID-005",
                    "price": 0,
                    "productTags": [],
                    "productType": 2,
                    "subProducts": [],
                    "takeawayTax": 9000,
                    "parentId": "64776b3879e36bee40db37b0",
                    "snoozed": false,
                    "subProductSortOrder": []
                },
                "64776b3879e36bee40db37c0": {
                    "_id": "64776b3879e36bee40db37c0",
                    "name": "Fries",
                    "description": "Fries",
                    "descriptionTranslations": {
                        "ar": "بطاطس مقلية"
                    },
                    "nameTranslations": {
                        "en": "Fries",
                        "ar": "بطاطس مقلية"
                    },
                    "account": "61c3070ae41eefadd0306de1",
                    "capacityUsages": [],
                    "defaultQuantity": 1,
                    "deliveryTax": 9000,
                    "eatInTax": 9000,
                    "imageUrl": "",
                    "location": "61c30761e41eefadd03072af",
                    "max": 0,
                    "min": 0,
                    "multiply": 1,
                    "plu": "SI-01",
                    "posCategoryIds": [
                        "SD"
                    ],
                    "posProductCategoryId": "",
                    "posProductId": "POS-ID-012",
                    "price": 0,
                    "productTags": [],
                    "productType": 2,
                    "subProducts": [],
                    "takeawayTax": 9000,
                    "parentId": "64776b3879e36bee40db37b2",
                    "snoozed": false,
                    "subProductSortOrder": []
                },
                "64776b3879e36bee40db37c2": {
                    "_id": "64776b3879e36bee40db37c2",
                    "name": "Salad",
                    "description": "Salad",
                    "descriptionTranslations": {
                        "ar": "سلطة"
                    },
                    "nameTranslations": {
                        "en": "Salad",
                        "ar": "سلطة"
                    },
                    "account": "61c3070ae41eefadd0306de1",
                    "capacityUsages": [],
                    "deliveryTax": 9000,
                    "eatInTax": 9000,
                    "imageUrl": "",
                    "location": "61c30761e41eefadd03072af",
                    "max": 0,
                    "min": 0,
                    "multiply": 1,
                    "plu": "SI-02",
                    "posCategoryIds": [
                        "SD"
                    ],
                    "posProductCategoryId": "",
                    "posProductId": "POS-ID-013",
                    "price": 200,
                    "productTags": [],
                    "productType": 2,
                    "subProducts": [],
                    "takeawayTax": 9000,
                    "parentId": "64776b3879e36bee40db37b2",
                    "snoozed": false,
                    "subProductSortOrder": []
                },
                "64776b3879e36bee40db37c4": {
                    "_id": "64776b3879e36bee40db37c4",
                    "name": "Mashed Potato",
                    "description": "Mashed Potato",
                    "descriptionTranslations": {
                        "ar": "البطاطا المهروسة"
                    },
                    "nameTranslations": {
                        "en": "Mashed Potato",
                        "ar": "البطاطا المهروسة"
                    },
                    "account": "61c3070ae41eefadd0306de1",
                    "capacityUsages": [],
                    "deliveryTax": 9000,
                    "eatInTax": 9000,
                    "imageUrl": "",
                    "location": "61c30761e41eefadd03072af",
                    "max": 0,
                    "min": 0,
                    "multiply": 1,
                    "plu": "SI-03",
                    "posCategoryIds": [
                        "SD"
                    ],
                    "posProductCategoryId": "",
                    "posProductId": "POS-ID-014",
                    "price": 100,
                    "productTags": [],
                    "productType": 2,
                    "subProducts": [],
                    "takeawayTax": 9000,
                    "parentId": "64776b3879e36bee40db37b2",
                    "snoozed": false,
                    "subProductSortOrder": []
                }
            },
            "menuTranslations": {},
            "nestedModifiers": false,
            "products": {
                "649eab653d940e56cdb4a92c": {
                    "_id": "649eab653d940e56cdb4a92c",
                    "name": "Delicious Steak Frites",
                    "description": "Delicious Steak Frites",
                    "descriptionTranslations": {
                        "ar": "شريحة لحم فريتس"
                    },
                    "nameTranslations": {
                        "en": "Delicious Steak Frites",
                        "ar": "شريحة لحم فريتس"
                    },
                    "account": "61c3070ae41eefadd0306de1",
                    "capacityUsages": [],
                    "deliveryTax": 9000,
                    "eatInTax": 9000,
                    "imageUrl": "https://resizer.staging.deliverect.com/QWXAKnkpH1Md-kCY-7OeMO4I23T2VL7f05RSP1CNic4/rt:fill/g:ce/el:0/aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2lrb25hLWJ1Y2tldC1zdGFnaW5nL2ltYWdlcy81ZmY2ZWUwODkzMjhjOGFlZmVlYWJlMzMvc3RlYWstNjIyODYyNTg4YzUwNmYwMTViZTYwMThlLmpwZWc=.jpg",
                    "location": "61c30761e41eefadd03072af",
                    "max": 0,
                    "min": 0,
                    "multiMax": 1,
                    "multiply": 1,
                    "plu": "STK-01",
                    "posCategoryIds": [
                        "STK"
                    ],
                    "posProductCategoryId": "",
                    "posProductId": "POS-ID-001",
                    "price": 1500,
                    "productTags": [
                        1
                    ],
                    "productType": 1,
                    "subProducts": [
                        "64776b3879e36bee40db37b0",
                        "64776b3879e36bee40db37b2"
                    ],
                    "takeawayTax": 9000,
                    "supplementalInfo": {
                        "instructionsForUse": "Cool before drink.",
                        "ingredients": [
                            "Water",
                            "Sugar"
                        ],
                        "additives": [
                            "Artificial Food Coluring",
                            "Sodium Nitrite",
                            "Salt",
                            "Aspartame"
                        ],
                        "prepackaged": true,
                        "deposit": 0
                    },
                    "parentId": "64648bd97ab06a6436dd6010",
                    "snoozed": false,
                    "subProductSortOrder": [],
                    "referenceId": "STK-01"
                }
            },
            "productTags": [
                1
            ],
            "snoozedProducts": {},
            "validations": []
        }
    ],
    "stores": [
        "649ad021949cfa36470f9ea9"
    ],
    "callback": "https://api.staging.deliverect.com/{channelName}/menuStatus/649e**********b4a92d"
}
}

Existing Partners developing support can reuse 100% of their code as follows:

if isinstance(payload, Object):  
store_payload()  
async process_menu_and_send_callback(payload["menus"], payload["callback"])  
return OK  
else: # payload is a list  
process_menu_old_style(payload)  
return OK

This should be implemented in a backwards compatible way as shown above.

Language
Authorization
OAuth2
Click Try It! to start a request and see the response here!