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
View JSON Schema on GitHub

JSON Schema

grubhub-modifier-schema.json Raw ↑
{
  "$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.
All 92 tools →

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.