Partner API
Jul 14, 2026 4:05 PM

Inventory and stop list

Product stock and the stop list via the Hostme Inventory app: reading and updating the availability of menu items.

Inventory (Inventory) is working with product stock through the Hostme Inventory app. The endpoints let a partner read and maintain the catalog of products and groups on the inventory side, update stock (stockAmount) and thereby form the stop list: when a product’s stock runs out, the item stops selling.

All requests require a Bearer token (see Authentication). General conventions and errors are in Conventions and Errors.

Inventory endpoints use a compound path with the company and site identifiers: /api/pos/apps/hostmeinventory/companies/{companyId}/sites/{restaurantId}.

MethodPathPurpose
GET/productsList inventory products
POST/productsCreate a product
PUT/products/{productId}Update a product (including stock)
DELETE/products/{productId}Delete a product
GET/productgroupsList product groups
POST/productgroupsCreate a group
PUT/productgroups/{groupId}Update a group
DELETE/productgroups/{groupId}Delete a group

In addition, there are inventory sync endpoints as part of the core API (see below).


Inventory products

An inventory product (VendorProduct) is the same model as in the catalog. For the stop list the key field is stockAmount (stock); item visibility is controlled by visible.

VendorProduct fields

FieldTypeDescription
idstring?Product identifier
productPLUstring?SKU/barcode (PLU/barcode)
namestring?Name
descriptionstring?Description
visiblebooleanProduct visibility
imageLocationstring?Image URL/path
pricenumberPrice (dine-in)
takeawayPricenumber?Pickup price
deliveryPricenumber?Delivery price
productTypestring?Product type on your POS side
groupIdstring?Group (category) ID
stockAmountinteger?Stock — the basis of the stop list
modifiersarray<string>IDs of modifiers and modifier groups
taxIdsarray<string>IDs of the applied taxes
taxeRatenumber?Tax rate (dine-in)
takeawayTaxeRatenumber?Pickup tax rate
deliveryTaxeRatenumber?Delivery tax rate

Prices. price, takeawayPrice and deliveryPrice must be zero or more, have at most two decimal places and be no more than 21474836.47. An empty takeawayPrice or deliveryPrice means price applies to that channel. A create or update that breaks these rules is refused with 400 and the code invalid_price:

{ "message": "Takeaway price can have at most two decimal places: 1.999.", "code": "invalid_price" }

The rules apply to every create and update, including one that only changes the stock or visibility: if the body carries a price saved before these rules, correct it in the same request.

List products

GET /products

ParameterInTypeDescription
companyId *pathstringCompany identifier
restaurantId *pathintegerSite (restaurant) identifier
groupIdquerystringFilter by group

Returns an array of VendorProduct.

Terminal window
curl -G https://api.hostmeapp.com/api/pos/apps/hostmeinventory/companies/COMPANY_ID/sites/123/products \
-H "Authorization: Bearer $TOKEN" \
--data-urlencode "groupId=GROUP_ID"

Create a product

POST /products

ParameterInType
companyId *pathstring
restaurantId *pathinteger

Body — VendorProduct. Response — the created product.

Terminal window
curl -X POST https://api.hostmeapp.com/api/pos/apps/hostmeinventory/companies/COMPANY_ID/sites/123/products \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Fresh juice",
"productPLU": "2001",
"price": 350,
"stockAmount": 40,
"visible": true
}'

Update a product (update stock)

PUT /products/{productId}

The main way to manage the stop list: update stockAmount to sync the stock. When the stock drops to zero, the item goes on the stop list.

ParameterInType
companyId *pathstring
restaurantId *pathinteger
productId *pathstring

Body — VendorProduct. Response — the updated product.

Terminal window
# Decrease stock
curl -X PUT https://api.hostmeapp.com/api/pos/apps/hostmeinventory/companies/COMPANY_ID/sites/123/products/PRODUCT_ID \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{ "id": "PRODUCT_ID", "stockAmount": 5 }'
# Put an item on the stop list (stock = 0)
curl -X PUT https://api.hostmeapp.com/api/pos/apps/hostmeinventory/companies/COMPANY_ID/sites/123/products/PRODUCT_ID \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{ "id": "PRODUCT_ID", "stockAmount": 0 }'

Delete a product

DELETE /products/{productId}

ParameterInType
companyId *pathstring
restaurantId *pathinteger
productId *pathstring

Inventory product groups

A group (VendorProductGroup) is the same model as in the catalog: id, name, imageLocation, sequence, visible, productsCount, taxeRate, takeawayTaxeRate, deliveryTaxeRate.

List groups

GET /productgroups

ParameterInType
companyId *pathstring
restaurantId *pathinteger

Returns an array of VendorProductGroup.

Terminal window
curl -G https://api.hostmeapp.com/api/pos/apps/hostmeinventory/companies/COMPANY_ID/sites/123/productgroups \
-H "Authorization: Bearer $TOKEN"

Create a group

POST /productgroups

Body — VendorProductGroup. Response — the created group.

Update a group

PUT /productgroups/{groupId}

ParameterInType
companyId *pathstring
restaurantId *pathinteger
groupId *pathstring

Body — VendorProductGroup. Response — the updated group.

Delete a group

DELETE /productgroups/{groupId}

ParameterInType
companyId *pathstring
restaurantId *pathinteger
groupId *pathstring

Inventory sync

For batch stock synchronization, the core API has separate endpoints under the base path /api/core/admin/restaurants/{restaurantId}.

Start a sync

PUT /inventory/sync

Starts an inventory stock sync. Body — ProductInventorySyncRequest.

ParameterInType
restaurantId *pathinteger
Terminal window
curl -X PUT https://api.hostmeapp.com/api/core/admin/restaurants/123/inventory/sync \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{}'

The structure of the ProductInventorySyncRequest body and the schema of the success response (200) are not documented in detail in the specification — check the fields in Swagger UI.

Sync status

GET /inventory/syncinfo

Returns information about the state of the inventory sync.

ParameterInType
restaurantId *pathinteger
Terminal window
curl -G https://api.hostmeapp.com/api/core/admin/restaurants/123/inventory/syncinfo \
-H "Authorization: Bearer $TOKEN"

The exact schema of the success response (200) is not documented in the specification — look at the actual response or Swagger UI.


Related sections. For the structure of menus, sections and products see Menu: Catalog; modifiers and taxes — in Menu: Modifiers and taxes.