Returns the latest menu for your location. The location has to be verified first in order to call this API.
You can only access this API if you have an access token issued with the scope menus.
Heartland Restaurant Menu Response Example
First Menu Fetch:
When onboarding a new ordering platform for a location, our system needs to prepare a menu specifically for that ordering platform. So, after OAuth, the first menu pull should not happen until you get the first Update Notice Webhook from ItsaCheckmate. That way you can be sure that you are not attempting to retrieve the menu prematurely.
Hours:
Note that the hours array of Objects corresponds to the entire menu Object - so if you intend to have different availability - you will need to have multiple menus. If hours are provided for some days but not others, those omitted days are assumed to have no availability for the items in that Menu.
See Special Hours link in the Side Navigation Menu - under Special Notes - for Special Hours information.
Allow Mod Quantities:
The "meta" Object in the Menu payload will have an allows_mod_quantities
boolean value. We currently have this set to true
globally. This means that sending Orders with multiple quantities of a single modifier is permitted if not otherwise restricted by the allows_mod_quantities
value set on the Modifier Group level.
Here we can see allows_mod_quantities
set to true
in the "meta" Object:
"meta": {
"allows_item_notes": true,
"allows_order_notes": true,
"allows_mod_quantities": true
}
And - here we can see the allow_modifier_multiple_quantity
value set to true
in a Modifier Group Object:
"modifier_groups": [
{
"id": "306773fe-ca63-41fb-b582-97ba59240787",
"name": "Cheese",
"modifiers": [
{
"id": "65b5f03b-7ecb-47df-8c02-644ebd49ee7e",
"name": "Cheddar",
"price": 50,
"description": "",
"suspend_until": "1660363200",
"is_alcohol": false,
"modifier_groups": [
],
"nutritional_info": ""
}
],
"description": "",
"maximum_amount": 1,
"minimum_amount": 0,
"allow_modifier_multiple_quantity": true
}
]
Active Item Status:
Active / not Active - item status is represented by a suspend_until
- attribute - on the item
object in the Menu payload. A User has the ability to mark an item as unavailable and specify the time period. Our system uses the suspend_until
field for this purpose. If an item is marked as unavailable, our system will include the time (in unix time) at which that item should be available again in the ‘suspend_until’ field. Upon any menu import your system should perform a check to see if that time is in the past or in the future. If it is in the future, mark the item as sold out. If in the past or blank/null, mark the item as available. Additionally, our system will perform an automatic menu update - and also send an Update Notice Webhook - whenever this time has arrived for any element in the menu, allowing your system the ability to perform that check upon a new menu ingestion when necessary (when the item should be available again). Keep in mind that if a user manually marks an item as available from unavailable, the ‘suspend_until’ field will be blank/null again. But the previous value will remain if the item is marked available by our system automatically instead of manually by a user.
Alcoholic Items:
Depending upon if alcoholic items are allowed, that will be sent in response as is_alcohol
under items
and modifiers
.
For example:
{
"items": [
{
"id": "97e2493f-9eab-4fba-8b08-4ad63c0a98c0",
"name": "Hamburger",
"price": 800,
"is_alcohol": false,
"tax_rate": 7.0,
"image_urls": [
{
"link": "https://d2q8km48t273sa.cloudfront.net/menu_photos/225501/menu_library/705b3646db8ee3569c1fffcf098b5b60.png"
}
],
"description": "Fresh, never frozen beef topped with pickles, onion, ketchup, and mustard on a toasted bun.",
"suspend_until": "0",
"modifier_groups": [
{
"id": "306773fe-ca63-41fb-b582-97ba59240787",
"name": "Cheese",
"modifiers": [
{
"id": "65b5f03b-7ecb-47df-8c02-644ebd49ee7e",
"name": "Cheddar",
"price": 50,
"description": "",
"suspend_until": "1660363200",
"is_alcohol": false,
"modifier_groups": [
],
"nutritional_info": ""
}
],
"description": "",
"maximum_amount": 1,
"minimum_amount": 0,
"allow_modifier_multiple_quantity": true
}
],
"nutritional_info": "Fresh, never frozen beef topped with pickles, onion, ketchup, and mustard on a toasted bun."
}
]
}
Preparation Time Average Minutes
[
{
"id": 123456,
"name": "Test Store"
[ ... ommitted objects for location, meta, etc. ]
"prep_time_average_minutes": 35
}
]
Additionally, a prep_time_average_minutes
value - of type integer - can conditionally be applied to the Menu API - response. This is something that the store can configure itself through the menu management portal - on a Location basis - or Checkmate staff can set on their behalf - on a per Location per Order Platform - basis