Grubhub · Schema
Modifier
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.
Food DeliveryRestaurantMarketplaceOnline OrderingPoint-of-SaleLogisticsLast Mile DeliveryMenu ManagementHospitalityLocal CommerceDelivery
Properties
| Name | Type | Description |
|---|---|---|
| external_id | string | The merchant-set ID for this modifier, which can be used to link it in the `PosNormalizedMenu`. |
| name | string | The display name of the modifier. |
| internal_name | string | Optional. If present, name displayed on Grubhub menu management tools |
| description | string | The description displayed to the diner. |
| calorie_count | string | The calorie content for this modifier. |
| default_price | number | 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 | array | 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 ca |
| tax_rate | string | 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 | object | |
| flexible_tax_fields | object | 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 Gr |
| flexible_tax_numeric_fields | object | 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 Gr |
| miscellaneous_taxes | array | A list of `external_id` values that indicate additional tax rates that apply to this modifier selection. |
| media | object | |
| sized_prices | array | Optional. An ordered list of sized prices for this modifier, i.e., the modifier price depends on the Size selected for the Item. |
| submodifiers | array | 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 | string | 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 chara |
| schedule_ids | array | 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 |
| availability_ranges | array | 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 rang |
| availability_override | string | 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 | object | OrderServiceType-specific configurations for this modifier. All keys should be strings representing order-service types (valid options include "STANDARD_DELIVERY", "STANDARD_PICKUP", "CATERING_DELIVER |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/grubhub/main/json-schema/grubhub-modifier-schema.json",
"title": "Modifier",
"x-generated": "2026-09-17",
"x-method": "derived",
"x-source": "openapi/grubhub-menu-openapi.yml#/components/schemas/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.",
"$defs": {
"NormalizedModifierFulfillmentTypeSettings": {
"type": "object",
"properties": {
"price": {
"type": "number",
"description": "The additional cost applied to an order if a diner selects this modifier for a given OrderServiceType."
}
},
"description": "ModifierFulfillmentTypeSettings include configurations to be used for an Modifier only for oneOrderServiceType."
},
"NormalizedSizedPriceFulfillmentTypeSettings": {
"type": "object",
"properties": {
"price": {
"type": "number",
"description": "The price for the referenced Size for a given OrderServiceType."
}
},
"description": "SizedPriceFulfillmentTypeSettings include configurations to be used for a SizedPrice onlyfor one OrderServiceType."
},
"PosNormalizedMenuMedia": {
"type": "object",
"properties": {
"source_url": {
"type": "string",
"description": "The URL where the image file can be downloaded."
}
},
"description": "Information about media used in the PosNormalizedMenu format."
},
"SizedPrice": {
"required": [
"price",
"size"
],
"type": "object",
"properties": {
"size": {
"type": "string",
"description": "The `external_id` reference to a PosNormalizedSize."
},
"price": {
"type": "number",
"description": "Price for the referenced size."
},
"calorie_content": {
"type": "string",
"description": "Number of calories for the size."
},
"display_name": {
"type": "string",
"description": "Optional. If present, overrides the name of the referenced size, for display to diners."
},
"fulfillment_type_settings": {
"type": "object",
"additionalProperties": {
"$ref": "#/$defs/NormalizedSizedPriceFulfillmentTypeSettings"
},
"description": "OrderServiceType-specific configurations for this SizedPrice. 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 NormalizedSizedPriceFulfillmentTypeSettings."
}
},
"description": "Additional price information about size within a normalized menu. For use in Size Prompts for the item pricing model."
},
"Tag": {
"required": [
"group",
"name"
],
"type": "object",
"properties": {
"group": {
"type": "string",
"description": "Tag group. Currently, the only valid group is 'LEGACY'"
},
"name": {
"type": "string",
"description": "Tag name or code.",
"enum": [
"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",
"FIFTEEN_TWENTY_LBS",
"TWENTY_TWENTYFIVE_LBS",
"TWENTYFIVE_THIRTY_LBS",
"THIRTY_PLUS_LBS",
"TWO_TWOHALF_FT",
"TWOHALF_THREE_FT",
"THREE_PLUS_FT"
]
}
},
"description": "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."
},
"TaxCategory": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "A valid Grubhub internal tax category code."
}
},
"description": "Tax category."
}
}
}
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-modifier"
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.