> ## Documentation Index
> Fetch the complete documentation index at: https://storekit.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Klaviyo Event Reference

> Reference Klaviyo metrics and profile fields sent by storekit: order and review events, browser activity, native app opens and push notification engagement.

Every metric storekit sends to Klaviyo, with its properties. Use it when building flow filters, segment conditions and email templates. For when each event fires and what to build with it, see [Flows to Build](/docs/guides/integrations/marketing/klaviyo/flows).

## Conventions

* **Order and review events are linked to profiles by email.** Orders without an email are never sent. For app customers, see [Customer Profiles](/docs/guides/integrations/marketing/klaviyo/native-apps#customer-profiles).
* **Money is in major units** — pounds, not pence (`12.50`, not `1250`) — in the store's currency, which is also sent as `Currency`.
* **Every server-side event (orders and reviews) carries `VenueName` and `VenueSlug`**, so a multi-store account can filter or branch flows by store. Of the browser events, **Added to Cart**, **Started Checkout** and **Viewed Menu** carry `VenueSlug` only; **Viewed Brand** carries `BrandSlug` instead; **Viewed Product** carries neither.
* **Duplicates are suppressed.** Each order event has a stable unique ID (for example one per order for **Placed Order**, one per dish line for **Ordered Product**), so a retry never creates a second event in Klaviyo.
* Empty properties are left out rather than sent as blank.

## Order Events

Sent by storekit's servers, so they arrive whether or not the customer's browser blocks tracking. All five share the same order properties.

### Shared Order Properties

| Property | Description |
| - | - |
| `OrderId` | storekit order ID (the POS order ID where the order was sent to a till) |
| `OrderCode` | Short order code shown to the customer and on receipts |
| `Items` | Each dish on the order — see [Item Object](#item-object) |
| `ItemNames` | Dish names, in order, for message copy |
| `ProductIDs` | Product IDs of every dish |
| `Categories` | Every menu category on the order, deduplicated |
| `ItemCount` | Total quantity across all dishes |
| `Currency` | Store currency code, e.g. `GBP` |
| `Total` | Order total |
| `DeliveryFee` | Delivery fee, when charged |
| `ServiceCharge` | Service charge, when charged |
| `Tip` | Tip, when given |
| `DiscountAmount` | Discount applied, when any |
| `FulfillmentMethod` | One of `Delivery`, `Pickup`, `InStore`, `Curbside`, `Billpay`, `CateringDelivery`, `CateringPickup` (fixed list) |
| `Channel` | One of `Web`, `App`, `Kiosk`, `Other` (fixed list) |
| `PaymentType` | How the order was paid |
| `IsPreOrder` | `true` when the customer chose a future time slot |
| `PreOrderDateTime` | The chosen slot, when `IsPreOrder` is `true` |
| `VenueName` | Store name |
| `VenueSlug` | Store URL slug |

### Item Object

Used in `Items` on every order event and as the top-level properties of **Ordered Product**.

| Property | Description |
| - | - |
| `ProductID` | Stable product key: PLU, then SKU, then POS ID, falling back to the storekit product ID |
| `SKU` | Product SKU, when set |
| `ProductName` | Dish name |
| `ProductImage` | Dish image URL |
| `Categories` | Menu categories the dish belongs to |
| `Quantity` | Quantity ordered |
| `ItemPrice` | Unit price, excluding modifiers |
| `Modifiers` | Each chosen modifier: `ModifierID`, `ModifierName`, `ModifierPrice`, `Quantity` |

### Placed Order

Sent when the customer completes payment. Event value is `Total`. Properties: the shared order properties.

### Ordered Product

Sent once per dish line, immediately after **Placed Order**. Event value is the line total including modifiers.

| Property | Description |
| - | - |
| `OrderId`, `OrderCode` | As above |
| All [Item Object](#item-object) properties | For this dish |
| `BaseTotal` | `ItemPrice` × `Quantity` |
| `ModifiersTotal` | Modifier cost × `Quantity` |
| `RowTotal` | `BaseTotal` + `ModifiersTotal` |
| `Currency`, `VenueName`, `VenueSlug` | As above |

### Fulfilled Order

Sent when you mark the order **Complete** in storekit (or your POS marks it complete). Event value is `Total`. Properties: the shared order properties.

### Canceled Order

Sent when the order is cancelled. Event value is `Total`. Properties: the shared order properties. Note the American spelling — it matches Klaviyo's built-in metric name so Klaviyo's own reports and templates recognise it.

### Refunded Order

Sent for each refund, full or partial. Event value is the amount refunded, so a £5 partial refund has a value of `5`.

| Property | Description |
| - | - |
| Shared order properties | As above |
| `RefundAmount` | Amount refunded in this event |
| `IsPartialRefund` | `true` when less than the order total was refunded |

## Review Events

Sent when [customer feedback](/docs/guides/marketing/customer-feedback) is switched on for the store. See [Review Events](/docs/guides/integrations/marketing/klaviyo/review-events) for what to build with them.

### Shared Review Properties

| Property | Description |
| - | - |
| `ReviewId` | storekit review ID |
| `OrderId` | Order the review is about |
| `OrderCode` | Short order code |
| `Currency` | Store currency code |
| `VenueName` | Store name |
| `VenueSlug` | Store URL slug |

### Review Requested

Sent when storekit asks the customer to rate their order — after the order's estimated ready time plus the delay set under **Settings** → **Feedback**.

| Property | Description |
| - | - |
| Shared review properties | As above |
| `ReviewUrl` | Link to the customer's rating page |
| `Items` | Each dish on the order: `ProductID`, `ProductName`, `Quantity` |

### Review Submitted

Sent when the customer submits their rating.

| Property | Description |
| - | - |
| Shared review properties | As above |
| `Rating` | Overall star rating, 1 to 5 |
| `ReviewContent` | The customer's written comments |
| `FoodRating`, `ServiceRating`, `AtmosphereRating`, `ValueRating` | Optional sub-ratings, 1 to 5, when the customer gave them |
| `VerifiedPurchase` | Always `true` — every review comes from a paid order |
| `Items` | Dish-level feedback: `ProductID`, `ProductName`, `Rating`, `Sentiment`, `Reasons`, `Comment` |

### Positive Review Submitted, Negative Review Submitted

Sent alongside **Review Submitted**, with the same properties. **Positive Review Submitted** is sent for a `Rating` of 4 or 5; **Negative Review Submitted** for 1 to 3. This is fixed and cannot be changed in the dashboard.

### Reviewed Product

Sent once per dish the customer rated.

| Property | Description |
| - | - |
| Shared review properties | As above |
| `ProductID` | Product key |
| `ProductName` | Dish name |
| `Rating` | Rating the customer gave this dish |
| `Sentiment` | `positive`, `negative` or `neutral` (fixed list) |
| `Reasons` | Reasons picked for that sentiment |
| `Comment` | Dish-level comment |
| `OrderRating` | The overall rating of the order |

### Reviewer Profile Properties

Review events also update these custom properties on the customer's Klaviyo profile, so you can segment on them:

| Property | Description |
| - | - |
| `StoreKit Last Request Sent Date` | When storekit last asked this customer for a review |
| `StoreKit Last Review Date` | When they last submitted one |
| `StoreKit Last Review Rating` | The overall rating they gave |

## On-Site Events

Sent from the customer's browser by Klaviyo's own `klaviyo.js`, which storekit loads when the store has a **Public API Key / site ID**. They are tied to the profile once the customer is identified (see [Customer Profile](#customer-profile)); until then Klaviyo holds them anonymously. Ad blockers stop these events for some customers — that is normal.

### Viewed Product

Sent when a customer opens a dish. storekit also records the view with Klaviyo's `trackViewedItem`, which powers Klaviyo's **Recently Viewed** template block.

| Property | Description |
| - | - |
| `ProductId` | Product key |
| `SKU` | Product SKU, when set |
| `ProductName` | Dish name |
| `ProductPrice` | Dish price in major units (`3.50`) |
| `ProductImage` | Dish image URL |
| `ProductURL` | Link to the store's menu |
| `Categories` | Menu category the dish belongs to |
| `Currency` | Store currency code |

### Added to Cart

Sent each time a dish is added to the basket.

| Property | Description |
| - | - |
| `AddedItemProductId` | Product key of the dish just added |
| `AddedItemSKU` | Its SKU, when set |
| `AddedItemProductName` | Its name |
| `AddedItemPrice` | Its unit price |
| `AddedItemQuantity` | Quantity added |
| `AddedItemImageURL` | Its image URL |
| `AddedItemURL` | Link to the store's menu |
| `AddedItemCategories` | Its menu category |
| `AddedItemModifiers` | Names of the modifiers chosen |
| `$value` | Basket subtotal after the change |
| `Currency` | Store currency code |
| `VenueSlug` | Store URL slug |
| `Items` | Every line in the basket after the change — see [Basket Line](#basket-line) |
| `ItemNames` | Dish names in the basket |
| `ItemCount` | Total quantity in the basket |
| `Categories` | Every menu category in the basket |
| `CheckoutURL` | Link back to the store's checkout |

### Started Checkout

Sent when the customer reaches the payment step. Repeat visits to checkout with an unchanged basket on the same day are deduplicated into one event; a changed basket or a new day is a new **Started Checkout**.

| Property | Description |
| - | - |
| `$value`, `Value` | Basket total |
| `Currency` | Store currency code |
| `VenueSlug` | Store URL slug |
| `Items` | Every line in the basket — see [Basket Line](#basket-line) |
| `ItemNames` | Dish names in the basket |
| `ItemCount` | Total quantity in the basket |
| `Categories` | Every menu category in the basket |
| `CheckoutURL` | Link back to the store's checkout |

### Basket Line

Used in `Items` on **Added to Cart** and **Started Checkout**.

| Property | Description |
| - | - |
| `ProductId` | Product key |
| `SKU` | SKU, when set |
| `ProductName` | Dish name |
| `Quantity` | Quantity in the basket |
| `ItemPrice` | Unit price, excluding modifiers |
| `RowTotal` | Line total including modifiers |
| `ProductImage` | Dish image URL |
| `ProductURL` | Link to the store's menu |
| `ProductCategories` | Menu category |
| `Modifiers` | Names of the modifiers chosen |

### Viewed Menu

Sent when a customer opens your ordering page. This is the event name Klaviyo's restaurant flow templates expect; it replaces storekit's older custom **Viewed Venue** event, so update any flow or segment still referencing that name.

| Property | Description |
| - | - |
| `AccountId` | storekit account ID |
| `VenueId` | storekit store ID |
| `VenueSlug` | Store slug |
| `MenuURL` | Link back to the store's menu |

The customer is usually still anonymous when the menu loads, so the event only becomes usable in a flow once Klaviyo can link the visit to a profile — when they enter their email at checkout, or arrive from a Klaviyo email or SMS link. Klaviyo records its own **Active on Site** at that point. Menu-browse flows triggered on **Viewed Menu** therefore fire for known customers only.

### Viewed Brand

Sent when a customer opens a brand landing page — the page that lists your stores and asks them to pick one. Only brands with more than one store have this page. The same anonymous-visitor caveat as **Viewed Menu** applies.

| Property | Description |
| - | - |
| `AccountId` | storekit account ID |
| `BrandId` | storekit brand ID |
| `BrandSlug` | Brand slug |
| `BrandURL` | Link back to the brand landing page |

## Native App Events

Available when Klaviyo is connected to your branded iOS or Android app. These are separate from ordering website activity.

| Metric | When it is recorded | What it tells you |
| - | - | - |
| **Opened App** | A customer opens your app or returns to it after using another app | The customer visited the app, not necessarily placed an order |
| **Opened Push** | A customer taps a Klaviyo push notification | The customer engaged with the notification; delivery alone does not count |

Signing in updates a customer profile; it does not record a separate **Signed In** event. Connecting the app does not track every screen a customer visits. Dish views, basket changes and checkout activity depend on your ordering website's tracking. See [Native Apps](/docs/guides/integrations/marketing/klaviyo/native-apps).

## Customer Profile

When a customer enters their email at checkout, storekit identifies them in Klaviyo and fills in first name, last name and phone number as they are entered, and their browsing events from that session are linked to the profile. Kiosks are shared devices, so kiosk customers are only identified when their order is placed.

Order events set `email`, `first_name` and `last_name` on the profile. When a customer opts in to marketing, storekit subscribes the profile to your chosen list for email and, if they gave a valid phone number, SMS — see [Marketing Consent](/docs/guides/integrations/marketing/klaviyo/marketing-consent).

When customers sign in to your app, their profile is updated with their name, email and phone number, where available. Signing out stops subsequent app activity being attributed to that signed-in customer. Neither action changes their email or SMS marketing consent.

## Catalog Items

With catalog sync on, each dish is also a Klaviyo catalog item — see [Menu Catalog Sync](/docs/guides/integrations/marketing/klaviyo/catalog-sync) for the fields.


## Related topics

- [Sync Past Orders to Klaviyo](/docs/guides/integrations/marketing/klaviyo/historical-sync.md)
- [Klaviyo](/docs/guides/integrations/marketing/klaviyo/overview.md)
- [Troubleshooting Klaviyo](/docs/guides/integrations/marketing/klaviyo/troubleshooting.md)
- [Klaviyo for Native Apps](/docs/guides/integrations/marketing/klaviyo/native-apps.md)
- [Review Events](/docs/guides/integrations/marketing/klaviyo/review-events.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.