# Products
Products are the second level in the menu hierarchy, they represent the varieties of options that customers choose from. Each product must be attached to a category
# The Product Object
# Sample
{
"id": "8f7abbb1",
"sku": "sk-0001",
"barcode": "200100",
"name": "Roasted Chicken Breast Burger",
"name_localized": null,
"description": "healthy roasted chicken breast hamburger with low calories sauces",
"description_localized": null,
"image": "https://image.com/bubgxnh1x.jpg",
"is_active": true,
"is_stock_product": false,
"is_ready": true,
"pricing_method": 1,
"selling_method": 1,
"costing_method": 2,
"preparation_time": null,
"price": 14,
"cost": null,
"calories": 310,
"created_at": "2019-12-28 22:42:57",
"updated_at": "2020-01-04 23:07:33",
"deleted_at": null,
"discounts": [
{
"id": "8f7b8ec6",
"pivot": {
"product_id": "8f7abbb1",
"discount_id": "8f7b8ec6"
}
}
],
"timed_events": [
{
"id": "8f7b960b",
"pivot": {
"product_id": "8f7abbb1",
"timed_event_id": "8f7b960b"
}
}
],
"category": {
"id": "8f7ab8de"
},
"tax_group": {
"id": "8f7abdbd"
},
"tags": [
{
"id": "8f7b9527",
"pivot": {
"product_id": "8f7abbb1",
"tag_id": "8f7b952"
}
}
],
"groups": [
{
"id": "8f83fc43"
}
],
"branches": [
{
"pivot": {
"price": 12,
"is_active": true,
"is_in_stock": true
},
"id": "8f7ab00b"
}
],
"modifiers": [
{
"pivot": {
"is_splittable_in_half": false,
"unique_options": false,
"minimum_options": 0,
"maximum_options": 3,
"free_options": 1,
"default_options_ids": [
"8f7ba95a"
],
"excluded_options_ids": [
"8ssba95b"
]
},
"id": "8f7ba4ff",
"name": "Topping",
"is_ready": true,
"reference": "mod-04"
}
],
"ingredients": [
{
"pivot": {
"quantity": 150,
"inactive_in_order_types": [
1
]
},
"id": "8f7b966d"
}
]
}
# Attributes
| Field | Type | Rule | Description |
|---|---|---|---|
id | string | Unique identifier for the product. | |
sku* | string | updatable | SKU of the product. |
barcode | string | nullable updatable | Barcode of the product. |
name* | string | updatable | Name of the product. |
name_localized | string | nullable updatable | Localized name of the product. |
description | string | nullable updatable | Description of the product. |
description_localized | string | nullable updatable | Localized description of the product |
image | string | nullable updatable | The product image link |
is_active | boolean | updatable | True if the product is available for selling. |
is_stock_product | boolean | updatable | Indicates if the product is a stock product in which case its available quantity and cost are affected by the configurations and quantity of its single ingredient, it cannot have more than 1 ingredient |
is_ready | boolean | if false means the product is missing configurations and should not be sold. | |
pricing_method | integer | updatable | The pricing method of the product, 1 for Pre Set 2 for Open price |
selling_method | integer | updatable | The selling method of the product, 1 for Unit and 2 for Weight |
costing_method | integer | updatable | The costing method of the product, 1 for Fixed and 2 for From Ingredients |
preparation_time | integer | nullable updatable | Product preparation time in minutes. |
price* | double | nullable updatable | The selling price of the product. |
cost | double | nullable updatable | The fixed cost of the product. |
calories | integer | nullable updatable | product calories. |
tax_group | object | updatable includable | The Tax Group attached to the product. |
category | object | updatable includable | The Category attached to the product. |
tags | array | updatable includable | List of Tags attached to the product. |
discounts | array | updatable includable | List of Discounts attached to the product. |
timed_events | array | updatable includable | List of Timed Events attached to the product. |
branches | array | includable | List of branches in which product has custom attributes |
modifiers | array | includable | List of Modifiers attached to the product. |
ingredients | array | includable | List of Inventory Items attached to the product. |
groups | array | includable | List of Menu Groups attached to the product. |
created_at | string | sortable | Time at which the object was created in UTC. YYYY-MM-DD HH-MM-SS |
updated_at | string | sortable | Time at which the object was updated in UTC. YYYY-MM-DD HH-MM-SS |
deleted_at | string | nullable | Time at which the object was deleted in UTC. YYYY-MM-DD HH-MM-SS |
# Product Modifiers Attributes
| Field | Type | Description |
|---|---|---|
modifiers.pivot.unique_options | boolean | If true, it restricts the quantity of each option inside the modifier to max of 1 for the product when creating an order |
modifiers.pivot.minimum_options | integer | The minimum allowed quantity when adding this modifier to the linked product |
modifiers.pivot.maximum_options | integer | The maximum allowed quantity when adding this modifier to the linked product |
modifiers.pivot.free_options | integer | The number of free options when adding this modifier to the linked product |
modifiers.pivot.default_options_ids | array | The ids of the Modifier Options that are added by default to the linked product |
modifiers.pivot.excluded_options_ids | array | The ids of the Modifier Options that can't be added to the linked product |
# Product Branch Attributes
| Field | Type | Description |
|---|---|---|
branches.pivot.price | integer | The product custom price in the linked product |
branches.pivot.is_active | boolean | If true, it means the product is active in the linked branch |
branches.pivot.is_in_stock | boolean | If true, it means the product is available in the linked branch |
# Product Ingredients Attributes
| Field | Type | Description |
|---|---|---|
ingredients.pivot.quantity | integer | The quantity of the Inventory Items linked to the product |
ingredients.pivot.inactive_in_order_types | array | The order types where this ingredient will be inactive |
# List Products
GET /products
# Scope
general.read
# Filters
idnamename_localizedwith_ingredientstags.idskusku_partialgroups.idbarcodecategory_idtax_group_idis_activeis_readyis_stock_productmodifiers.idcosting_methodupdated_afteris_deletedcreated_onupdated_ondeleted_on
# Response
{
"data": [
{
"id": "8f7abbb1",
"sku": "sk-0001",
"barcode": "200100",
"name": "Roasted Chicken Breast Burger",
"name_localized": null,
"description": "healthy roasted chicken breast hamburger with low calories sauces",
"description_localized": null,
"image": "https://image.com/bubgxnh1x.jpg",
"is_active": true,
"is_stock_product": false,
"is_ready": true,
"pricing_method": 1,
"selling_method": 1,
"costing_method": 2,
"preparation_time": null,
"price": 14,
"cost": null,
"calories": 310,
"created_at": "2019-12-28 22:42:57",
"updated_at": "2020-01-04 23:07:33",
"deleted_at": null,
"discounts": [
{
"id": "8f7b8ec6",
"pivot": {
"product_id": "8f7abbb1",
"discount_id": "8f7b8ec6"
}
}
],
"timed_events": [
{
"id": "8f7b960b",
"pivot": {
"product_id": "8f7abbb1",
"timed_event_id": "8f7b960b"
}
}
],
"category": {
"id": "8f7ab8de"
},
"tax_group": {
"id": "8f7abdbd"
},
"tags": [
{
"id": "8f7b9527",
"pivot": {
"product_id": "8f7abbb1",
"tag_id": "8f7b952"
}
}
],
"groups": [
{
"id": "8f83fc43"
}
],
"branches": [
{
"pivot": {
"price": 12,
"is_active": true,
"is_in_stock": true
},
"id": "8f7ab00b"
}
],
"modifiers": [
{
"pivot": {
"is_splittable_in_half": false,
"unique_options": false,
"minimum_options": 0,
"maximum_options": 3,
"free_options": 1,
"default_options_ids": [
"8f7ba95a"
],
"excluded_options_ids": [
"8ssba95b"
]
},
"id": "8f7ba4ff",
"name": "Topping",
"is_ready": true,
"reference": "mod-04"
}
],
"ingredients": [
{
"pivot": {
"quantity": 150,
"inactive_in_order_types": [
1
]
},
"id": "8f7b966d"
}
]
}
]
}
# Get Product
GET /products/{productId}
# Scope
general.read
# Response
{
"data": {
"id": "8f7abbb1",
"sku": "sk-0001",
"barcode": "200100",
"name": "Roasted Chicken Breast Burger",
"name_localized": null,
"description": "healthy roasted chicken breast hamburger with low calories sauces",
"description_localized": null,
"image": "https://image.com/bubgxnh1x.jpg",
"is_active": true,
"is_stock_product": false,
"is_ready": true,
"pricing_method": 1,
"selling_method": 1,
"costing_method": 2,
"preparation_time": null,
"price": 14,
"cost": null,
"calories": 310,
"created_at": "2019-12-28 22:42:57",
"updated_at": "2020-01-04 23:07:33",
"deleted_at": null,
"discounts": [
{
"id": "8f7b8ec6",
"pivot": {
"product_id": "8f7abbb1",
"discount_id": "8f7b8ec6"
}
}
],
"timed_events": [
{
"id": "8f7b960b",
"pivot": {
"product_id": "8f7abbb1",
"timed_event_id": "8f7b960b"
}
}
],
"category": {
"id": "8f7ab8de"
},
"tax_group": {
"id": "8f7abdbd"
},
"tags": [
{
"id": "8f7b9527",
"pivot": {
"product_id": "8f7abbb1",
"tag_id": "8f7b952"
}
}
],
"groups": [
{
"id": "8f83fc43"
}
],
"branches": [
{
"pivot": {
"price": 12,
"is_active": true,
"is_in_stock": true
},
"id": "8f7ab00b"
}
],
"modifiers": [
{
"options": [
{
"id": "8f7ba8d8",
"name": "Tomato Slices",
"is_active": true,
"price": 0
}
],
"pivot": {
"is_splittable_in_half": false,
"unique_options": false,
"minimum_options": 0,
"maximum_options": 3,
"free_options": 1,
"default_options_ids": [
"8f7ba95a"
],
"excluded_options_ids": [
"8ssba95b"
]
},
"id": "8f7ba4ff",
"name": "Topping",
"is_ready": true,
"reference": "mod-04"
}
],
"ingredients": [
{
"pivot": {
"quantity": 150,
"inactive_in_order_types": [
1
]
},
"id": "8f7b966d"
}
]
}
}
# Create Product
POST /products
# Scope
menu.write
# Request
{
"sku": "P001",
"barcode": null,
"name": "Burger",
"name_localized": null,
"description": "...",
"description_localized": "...",
"image": "https://path-to-image/",
"is_active": true,
"is_stock_product": false,
"pricing_method": 1,
"selling_method": 2,
"costing_method": 1,
"preparation_time": 90,
"price": 742,
"cost": 608,
"calories": 624,
"tax_group_id": "8d207fc3",
"category_id": "8d207fc3",
"tags": [
{
"id": "8d207fc3"
}
],
"discounts": [
{
"id": "8d207fc3"
}
],
"timed_events": [
{
"id": "8d207fc3"
}
]
}
# Response
{
"data": {
"id": "8f7abbb1",
"sku": "sk-0001",
"barcode": "200100",
"name": "Roasted Chicken Breast Burger",
"name_localized": null,
"description": "healthy roasted chicken breast hamburger with low calories sauces",
"description_localized": null,
"image": "https://image.com/bubgxnh1x.jpg",
"is_active": true,
"is_stock_product": false,
"is_ready": true,
"pricing_method": 1,
"selling_method": 1,
"costing_method": 2,
"preparation_time": null,
"price": 14,
"cost": null,
"calories": 310,
"created_at": "2019-12-28 22:42:57",
"updated_at": "2020-01-04 23:07:33",
"deleted_at": null,
"discounts": [
{
"id": "8f7b8ec6",
"pivot": {
"product_id": "8f7abbb1",
"discount_id": "8f7b8ec6"
}
}
],
"timed_events": [
{
"id": "8f7b960b",
"pivot": {
"product_id": "8f7abbb1",
"timed_event_id": "8f7b960b"
}
}
],
"category": {
"id": "8f7ab8de"
},
"tax_group": {
"id": "8f7abdbd"
},
"tags": [
{
"id": "8f7b9527",
"pivot": {
"product_id": "8f7abbb1",
"tag_id": "8f7b952"
}
}
],
"groups": [
{
"id": "8f83fc43"
}
],
"branches": [
{
"pivot": {
"price": 12,
"is_active": true,
"is_in_stock": true
},
"id": "8f7ab00b"
}
],
"modifiers": [
{
"options": [
{
"id": "8f7ba8d8",
"name": "Tomato Slices",
"is_active": true,
"price": 0
}
],
"pivot": {
"is_splittable_in_half": false,
"unique_options": false,
"minimum_options": 0,
"maximum_options": 3,
"free_options": 1,
"default_options_ids": [
"8f7ba95a"
],
"excluded_options_ids": [
"8ssba95b"
]
},
"id": "8f7ba4ff",
"name": "Topping",
"is_ready": true,
"reference": "mod-04"
}
],
"ingredients": [
{
"pivot": {
"quantity": 150,
"inactive_in_order_types": [
1
]
},
"id": "8f7b966d"
}
]
}
}
# Update Product
PUT /products/{productId}
# Scope
menu.write
# Request
{
"sku": "P001",
"barcode": null,
"name": "Burger",
"name_localized": null,
"description": "...",
"description_localized": "...",
"image": "https://path-to-image/",
"is_active": true,
"is_stock_product": false,
"pricing_method": 1,
"selling_method": 2,
"costing_method": 1,
"preparation_time": 90,
"price": 742,
"cost": 608,
"calories": 624,
"tax_group_id": "8d207fc3",
"category_id": "8d207fc3",
"tags": [
{
"id": "8d207fc3"
}
],
"discounts": [
{
"id": "8d207fc3"
}
],
"timed_events": [
{
"id": "8d207fc3"
}
]
}
# Response
{
"data": {
"id": "8f7abbb1",
"sku": "sk-0001",
"barcode": "200100",
"name": "Roasted Chicken Breast Burger",
"name_localized": null,
"description": "healthy roasted chicken breast hamburger with low calories sauces",
"description_localized": null,
"image": "https://image.com/bubgxnh1x.jpg",
"is_active": true,
"is_stock_product": false,
"is_ready": true,
"pricing_method": 1,
"selling_method": 1,
"costing_method": 2,
"preparation_time": null,
"price": 14,
"cost": null,
"calories": 310,
"created_at": "2019-12-28 22:42:57",
"updated_at": "2020-01-04 23:07:33",
"deleted_at": null,
"discounts": [
{
"id": "8f7b8ec6",
"pivot": {
"product_id": "8f7abbb1",
"discount_id": "8f7b8ec6"
}
}
],
"timed_events": [
{
"id": "8f7b960b",
"pivot": {
"product_id": "8f7abbb1",
"timed_event_id": "8f7b960b"
}
}
],
"category": {
"id": "8f7ab8de"
},
"tax_group": {
"id": "8f7abdbd"
},
"tags": [
{
"id": "8f7b9527",
"pivot": {
"product_id": "8f7abbb1",
"tag_id": "8f7b952"
}
}
],
"groups": [
{
"id": "8f83fc43"
}
],
"branches": [
{
"pivot": {
"price": 12,
"is_active": true,
"is_in_stock": true
},
"id": "8f7ab00b"
}
],
"modifiers": [
{
"options": [
{
"id": "8f7ba8d8",
"name": "Tomato Slices",
"is_active": true,
"price": 0
}
],
"pivot": {
"is_splittable_in_half": false,
"unique_options": false,
"minimum_options": 0,
"maximum_options": 3,
"free_options": 1,
"default_options_ids": [
"8f7ba95a"
],
"excluded_options_ids": [
"8ssba95b"
]
},
"id": "8f7ba4ff",
"name": "Topping",
"is_ready": true,
"reference": "mod-04"
}
],
"ingredients": [
{
"pivot": {
"quantity": 150,
"inactive_in_order_types": [
1
]
},
"id": "8f7b966d"
}
]
}
}
# Delete Product
DELETE /products/{productId}
# Scope
menu.write
The API will respond with 200 indicating that the product has been deleted.
# Restore Product
PUT /products/{productId}/restore
# Scope
admin.restore
The API will respond with 200 indicating that the product has been restored.
# Attach Ingredient to Product
Ristecho Attach Ingredient To Product API allows you to attach a single inventory item to a specific product based on the provided inventory ItemId & the productId.
POST /products/{productId}/ingredients/{inventoryItemId}
# Scope
menu.write
# Request
{
"quantity": 5,
"inactive_in_order_types": [1,3]
}
# Remove Ingredient from Product
Ristecho Remove Ingredient From Product API allows you to remove a single inventory item from a specific product based on the provided inventoryItemId & the productId.
DELETE /products/{productId}/ingredients/{inventoryItemId}
# Scope
menu.write
# Attach Modifier to Product
Ristecho Attach Modifier to Product API Allows you to attach a single modifier to a specific product based on the provided modifierId & the productId.
POST /products/{productId}/modifiers/{modifierId}
# Scope
menu.write
# Request
{
"is_splittable_in_half": false,
"minimum_options": 1,
"maximum_options": 3,
"free_options": 1,
"default_options_ids": [
"6f765t45"
],
"excluded_options_ids": [
"8f7b966d"
]
}
# Remove Modifier from Product
Ristecho Remove Modifier From Product API Allows you to remove a single modifier from a specific product based on the provided modifierId & the productId.
DELETE /products/{productId}/modifiers/{modifierId}
# Scope
menu.write
# Attach Branch Attributes to Product
POST /products/{productId}/branches/{branchId}
Some attributes can have special values in a specific branch or set of branches, you can define these values with this request.
# Scope
menu.write
# Request
{
"price": 300,
"is_active": true,
"is_in_stock": false
}
# Remove Branch Attributes from Product
DELETE /products/{productId}/branches/{branchId}
# Scope
menu.write
← Price Tags Promotions →