Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Toast Menus API
contact:
name: Toast developer support
version: '1.0'
description: 'Operations tagged Menus across 3 of this provider''s published API definitions: toast-configuration-openapi.yaml, toast-menus-api-openapi.yml, toast-menus-v3-openapi.yaml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://toast-api-server/config/v2
- url: https://toast-api-server/authentication/v1
- url: https://toast-api-server/menus/v3
tags:
- name: Menus
paths:
/menus/{guid}:
get:
tags:
- Menus
operationId: menusGuidGet
summary: 'Get a menu
'
description: 'Returns a `Menu` object
containing information about a menu configured for a
restaurant. For example, a restaurant might have drinks,
dinner, and dessert menus.
'
parameters:
- name: Toast-Restaurant-External-ID
description: 'The Toast POS GUID of the restaurant that the configuration
applies to.
'
in: header
required: true
schema:
type: string
- name: guid
description: The Toast POS GUID of the menu.
in: path
required: true
schema:
type: string
responses:
'200':
description: Returns a `Menu` object.
content:
application/json:
schema:
$ref: '#/components/schemas/Menu'
security:
- oauth2:
- config:read
servers:
- url: https://toast-api-server/config/v2
/menus:
get:
tags:
- Menus
operationId: menusGet
summary: 'Get menus
'
description: 'Returns an array of `Menu`
objects containing information about menus configured for a
restaurant. For example, a restaurant might have drinks,
dinner, and dessert menus. If a `lastModified` date is
specified, returns all objects that were created or modified
after that date.
'
parameters:
- name: Toast-Restaurant-External-ID
description: 'The Toast POS GUID of the restaurant that the configuration
applies to.
'
in: header
required: true
schema:
type: string
- name: pageToken
in: query
description: "A string that identifies the set of data objects that the \nendpoint will return in its response data. You can use this \nparameter to retrieve one page of response data. You \nget the value that you supply in the `pageToken` parameter \nfrom the `Toast-Next-Page-Token` header field value of a \nprevious request to the endpoint. For more information, see \n<a href=\"https://doc.toasttab.com/doc/devguide/apiResponseDataPagination.html\">Paginating response data</a>.\n"
schema:
type: string
- name: lastModified
description: 'Limits the return data to objects created or modified after
a specific date and time. For example:
`2024-06-20T00:00:00.000%2B0000`.
'
in: query
required: false
schema:
type: string
format: date-time
responses:
'200':
description: Returns an array of `Menu` objects.
headers:
Toast-Next-Page-Token:
description: "A string that identifies the following set of objects \nthat the endpoint will return. You can use this value \nto retrieve that page of response data. To return \nthe next page of objects you supply this value in the \n`pageToken` parameter of the next request to the \nendpoint. For more information, see \n<a href=\"https://doc.toasttab.com/doc/devguide/apiResponseDataPagination.html\">Paginating response data</a>.\n\nThe endpoint does not return the \n`Toast-Next-Page-Token` field if there is no following \npage of response data objects. For example, the \nendpoint will not return a `Toast-Next-Page-Token` \nheader field if all the data objects fit in one \nresponse or if you have reached the last page of \nresponse objects.\n"
schema:
type: string
content:
application/json:
schema:
title: Response
type: array
minItems: 0
maxItems: 300
items:
$ref: '#/components/schemas/Menu'
security:
- oauth2:
- config:read
servers:
- url: https://toast-api-server/config/v2
components:
schemas:
Menu:
type: object
allOf:
- $ref: '#/components/schemas/ExternalReference'
- type: object
properties:
name:
type: string
description: 'The name of the menu as it appears in the Toast POS.
'
orderableOnline:
type: string
description: 'Deprecated. Indicates whether restaurant guests can order from the menu online.
Use the `visibility` array that the menus API (V2) returns for each menu entity, instead of this
`orderableOnline` value, to determine if the entity should be
available for online ordering.
'
enum:
- 'YES'
- 'NO'
visibility:
type: string
description: 'Deprecated. Indicates where the menu is displayed and who can see it.
* ALL: Visible to everyone (servers and customers)
* POS_ONLY: Only visible to servers
* NONE: Hidden from everyone
Use the `visibility` array that the menus API (V2) returns for each menu
entity, instead of this `visibility` value, to determine where the
entity should be visible.
'
enum:
- ALL
- POS_ONLY
- NONE
groups:
type: array
description: 'An array of the `MenuGroup` objects
that are part of this menu.
'
minItems: 0
items:
$ref: '#/components/schemas/ExternalReference'
images:
type: array
description: A collection of images associated with the menu.
items:
$ref: '#/components/schemas/Image'
unitOfMeasure:
type: string
description: 'The unit of measure used to determine the price of items in this menu. For example, $10.00 per gram.
The default is `NONE`, which means that the item is not meant to
be measured during a sale.
Values are:
* `NONE` - The item is not meant to be measured.
* `LB` - Weighed in pounds.
* `OZ` - Weighed in ounces.
* `KG` - Weighed in kilograms.
* `G` - Weighed in grams.
* `GAL` - Measured in gallons.
* `L` - Measured in liters.
* `ML` - Measured in milliliters.
* `FL_OZ` - Measured in fluid ounces.
* `M` - Measured in meters.
* `CM` - Measured in centimeters.
* `FT` - Measured in feet.
* `IN` - Measured in inches.
* `YD` - Measured in yards.
'
enum:
- NONE
- LB
- OZ
- KG
- G
- GAL
- L
- ML
- FL_OZ
- M
- CM
- FT
- IN
- YD
ToastReference:
type: object
description: A wrapper object with fields that allow reference to a Toast entity by Toast GUID.
required:
- guid
- entityType
properties:
guid:
description: The GUID maintained by the Toast POS.
type: string
entityType:
description: The type of object this is.
type: string
ExternalReference:
type: object
allOf:
- $ref: '#/components/schemas/ToastReference'
- type: object
properties:
externalId:
description: External identifier string, prefixed by the naming authority.
type: string
description: A wrapper object with fields that allow reference to a Toast entity by Toast GUID or a partner's identifier.
Image:
type: object
description: Information about an image associated with a menu or menu item.
properties:
url:
description: The web address of the image.
type: string
PreModifier:
type: object
description: 'Information about a pre-modifier configured for this restaurant.
'
properties:
name:
type: string
description: 'A descriptive name for this pre-modifier, for example, "NO" or "EXTRA".
'
guid:
description: 'A unique identifier for this pre-modifier group, assigned by the Toast POS system.
'
type: string
multiLocationId:
$ref: '#/components/schemas/MultiLocationId'
fixedPrice:
description: 'An optional fixed price for this pre-modifier. The fixed price is added to the cost of the modifier option that the pre-modifier is applied to.
A PreModifier object has two optional values, `fixedPrice` and `multiplicationFactor`, that both alter the price of a modifier option when the pre-modifier is applied to it. However, these values cannot be used at the same time. If you specify a `fixedPrice` value for a premodifier, then `multiplicationFactor` is null. If you specify a `multiplicationFactor` for a pre-modifier, then `fixedPrice` is null. If you choose not to assign either a fixed price or a multiplication factor to a pre-modifier, then the `fixedPrice` value is 0 and the `multiplicationFactor` is null.
'
type:
- number
- 'null'
format: double
multiplicationFactor:
description: 'An optional number that specifies how much the cost of a modifier option is multiplied by when this pre-modifier is applied to it. For example, an EXTRA pre-modifier option could specify a `multiplicationFactor` of 1.5 to indicate that adding extra cheese to a menu item costs one and a half times the regular price of the cheese modifier option.
A PreModifier object has two optional values, `fixedPrice` and `multiplicationFactor`, that both alter the price of a modifier option when the pre-modifier is applied to it. However, these values cannot be used at the same time. If you specify a `fixedPrice` value for a premodifier, then `multiplicationFactor` is null. If you specify a `multiplicationFactor` for a premodifier, then `fixedPrice` is null. If you choose not to assign either a fixed price or a multiplication factor to a pre-modifier, then the `fixedPrice` value is 0 and the `multiplicationFactor` is null.
'
type:
- number
- 'null'
format: double
displayMode:
description: "A string that indicates how the pre-modifier is displayed on tickets and receipts:\n * PREFIX: The pre-modifier name is placed before the modifier option name, for example, \"EXTRA Cheese\".\n * SUFFIX: The pre-modifier name is placed after the modifier option name, for example, \"Cheese EXTRA\".\n"
type: string
enum:
- PREFIX
- SUFFIX
posName:
$ref: '#/components/schemas/PosName'
posButtonColorLight:
$ref: '#/components/schemas/PosButtonColorLight'
posButtonColorDark:
$ref: '#/components/schemas/PosButtonColorDark'
chargeAsExtra:
type:
- boolean
- 'null'
description: 'When true, selecting this pre-modifier adds an additional portion of the modifier to the menu item and adds the price of the additional portion to the menu item according to the rules listed below.
If the modifier group that the modifier belongs to:
* Uses the **No charge** option, the Toast platform uses the modifier''s <a href="https://doc.toasttab.com/doc/platformguide/adminPricingModifierOptions.html#adminBasingModifierOptionsOnExistingMenuItems">override price</a> or, if no override price exists, the <a href="https://doc.toasttab.com/doc/platformguide/adminPricingModifierOptions.html#adminUnderstandingAModifierOptionsItemReference">item reference</a> price as the price of the additional portion.
* Uses the **Individual** option where each modifier has its own price, the Toast platform uses the modifier''s override price or, if no override price exists, the item reference price as the price of the additional portion.
* Uses the **Group** option where all modifiers in the group share a price, the Toast platform uses the group price as the price of the additional portion.
Additionally, if the modifier group that the modifier belongs to uses:
* <a href="https://doc.toasttab.com/doc/platformguide/adminSizePrice.html#adminSizePricingForModifierGroups">Size</a> pricing, the Toast platform uses the size price that matches the size of the menu item when determining the price of the additional portion.
* <a href="https://doc.toasttab.com/doc/platformguide/adminSequencePrice.html">Sequence</a> pricing, the Toast platform treats the additional portion as the next modifier in the sequence and prices it using the sequence pricing rules that have been specified.
* <a href="https://doc.toasttab.com/doc/platformguide/adminSizeSequencePrice.html">Size/sequence</a> pricing, the Toast platform matches the size of the additional portion to the size of the menu item and then treats it as the next modifier in the sequence when determining the price of the additional portion.
The `chargeAsExtra` value is `null` if it has not been set.
'
plu:
type: string
description: 'The price lookup (PLU) code for this pre-modifier. The PLU code can contain both numbers and letters. This value contains an empty string if a PLU code has not been defined.
'
CatalogProductOption:
type: object
description: 'An option for a retail product.
'
properties:
id:
type: string
format: uuid
description: 'The unique identifier for the product option.
'
name:
type: string
description: 'The name of the product option, for example, "size".
'
sortOrder:
type: integer
description: 'The sort order of the product option.
'
values:
type: array
description: 'List of values for the product option.
'
items:
$ref: '#/components/schemas/CatalogProductOptionValue'
Portion:
type: object
description: 'A container for the modifier groups that can be applied to a portion of a menu item.
'
properties:
name:
description: 'A descriptive name for this portion, for example, "1st Half" or "2nd Half".
'
type: string
guid:
description: 'A unique identifier for this portion, assigned by the Toast POS system.
'
type: string
modifierGroupReferences:
type: array
description: 'An array of `referenceId`s for `ModifierGroup` objects. These objects define the modifier groups that can be applied to this portion.
'
minItems: 0
items:
type: integer
priceScaleFactor:
type:
- number
- 'null'
format: double
description: 'A multiplier that adjusts the cost of modifiers in this portion.
'
SizeSequencePricingRule:
type: object
description: 'A multi-use object that defines the pricing rules for modifier options that belong to a modifier group that uses the Size Price, Sequence Price, or Size/Sequence Price pricing strategy. The contents of this object depend on the pricing strategy that is in effect.
'
properties:
sizeName:
type:
- string
- 'null'
description: 'A string that represents the size of a modifier option in this modifier group, for example, Small, Medium, or Large.
With Size Price and the Size/Sequence Price pricing strategies, the price of a modifier option changes based on the size of the menu item it is applied to, for example, a topping costs $1 on a small pizza and $2 on a large pizza. To determine which size and size-based price to use for a modifier option, the Toast POS system matches the size name of the modifier option to the size name of the menu item. For example, the Small size of a modifier option would match the Small size of a menu item. The `sizeName` value of the `SizeSequencePricingRule` object represents the modifier option size while the `sizeGuid` value represents the matching menu item size.
The Toast POS system does allow a configuration where the size of the modifier option is specified independently from the size of the menu item it applies to. In this scenario, you could order a Large menu item and apply a Small size of the modifier option to it. This configuration is unusual but the menus API supports it. When this configuration is in use, the `sizeName` value is populated with the modifier option size but the `sizeGuid` value that represents the menu item size will be null because there is no matching menu item size.
The `sizeName` value is null if the modifier group uses the Sequence Price pricing strategy because this strategy does not use sizes.
See the <a href="https://doc.toasttab.com/doc/platformguide/adminPricingStrategiesOverview.html">Pricing strategies</a> section in the Toast Platform Guide for information on the Size Price, Sequence Price, and Size/Sequence Price pricing strategies.
'
sizeGuid:
type:
- string
- 'null'
description: 'The GUID of the modifier option where a menu item size has been defined that matches the `sizeName` value. For example, if a menu item has Small and Large sizes, those sizes are represented in a Size modifier group with a Small modifier option and a Large modifier option. It is the GUID of one of those size modifier options that appears in this value. If the `sizeName` value is Small, then the `sizeGuid` value would contain the Small modifier option’s GUID.
With Size Price and the Size/Sequence Price pricing strategies, the price of a modifier option changes based on the size of the menu item it is applied to, for example, a topping costs $1 on a small pizza and $2 on a large pizza. To determine which size and size-based price to use for a modifier option, the Toast POS system matches the size name of the modifier option to the size name of the menu item. For example, the Small size of a modifier option would match the Small size of a menu item. The `sizeName` value represents the modifier option size while the `sizeGuid` value represents the matching menu item size.
The Toast POS system does allow a configuration where the size of the modifier option is specified independently from the size of the menu item it applies to. In this scenario, you could order a Large menu item and apply a Small size of the modifier option to it. This configuration is unusual but the menus API supports it. When this configuration is in use, the `sizeName` value is populated with the modifier option size but there is no corresponding `sizeGuid` for the menu item size.
The `sizeGuid` value is null if the modifier group uses the Sequence Price pricing strategy because this strategy does not use sizes.
See the <a href="https://doc.toasttab.com/doc/platformguide/adminPricingStrategiesOverview.html">Pricing strategies</a> section in the Toast Platform Guide for information on the Size Price, Sequence Price, and Size/Sequence Price pricing strategies.
'
sequencePrices:
type: array
description: "An array of `SequencePrices` objects that define the size, sequence, or size/sequence prices for the modifier options in this modifier group.\n\nBecause they are multi use objects, the `SequencePrices` objects always contain `sequence` and `price` values for all three pricing strategies. However, the `sequence` is always 1 for the Size Price pricing strategy because only one price is defined per size for that strategy. For example, the `sequencePrices` value for a modifier group priced using the Size Price pricing strategy looks similar to the following:\n```\n\"sizeSequencePricingRules\": [\n {\n \"sizeName\": \"Small\",\n \"sizeGuid\": \"e02d1a57-5f9f-4800-a8c3-a5fe1a0b029b\",\n \"sequencePrices\": [\n {\n \"sequence\": 1,\n \"price\": 2\n }\n ]\n },\n {\n \"sizeName\": \"Large\",\n \"sizeGuid\": \"0e206b2d-72ab-46d1-b273-a5425cbef9a5\",\n \"sequencePrices\": [\n {\n \"sequence\": 1,\n \"price\": 4\n }\n ]\n }\n ]\n``` \n\nThe modifier options in this group cost $2.00 for the Small size and $4.00 for the Large size.\n\nThe `sequencePrices` value for a modifier group priced using the Sequence Price pricing strategy looks like this:\n```\n\"sizeSequencePricingRules\": [\n {\n \"sizeName\": null,\n \"sizeGuid\": null,\n \"sequencePrices\": [\n {\n \"sequence\": 1,\n \"price\": 1\n },\n {\n \"sequence\": 2,\n \"price\": 2\n },\n {\n \"sequence\": 3,\n \"price\": 2.5\n }\n ]\n }\n ]\n```\n\nThe first modifier option in this group costs $1.00, the second modifier option costs $2.00, and any additional modifier options from this group costs $2.50.\n\nThe `sequencePrices` value for a modifier group using the Size/Sequence Price pricing strategy looks like this:\n```\n\"sizeSequencePricingRules\": [\n {\n \"sizeName\": \"Small\",\n \"sizeGuid\": \"e02d1a57-5f9f-4800-a8c3-a5fe1a0b029b\",\n \"sequencePrices\": [\n {\n \"sequence\": 1,\n \"price\": 1\n },\n {\n \"sequence\": 2,\n \"price\": 2\n }\n ]\n },\n {\n \"sizeName\": \"Large\",\n \"sizeGuid\": \"0e206b2d-72ab-46d1-b273-a5425cbef9a5\",\n \"sequencePrices\": [\n {\n \"sequence\": 1,\n \"price\": 3\n },\n {\n \"sequence\": 2,\n \"price\": 4\n }\n ]\n }\n ]\n```\n\nThe first modifier option on a Small menu item costs $1.00 and additional modifier options on a Small cost $2.00, while the first modifier option on a Large menu item costs $3.00 and additional modifier options on a Large cost $4.00.\n"
items:
$ref: '#/components/schemas/SequencePrice'
CatalogProductVariantOption:
type: object
description: 'A selected option for a retail product variant.
'
properties:
id:
type: string
format: uuid
description: 'The unique identifier for the product variant option.
'
name:
type: string
description: 'The name of the product variant option, for example, "size".
'
sortOrder:
type: integer
description: 'The sort order of the product variant option.
'
value:
$ref: '#/components/schemas/CatalogProductOptionValue'
Availability:
type: object
description: 'Information about when a menu is available for use.
'
properties:
alwaysAvailable:
type: boolean
description: "Indicates whether this menu is available 24 hours per day, 7 days a week. If `alwaysAvailable` is FALSE, then a `schedule` value is included in the `Availability` object to define the specific times and days a menu is available. If `alwaysAvailable` is TRUE, then the `schedule` value is omitted. \n"
schedule:
type: array
description: 'An array of `Schedule` objects that indicate the specific days and times a menu is available. If `alwaysAvailable` is TRUE, then the menu is available 24 hours per day, 7 days per week, and this `schedule` value is omitted from the `Availabilty` object.
'
items:
$ref: '#/components/schemas/Schedule'
Image_2:
type:
- string
- 'null'
description: 'The URL to an image that has been uploaded for this menu entity. This value is null if no image has been specified.
'
Height:
type:
- number
- 'null'
description: 'The height of the item or modifier. Use the `dimensionUnitOfMeasure` value to determine the unit of measurement.
The `height` value is `null` if no height is specified for the item or modifier.
You can use the `length`, `height`, and `width` values to determine the overall size of the item or modifier. This information is useful, for example, when determining shipping costs or choosing the size of delivery vehicle to use.
'
format: float
ItemTag:
type: object
description: 'A descriptive term that identifies a characteristic of a menu item or menu group, for example, vegetarian, gluten-free, or alcohol.
'
properties:
name:
description: 'A descriptive name for this item tag, for example, "Vegetarian" or "Alcohol".
'
type: string
guid:
description: 'A unique identifier for this item tag category, assigned by the Toast POS system.
'
type: string
Length:
type:
- number
- 'null'
description: 'The length of the item or modifier. Use the `dimensionUnitOfMeasure` value to determine the unit of measurement.
The `length` value is `null` if no length is specified for the item or modifier.
You can use the `length`, `height`, and `width` values to determine the overall size of the item or modifier. This information is useful, for example, when determining shipping costs or choosing the size of delivery vehicle to use.
'
format: float
ModifierGroup:
type: object
description: 'Information about a modifier group configured for this restaurant, including an array of modifier options contained in the group.
'
properties:
name:
description: 'A descriptive name for this modifier group, for example, "Pizza Toppings" or "Salad Dressings".
'
type: string
guid:
description: 'A unique identifier for this modifier group, assigned by the Toast POS system.
'
type: string
referenceId:
description: 'An integer identifier that is used to refer to this modifier group by items and portions that use it.
'
type: integer
multiLocationId:
$ref: '#/components/schemas/MultiLocationId'
masterId:
$ref: '#/components/schemas/MasterId'
posName:
$ref: '#/components/schemas/PosName'
posButtonColorLight:
$ref: '#/components/schemas/PosButtonColorLight'
posButtonColorDark:
$ref: '#/components/schemas/PosButtonColorDark'
visibility:
$ref: '#/components/schemas/Visibility'
pricingStrategy:
type: string
description: "A string that represents the pricing strategy used for this modifier group.\n\nIf there is no additional charge for the modifier options in this group, or if the modifier options in the group are priced individually, then the `pricingStrategy` value is NONE.\n\nIf the modifier group is priced at the group level and is using the:\n * Fixed Price pricing strategy, then the `pricingStrategy` value is NONE.\n * Sequence Price pricing strategy, then the `pricingStrategy` value is SEQUENCE_PRICE.\n * Size Price pricing strategy, then the `pricingStrategy` value is SIZE_PRICE.\n * Size/Sequence Price pricing strategy, then the `pricingStrategy` value is SIZE_SEQUENCE_PRICE.\n\n \nIf the `pricingStrategy` value is NONE, then the prices for the modifier options in this group are resolved down to the modifier option level and you can retrieve them from the `price` value of the individual `ModifierOption` objects.\n\nIf the `pricingStrategy` value is SIZE_PRICE, SEQUENCE_PRICE, or SIZE_SEQUENCE_PRICE, then you must use the rules provided in _this modifier group's_ `pricingRules` value to calculate the prices for the modifier options in the group.\n"
pricingRules:
type:
- object
- 'null'
description: 'A `PricingRules` object with information for calculating the prices for the modifier options contained in this modifier group. You use a modifier group''s `pricingRules` object, in conjunction with its `pricingStrategy` value, to calculate prices for the group''s modifier options when the group uses the Size Price, Sequence Price, or Size/Sequence Price pricing strategy.
The `pricingRules` object takes different forms depending on the pricing strategy configured for the modifier group. Use the `pricingStrategy` value to determine which pricing strategy has been used so that you can properly interpret the data in the `pricingRules` object. If the `pricingStrategy` value is NONE, the `pricingRules` object is null because you can retrieve the price from a `ModifierOption` object''s `price` value without additional calculation. For the SIZE_PRICE, SEQUENCE_PRICE, and SIZE_SEQUENCE_PRICE pricing strategies, the `pricingRules` object contains additional values that you use to calculate the modifier option prices.
'
items:
$ref: '#/components/schemas/PricingRules'
defaultOptionsChargePrice:
description: "Indicates whether the prices associated with any default modifiers in this group are added to the cost of the menu items they modify.\n\nValues are:\n * NO: The default modifier price is ignored. No change is made to the cost of the menu item.\n * YES: The default modifier price is added to the menu item price. YES is the default setting for `defaultOptionsChargePrice`.\n\nFor example, consider a scenario where Cheese is a default modifier for a Burger menu item (this means that Cheese is always included as a modifier option when you order a Burger unless it is explicitly removed). The price of the Cheese modifier option is $1 while the price of the Burger is $8. When `defaultOptionsChargePrice` is set to NO, a Burger costs $8 (the Cheese default modifier price is not added to the Burger price). When `defaultOptionsChargePrice` is set to YES, a Burger costs $9 (the Cheese default modifier price is added to the Burger price). If the Cheese default modifier is removed from the Burger menu item, the price of the Burger remains $8. Removing a default modifier from a menu item does not change the menu item’s price, regardless of the `defaultOptionsChargePrice` setting.\n\nThe `defaultOptionsChargePrice` value must be set to NO in order to use substitution pricing. See `defaultOptionsSubstitutionPricing` for more information.\n"
type: string
enum:
- false
- true
defaultOptionsSubstitutionPricing:
description: "Indicates whether substitution pricing is enabled for the modifier group.\n\nIn Toast Web, you must set the `defaultOptionsChargePrice` configuration for a modifier group to NO before you can enable substitution pricing for the group. This means that the costs of default modifiers in the group do not increase the price of the menu items they apply to. These default modifiers continue to have a monetary value, however. By enabling substitution pricing, you are configuring the modifier group so that if any of its default modifiers are removed from a menu item, the monetary value of those default modifiers can be applied to the purchase of other modifier options withi
# --- truncated at 32 KB (202 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/toast/refs/heads/main/openapi/toast-menus-api-openapi.yml