product.priceChanged

product.priceChanged

This event is triggered when a product's sales price changes in a restaurant.

Price list updates, changing a product's price directly, defining or removing a branch specific price, and bulk price imports via Excel all trigger this event. It does not matter whether the change was made from the head office application or from the branch's own Adisyo application — the event is sent in both cases.

If the price did not actually change (the same amount was saved again), no event is produced.

When a branch specific price is defined, that price is sent in the payload; otherwise the price from the price list the branch is bound to is sent. In other words, the payload always carries the current effective price for that branch.

Payload Structure

A single save operation can affect more than one product (price list updates, bulk imports), so products are listed in a products array. When a single product changes, the array simply contains one item.

{
  "eventId": "9c1f0a2d-4b7e-4c1a-9f52-1d8e6b3a7c04",
  "webhookEventType": "product.priceChanged",
  "eventTimeUtc": "2025-10-21T11:59:50.1855135Z",
  "data": {
    "products": [
      {
        "productId": 2230902,
        "productName": "Sushi Set",
        "productCode": "SUS-001",
        "units": [
          {
            "productUnitId": 55123,
            "unitName": "Adet",
            "isDefault": true,
            "prices": [
              { "orderType": 1, "orderTypeName": "Masa siparişi", "price": 40.00, "isActive": true },
              { "orderType": 3, "orderTypeName": "Paket servis", "price": 45.00, "isActive": true },
              { "orderType": 5, "orderTypeName": "Gel-Al siparişi", "price": 30.00, "isActive": true }
            ]
          }
        ]
      }
    ]
  },
  "restaurantIdentity": "3edc2d46-bfc0-44d1-b701-f18e56306aed"
}

Data Fields

FieldTypeDescription
productsarrayProducts whose price changed. A single event carries at most 250 products; larger changes are split across multiple events

products Fields

FieldTypeDescription
productIdnumberProduct ID
productNamestringProduct name
productCodestringProduct code
unitsarrayUnits (portions) of the product. Prices are defined per unit

units Fields

FieldTypeDescription
productUnitIdnumberProduct unit ID. Same value as productUnitId in the /Menu response
unitNamestringUnit name (Piece, Portion, Small Size, etc.)
isDefaultbooleanWhether this is the default unit of the product
pricesarrayCurrent price per order type

prices Fields

FieldTypeDescription
orderTypenumberOrder type. 1 Table, 3 Delivery, 5 Takeaway
orderTypeNamestringName of the order type
pricenumberCurrent effective price in the branch
isActivebooleanWhether the product is open for sale for this order type

Usage

The payload contains all unit and order type prices of the product at that moment, not only the price that changed. This allows you to reflect the product's current prices directly, without making an additional request.

The products array is used for single product changes as well, so you do not need separate handling for the single and bulk cases.

Order types without a price definition are not included in the prices list. A product with no price in the branch is left out of the products array; if no product remains, no event is sent.

The isActive field reflects the product's sales status independently of the price and comes from the same source as the product.statusChanged event. Closing a product for sale does not produce a price event; product.statusChanged is triggered instead.