Menus (Deprecated)
The menu management module allows for retrieving and managing Grubhub menus. To create a menu, use the /pos/v1/menu/ingestion endpoint, not the deprecated bulk entity upload endpoints. This allows you to upload the entire menu at once.
WARNING: Do not use the deprecated bulk entity endpoint in conjunction with the full menu ingestion. It can produce unpredictable results, including broken menus. New users should only use the full menu ingestion endpoint.
Grubhub currently maintains a one-to-one relationship between physical locations and menus.
Creating menus.
When creating a menu from scratch, you should construct a POSFullMenu object with your entire menu object. A full menu structures the data as you would present it to a customer. Each menu schedule (e.g. lunch, dinner, weekends) contains menu sections (appetizers, entrees), which contain the individual menu items that customers will order.
Menu items can have additional options and metadata. You can specify multiple sizes, each with a different pricing scheme. Each menu item can have multiple required or optional modifiers, each with multiple selections. If you use both sizes and modifiers, you can set the price of the modifier to be contingent on the size. Additionally, you can attach preset tags to the item to indicate dietary or delivery restrictions, such as a kosher or spicy item.
To remove an entity, upload a new full menu without the entity in the object. To update the entity, get your current full menu, change the field values, and then upload the new full menu object.
A note regarding IDs.
When you create new menus, you will need to assign each entity within the menu (schedules, items, modifiers, etc.) an external_id. This is for your reference and can be used in a few menu endpoints.
However, each entity will automatically be assigned a base64-encoded UUID that can be used to individually reference that entity.
Paths
Get full menu object
GET /pos/v1/merchant/{merchant_id}/ingestion/menuReturns the current menu as a PosFullMenu object, which can be edited and ingested to update a restaurant's or group of restaurant's menu. You can edit the response payload and use it to update menus with the primary menu ingestion endpoint.
This call supports GZIP compression. In the request header, pass Accept-Encoding: gzip to receive a compressed response payload.
{
"info": {},
"tax_rates": [
{
"external_id": "TAX-001",
"name": "sales tax",
"rate": 0.06,
"included_in_item_price": true,
"valid": true
}
],
"schedules": [
{
"name": "Weekday Lunch",
"external_id": "SCHD-LUNCH",
"rules": [
{
"days": [
"MONDAY"
],
"start": "10:45:00.000",
"end": "14:45:00.000"
},
{
"days": [
"TUESDAY"
],
"start": "10:45:00.000",
"end": "19:00:00.000"
},
{
"days": [
"WEDNESDAY"
],
"start": "10:45:00.000",
"end": "19:00:00.000"
}
],
"sections": []
},
{
"name": "Weekday Lunch",
"external_id": "SCHD-LUNCH",
"rules": [
{
"days": [
"MONDAY"
],
"start": "10:45:00.000",
"end": "14:45:00.000"
},
{
"days": [
"TUESDAY"
],
"start": "10:45:00.000",
"end": "19:00:00.000"
},
{
"days": [
"WEDNESDAY"
],
"start": "10:45:00.000",
"end": "19:00:00.000"
}
],
"sections": []
},
{
"name": "Default 24/7",
"rules": [
{
"days": [
"TUESDAY",
"FRIDAY",
"WEDNESDAY",
"SUNDAY",
"THURSDAY",
"SATURDAY",
"MONDAY"
],
"start": "00:00:00.000",
"end": "23:59:59.999"
}
],
"sections": [
{
"name": "Dessert",
"description": "Treat yourself, 2017!",
"items": [
{
"name": "Candy",
"description": "A sweet treat.",
"price": 2.99,
"excludes_coupons": false,
"deal": false,
"tags": [],
"modifier_categories": [
{
"name": "Choose your candy",
"min": 1,
"max": 1,
"included": 1,
"batch_quantity": 1,
"modifiers": [
{
"name": "Gummies",
"description": "Delicious little chewy treats.",
"price": 0
},
{
"name": "Jelly Beans",
"description": "Surprise flavors everyone is sure to enjoy!",
"price": 0
}
]
}
]
},
{
"name": "Chocolate Covered Pretzels",
"description": "Sweet and salty pick-me-up.",
"price": 5,
"excludes_coupons": false,
"deal": false,
"tags": [],
"modifier_categories": []
}
]
}
]
}
]
}
Upload new menu
POST /pos/v1/menu/ingestionUploads a complete menu to Grubhub, including schedules, sections, items, and modifiers. Because of the size of the data used in this operation, the processing portion of this job completes after this endpoint responds. To find out the status of a full menu ingestion, call GET /pos/v1/menu/ingestion/jobs/{job_id}. Use the job_id returned from this endpoint.
This endpoint can take two separate full menu formats. The first expects items to be part of the object structure as they will be when returned by the full menu retrieval enpoint shown below. That is, schedules will contain categories, which contain menu item, and so on. The second has the same items, but any contained objects are indicated by external_id references instead of the object itself. This second format does not use internal Grubhub identifiers, only external_id values.
By default, this endpoint expects the complete full menu structure. To indicate a reference structure, include the optional field normalized_menu=true in the request body.
All objects within this menu payload must have external_id values attached to them for this upload to complete. External IDs that match existing objects will be merged with that object's data. If a field exists in both the existing and ingested data, the ingested data will replace it. If the data only exists in the new data, then that object will be created. If the data exists in the old menu but not the new one, then that object will be deleted.
External IDs must be unique across all menu entities of the same type, except for menu schedules and sections, which must be globally unique.
You can call GET /pos/v1/merchant/{merchant_id}/ingestion/menu to retrieve the current menu, then edit that object and use this endpoint to replace the existing menu with the edited one.
This call supports GZIP compression. In the request header, pass Accept-Encoding: gzip to receive a compressed response payload. Whether you send the JSON object compressed or not, it must be encoded in UTF-8.
WARNING: Do not use the deprecated asynchronous entity upload endpoint after uploading a full menu with this endpoint. It can cause unpredictable results, including making your menu irretrievable. We recommend that you use this endpoint for all menu creation, edits, and deletions.
Validate a full/normalized menu
POST /pos/v1/menu/ingestion/validateVerifies that the menu provided as the request body is a valid and complete PosFullMenu/PosNormalizedMenu data object. You do not need to validate a menu object before you run the ingestion process, but validation can save you the hassle of having a menu ingestion process fail unexpectedly.
Check ingestion job status
GET /pos/v1/menu/ingestion/jobs/{job_id}Checks the status of the specified menu ingestion job. (NOTE - This API is still under active development, and not all features and functionality may be completed.)
{
"job_id": "35b5b71c-417c-448f-8390-5eea50b59ca5",
"merchant_statuses":
[
{
"merchant_id": "12035446",
"status": "FAILED"
}
]
}
Get Menu Info
GET /pos/v1/merchant/{merchant_id}/menu/infoDeprecated, provided for backwards compatibility only. Prefer Get Menu Entities.
{
"restaurant_id": "503736",
"merchant_id": "503736",
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"version_id": "I0Q1QByuEeirR8sxtDLaVw",
"previous_version_id": "0sligLgqEeebEFXtMVeYtw",
"sections": [
"I0QONxyuEeirR8sxtDLaVw"
],
"default_tax_rate": "fX2L0J1KEeeSA1kJ0QlH1w",
"currency": "USD",
"resolution_type": "NORMAL"
}
}
Update Menu Info
POST /pos/v1/merchant/{merchant_id}/menu/info/versionsDeprecated, provided for backwards compatibility only. Prefer Menu Entity Bulk Operation.
Delete Schedule by External ID
DELETE /pos/v1/merchant/{merchant_id}/menu/schedules/external/{external_id}Delete all repeating schedules with the given external ID.
Get Schedule Overrides
GET /pos/v1/merchant/{merchant_id}/menu/schedules/overridesGet schedule overrides (unavailable / available) for a merchant.
Get Item Tags by Merchant ID
GET /pos/v1/merchant/{merchant_id}/menu/items/tagsReturns all menu item tags for a merchant.
(Deprecated) Get Legacy Menu Associations
GET /pos/v1/merchant/{merchant_id}/menu/legacy/associationsProvided for backwards compatibility only.
(Deprecated) Upload a restaurant image
POST /pos/v1/merchant/{merchant_id}/menu/mediaUploads a new media asset that you can use as a restaurant image. This image will display with restaurant information during a diner search. Media assets must fit within the following restrictions:
- Minimum dimensions of 200 by 200.
- Recommended aspect ratio of 3:2.
- Recommended dimensions of 3000 by 2000.
- File size no larger than 5 MB.
Media ingestion occurs asynchronously because all images uploaded to Grubhub must pass through a moderation queue. Your request may return successfully, while the actual upload may still be in process and could still fail.
We can enable webhook notifications for media ingestion status updates. Talk to your Grubhub account manager for more information on how to configure these webhooks.
Get all images
GET /pos/v1/merchant/{merchant_id}/menu/mediaRetrieves all images associated with a restaurant ID. You can use this to check the moderation status of any images uploaded recently, as well as get links for those images on the Grubhub content servers.
Deletes the specified image
DELETE /pos/v1/merchant/{merchant_id}/menu/media/{asset_id}Deletes an image from a restaurant based on the asset ID.
Adds an image to a menu item
POST /pos/v1/merchant/{merchant_id}/menu/items/{item_id}/mediaUploads a new image and associates it with an existing menu item. Media assets must fit within the following restrictions:
- Minimum dimensions of 200 by 200.
- Recommended aspect ratio of 3:2.
- Recommended dimensions of 3000 by 2000.
- File size no larger than 5 MB.
Media ingestion occurs asynchronously because all images uploaded to Grubhub must pass through a moderation queue. Your upload may return successfully, while the actual upload may still be in process and could still fail.
We can enable webhook notifications for media ingestion status updates. Talk to your Grubhub account manager for more information on how to configure these webhooks.
Adds an image to a menu item by external ID
POST /pos/v1/merchant/{merchant_id}/menu/items/external/{external_id}/mediaUploads a new image and associates it with an existing menu item based on the external ID that you assigned to it. Media assets must fit within the following restrictions:
- Minimum dimensions of 200 by 200.
- Recommended aspect ratio of 3:2.
- Recommended dimensions of 3000 by 2000.
- File size no larger than 5 MB.
Media ingestion occurs asynchronously because all images uploaded to Grubhub must pass through a moderation queue. Your upload may return successfully, while the actual upload may still be in process and could still fail.
We can enable webhook notifications for media ingestion status updates. Talk to your Grubhub account manager for more information on how to configure these webhooks.
Delete an image by item ID
DELETE /pos/v1/merchant/{merchant_id}/menu/items/{item_id}/media/{asset_id}Deletes an image from a menu item based on the automatically assigned item ID.
Add an image from URL
POST /pos/v1/merchant/{merchant_id}/menu/media/urlAdds an image located at a URL to the menu assets. That URL must include the extension of the media file; otherwise, the API will not be able to recognize the file.
Media assets must fit within the following restrictions:
- Minimum dimensions of 200 by 200.
- Recommended aspect ratio of 3:2.
- Recommended dimensions of 3000 by 2000.
- File size no larger than 5 MB.
Media ingestion occurs asynchronously because all images uploaded to Grubhub must pass through a moderation queue. Your upload may return successfully, while the actual upload may still be in process and could still fail.
We can enable webhook notifications for media ingestion status updates. Talk to your Grubhub account manager for more information on how to configure these webhooks.
Get Full Menu
GET /pos/v1/merchant/{merchant_id}/menuReturns the full menu for the merchant.
For restaurants with very large menus, you can enable GZIP compression. To do so, add the header "Accept-Encoding": "application/gzip". This may be required in some cases, as we have a limit of 10 MB per response payload.
{
"restaurant_id": "503736",
"merchant_id": "503736",
"menu_info": {
"restaurant_id": "503736",
"merchant_id": "503736",
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"version_id": "I0Q1QByuEeirR8sxtDLaVw",
"previous_version_id": "0sligLgqEeebEFXtMVeYtw",
"sections": [
"I0QONxyuEeirR8sxtDLaVw"
],
"default_tax_rate": "fX2L0J1KEeeSA1kJ0QlH1w",
"currency": "USD",
"resolution_type": "NORMAL"
}
},
"tax_rates": [
{
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "fX2L0J1KEeeSA1kJ0QlH1w",
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "fX2L0J1KEeeSA1kJ0QlH1w",
"version_id": "fX-usJ1KEee7stFZn4mmfg",
"rate": 0,
"included_in_item_price": false
}
},
{
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "MGzGQbKxEeeoy5l_wMX5_w",
"external_id": "TAX-001",
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "MGzGQbKxEeeoy5l_wMX5_w",
"external_id": "TAX-001",
"version_id": "MGzGQLKxEeeoy5l_wMX5_w",
"name": "sales tax",
"rate": 0.06,
"included_in_item_price": true
}
}
],
"menu_sections": [
{
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "X6kO8bQUEeesmyNbg_9pRA",
"external_id": "CAT-000",
"legacy_id": 2854825,
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "X6kO8bQUEeesmyNbg_9pRA",
"external_id": "CAT-000",
"version_id": "X6kO8LQUEeesmyNbg_9pRA",
"name": "Sweets",
"items": [
"4PJw8bKxEeesmyNbg_9pRA",
"4PJw87KxEeesmyNbg_9pRA"
]
}
},
{
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "I0QONxyuEeirR8sxtDLaVw",
"legacy_id": 3371559,
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "I0QONxyuEeirR8sxtDLaVw",
"version_id": "I0QONhyuEeirR8sxtDLaVw",
"name": "Dessert",
"description": "Treat yourself, 2017!",
"items": [
"I0QOMxyuEeirR8sxtDLaVw",
"I0QONRyuEeirR8sxtDLaVw"
]
}
}
],
"items": [
{
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "4PJw8bKxEeesmyNbg_9pRA",
"external_id": "IDS-000",
"legacy_id": 25820792,
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "4PJw8bKxEeesmyNbg_9pRA",
"external_id": "IDS-000",
"version_id": "4PJw8LKxEeesmyNbg_9pRA",
"name": "Candy",
"description": "A sweet treat.",
"price": 2.99,
"excludes_coupons": false,
"tax_rate": "MGzGQbKxEeeoy5l_wMX5_w",
"modifier_prompts": [
"FNASQa0yEeebEFXtMVeYtw"
],
"schedule_ids": [],
"allowable_order_types": [
"standard"
],
"tags": [
{
"group": "LEGACY",
"name": "DAIRY_FREE",
"legacy_id": 16
},
{
"group": "LEGACY",
"name": "DESSERT",
"legacy_id": 2
},
{
"group": "LEGACY",
"name": "KOSHER",
"legacy_id": 19
},
{
"group": "LEGACY",
"name": "VEGETARIAN",
"legacy_id": 13
}
]
}
},
{
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "4PJw87KxEeesmyNbg_9pRA",
"external_id": "IDS-001",
"legacy_id": 25820793,
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "4PJw87KxEeesmyNbg_9pRA",
"external_id": "IDS-001",
"version_id": "4PJw8rKxEeesmyNbg_9pRA",
"name": "Chocaolate Covered Pretzels",
"description": "Sweet and salty pick-me-up.",
"price": 5,
"excludes_coupons": false,
"tax_rate": "MGzGQbKxEeeoy5l_wMX5_w",
"modifier_prompts": [],
"schedule_ids": [],
"allowable_order_types": [
"standard"
],
"tags": []
}
},
{
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "I0QOMxyuEeirR8sxtDLaVw",
"legacy_id": 29828499,
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "I0QOMxyuEeirR8sxtDLaVw",
"version_id": "I0QOMhyuEeirR8sxtDLaVw",
"name": "Candy",
"description": "A sweet treat.",
"price": 2.99,
"excludes_coupons": false,
"tax_rate": "fX2L0J1KEeeSA1kJ0QlH1w",
"modifier_prompts": [
"I0QOMRyuEeirR8sxtDLaVw"
],
"schedule_ids": [],
"allowable_order_types": [
"standard"
],
"tags": []
}
},
{
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "I0QONRyuEeirR8sxtDLaVw",
"legacy_id": 29828500,
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "I0QONRyuEeirR8sxtDLaVw",
"version_id": "I0QONByuEeirR8sxtDLaVw",
"name": "Chocaolate Covered Pretzels",
"description": "Sweet and salty pick-me-up.",
"price": 5,
"excludes_coupons": false,
"tax_rate": "fX2L0J1KEeeSA1kJ0QlH1w",
"modifier_prompts": [],
"schedule_ids": [],
"allowable_order_types": [
"standard"
],
"tags": []
}
}
],
"sizes": [
{
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "BL6U0a0FEeesmyNbg_9pRA",
"legacy_id": 39498975,
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "BL6U0a0FEeesmyNbg_9pRA",
"version_id": "BL6U0K0FEeesmyNbg_9pRA",
"name": "Small"
}
},
{
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "BL6U060FEeesmyNbg_9pRA",
"legacy_id": 39498976,
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "BL6U060FEeesmyNbg_9pRA",
"version_id": "BL6U0q0FEeesmyNbg_9pRA",
"name": "Medium"
}
},
{
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "BL674a0FEeesmyNbg_9pRA",
"legacy_id": 39498977,
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "BL674a0FEeesmyNbg_9pRA",
"version_id": "BL674K0FEeesmyNbg_9pRA",
"name": "Large"
}
},
{
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "BL67460FEeesmyNbg_9pRA",
"legacy_id": 39498978,
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "BL67460FEeesmyNbg_9pRA",
"version_id": "BL674q0FEeesmyNbg_9pRA",
"name": "Massive"
}
}
],
"size_prompts": [
{
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "VKuEQa0TEeeoy5l_wMX5_w",
"legacy_id": 10037980,
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "VKuEQa0TEeeoy5l_wMX5_w",
"version_id": "VKuEQK0TEeeoy5l_wMX5_w",
"name": "Choose a size:",
"sized_prices": [
{
"size": "BL6U0a0FEeesmyNbg_9pRA",
"price": 0
},
{
"size": "BL6U060FEeesmyNbg_9pRA",
"price": 1.25
},
{
"size": "BL674a0FEeesmyNbg_9pRA",
"price": 4
},
{
"size": "BL67460FEeesmyNbg_9pRA",
"price": 8.15
}
]
}
}
],
"modifiers": [
{
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "FM_rMa0yEeebEFXtMVeYtw",
"external_id": "MDO-000",
"legacy_id": 39506711,
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "FM_rMa0yEeebEFXtMVeYtw",
"external_id": "MDO-000",
"version_id": "FM_rMK0yEeebEFXtMVeYtw",
"name": "Gummies",
"description": "Delicious little chewy treats.",
"default_price": 0
}
},
{
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "FM_rM60yEeebEFXtMVeYtw",
"external_id": "MDO-001",
"legacy_id": 39506712,
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "FM_rM60yEeebEFXtMVeYtw",
"external_id": "MDO-001",
"version_id": "FM_rMq0yEeebEFXtMVeYtw",
"name": "Jelly Beans",
"description": "Surprise flavors everyone is sure to enjoy!",
"default_price": 0
}
},
{
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "I0PnIRyuEeirR8sxtDLaVw",
"legacy_id": 48290499,
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "I0PnIRyuEeirR8sxtDLaVw",
"version_id": "I0PnIByuEeirR8sxtDLaVw",
"name": "Gummies",
"description": "Delicious little chewy treats.",
"default_price": 0
}
},
{
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "I0PnIxyuEeirR8sxtDLaVw",
"legacy_id": 48290500,
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "I0PnIxyuEeirR8sxtDLaVw",
"version_id": "I0PnIhyuEeirR8sxtDLaVw",
"name": "Jelly Beans",
"description": "Surprise flavors everyone is sure to enjoy!",
"default_price": 0
}
}
],
"modifier_prompts": [
{
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "FNASQa0yEeebEFXtMVeYtw",
"external_id": "MDP-001",
"legacy_id": 10039411,
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "FNASQa0yEeebEFXtMVeYtw",
"external_id": "MDP-001",
"version_id": "FNASQK0yEeebEFXtMVeYtw",
"name": "Choose your candy",
"internal_name": "Candy Selection 1",
"modifier_list": "FM_rNa0yEeebEFXtMVeYtw",
"default_selection_model": {
"minimum_quantity": 1,
"maximum_quantity": 1
},
"sized_selection_models": {},
"submodifiers": []
}
},
{
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "I0QOMRyuEeirR8sxtDLaVw",
"legacy_id": 12246870,
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "I0QOMRyuEeirR8sxtDLaVw",
"version_id": "I0QOMByuEeirR8sxtDLaVw",
"name": "Choose your candy",
"internal_name": "Candy Selection 1",
"modifier_list": "I0PnJRyuEeirR8sxtDLaVw",
"default_selection_model": {
"minimum_quantity": 1,
"maximum_quantity": 1
},
"sized_selection_models": {},
"submodifiers": []
}
}
],
"modifier_lists": [
{
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "FM_rNa0yEeebEFXtMVeYtw",
"external_id": "MDL-001",
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "FM_rNa0yEeebEFXtMVeYtw",
"external_id": "MDL-001",
"version_id": "FM_rNK0yEeebEFXtMVeYtw",
"name": "Candy Choices",
"modifiers": [
"FM_rMa0yEeebEFXtMVeYtw",
"FM_rM60yEeebEFXtMVeYtw"
]
}
},
{
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "I0PnJRyuEeirR8sxtDLaVw",
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "I0PnJRyuEeirR8sxtDLaVw",
"version_id": "I0PnJByuEeirR8sxtDLaVw",
"name": "Candy Choices",
"modifiers": [
"I0PnIRyuEeirR8sxtDLaVw",
"I0PnIxyuEeirR8sxtDLaVw"
]
}
}
],
"schedule_overrides": {
"merchant_id": "503736",
"item_overrides": [],
"modifier_overrides": []
},
"repeating_schedules": [
{
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "l7cA0NxlEeeBIHeShZ32nw",
"external_id": "SCHD-LUNCH",
"legacy_id": 216729,
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "l7cA0NxlEeeBIHeShZ32nw",
"external_id": "SCHD-LUNCH",
"version_id": "l9ZIodxlEeek7GOkUbqYMg",
"name": "Weekday Lunch",
"type": "WEEKLY",
"rules": [
{
"days_of_week": [
"MONDAY"
],
"start_time": "10:45:00.000",
"end_time": "14:45:00.000"
},
{
"days_of_week": [
"TUESDAY"
],
"start_time": "10:45:00.000",
"end_time": "19:00:00.000"
},
{
"days_of_week": [
"WEDNESDAY"
],
"start_time": "10:45:00.000",
"end_time": "19:00:00.000"
}
]
}
},
{
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "FQsvYKrVEeeSvLF-A2VlNA",
"external_id": "SCHD-LUNCH",
"legacy_id": 192869,
"latest_version": {
"restaurant_id": "503736",
"merchant_id": "503736",
"uuid": "FQsvYKrVEeeSvLF-A2VlNA",
"external_id": "SCHD-LUNCH",
"version_id": "FTK0kKrVEeeOed9wlywnkA",
"name": "Weekday Lunch",
"type": "WEEKLY",
"rules": [
{
"days_of_week": [
"MONDAY"
],
"start_time": "10:45:00.000",
"end_time": "14:45:00.000"
},
{
"days_of_week": [
"TUESDAY"
],
"start_time": "10:45:00.000",
"end_time": "19:00:00.000"
},
{
"days_of_week": [
"WEDNESDAY"
],
"start_time": "10:45:00.000",
"end_time": "19:00:00.000"
}
]
}
}
]
}
Get Menu Entities
GET /pos/v1/merchant/{merchant_id}/menu/entitiesReturns a list of menu entities associated with the specified restaurant. If entity types, entity UUIDs, or external IDs are specified, then this endpoint will only return the associated entities; otherwise, this endpoint will return all menu entities associated with this merchant_ID.
(Deprecated) Retrieves the status of an update job.
GET /pos/v1/merchant/{merchant_id}/menu/entities/{job_id}Returns the status of the specified asynchronous menu entity update process.
Models
(Deprecated) Menu Entity Associations
Response body from the deprecated legacy menu associations endpoint.
AddAssetRequest
Information about an image located at a URL which will be used to create a media asset.
Availability Override Type
AVAILABLE | UNAVAILABLE
Bulk Edit Status
The current state of the asynchronous bulk update process.
Deleted Item
A deleted item
FullMenuItem
A single menu item as it appears within the PosFullMenu object. This object contains all the fields from the Item object, as well as the size prompts, deals, tags, and modifiers that affect this item.
FullMenuModifier
A selectable option within a modifier prompt that changes a menu item. That change may include price and calorie variations, and may be affected by size selections. Unlike the size models used in the bulk update endpoint, this model includes all information about a single modifier.
FullMenuModifierCategory
The various modifier types that can apply to this item, as well as the options available and the selection model.
FullMenuSchedule
An array of Schedule objects, each of which also contains the menu sections and menu items included as part of that schedule. The final object provides an easier-to-understand menu format laid out in the way most people think about an actual restaurant menu.
FullMenuSchedule Rule
A time period and repetition rule for use in schedules within full menu uploads and modifications.
FullMenuSection
A category of the menu - such as appetizers, breakfast, or drinks - including the menu items that these sections contain.
FullMenuSize
Information about the size options for a FullMenuSizePrompt, including price and calorie information.
FullMenuSizePrompt
Size prompts for an individual item with the associated sizes and pricing schemes. All data is adjusted for the item in question.
FullMenuTaxRate
Tax rate information returned as part of a full menu in the PosFullMenu object. It includes all the fields from the TaxRate object, as well as an external_id and metadata.
Item
Menu item for sale on Grubhub.
Extends PosVersion and wrapped by PosEntity.
Item Schedule Override
An override of a repeating schedule for an Item. Used for "86-ing" an Item that is out of stock.
Item with Tags
For convenience, tags are included within Items on the response to GetFullMenu.
Extends Item.
LinkDTO
Information about a media file.
Media
An image file uploaded to a merchant account.
MediaValidationResult
Indicates whether the associated image passed or failed in a specific validation category. Images are validated for the following tests:
- VALIDATION_FOOD: Ensures that the images is of food.
- VALIDATION_SIZE_RESOLUTION: Checks that the image dimensions are within the displayable limits.
- VALIDATION_COPYRIGHT: Looks for existing copyrighted images that match this file.
- VALIDATION_WATERMARK: Ensures that the file does not have a watermark on it.
- VALIDATION_TEXT: Checks the image for embedded text.
- VALIDATION_SAFE_SEARCH: Ensures that the image is safe for viewing by all ages and in all locations by screening for adult content.
- VALIDATION_PHONE_NUMBER: Checks if the image contains an embedded phone number.
Menu
The full menu for a given restaurant location. Note each menu entity type extends PosVersion and is wrapped in a PosEntity.
{
"merchant_id": "11452200",
"menu_info": {
"merchant_id": "11452200",
"latest_version": {
"merchant_id": "11452200",
"version_id": "4BpFBH6eEeeR-ZF2C9iT9Q",
"previous_version_id": "oGiBBHCZEeelyWk4x58mbg",
"sections": [
"4BpFA36eEeeR-ZF2C9iT9Q"
],
"default_tax_rate": "4Gh_AGA0EeeqsTvp_HLNpw",
"currency": "USD",
"resolution_type": "NORMAL"
}
},
"tax_rates": [
{
"merchant_id": "11452200",
"uuid": "4Gh_AGA0EeeqsTvp_HLNpw",
"latest_version": {
"merchant_id": "11452200",
"uuid": "4Gh_AGA0EeeqsTvp_HLNpw",
"version_id": "4GuMQGA0EeeXXeOrIbZ0kw",
"rate": 0,
"included_in_item_price": false
}
}
],
"menu_sections": [
{
"merchant_id": "11452200",
"uuid": "XuiMk2GrEeeXXeOrIbZ0kw",
"external_id": "SCDS-000",
"legacy_id": 1595357,
"latest_version": {
"merchant_id": "11452200",
"uuid": "XuiMk2GrEeeXXeOrIbZ0kw",
"external_id": "SCDS-000",
"version_id": "XuiMkmGrEeeXXeOrIbZ0kw",
"name": "Dessert",
"description": "Treat yourself, 2017!",
"items": [
"Xug-cWGrEeeXXeOrIbZ0kw",
"XuiMkWGrEeeXXeOrIbZ0kw"
]
}
},
{
"merchant_id": "11452200",
"uuid": "oGiBA3CZEeelyWk4x58mbg",
"external_id": "SCDS-000",
"legacy_id": 1595699,
"latest_version": {
"merchant_id": "11452200",
"uuid": "oGiBA3CZEeelyWk4x58mbg",
"external_id": "SCDS-000",
"version_id": "oGiBAnCZEeelyWk4x58mbg",
"name": "Dessert",
"description": "Treat yourself, 2017!",
"items": [
"oGgy4XCZEeelyWk4x58mbg",
"oGiBAXCZEeelyWk4x58mbg"
]
}
},
{
"merchant_id": "11452200",
"uuid": "4BpFA36eEeeR-ZF2C9iT9Q",
"external_id": "SCDS-000",
"legacy_id": 1596388,
"latest_version": {
"merchant_id": "11452200",
"uuid": "4BpFA36eEeeR-ZF2C9iT9Q",
"external_id": "SCDS-000",
"version_id": "4BpFAn6eEeeR-ZF2C9iT9Q",
"name": "Dessert",
"description": "Treat yourself, 2017!",
"items": [
"4Bn24X6eEeeR-ZF2C9iT9Q",
"4BpFAX6eEeeR-ZF2C9iT9Q"
]
}
}
],
"items": [
{
"merchant_id": "11452200",
"uuid": "Xug-cWGrEeeXXeOrIbZ0kw",
"external_id": "IDS-001",
"legacy_id": 15618312,
"latest_version": {
"merchant_id": "11452200",
"uuid": "Xug-cWGrEeeXXeOrIbZ0kw",
"external_id": "IDS-001",
"version_id": "Xug-cGGrEeeXXeOrIbZ0kw",
"name": "Candy",
"description": "A sweet treat.",
"price": 2.99,
"excludes_coupons": false,
"tax_rate": "4Gh_AGA0EeeqsTvp_HLNpw",
"modifier_prompts": [
"XugXYWGrEeeXXeOrIbZ0kw"
],
"schedule_ids": [],
"tags": [
{
"group": "LEGACY",
"name": "ALCOHOL"
},
{
"group": "LEGACY",
"name": "DESSERT"
},
{
"group": "LEGACY",
"name": "DRINK"
}
]
}
},
{
"merchant_id": "11452200",
"uuid": "XuiMkWGrEeeXXeOrIbZ0kw",
"external_id": "IDS-001",
"legacy_id": 15618313,
"latest_version": {
"merchant_id": "11452200",
"uuid": "XuiMkWGrEeeXXeOrIbZ0kw",
"external_id": "IDS-001",
"version_id": "XuiMkGGrEeeXXeOrIbZ0kw",
"name": "Chocaolate Covered Pretzels",
"description": "Sweet and salty pick-me-up.",
"price": 5,
"excludes_coupons": false,
"tax_rate": "4Gh_AGA0EeeqsTvp_HLNpw",
"modifier_prompts": [],
"schedule_ids": [],
"tags": []
}
},
{
"merchant_id": "11452200",
"uuid": "oGgy4XCZEeelyWk4x58mbg",
"external_id": "IDS-000",
"legacy_id": 15619835,
"latest_version": {
"merchant_id": "11452200",
"uuid": "oGgy4XCZEeelyWk4x58mbg",
"external_id": "IDS-000",
"version_id": "oGgy4HCZEeelyWk4x58mbg",
"name": "Candy",
"description": "A sweet treat.",
"price": 2.99,
"excludes_coupons": false,
"tax_rate": "4Gh_AGA0EeeqsTvp_HLNpw",
"modifier_prompts": [
"oGgL0XCZEeelyWk4x58mbg"
],
"schedule_ids": [],
"tags": [
{
"group": "LEGACY",
"name": "ALCOHOL"
},
{
"group": "LEGACY",
"name": "DRINK"
}
]
}
},
{
"merchant_id": "11452200",
"uuid": "oGiBAXCZEeelyWk4x58mbg",
"external_id": "IDS-001",
"legacy_id": 15619836,
"latest_version": {
"merchant_id": "11452200",
"uuid": "oGiBAXCZEeelyWk4x58mbg",
"external_id": "IDS-001",
"version_id": "oGiBAHCZEeelyWk4x58mbg",
"name": "Chocaolate Covered Pretzels",
"description": "Sweet and salty pick-me-up.",
"price": 5,
"excludes_coupons": false,
"tax_rate": "4Gh_AGA0EeeqsTvp_HLNpw",
"modifier_prompts": [],
"schedule_ids": [],
"tags": []
}
},
{
"merchant_id": "11452200",
"uuid": "4Bn24X6eEeeR-ZF2C9iT9Q",
"external_id": "IDS-000",
"legacy_id": 15621568,
"latest_version": {
"merchant_id": "11452200",
"uuid": "4Bn24X6eEeeR-ZF2C9iT9Q",
"external_id": "IDS-000",
"version_id": "4Bn24H6eEeeR-ZF2C9iT9Q",
"name": "Candy",
"description": "A sweet treat.",
"price": 2.99,
"excludes_coupons": false,
"tax_rate": "4Gh_AGA0EeeqsTvp_HLNpw",
"modifier_prompts": [
"4BnP0X6eEeeR-ZF2C9iT9Q"
],
"schedule_ids": [],
"tags": [
{
"group": "LEGACY",
"name": "DRINK"
}
]
}
},
{
"merchant_id": "11452200",
"uuid": "4BpFAX6eEeeR-ZF2C9iT9Q",
"external_id": "IDS-001",
"legacy_id": 15621569,
"latest_version": {
"merchant_id": "11452200",
"uuid": "4BpFAX6eEeeR-ZF2C9iT9Q",
"external_id": "IDS-001",
"version_id": "4BpFAH6eEeeR-ZF2C9iT9Q",
"name": "Chocaolate Covered Pretzels",
"description": "Sweet and salty pick-me-up.",
"price": 5,
"excludes_coupons": false,
"tax_rate": "4Gh_AGA0EeeqsTvp_HLNpw",
"modifier_prompts": [],
"schedule_ids": [],
"tags": []
}
}
],
"sizes": [],
"size_prompts": [],
"modifiers": [
{
"merchant_id": "11452200",
"uuid": "XueiMWGrEeeXXeOrIbZ0kw",
"external_id": "MDO-000",
"legacy_id": 21200166,
"latest_version": {
"merchant_id": "11452200",
"uuid": "XueiMWGrEeeXXeOrIbZ0kw",
"external_id": "MDO-000",
"version_id": "XueiMGGrEeeXXeOrIbZ0kw",
"name": "Gummies",
"description": "Delicious little chewy treats.",
"default_price": 0,
"submodifiers": []
}
},
{
"merchant_id": "11452200",
"uuid": "XufJQWGrEeeXXeOrIbZ0kw",
"external_id": "MDO-001",
"legacy_id": 21200167,
"latest_version": {
"merchant_id": "11452200",
"uuid": "XufJQWGrEeeXXeOrIbZ0kw",
"external_id": "MDO-001",
"version_id": "XufJQGGrEeeXXeOrIbZ0kw",
"name": "Jelly Beans",
"description": "Surprise flavors everyone is sure to enjoy!",
"default_price": 0
}
},
{
"merchant_id": "11452200",
"uuid": "oGe9sXCZEeelyWk4x58mbg",
"external_id": "MDO-000",
"legacy_id": 21209856,
"latest_version": {
"merchant_id": "11452200",
"uuid": "oGe9sXCZEeelyWk4x58mbg",
"external_id": "MDO-000",
"version_id": "oGe9sHCZEeelyWk4x58mbg",
"name": "Gummies",
"description": "Delicious little chewy treats.",
"default_price": 0
}
},
{
"merchant_id": "11452200",
"uuid": "oGfkwXCZEeelyWk4x58mbg",
"external_id": "MDO-001",
"legacy_id": 21209857,
"latest_version": {
"merchant_id": "11452200",
"uuid": "oGfkwXCZEeelyWk4x58mbg",
"external_id": "MDO-001",
"version_id": "oGfkwHCZEeelyWk4x58mbg",
"name": "Jelly Beans",
"description": "Surprise flavors everyone is sure to enjoy!",
"default_price": 0
}
},
{
"merchant_id": "11452200",
"uuid": "4BmBsX6eEeeR-ZF2C9iT9Q",
"external_id": "MDO-000",
"legacy_id": 21213279,
"latest_version": {
"merchant_id": "11452200",
"uuid": "4BmBsX6eEeeR-ZF2C9iT9Q",
"external_id": "MDO-000",
"version_id": "4BmBsH6eEeeR-ZF2C9iT9Q",
"name": "Gummies",
"description": "Delicious little chewy treats.",
"default_price": 0
}
},
{
"merchant_id": "11452200",
"uuid": "4BmBs36eEeeR-ZF2C9iT9Q",
"external_id": "MDO-001",
"legacy_id": 21213280,
"latest_version": {
"merchant_id": "11452200",
"uuid": "4BmBs36eEeeR-ZF2C9iT9Q",
"external_id": "MDO-001",
"version_id": "4BmBsn6eEeeR-ZF2C9iT9Q",
"name": "Jelly Beans",
"description": "Surprise flavors everyone is sure to enjoy!",
"default_price": 0
}
}
],
"modifier_prompts": [
{
"merchant_id": "11452200",
"uuid": "XugXYWGrEeeXXeOrIbZ0kw",
"external_id": "MDP-001",
"legacy_id": 5492700,
"latest_version": {
"merchant_id": "11452200",
"uuid": "XugXYWGrEeeXXeOrIbZ0kw",
"external_id": "MDP-001",
"version_id": "XugXYGGrEeeXXeOrIbZ0kw",
"name": "Choose your candy",
"internal_name": "Candy Selection 1",
"modifier_list": "XufwUWGrEeeXXeOrIbZ0kw",
"default_selection_model": {
"minimum_quantity": 1,
"maximum_quantity": 1
},
"sized_selection_models": {},
"submodifiers": []
}
},
{
"merchant_id": "11452200",
"uuid": "oGgL0XCZEeelyWk4x58mbg",
"external_id": "MDP-001",
"legacy_id": 5494667,
"latest_version": {
"merchant_id": "11452200",
"uuid": "oGgL0XCZEeelyWk4x58mbg",
"external_id": "MDP-001",
"version_id": "oGgL0HCZEeelyWk4x58mbg",
"name": "Choose your candy",
"internal_name": "Candy Selection 1",
"modifier_list": "oGfkw3CZEeelyWk4x58mbg",
"default_selection_model": {
"minimum_quantity": 1,
"maximum_quantity": 1
},
"sized_selection_models": {},
"submodifiers": []
}
},
{
"merchant_id": "11452200",
"uuid": "4BnP0X6eEeeR-ZF2C9iT9Q",
"external_id": "MDP-001",
"legacy_id": 5495897,
"latest_version": {
"merchant_id": "11452200",
"uuid": "4BnP0X6eEeeR-ZF2C9iT9Q",
"external_id": "MDP-001",
"version_id": "4BnP0H6eEeeR-ZF2C9iT9Q",
"name": "Choose your candy",
"internal_name": "Candy Selection 1",
"modifier_list": "4BmowX6eEeeR-ZF2C9iT9Q",
"default_selection_model": {
"minimum_quantity": 1,
"maximum_quantity": 1
},
"sized_selection_models": {},
"submodifiers": []
}
}
],
"modifier_lists": [
{
"merchant_id": "11452200",
"uuid": "XufwUWGrEeeXXeOrIbZ0kw",
"external_id": "MDL-001",
"latest_version": {
"merchant_id": "11452200",
"uuid": "XufwUWGrEeeXXeOrIbZ0kw",
"external_id": "MDL-001",
"version_id": "XufwUGGrEeeXXeOrIbZ0kw",
"name": "Candy Choices",
"modifiers": [
"XueiMWGrEeeXXeOrIbZ0kw",
"XufJQWGrEeeXXeOrIbZ0kw"
]
}
},
{
"merchant_id": "11452200",
"uuid": "oGfkw3CZEeelyWk4x58mbg",
"external_id": "MDL-001",
"latest_version": {
"merchant_id": "11452200",
"uuid": "oGfkw3CZEeelyWk4x58mbg",
"external_id": "MDL-001",
"version_id": "oGfkwnCZEeelyWk4x58mbg",
"name": "Candy Choices",
"modifiers": [
"oGe9sXCZEeelyWk4x58mbg",
"oGfkwXCZEeelyWk4x58mbg"
]
}
},
{
"merchant_id": "11452200",
"uuid": "4BmowX6eEeeR-ZF2C9iT9Q",
"external_id": "MDL-001",
"latest_version": {
"merchant_id": "11452200",
"uuid": "4BmowX6eEeeR-ZF2C9iT9Q",
"external_id": "MDL-001",
"version_id": "4BmowH6eEeeR-ZF2C9iT9Q",
"name": "Candy Choices",
"modifiers": [
"4BmBsX6eEeeR-ZF2C9iT9Q",
"4BmBs36eEeeR-ZF2C9iT9Q"
]
}
}
],
"schedule_overrides": {
"merchant_id": 11452200,
"item_overrides": [],
"modifier_overrides": []
},
"repeating_schedules": [
{
"merchant_id": "11452200",
"uuid": "xkOOAHCaEeeedRUXTq6Q9w",
"external_id": "SCHD-XTRA",
"legacy_id": 114072,
"latest_version": {
"merchant_id": "11452200",
"uuid": "xkOOAHCaEeeedRUXTq6Q9w",
"external_id": "SCHD-XTRA",
"version_id": "xmZ_UHCaEeeFNt8YZ8Vx8g",
"name": "Weekday Lunch",
"type": "WEEKLY",
"rules": [
{
"days_of_week": [
"MONDAY"
],
"start_time": "10:45:00.000",
"end_time": "14:45:00.000"
},
{
"days_of_week": [
"TUESDAY"
],
"start_time": "10:45:00.000",
"end_time": "19:00:00.000"
},
{
"days_of_week": [
"WEDNESDAY"
],
"start_time": "10:45:00.000",
"end_time": "19:00:00.000"
}
]
}
},
{
"merchant_id": "11452200",
"uuid": "IUWmoG4ZEeeSN9dYmrdxnQ",
"external_id": "SCHD-LUNCH",
"legacy_id": 114068,
"latest_version": {
"merchant_id": "11452200",
"uuid": "IUWmoG4ZEeeSN9dYmrdxnQ",
"external_id": "SCHD-LUNCH",
"version_id": "rXO2kIQ-Eee02ddYmrdxnQ",
"previous_version_id": "5_FhgHCaEeeSN9dYmrdxnQ",
"name": "Weekday Lunch",
"type": "WEEKLY",
"rules": [
{
"days_of_week": [
"TUESDAY",
"MONDAY",
"WEDNESDAY",
"THURSDAY",
"FRIDAY"
],
"start_time": "10:45:00.000",
"end_time": "14:45:00.000"
}
]
}
},
{
"merchant_id": "11452200",
"uuid": "FI014GHQEeeqsTvp_HLNpw",
"external_id": "SCHD-LUNCH",
"legacy_id": 114015,
"latest_version": {
"merchant_id": "11452200",
"uuid": "FI014GHQEeeqsTvp_HLNpw",
"external_id": "SCHD-LUNCH",
"version_id": "rXO2kIQ-Eee02ddYmrdxnQ",
"previous_version_id": "08m-kGHSEeeY-I3xNRk3Jw",
"name": "Weekday Lunch",
"type": "WEEKLY",
"rules": [
{
"days_of_week": [
"TUESDAY",
"MONDAY",
"WEDNESDAY",
"THURSDAY",
"FRIDAY"
],
"start_time": "10:45:00.000",
"end_time": "14:45:00.000"
}
]
}
},
{
"merchant_id": "11452200",
"uuid": "C_rqAGHOEeeY-I3xNRk3Jw",
"legacy_id": 114014,
"latest_version": {
"merchant_id": "11452200",
"uuid": "C_rqAGHOEeeY-I3xNRk3Jw",
"version_id": "C_33QGHOEeeuxZ3VuFMRpA",
"name": "From GFR",
"type": "WEEKLY",
"rules": [
{
"days_of_week": [
"MONDAY"
],
"start_time": "10:45:00.000",
"end_time": "14:45:00.000"
},
{
"days_of_week": [
"TUESDAY"
],
"start_time": "10:45:00.000",
"end_time": "19:00:00.000"
},
{
"days_of_week": [
"WEDNESDAY"
],
"start_time": "10:45:00.000",
"end_time": "19:00:00.000"
},
{
"days_of_week": [
"THURSDAY"
],
"start_time": "07:00:00.000",
"end_time": "19:00:00.000"
},
{
"days_of_week": [
"FRIDAY"
],
"start_time": "07:00:00.000",
"end_time": "19:00:00.000"
}
]
}
}
]
}
Menu Entity Change Operation
An operation to perform on a menu entity. Used in the bulk PATCH request.
Menu Entity Change Operation Result
The result of a change operation.
Menu Entity Type
Type of menu entity.
string
- item
- menusection
- modifier
- modifierlist
- modifierprompt
- schedule
- size
- sizeprompt
- taxrate
- menuinfo
Menu Info
Top-level information about a menu. There is exactly one Menu Info per restaurant.
Extends PosVersion and wrapped by PosEntity.
Menu Section
A menu category and referenced items for display on the restaurant's Grubhub menu page.
Extends PosVersion and wrapped by PosEntity.
MerchantStatus
The current state or result of a menu ingestion job. Each status will be communicated with both a standardized status string and a human-readable description.
Modifier
A selection, modification, or addition to an Item, which may or may not affect the final price of the Item.
Extends PosVersion and wrapped by PosEntity.
Modifier Prompt
Configuration option for an Item. Modifier Prompts are global and can be shared by multiple Items.
Extends PosVersion and wrapped by PosEntity.
Modifier Prompt Selection Settings
The minimum and maximum number of unique modifier options that can be selected within a prompt.
Modifier Selection Model
Rules for modifier selection. Applied to a Modifier Prompt.
- -1 denotes 'unlimited' for
maximum_quantity - 127 is the maximum value for any of these properties
minimum_quantitymust be less than or equal to the number of modifiers in theModifierList.
Extends PosVersion and wrapped by PosEntity.
ModifierList
An array of modifiers that can apply to a menu item.
ModifierPromptQuantitySettings
The total minimum and maximum quantities that can be added for all modifier options in this prompt.
ModifierQuantitySettings
Contains default, maximum, and custom increments for a single modifier. The properties below will be contained in a sub-object identified by the external_id of the modifier in question.
POS Entity
Each menu entity extends this common versioned menu entity.
POS Item Schedule Overrides
An override of a repeating schedule for Item
POS Item Tag
Tag, extended to include merchant and item metadata.
POS Modifier Schedule Overrides
An override of a repeating schedule for Modifier
POS Version
A version of a menu entity. Each menu entity type extends PosVersion within PosEntity.
POSMenuInfo
Top-level menu info included as part of a PosFullMenu object. Contains restaurant media.
Pos Schedule Overrides
A list of override schedules for items and modifiers
PosFullMenu
A full restaurant menu, including sections, menu items, schedules, and all menu info. This object may be compressed in a gzip file in order to save bandwidth, as it contains a substantial amount of data.
While this and the Menu object return similar information, they organize that information in different ways. Menu presents each discreet set of information in its own separate object. This object organizes it in the way an actual menu would be organized; schedules contain sections, which contain menu items.
{
"info":
{
"header_media": "http://res.cloudinary.com/grubhub/image/upload/sjhdfahdfsa.jpg",
"logo_media": "http://res.cloudinary.com/grubhub/image/upload/adfhsdjfdf/ode8r7fhs.jpg",
"search_media": "http://res.cloudinary.com/grubhub/image/upload/sadk8sa/9ew8rush.jpg"
},
"tax_rates": [
{
"external_id": "79b5fc81",
"name": "Default Tax Rate",
"rate": 0.05,
"included_in_item_price": true,
"valid": true
}
],
"schedules": [
{
"external_id": "826991a0",
"name": "Sunday and Monday"
"rules": [
{
"days": [
"SUNDAY"
],
"start": "07:00:00.000",
"end": "19:00:00.000"
},
{
"days": [
"MONDAY"
],
"start": "07:00:00.000",
"end": "19:00:00.000"
}
],
"sections": [
{
"external_id": "79ffafb1",
"name": "APPETIZERS",
"description": "APPETIZERS",
"items": [
{
"external_id": "79fb9101",
"name": "Antipasto Misto",
"description": "Brick oven-roasted peppers, zucchini, artichokes, olives, prosciutto, fresh asparagus, broccoli, fresh mozzarella and grape tomatoes served with baby field greens and balsamic vinaigrette. ",
"calorie_content": "100",
"minimum_serving_size": 0,
"maximum_serving_size": 0,
"minimum_order_quantity": 1,
"media": "http://some.image.com/123",
"tax_rate": "79b5fc81",
"price": 399.0,
"excludes_coupons": false,
"size_prompt": {
"external_id": "80747863",
"name": "Choose a size",
"sizes": [
{
"external_id": "21b83e1f",
"name": "Small",
"price": 2.99,
"calorie_content": "150"
},
{
"external_id": "fbd68d5f",
"name": "Large",
"price": 4.99,
"calorie_content": "250"
}
]
},
"deal": true
"tags": [
{
"group": "LEGACY",
"name": "SODIUM_WARNING"
}
],
"modifier_categories": [
{
"external_id": "79f416f0",
"name": "Antipasto Misto Remove Ingredients",
"min": 0,
"max": 8,
"included": 0,
"batch_quantity": 1,
"price_adjustment": {
"type": "ADD",
"value": 0.5
},
"modifiers": [
{
"external_id": "79e23ca1",
"name": "NO OLIVES",
"price": 0.0,
"calorie_content": "100"
},
{
"external_id": "79e45f81",
"name": "NO DRESSING",
"description": "NO DRESS",
"price": 0.0,
"calorie_content": "100"
},
{
"external_id": "79e4d4b0",
"name": "NO TOMATO",
"price": 0.0,
"calorie_content": "100"
},
{
"external_id": "79e4fbc1",
"name": "NO BROCCOLI",
"price": 0.0,
"calorie_content": "100"
},
{
"external_id": "79e549e1",
"name": "NO CHEESE",
"price": 0.0,
"calorie_content": "100"
},
{
"external_id": "79e59801",
"name": "NO PEPPERS",
"description": "NO PEPPRS",
"price": 0.0,
"calorie_content": "100"
},
{
"external_id": "79e5e621",
"name": "NO ZUCCHINI",
"price": 0.0,
"calorie_content": "100"
},
{
"external_id": "79e63441",
"name": "NO ASPARAGUS",
"price": 0.0,
"calorie_content": "100"
}
]
}
]
},
{
"external_id": "79fc5451",
"name": "Mozzarella Fritta",
"description": "Breaded mozzarella pan-fried in extra-virgin olive oil served over plum tomato sauce with fresh basil. \r\n",
"calorie_content": "100",
"minimum_serving_size": 0,
"maximum_serving_size": 0,
"minimum_order_quantity": 1,
"tax_rate": "79b5fc81",
"price": 799.0,
"excludes_coupons": false,
"tags": [],
"modifier_categories": []
},
{
"external_id": "79fdb3e1",
"name": "Mussel Caruso",
"description": "Tender mussels cooked to order in your choice of a fragrant herbed white wine sauce or our spicy plum tomato sauce.",
"calorie_content": "100",
"minimum_serving_size": 0,
"maximum_serving_size": 0,
"minimum_order_quantity": 1,
"tax_rate": "79b5fc81",
"price": 999.0,
"excludes_coupons": false,
"tags": [],
"modifier_categories": [
{
"external_id": "79fd3eb1",
"name": "Mussels Caruso Sauce ",
"min": 0,
"max": 2,
"included": 0,
"batch_quantity": 1,
"modifiers": [
{
"external_id": "79fca271",
"name": "Spicy Plum Tomato Sauce",
"price": 0.0,
"calorie_content": "100"
},
{
"external_id": "79fcf091",
"name": "White Wine Sauce ",
"price": 0.0,
"calorie_content": "100"
}
]
}
]
}
]
},
{
"external_id": "7a1d22c0",
"name": "SPECIALTIES",
"items": [
{
"external_id": "7a16e131",
"name": "Grilled Steak & Chicken Combo*",
"description": "A combination of 6 oz. of sliced flat iron steak and a lemon-thyme chicken breast over tomatoes. Served with mashed potatoes and fresh asparagus. ",
"calorie_content": "100",
"minimum_serving_size": 0,
"maximum_serving_size": 0,
"minimum_order_quantity": 1,
"tax_rate": "79b5fc81",
"price": 1799.0,
"excludes_coupons": false,
"tags": [],
"modifier_categories": [
{
"external_id": "7a142211",
"name": "Meat Temperature",
"min": 0,
"max": 5,
"included": 0,
"batch_quantity": 1,
"modifiers": [
{
"external_id": "7a1337b1",
"name": "RARE",
"description": "** RARE **",
"price": 0.0,
"calorie_content": "100"
},
{
"external_id": "7a135ec1",
"name": "MEDIUM RARE",
"description": "**MED RARE**",
"price": 0.0,
"calorie_content": "100"
},
{
"external_id": "7a13ace0",
"name": "MEDIUM",
"description": "** MEDIUM **",
"price": 0.0,
"calorie_content": "100"
},
{
"external_id": "7a13d3f1",
"name": "MEDIUM WELL",
"description": "**MED WEL**",
"price": 0.0,
"calorie_content": "100"
},
{
"external_id": "7a13fb01",
"name": "WELL DONE",
"description": "**WEL DONE**",
"price": 0.0,
"calorie_content": "100"
}
]
},
{
"external_id": "7a15a8b1",
"name": "Add a Salad for $2.99",
"min": 0,
"max": 5,
"included": 0,
"batch_quantity": 1,
"modifiers": [
{
"external_id": "7a147031",
"name": "Caesar-Side",
"price": 299.0,
"calorie_content": "100"
},
{
"external_id": "7a149741",
"name": "INSAL W/BALS VIN",
"price": 299.0,
"calorie_content": "100"
},
{
"external_id": "7a14e561",
"name": "INSAL NO DRESS",
"price": 299.0,
"calorie_content": "100"
},
{
"external_id": "7a153381",
"name": "INSAL W/HOUSE",
"price": 299.0,
"calorie_content": "100"
},
{
"external_id": "7a155a91",
"name": "INSAL W/BURGNDY",
"price": 299.0,
"calorie_content": "100"
}
]
},
{
"external_id": "7a169311",
"name": "Grilled Steak & Chicken Combo Remove Ingredients",
"min": 0,
"max": 3,
"included": 0,
"batch_quantity": 1,
"modifiers": [
{
"external_id": "7a15cfc1",
"name": "NO TOMATO",
"price": 0.0,
"calorie_content": "100"
},
{
"external_id": "7a15f6d1",
"name": "NO POTATOES",
"price": 0.0,
"calorie_content": "100"
},
{
"external_id": "7a1644f1",
"name": "NO ASPARAGUS",
"price": 0.0,
"calorie_content": "100"
}
]
}
]
}
]
}
]
},
{
"external_id": null,
"name": "Full Week"
"rules": [
{
"days": [
"MONDAY",
"TUESDAY",
"WEDNESDAY",
"THURSDAY",
"FRIDAY",
"SATURDAY",
"SUNDAY"
],
"start": "00:00:00.000",
"end": "23:59:59.999"
}
],
"sections": [
{
"external_id": "79ffafb1",
"name": "APPETIZERS",
"description": "APPETIZERS",
"items": [
{
"external_id": "79fc0631",
"name": "Antipasto Sampler",
"description": "Mozzarella Fritta, Tuscan Chicken Wings, Meatballs and Tomato Bruschetta.",
"calorie_content": "100",
"minimum_serving_size": 0,
"maximum_serving_size": 0,
"minimum_order_quantity": 1,
"tax_rate": "79b5fc81",
"price": 1099.0,
"excludes_coupons": false,
"tags": [],
"modifier_categories": []
}
]
}
]
}
]
}
PosFullMenuUpdateResult
The response payload from a full menu ingestion.
PosFullMenuUpdateStatus
The current status of a menu ingestion job.
PosFullMenuValidationResult
The results from a full menu validation. If successful, the valid property will be true. If the validation fails, the valid property will be false and the validation_errors property will indicate which menu field caused the failure and why.
PosScheduleOverrideExternalIdRequest
Information about a schedule override for a specific menu item, whether the item should be hidden (86'd) or shown (seasonal items).
Price Adjustment
An adjustment to an existing base price.
Extends PosVersion and wrapped by PosEntity.
Price Adjustment Type
DEPRECATED. Type of price adjustment:
- Override: The base price is replaced with the adjustment value (value must be nonnegative)
- Multiply: The base price is multiplied by the adjustment value (value must be nonnegative)
- Add: The adjustment value is added to the base price. If negative, the resulting minimum base price will not adjust below 0.
string
- OVERRIDE
- MULTIPLY
- ADD
Schedule
A schedule during which an Item may be made available. Typical usages include Breakfast, Lunch, Dinner, Weekend Brunch, etc.
Extends PosVersion and wrapped by PosEntity.
Schedule Override
An override of a repeating schedule for an Item. Used for "86-ing" an Item that is out of stock.
Extends PosVersion and wrapped by PosEntity.
Schedule Rule
A time period and repetition rule for use in Schedules.
Extends PosVersion and wrapped by PosEntity.
Schedule Rule Interval
A time interval for use in ScheduleRules.
Extends PosVersion and wrapped by PosEntity.
Size
For use in the Item and Modifier pricing models, and the Modifier Prompt selection models.
Extends PosVersion and wrapped by PosEntity.
Size Prompt
Collection of Sizes and associated metadata, for use in the Item pricing model.
Extends PosVersion and wrapped by PosEntity.
Sized Price
An association of a price to a Size. For use in Size Prompts for the Item pricing model.
Extends PosVersion and wrapped by PosEntity.
Sized Price
An association of a price to a Size. For use in Size Prompts for the Item pricing model.
Tag
Tags for menu items are used to flag certain items for special delivery handling, regulatory treatment, and to denote an item is eligible for certain flags and icons on Grubhub diner properties.
Tag Name
Tag names for menu items.
string
- ADVANCED_ORDERING
- ALCOHOL
- DESSERT
- DAIRY_FREE
- DRINK
- GLUTEN_FREE
- KOSHER
- LOW_FAT
- NOT_FOR_BIKER
- NUT_FREE
- RAW_FOOD_WARNING
- SPECIALTY
- SPICY
- SODIUM_WARNING
- TAX_EXEMPT
- VEGAN
- VEGETARIAN
Tax Rate
Tax rate to be applied at order checkout, if the diner is not tax-exempt.
Extends PosVersion and wrapped by PosEntity.
NOTE - The tax rate listed here applies only to the items and modifiers with which it is associated. All other menu items will use the merchant tax rate.
Validation Error
Description of why an operation was invalid.