Grubhub · Schema
PosNormalizedMenu
The normalized menu.
Food DeliveryRestaurantMarketplaceOnline OrderingPoint-of-SaleLogisticsLast Mile DeliveryMenu ManagementHospitalityLocal CommerceDelivery
Properties
| Name | Type | Description |
|---|---|---|
| menu_info | object | |
| tax_rates | array | Information about the tax rates for this menu. |
| repeating_schedules | array | A list of the weekly schedules during which menu items may be made available. Typical usages include Breakfast, Lunch, Dinner, Weekend Brunch, etc. |
| menu_sections | array | The categories on a normalized menu - such as appetizers, breakfast, or drinks - including the menu items that these sections contain. |
| items | array | Information about all of the individual menu items that can be ordered as part of this menu. |
| modifier_prompts | array | A list of top-level modifier categories, which can contain multiple modifier options. |
| modifier_lists | array | A list of the modifier lists included with this menu in any modifier prompt. |
| modifiers | array | A list of selectable options within a modifier prompt that changes a menu item. That change may include price and calorie variations, and may be affected by size selections. This list will include all |
| size_prompts | array | Information about item sizing, including display text and pricing. |
| sizes | array | The sizes for all items in this menu. |
| availability_ranges | array | A list of the times during which seasonal menu items can be available. |
| availability_overrides | array | A list of the times during which items, modifiers or menu sections are not available for ordering. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/grubhub/main/json-schema/grubhub-posnormalizedmenu-schema.json",
"title": "PosNormalizedMenu",
"x-generated": "2026-09-17",
"x-method": "derived",
"x-source": "openapi/grubhub-menu-openapi.yml#/components/schemas/PosNormalizedMenu",
"required": [
"menu_info"
],
"type": "object",
"properties": {
"menu_info": {
"$ref": "#/$defs/MenuInfo"
},
"tax_rates": {
"type": "array",
"description": "Information about the tax rates for this menu.",
"items": {
"$ref": "#/$defs/TaxRate"
}
},
"repeating_schedules": {
"type": "array",
"description": "A list of the weekly schedules during which menu items may be made available. Typical usages include Breakfast, Lunch, Dinner, Weekend Brunch, etc.",
"items": {
"$ref": "#/$defs/RepeatingSchedule"
}
},
"menu_sections": {
"type": "array",
"description": "The categories on a normalized menu - such as appetizers, breakfast, or drinks - including the menu items that these sections contain.",
"items": {
"$ref": "#/$defs/MenuSection"
}
},
"items": {
"type": "array",
"description": "Information about all of the individual menu items that can be ordered as part of this menu.",
"items": {
"$ref": "#/$defs/Item"
}
},
"modifier_prompts": {
"type": "array",
"description": "A list of top-level modifier categories, which can contain multiple modifier options.",
"items": {
"$ref": "#/$defs/ModifierPrompt"
}
},
"modifier_lists": {
"type": "array",
"description": "A list of the modifier lists included with this menu in any modifier prompt.",
"items": {
"$ref": "#/$defs/ModifierList"
}
},
"modifiers": {
"type": "array",
"description": "A list of selectable options within a modifier prompt that changes a menu item. That change may include price and calorie variations, and may be affected by size selections. This list will include all possible modifiers, regardless of the prompts or menu items that they are associated with.",
"items": {
"$ref": "#/$defs/Modifier"
}
},
"size_prompts": {
"type": "array",
"description": "Information about item sizing, including display text and pricing.",
"items": {
"$ref": "#/$defs/SizePrompt"
}
},
"sizes": {
"type": "array",
"description": "The sizes for all items in this menu.",
"items": {
"$ref": "#/$defs/Size"
}
},
"availability_ranges": {
"type": "array",
"description": "A list of the times during which seasonal menu items can be available.",
"items": {
"$ref": "#/$defs/AvailabilityRange"
}
},
"availability_overrides": {
"type": "array",
"description": "A list of the times during which items, modifiers or menu sections are not available for ordering.",
"items": {
"$ref": "#/$defs/AvailabilityOverride"
}
}
},
"description": "The normalized menu.",
"$defs": {
"AvailabilityOverride": {
"required": [
"end_date",
"external_id",
"name",
"override_type",
"start_date"
],
"type": "object",
"properties": {
"external_id": {
"type": "string",
"description": "A user-configured identifier for this object within the menu. External IDs must be unique across all menu entities of this type. Any availability override that shares this `external_id` will be overwritten."
},
"name": {
"type": "string",
"description": "The display name for this availability override, which will be shown internally and externally."
},
"start_date": {
"type": "string",
"description": "The date and time when this override begins.",
"format": "date-time"
},
"end_date": {
"type": "string",
"description": "The date and time when this override ends.",
"format": "date-time"
},
"override_type": {
"type": "string",
"description": "The type of availability override, [AVAILABLE, UNAVAILABLE].",
"enum": [
"AVAILABLE",
"UNAVAILABLE"
]
}
},
"description": "Definitions of time range during which item or modifier is not available."
},
"AvailabilityRange": {
"required": [
"external_id",
"name",
"start_date"
],
"type": "object",
"properties": {
"external_id": {
"type": "string",
"description": "A user-configured identifier for this object within the menu. External IDs must be unique across all menu entities of this type. Any availability range that shares this `external_id` will be overwritten."
},
"name": {
"type": "string",
"description": "The display name for this availability, which will be shown internally and externally."
},
"start_date": {
"type": "string",
"description": "The date and time when this override begins.",
"format": "date-time"
},
"end_date": {
"type": "string",
"description": "The date and time when this override ends.",
"format": "date-time"
}
},
"description": "Definitions of time ranges during a year when one or more menu items may be available."
},
"Dimensions": {
"type": "object",
"properties": {
"depth_in_inches": {
"type": "number",
"description": "Depth of an item in inches.",
"format": "float"
},
"width_in_inches": {
"type": "number",
"description": "Width of an item in inches.",
"format": "float"
},
"height_in_inches": {
"type": "number",
"description": "Height of an item in inches.",
"format": "float"
}
},
"description": "The dimensions of the item, width/height/depth."
},
"Item": {
"required": [
"external_id",
"name"
],
"type": "object",
"properties": {
"external_id": {
"type": "string",
"description": "The merchant-set ID for this menu item, which can be used to link it in the `PosNormalizedMenu`."
},
"name": {
"type": "string",
"description": "The display name of the menu item."
},
"internal_name": {
"type": "string",
"description": "An internal reference name for this menu item. It will not be displayed on the Grubhub ordering platform."
},
"description": {
"type": "string",
"description": "A diner-facing description of this menu item that displays on the Grubhub ordering apps."
},
"price": {
"type": "number",
"description": "The cost of this item in cents before taxes and fees. Every menu item must have either a `price` or a `size_prompt` value.",
"format": "double"
},
"tax_rate": {
"type": "string",
"description": "The `external_id` value of the tax rate that applies to this menu item. Note: All applicable tax rates must first be defined in the menu-level tax_rates array (with rates formatted as decimals, e.g., 2.5% as 0.025). Reference the corresponding external_id here if this tax rate differs."
},
"tax_category": {
"$ref": "#/$defs/TaxCategory"
},
"miscellaneous_taxes": {
"type": "array",
"description": "A list of `external_id` values that indicate additional tax rates that apply to this menu item.",
"items": {
"type": "string",
"description": "A list of `external_id` values that indicate additional tax rates that apply to this menu item."
}
},
"flexible_tax_fields": {
"type": "object",
"additionalProperties": {
"type": "string",
"description": "Flexible fields can be used to include unique rules for an item, for example bottle deposit or cup fees. These rules, including bottle deposit and cup fees, may require additional activation in the Grubhub system. Contact your Grubhub representative for further information. This is a map of flexible fields associated with this item whose values are Strings.<br /><br />Allowed entries are:<br /><br /> 'SERVING_METHOD': \"BTL-GLASS\", \"BTL-PLASTIC\", \"CANNED\", or \"CUP\". <br/> 'PREMISIS_CONSUMPTION': \"ON\", \"OFF\".",
"example": "{\"SERVING_METHOD\":\"BTL-GLASS\"}"
},
"description": "Flexible fields can be used to include unique rules for an item, for example bottle deposit or cup fees. These rules, including bottle deposit and cup fees, may require additional activation in the Grubhub system. Contact your Grubhub representative for further information. This is a map of flexible fields associated with this item whose values are Strings.<br /><br />Allowed entries are:<br /><br /> 'SERVING_METHOD': \"BTL-GLASS\", \"BTL-PLASTIC\", \"CANNED\", or \"CUP\". <br/> 'PREMISIS_CONSUMPTION': \"ON\", \"OFF\".",
"example": {
"SERVING_METHOD": "BTL-GLASS"
}
},
"flexible_tax_numeric_fields": {
"type": "object",
"additionalProperties": {
"type": "number",
"description": "Flexible fields can be used to include unique rules for an item, for example bottle deposit or cup fees. These rules, including bottle deposit and cup fees, may require additional activation in the Grubhub system. Contact your Grubhub representative for further information. This is a map of flexible fields associated with this item whose values are numeric.<br /><br />Allowed entries are:<br /><br /> 'VOLUME': <volume in fluid oz. eg. '16.0'> <br /> 'NUMBER_OF_UNITS': <number of units, eg. '6' for a six pack> .",
"format": "double"
},
"description": "Flexible fields can be used to include unique rules for an item, for example bottle deposit or cup fees. These rules, including bottle deposit and cup fees, may require additional activation in the Grubhub system. Contact your Grubhub representative for further information. This is a map of flexible fields associated with this item whose values are numeric.<br /><br />Allowed entries are:<br /><br /> 'VOLUME': <volume in fluid oz. eg. '16.0'> <br /> 'NUMBER_OF_UNITS': <number of units, eg. '6' for a six pack> .",
"example": {
"VOLUME": 1,
"NUMBER_OF_UNIT": 1
}
},
"size_prompt": {
"type": "string",
"description": "The `external_id` value of the size prompt and options that apply to this menu item. Every menu item must have either a `price` or a `size_prompt` value."
},
"modifier_prompts": {
"type": "array",
"description": "A list of `external_id` values for the modifier prompts that apply to this menu item.",
"items": {
"type": "string",
"description": "A list of `external_id` values for the modifier prompts that apply to this menu item."
}
},
"schedule_ids": {
"type": "array",
"description": "A list of `external_id` values for `PosNormalizedRepeatingSchedule` schedules that indicate when this menu item is available during the week.",
"items": {
"type": "string",
"description": "A list of `external_id` values for `PosNormalizedRepeatingSchedule` schedules that indicate when this menu item is available during the week."
}
},
"tags": {
"type": "array",
"description": "A list of indicators that flag this menu item for special delivery handling, regulatory treatment, or to indicate specific properties of the food - spicy, kosher, etc. - for the diner.",
"items": {
"$ref": "#/$defs/Tag"
}
},
"minimum_serving_size": {
"type": "integer",
"description": "The minimum serving size that can be ordered of this item.",
"format": "int32"
},
"maximum_serving_size": {
"type": "integer",
"description": "The maximum serving size that can be ordered of this item. This value must be greater than `minimum_serving_size.`",
"format": "int32"
},
"lead_time_seconds": {
"type": "integer",
"description": "The required minimum time this item needs to be prepared.",
"format": "int64"
},
"minimum_order_quantity": {
"type": "integer",
"description": "Default minimum quantity that can be ordered of this item.",
"format": "int32"
},
"maximum_order_quantity": {
"type": "integer",
"description": "The maximum quantity of this item that can be ordered in standard orders. This value must be greater than `minimum_order_quantity`.",
"format": "int32"
},
"calorie_count": {
"type": "string",
"description": "How many calories is this item? Can be an integer, an integer with a '+' or '-' prepended, or a range of integers."
},
"media": {
"$ref": "#/$defs/PosNormalizedMenuMedia"
},
"metadata": {
"type": "string",
"description": "User-configured text stored with and returned as part of this object. This text is not used by the Grubhub system; it is solely for the POS user's purposes. Character limit is restricted to 2560 characters. A validation error will be returned if this limit is exceeded."
},
"availability_ranges": {
"type": "array",
"description": "A list of `external_id` values for `PosNormalizedAvailabilityRanges` objects that indicate the date ranges when this menu item will be available for ordering.",
"items": {
"type": "string",
"description": "A list of `external_id` values for `PosNormalizedAvailabilityRanges` objects that indicate the date ranges when this menu item will be available for ordering."
}
},
"allowable_order_types": {
"uniqueItems": true,
"type": "array",
"description": "The set of order types that can use this item. If the value is null or empty, the item will default to being \"STANDARD\"",
"items": {
"type": "string",
"enum": [
"STANDARD",
"CATERING",
"GROUP"
]
}
},
"availability_override": {
"type": "string",
"description": "The `external_id` value for `availability_overrides` object that indicate the date ranges when this menu item will not be available for ordering."
},
"gtin": {
"type": "string",
"description": "The Global Trade Number Identification Number (GTIN) is for manufactured items only. This is assigned by the manufacturer (barcode on the back of the product packaging) to uniquely identify your item and used by Grubhub to optimize your menu.<br /><br />In North America, use the 12 digit UPC number (unless the product is a book in which case you'd use the ISBN). The complete list of GTIN number types is as follows:<br /><br /> UPC (in North America / GTIN-12) - 12-digit number<br /> EAN (in Europe / GTIN-13) - 13-digit number<br /> JAN (in Japan / GTIN-13) - 8 or 13-digit number<br /> ISBN (for books) - 13-digit number (convert ISBN-10 to ISBN-13). If you have both, include only the 13-digit number.<br /> ITF-14 (for multipacks / GTIN-14) - 14-digit number<br /><br />Only provide a GTIN if you are sure it is correct, other wise leave it blank. An incorrect GTIN can cause menu ingestion to fail."
},
"dimensions": {
"$ref": "#/$defs/Dimensions"
},
"weight_in_pounds": {
"type": "number",
"description": "The weight of the item in pounds.",
"format": "float"
},
"location_in_store": {
"type": "string",
"description": "The location of the item in the store."
},
"serving_size": {
"type": "integer",
"description": "The number of expected servings for each quantity of this item.",
"format": "int32"
},
"measured_price": {
"$ref": "#/$defs/MeasuredPrice"
},
"fulfillment_type_settings": {
"type": "object",
"additionalProperties": {
"$ref": "#/$defs/NormalizedItemFulfillmentTypeSettings"
},
"description": "OrderServiceType-specific configurations for this menu item. All keys should be strings representing order-service types (valid options include \"STANDARD_DELIVERY\", \"STANDARD_PICKUP\", \"CATERING_DELIVERY\", and \"GROUP_DELIVERY\". All values should be of type NormalizedItemFulfillmentTypeSettings."
}
},
"description": "Information about a single menu item included in a PosNormalizedMenu ingestion process."
},
"MeasuredPrice": {
"type": "object",
"properties": {
"measurement_unit_for_pricing": {
"type": "string",
"description": "The measurement unit used to measure the item. This should be used only for items whose price depends on quantity sold. These are also referred as weighted items"
},
"estimated_units_per_item_for_pricing": {
"type": "number",
"description": "Estimated units per unit of item. This value will be used to calculate estimated price for total number of units. The unit of measurement used will be measurement_unit_for_pricing. This should be used only for items whose price depends on quantity. These are also referred as weighted items "
}
},
"description": "The values for items whose price depends on the quantity sold. Also referred as weighted items."
},
"MenuInfo": {
"required": [
"currency"
],
"type": "object",
"properties": {
"currency": {
"type": "string",
"description": "The currency in which this merchant's prices are valued in."
},
"sections": {
"type": "array",
"description": "An array of the `external_id` strings for the sections within this menu.",
"items": {
"type": "string",
"description": "An array of the `external_id` strings for the sections within this menu."
}
},
"header_media": {
"$ref": "#/$defs/PosNormalizedMenuMedia"
},
"logo_media": {
"$ref": "#/$defs/PosNormalizedMenuMedia"
},
"search_media": {
"$ref": "#/$defs/PosNormalizedMenuMedia"
}
},
"description": "The top-level information about a menu in the PosNormalizedMenu format, including default currency, images, and sections."
},
"MenuSection": {
"required": [
"external_id",
"name"
],
"type": "object",
"properties": {
"external_id": {
"type": "string",
"description": "The merchant-set ID for this schedule, which can be used to link it in the `PosNormalizedMenu`."
},
"name": {
"type": "string",
"description": "The display name of this menu section."
},
"internal_name": {
"type": "string",
"description": "An internal reference name for this section. It will not be displayed on the Grubhub ordering platform."
},
"description": {
"type": "string",
"description": "A human-readable description of what this section contains that can be displayed on either the Grubhub ordering apps or the POS system."
},
"items": {
"type": "array",
"description": "A list of the `external_id` values of the menu items that will be listed under this section.",
"items": {
"type": "string",
"description": "A list of the `external_id` values of the menu items that will be listed under this section."
}
},
"availability_ranges": {
"type": "array",
"description": "A list of the `external_id` values of the `PosNormalizedAvailabilityRanges` that define when the menu items within this section can be ordered.",
"items": {
"type": "string",
"description": "A list of the `external_id` values of the `PosNormalizedAvailabilityRanges` that define when the menu items within this section can be ordered."
}
},
"schedule_ids": {
"type": "array",
"description": "A list of `external_id` values for `PosNormalizedRepeatingSchedule` schedules that indicate when this menu item is available during the week.",
"items": {
"type": "string",
"description": "A list of `external_id` values for `PosNormalizedRepeatingSchedule` schedules that indicate when this menu item is available during the week."
}
},
"availability_override": {
"type": "string",
"description": "The `external_id` value for `availability_overrides` object that indicate the date ranges when this menu section will not be available for ordering."
},
"media": {
"$ref": "#/$defs/PosNormalizedMenuMedia"
},
"subsections": {
"type": "array",
"description": "A list of subsections associated with this section.",
"items": {
"type": "string",
"description": "A list of subsections associated with this section."
}
},
"tax_category": {
"$ref": "#/$defs/TaxCategory"
}
},
"description": "A category of the menu - such as appetizers, breakfast, or drinks - including the menu items that these sections contain."
},
"Modifier": {
"required": [
"default_price",
"external_id",
"name"
],
"type": "object",
"properties": {
"external_id": {
"type": "string",
"description": "The merchant-set ID for this modifier, which can be used to link it in the `PosNormalizedMenu`."
},
"name": {
"type": "string",
"description": "The display name of the modifier."
},
"internal_name": {
"type": "string",
"description": "Optional. If present, name displayed on Grubhub menu management tools"
},
"description": {
"type": "string",
"description": "The description displayed to the diner."
},
"calorie_count": {
"type": "string",
"description": "The calorie content for this modifier."
},
"default_price": {
"type": "number",
"description": "Default price of the modifier. Applies if the item has no sizes or if there is no modifier `sized_price` for the size selected."
},
"tags": {
"type": "array",
"description": "A list of indicators that flag this modifier for special delivery handling, regulatory treatment, or to indicate specific properties of the food - spicy, kosher, etc. - for the diner. Modifier tags can differ from menu item tags as they can add ingredients, i.e. a modifier that adds cheese could make a menu item no longer vegan and add dairy.",
"items": {
"$ref": "#/$defs/Tag"
}
},
"tax_rate": {
"type": "string",
"description": "The `external_id` value of the tax rate that applies to this modifier if that rate differs from the overall menu or the specific menu item rate."
},
"tax_category": {
"$ref": "#/$defs/TaxCategory"
},
"flexible_tax_fields": {
"type": "object",
"additionalProperties": {
"type": "string",
"description": "Flexible fields can be used to include unique rules for an item, for example bottle deposit or cup fees. These rules, including bottle deposit and cup fees, may require additional activation in the Grubhub system. Contact your Grubhub representative for further information. This is a map of flexible fields associated with this item whose values are Strings.<br /><br />Allowed entries are:<br /><br /> 'SERVING_METHOD': \"BTL-GLASS\", \"BTL-PLASTIC\", \"CANNED\", or \"CUP\". <br/> 'PREMISIS_CONSUMPTION: \"ON\", \"OFF\"."
},
"description": "Flexible fields can be used to include unique rules for an item, for example bottle deposit or cup fees. These rules, including bottle deposit and cup fees, may require additional activation in the Grubhub system. Contact your Grubhub representative for further information. This is a map of flexible fields associated with this item whose values are Strings.<br /><br />Allowed entries are:<br /><br /> 'SERVING_METHOD': \"BTL-GLASS\", \"BTL-PLASTIC\", \"CANNED\", or \"CUP\". <br/> 'PREMISIS_CONSUMPTION: \"ON\", \"OFF\"."
},
"flexible_tax_numeric_fields": {
"type": "object",
"additionalProperties": {
"type": "number",
"description": "Flexible fields can be used to include unique rules for an item, for example bottle deposit or cup fees. These rules, including bottle deposit and cup fees, may require additional activation in the Grubhub system. Contact your Grubhub representative for further information. This is a map of flexible fields associated with this item whose values are numeric.<br /><br />Allowed entries are:<br /><br /> 'VOLUME': <volume in fluid oz. eg. '16.0'> <br /> 'NUMBER_OF_UNITS': <number of units, eg. '6' for a six pack> .",
"format": "double"
},
"description": "Flexible fields can be used to include unique rules for an item, for example bottle deposit or cup fees. These rules, including bottle deposit and cup fees, may require additional activation in the Grubhub system. Contact your Grubhub representative for further information. This is a map of flexible fields associated with this item whose values are numeric.<br /><br />Allowed entries are:<br /><br /> 'VOLUME': <volume in fluid oz. eg. '16.0'> <br /> 'NUMBER_OF_UNITS': <number of units, eg. '6' for a six pack> ."
},
"miscellaneous_taxes": {
"type": "array",
"description": "A list of `external_id` values that indicate additional tax rates that apply to this modifier selection.",
"items": {
"type": "string",
"description": "A list of `external_id` values that indicate additional tax rates that apply to this modifier selection."
}
},
"media": {
"$ref": "#/$defs/PosNormalizedMenuMedia"
},
"sized_prices": {
"type": "array",
"description": "Optional. An ordered list of sized prices for this modifier, i.e., the modifier price depends on the Size selected for the Item.",
"items": {
"$ref": "#/$defs/SizedPrice"
}
},
"submodifiers": {
"type": "array",
"description": "A list of `external_id` values for the modifier prompts that are available on this individual modifier option. In enhanced menus, modifiers can recurse up to six levels deep.",
"items": {
"type": "string",
"description": "A list of `external_id` values for the modifier prompts that are available on this individual modifier option. In enhanced menus, modifiers can recurse up to six levels deep."
}
},
"metadata": {
"type": "string",
"description": "User-configured text stored with and returned as part of this object. This text is not used by the Grubhub system; it is solely for the POS user's purposes. Character limit is restricted to 2560 characters. A validation error will be returned if this limit is exceeded."
},
"schedule_ids": {
"type": "array",
"description": "A list of `external_id` values for `PosNormalizedRepeatingSchedule` schedules that indicate when this modifier is available during the week. This can differ from the schedules for the menu item itself, though the modifier will only be available during the times when both schedules are active.",
"items": {
"type": "string",
"description": "A list of `external_id` values for `PosNormalizedRepeatingSchedule` schedules that indicate when this modifier is available during the week. This can differ from the schedules for the menu item itself, though the modifier will only be available during the times when both schedules are active."
}
},
"availability_ranges": {
"type": "array",
"description": "A list of `external_id` values for `PosNormalizedAvailabiltyRanges` objects that indicate the date ranges when this menu item will be available for ordering. This can differ from the availability range for the menu item itself, though the modifier will only be available during the times when both ranges are active.",
"items": {
"type": "string",
"description": "A list of `external_id` values for `PosNormalizedAvailabiltyRanges` objects that indicate the date ranges when this menu item will be available for ordering. This can differ from the availability range for the menu item itself, though the modifier will only be available during the times when both ranges are active."
}
},
"availability_override": {
"type": "string",
"description": "The `external_id` value for `availability_overrides` object that indicate the date ranges when this modifier will not be available for ordering."
},
"fulfillment_type_settings": {
"type": "object",
"additionalProperties": {
"$ref": "#/$defs/NormalizedModifierFulfillmentTypeSettings"
},
"description": "OrderServiceType-specific configurations for this modifier. All keys should be strings representing order-service types (valid options include \"STANDARD_DELIVERY\", \"STANDARD_PICKUP\", \"CATERING_DELIVERY\", and \"GROUP_DELIVERY\". All values should be of type NormalizedModifierFulfillmentTypeSettings."
}
},
"description": "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."
},
"ModifierList": {
"required": [
"external_id",
"name"
],
"type": "object",
"properties": {
"external_id": {
"type": "string",
"description": "A user-configured identifier for this object within the menu. External IDs must be unique across all menu entities of this type. Any modifier list that shares this `external_id` will be overwritten."
},
"name": {
"type": "string",
"description": "The display name for this list of modifiers."
},
"modifiers": {
"type": "array",
"description": "The `external_id` values of the `PosNormalizedModifier` objects referenced by this list.",
"items": {
"type": "string",
"description": "The `external_id` values of the `PosNormalizedModifier` objects referenced by this list."
}
}
},
"description": "A list of modifiers included within a modifier prompt."
},
"ModifierPrompt": {
"required": [
"external_id",
"modifier_list",
"name"
],
"type": "object",
"properties": {
"external_id": {
"type": "string",
"description": "A user-configured identifier for this object within the menu. External IDs must be unique across all menu entities of this type. Any modifier prompt that shares this `external_id` will be overwritten."
},
"name": {
"type": "string",
"description": "The t
# --- truncated at 32 KB (47 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/grubhub/refs/heads/main/json-schema/grubhub-posnormalizedmenu-schema.json
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/grubhub-posnormalizedmenu"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.