Documentation Index
Fetch the complete documentation index at: https://developer.clopos.com/llms.txt
Use this file to discover all available pages before exploring further.
Purpose
Returns a single product from the Clopos catalog, along with related data specific to its type (variants, modifiers, recipe, timer settings, etc.). Use thewith parameters to fetch only the sub-resources you need.
HTTP Request
Path Parameters
The product ID (integer or UUID).
Query Parameters
Related data selector. Example:
taxes, unit, modifications, modificator_groups, recipe, packages, media, tags, setting. You can include multiple with parameters.
Supported with values may vary based on your backend version.
Request Example
Response
200 OK — Product found
404 Not Found — Product does not exist
Field Reference
See the full breakdown of theProduct object and nested structures such as modifications and modificator_groups on the List Products page.
Product Object
| Field | Type | Description |
|---|---|---|
id | integer | Unique product identifier. |
parent_id | integer (nullable) | ID of the parent product for a variant. A row with type: "MODIFICATION" is a variant of the GOODS product referenced here — “modification” and “variant” mean the same thing in this API, and a variant carries the full product schema (same fields as the parent, with its own price, cost_price, stock, barcodes, etc.). |
station_id | integer (nullable) | ID of the preparation station assigned to this product. |
category_id | integer (nullable) | ID of the category this product belongs to. |
unit_id | integer | ID of the unit of measurement. |
type | string | Product type: GOODS, DISH, TIMER, PREPARATION, INGREDIENT, MODIFICATION, MODIFIER. |
name | string | Product name. |
parent_name | string | Name of the parent product (empty string if none). |
full_name | string | Full product name including variant info (e.g., “Fanta 0.5 L”). |
position | integer (nullable) | Display order position within the category. |
barcode | string (nullable) | Deprecated. Legacy single-barcode field, kept for backwards compatibility and not guaranteed to be populated. For current barcodes, request with[]=codes and read from the codes array. |
gov_code | string (nullable) | Government/tax code for the product. |
status | integer | 1 = active, 0 = inactive. |
hidden | integer | 1 = hidden from menus, 0 = visible. |
sold_by_weight | boolean | Whether the product is sold by weight rather than quantity. |
discountable | boolean | Whether discounts can be applied to this product. |
giftable | boolean | Whether this product can be given as a gift/complimentary item. |
has_modifications | boolean | If true, the product has variants in the modifications array. |
description | string (nullable) | Product description text. |
price | number | Base selling price. For parent GOODS with variants, this may be 0 since variants carry their own prices. |
cost_price | number | Cost price used for margin calculations. |
cooking_time | integer | Estimated preparation time in minutes. |
inventory_behavior | integer | Inventory tracking mode. 0 = MINUS_INGREDIENTS — on sale, deduct the recipe’s ingredients from stock (typical for DISH). 1 = MINUS_SELF — deduct the product itself from stock (countable GOODS / INGREDIENT). 3 = PASSIVE — no inventory tracking (uncountable). |
low_stock | integer | Low stock threshold for alerts. |
unit_weight | number | Physical weight of a single unit, in kilograms. For example, if unit_id resolves to pcs, this is how much one piece weighs (a single packet that weighs 3 kg is stored as 3). Independent of sold_by_weight; used for logistics, shipping, and stock-by-weight calculations, not for pricing mode. |
venues | array | Venue-specific availability and pricing overrides. |
media | array | Image attachments. See Media object. |
created_at | string | Creation timestamp. |
updated_at | string | Last update timestamp. |
Notes
- If the
idparameter is in the wrong format, the backend returns a400error; validate it on the client side. - Since
withparameters are evaluated sequentially, avoid using the same key more than once. - Type-specific heavy relationships (for example, large
recipeormodificator_groups) can produce large responses; request only what you need. - Some fields may be empty or null depending on the product type; use the
typefield to drive conditional rendering on the client. - For TIMER products, the
setting.pricesarray represents additional fees applied after a certain duration. - For INGREDIENT products, the
packagesfield shows the package sizes used in stock entries; if not applicable, it is an empty array.