Skip to main content

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 the with parameters to fetch only the sub-resources you need.

HTTP Request

GET https://integrations.clopos.com/open-api/v2/products/{id}
This endpoint requires authentication. Include your JWT in the x-token header. See Authentication for how to obtain a token and Errors for error responses.

Path Parameters

id
string
required
The product ID (integer or UUID).

Query Parameters

with[]
string
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

curl -X GET "https://integrations.clopos.com/open-api/v2/products/419?with[]=modifications&with[]=taxes" \
  -H "x-token: oauth_example_token" \

Response

200 OK — Product found

{
  "success": true,
  "data": {
    "id": 1,
    "parent_id": null,
    "station_id": null,
    "category_id": null,
    "unit_id": 1,
    "type": "INGREDIENT",
    "name": "Test_Tomato",
    "parent_name": "",
    "full_name": "Test_Tomato",
    "position": null,
    "barcode": null,
    "gov_code": null,
    "status": 1,
    "hidden": 0,
    "sold_by_weight": false,
    "discountable": true,
    "giftable": false,
    "has_modifications": false,
    "description": null,
    "price": 0,
    "cost_price": 0,
    "cooking_time": 0,
    "inventory_behavior": 0,
    "low_stock": 0,
    "unit_weight": 0,
    "venues": [],
    "media": [],
    "created_at": "2026-01-13 20:04:05",
    "updated_at": "2026-01-13 20:04:05"
  }
}

404 Not Found — Product does not exist

{
  "success": false,
  "error": "resource_not_found",
  "message": "Product not found"
}

Field Reference

See the full breakdown of the Product object and nested structures such as modifications and modificator_groups on the List Products page.

Product Object

FieldTypeDescription
idintegerUnique product identifier.
parent_idinteger (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_idinteger (nullable)ID of the preparation station assigned to this product.
category_idinteger (nullable)ID of the category this product belongs to.
unit_idintegerID of the unit of measurement.
typestringProduct type: GOODS, DISH, TIMER, PREPARATION, INGREDIENT, MODIFICATION, MODIFIER.
namestringProduct name.
parent_namestringName of the parent product (empty string if none).
full_namestringFull product name including variant info (e.g., “Fanta 0.5 L”).
positioninteger (nullable)Display order position within the category.
barcodestring (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_codestring (nullable)Government/tax code for the product.
statusinteger1 = active, 0 = inactive.
hiddeninteger1 = hidden from menus, 0 = visible.
sold_by_weightbooleanWhether the product is sold by weight rather than quantity.
discountablebooleanWhether discounts can be applied to this product.
giftablebooleanWhether this product can be given as a gift/complimentary item.
has_modificationsbooleanIf true, the product has variants in the modifications array.
descriptionstring (nullable)Product description text.
pricenumberBase selling price. For parent GOODS with variants, this may be 0 since variants carry their own prices.
cost_pricenumberCost price used for margin calculations.
cooking_timeintegerEstimated preparation time in minutes.
inventory_behaviorintegerInventory 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_stockintegerLow stock threshold for alerts.
unit_weightnumberPhysical 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.
venuesarrayVenue-specific availability and pricing overrides.
mediaarrayImage attachments. See Media object.
created_atstringCreation timestamp.
updated_atstringLast update timestamp.

Notes

  • If the id parameter is in the wrong format, the backend returns a 400 error; validate it on the client side.
  • Since with parameters are evaluated sequentially, avoid using the same key more than once.
  • Type-specific heavy relationships (for example, large recipe or modificator_groups) can produce large responses; request only what you need.
  • Some fields may be empty or null depending on the product type; use the type field to drive conditional rendering on the client.
  • For TIMER products, the setting.prices array represents additional fees applied after a certain duration.
  • For INGREDIENT products, the packages field shows the package sizes used in stock entries; if not applicable, it is an empty array.