# 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

  • id
  • name
  • name_localized
  • with_ingredients
  • tags.id
  • sku
  • sku_partial
  • groups.id
  • barcode
  • category_id
  • tax_group_id
  • is_active
  • is_ready
  • is_stock_product
  • modifiers.id
  • costing_method
  • updated_after
  • is_deleted
  • created_on
  • updated_on
  • deleted_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

Last Updated: 1/3/2023, 2:35:25 PM