Ready2order Product API
Products are the items sold at the point of sale. Each product belongs to a product group and carries a price, a VAT rate, and a set of optional features such as stock tracking, variations, and ingredients. **Identifiers** A product supports three optional identifiers alongside its system `product_id`: - `product_itemnumber`: the merchant's own article number, used on labels, in exports, and for stock lookups - `product_barcode`: EAN or barcode for scanning at the POS - `product_externalReference`: for integrators to store their own system's ID, so you can map between your records and ready2order without storing `product_id` on your side **Pricing and VAT** `product_price` is the base price. Set `product_priceIncludesVat` to `true` (the default) if that figure is gross, or `false` if it is net. A VAT rate is required on creation — supply either `product_vat` as a percentage or `product_vat_id` referencing a [VAT rate](#tag/Vat-Rate). Customers and customer categories can have individual price overrides managed via the [per-customer prices](#operation/productGetAllCustomerProductPrices) and [per-category prices](#operation/productGetAllCustomerCategoryProductPrices) endpoints. **Custom price and quantity** Set `product_customPrice: true` to let the cashier enter the price manually at checkout, which is useful for open-price items. `product_customQuantity: true` does the same for the quantity. **Stock** Stock tracking is optional and configured per product. Set `product_stock_enabled: true`, then use `product_stock_value` for the current quantity, `product_stock_safetyStock` for the minimum threshold, and `product_stock_reorderLevel` for the point at which the system alerts about low inventory. Use the [get stock](#operation/productGetStock) and [update stock](#operation/productUpdateStock) endpoints to read or update stock figures without touching other product fields. **Product type** `product_type` is mainly relevant in gastro mode, where it drives printer routing (e.g. kitchen vs. bar). Available values: `standard`, `food`, `drink`, `extra`, `sidedish`, `variation`, `ingredient`. For standard retail products, use `standard`. **Variations and ingredients** Variations (selectable add-ons or modifications) and ingredients (component tracking for recipes and partial-unit sales) are enabled per product with `product_variations_enabled` and `product_ingredients_enabled`. Both require the corresponding feature to be active on the account. **Keeping a catalogue in sync** The recommended approach is to subscribe to [webhooks](#tag/Webhook) for `product.created` and `product.updated` events. This avoids polling and ensures your system is updated in near real-time without unnecessary requests. If webhooks are not an option, use the `updatedAfter` query parameter on [list products](#operation/productGetAll) to fetch only products changed since a given timestamp. Use [batch create](#operation/productCreateBatch) to create multiple products in one request.