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}.
| Method | Path | Purpose |
|---|---|---|
GET | /products | List inventory products |
POST | /products | Create a product |
PUT | /products/{productId} | Update a product (including stock) |
DELETE | /products/{productId} | Delete a product |
GET | /productgroups | List product groups |
POST | /productgroups | Create 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
| Field | Type | Description |
|---|---|---|
id | string? | Product identifier |
productPLU | string? | SKU/barcode (PLU/barcode) |
name | string? | Name |
description | string? | Description |
visible | boolean | Product visibility |
imageLocation | string? | Image URL/path |
price | number | Price (dine-in) |
takeawayPrice | number? | Pickup price |
deliveryPrice | number? | Delivery price |
productType | string? | Product type on your POS side |
groupId | string? | Group (category) ID |
stockAmount | integer? | Stock — the basis of the stop list |
modifiers | array<string> | IDs of modifiers and modifier groups |
taxIds | array<string> | IDs of the applied taxes |
taxeRate | number? | Tax rate (dine-in) |
takeawayTaxeRate | number? | Pickup tax rate |
deliveryTaxeRate | number? | 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
| Parameter | In | Type | Description |
|---|---|---|---|
companyId * | path | string | Company identifier |
restaurantId * | path | integer | Site (restaurant) identifier |
groupId | query | string | Filter by group |
Returns an array of VendorProduct.
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
| Parameter | In | Type |
|---|---|---|
companyId * | path | string |
restaurantId * | path | integer |
Body — VendorProduct. Response — the created product.
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.
| Parameter | In | Type |
|---|---|---|
companyId * | path | string |
restaurantId * | path | integer |
productId * | path | string |
Body — VendorProduct. Response — the updated product.
# Decrease stockcurl -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}
| Parameter | In | Type |
|---|---|---|
companyId * | path | string |
restaurantId * | path | integer |
productId * | path | string |
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
| Parameter | In | Type |
|---|---|---|
companyId * | path | string |
restaurantId * | path | integer |
Returns an array of VendorProductGroup.
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}
| Parameter | In | Type |
|---|---|---|
companyId * | path | string |
restaurantId * | path | integer |
groupId * | path | string |
Body — VendorProductGroup. Response — the updated group.
Delete a group
DELETE /productgroups/{groupId}
| Parameter | In | Type |
|---|---|---|
companyId * | path | string |
restaurantId * | path | integer |
groupId * | path | string |
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.
| Parameter | In | Type |
|---|---|---|
restaurantId * | path | integer |
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
ProductInventorySyncRequestbody 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.
| Parameter | In | Type |
|---|---|---|
restaurantId * | path | integer |
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.