Partner API
Jul 14, 2026 4:05 PM

Modifiers & Taxes

Product modifiers (options, add-ons) and tax rates — how they are linked to products and reflected in orders.

This page covers two groups of endpoints:

  • Product modifiers (ProductModifiers) — options and add-ons for dishes (for example, doneness, portion size, extra ingredients).
  • Product taxes (ProductTaxes) — the directory of tax rates that are linked to products.

All requests require a Bearer token (see Authentication). restaurantId is a numeric path parameter. Common conventions and errors are in Conventions and Errors. The product and group catalog is described in Menu: Catalog.

Base path: /api/core/admin/restaurants/{restaurantId}.


Product modifiers

A modifier (VendorProductModifier) is a group of choices for a dish. Each choice (VendorAdditionValue) can carry its own price and tax. The modifier defines the selection rules (single/multiple, minimum/maximum) and can be linked to specific products or to whole product groups.

MethodPathPurpose
GET/modifiersList modifiers
POST/modifiersCreate a modifier
PUT/modifiers/{modifierId}Update a modifier
DELETE/modifiers/{modifierId}Delete a modifier

VendorProductModifier fields

FieldTypeDescription
idstring?Modifier identifier
namestring?Internal name
displayNamestring?Display name shown to the guest
valuesarray<VendorAdditionValue>Choices (see below)
multiselectbooleanMultiple selection allowed
minSelectedAmountintegerMinimum number of selected choices
maxSelectedAmountinteger?Maximum number of selected choices
productGroupIdsarray<string>Link to product groups
productIdsarray<string>Link to specific products
visibleboolean?Modifier visibility

VendorAdditionValue fields (choice)

FieldTypeDescription
idstring?Choice identifier
namestring?Choice name
pricenumber?Surcharge for the choice
taxesnumber?Tax on the choice
descriptionstring?Description
plustring?PLU code of the choice
defaultboolean?Selected by default

Choice prices. Each choice’s price must be zero or more, have at most two decimal places and be no more than 21474836.47; an empty price is allowed. A create or update with a choice outside these rules is refused with 400 and the code invalid_price, and the message names the choice:

{ "message": "The price of option 'Extra sauce' must not be below zero: -5.", "code": "invalid_price" }

List

GET /modifiers

Returns an array of VendorProductModifier.

Terminal window
curl -G https://api.hostmeapp.com/api/core/admin/restaurants/123/modifiers \
-H "Authorization: Bearer $TOKEN"

Create a modifier

POST /modifiers

Body — VendorProductModifier. Response — the created modifier.

Terminal window
curl -X POST https://api.hostmeapp.com/api/core/admin/restaurants/123/modifiers \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "doneness",
"displayName": "Doneness",
"multiselect": false,
"minSelectedAmount": 1,
"maxSelectedAmount": 1,
"values": [
{ "name": "Medium", "price": 0, "default": true },
{ "name": "Well done", "price": 0 }
],
"productIds": ["PRODUCT_ID"],
"visible": true
}'

Update a modifier

PUT /modifiers/{modifierId}

ParameterInType
restaurantId *pathinteger
modifierId *pathstring

Body — VendorProductModifier. Response — the updated modifier.

Delete a modifier

DELETE /modifiers/{modifierId}

ParameterInType
restaurantId *pathinteger
modifierId *pathstring
Terminal window
curl -X DELETE https://api.hostmeapp.com/api/core/admin/restaurants/123/modifiers/MODIFIER_ID \
-H "Authorization: Bearer $TOKEN"

Modifiers of a specific menu. Besides the global modifier directory there are endpoints for modifiers within a single menu: GET and PUT /menu/{menuId}/modifiers (the VendorMenuModifier object — the same fields as VendorProductModifier, but without productGroupIds/productIds). See Menu: Catalog.


Product taxes

A tax (VendorTax) is a rate that can be applied to products. A tax can be included in the price (vatInclusive) or added on top, can be globally enabled/disabled and linked to a set of products.

MethodPathPurpose
GET/taxesList taxes
POST/taxesCreate a tax
PUT/taxes/{taxId}Update a tax
DELETE/taxes/{taxId}Delete a tax

VendorTax fields

FieldTypeDescription
idstring?Tax identifier
namestring?Tax name
vatInclusivebooleanTax is included in the price (true) or added on top (false)
percentagenumber?Tax rate, percent
enabledboolean?Tax is active
productIdsarray<string>Products the tax applies to

List

GET /taxes

Returns an array of VendorTax.

Terminal window
curl -G https://api.hostmeapp.com/api/core/admin/restaurants/123/taxes \
-H "Authorization: Bearer $TOKEN"

Create a tax

POST /taxes

Body — VendorTax. Response — the created tax.

Terminal window
curl -X POST https://api.hostmeapp.com/api/core/admin/restaurants/123/taxes \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "VAT 20%",
"vatInclusive": true,
"percentage": 20,
"enabled": true,
"productIds": ["PRODUCT_ID"]
}'

Update a tax

PUT /taxes/{taxId}

ParameterInType
restaurantId *pathinteger
taxId *pathstring

Body — VendorTax. Response — the updated tax.

Delete a tax

DELETE /taxes/{taxId}

ParameterInType
restaurantId *pathinteger
taxId *pathstring
Terminal window
curl -X DELETE https://api.hostmeapp.com/api/core/admin/restaurants/123/taxes/TAX_ID \
-H "Authorization: Bearer $TOKEN"

Link to a product. A product has a taxIds array (see Menu: Catalog) — it lists the IDs of the taxes applied to it. The link can be set from either side: via productIds on the tax and via taxIds on the product.