Skip to main content

Set up Menu Pull

Prerequisites

The response on Menu Pull request must return the menu(s) as an array, even if there is only one menu being returned. The menu.json must be in the correct format and includes:

  • "open_hours"
  • "special_hours"
  • "id" (external menu id/Menu UUID) field is required if event type is MenuUpdate

Overview

As part of the integration workflow, partners must implement an endpoint that allows DoorDash to pull menus. This enables a more streamlined process when onboarding new stores. With this, the DoorDash team can configure the store and pull the corresponding menu all at one time, rather than coordinating with our partners for the menu push.

Get Started


Step 1: Set up Endpoint Specification to Pull Menus

This endpoint can be set up within Developer Portal by setting up a webhook subscription. The Event type that should be used is Menu Request. This endpoint will allow Doordash to trigger the ingestion or updates of menus. The set up of the endpoint is:

GET /{merchant_pull_menu_endpoint}/{location_id}

location_id is the unique Merchant Supplied ID that is configured for that store location.

Please note: When adding the endpoint into Developer Portal, please ensure that the URL is entered in the correct format to append ‘/locationID’ (e.g. do not include the ‘/’)

Step 2: Ensure the menu.json has the correct format

As mentioned above, the Menu Pull request must return the menu(s) as an array for the Pull to be successful.

Below is a sample menu.json for Menu Pull:

{
"store": {
"merchant_supplied_id": "",
"provider_type": ""
},
"menus": [
{
"id": "string",
"reference": "string",
"open_hours": [
{
"day_index": "MON",
"start_time": "00:00",
"end_time": "23:59"
}
],
"special_hours": [
{
"date": "2000-01-01",
"closed": true,
"start_time": "00:00",
"end_time": "23:59"
}
],
"menu": {
"name": "string",
"subtitle": "string",
"merchant_supplied_id": "string",
"active": true,
"categories": [
{
"name": "string",
"subtitle": "string",
"merchant_supplied_id": "string",
"active": true,
"sort_id": 0,
"items": [
{
"name": "string",
"description": "string",
"merchant_supplied_id": "string",
"active": true,
"is_alcohol": true,
"is_bike_friendly": true,
"sort_id": 0,
"price": 0,
"tax_rate": "string",
"extras": [
{
"name": "string",
"description": "string",
"merchant_supplied_id": "string",
"active": true,
"sort_id": 0,
"min_num_options": 0,
"max_num_options": 0,
"num_free_options": 0,
"min_option_choice_quantity": 0,
"max_option_choice_quantity": 0,
"min_aggregate_options_quantity": 0,
"max_aggregate_options_quantity": 0,
"options": [
{
"name": "string",
"description": "string",
"merchant_supplied_id": "string",
"active": true,
"price": 0,
"default": true,
"sort_id": 0,
"tax_rate": "string",
"extras": []
}
]
}
]
}
]
}
]
}
}
]
}

Partners are expected to return appropriate response codes if the Menu Pull request fails for streamlined triage and escalation if needed.

Step 3: Allow Menu Pull to be used for Menu updates

Updating Menus (Pull)

GET /{merchant_pull_menu_endpoint}/{location_id}[?ids=external_menu_ids]

Partners can utilize the same pull endpoint to allow DoorDash to request menu updates based on a list of external menu ids. This allows for flexibility on the DoorDash side to ensure menus are in sync. The recommendation is that Push logic is still built out on the provider’s side to automatically trigger menu updates when changes are made within the POS.

Please Note: The "id": "menu-id" (UUID) field is required for Updating Menus via Menu Pull & it must be included within the menu payload.

Refer to the Menu Update (Pull) section in the Create & update menus page for a sample Menu Update (pull) payload.

Step 4: Set up Menu status webhook

Once our service is finished creating your menu or if the menu creation fails, the service will send out a POST webhook request with the menu creation result. You need to create an endpoint and provide us with its URL in order to receive the webhook notification. This request will contain the same "reference" as the response to your initial request, allowing you to keep track of which requests have been completely processed.

This endpoint can be set up within Developer Portal by setting up a webhook subscription. The Event type that should be used is Menu Status.


Progress Check

Partners will get a menu job webhook call for each menu upon menu ingestion completion from DoorDash. Reference of menu job webhook format:

{
"event":{
"type":"MenuCreate",
"status":"Success",
"reference":"reference_id_1234"
},
"store":{
"merchant_supplied_id":"location_1"
},
"menu":{
"id":"e7018a50-2308-4a81-bd88-330ea99a60ae"
}
}

The menu.id in that webhook must be stored and should be used for the subsequent menu updates.

We require the reference field in menus.reference field in the menu pull response. Doordash will include the reference on the menu job webhook for merchants to correlate menu pull and menu job status webhooks.

Next Steps

To ensure that Menu Pull is working as expected, please reach out to support via Developoer Portal or your Technical Account Manager (if applicable) to test Menu Pull.


Modified: 5/08/2023