Event Reference
Purpose Of This Page
This page is the source of truth for canonical event names and minimum payload requirements.
For platform-specific sender examples (CDN, npm, React Native), use Event Cookbook.
Sender Models
Selwise supports two logical send paths:
track(name, args?)for direct runtime event emission.pushDataLayer(payload)for structured event payloads.
Access by integration mode:
- CDN:
window.Selwise.track(...),window.Selwise.pushDataLayer(...) - npm instance:
widget.track(...),widget.pushDataLayer(...) - npm global (optional):
window.Selwise.*withexposeGlobal: true - React Native:
sdk.track(...),sdk.pushDataLayer(...)(local snapshot),sdk.flush()for immediate network send
Canonical Rules
- Use canonical names exactly as listed.
- Do not send legacy aliases.
- For business-specific events, use
custom_event. - Include event-family minimum fields.
Complete Event Catalog
| Event | Family | Required Minimum Fields |
|---|---|---|
page_view | Page | page.type or page.path |
virtual_page_view | Page | page.path |
widget_view | Page | custom.params.widgetId |
category_view | Page | entityId (category path) or metadata.categoryPath |
product_view | Product | product.sku or metadata.productItemCode |
product_click | Product | product.sku or metadata.productItemCode |
product_impression | Product | product.sku |
product_dwell_time | Product | product.sku |
add_to_cart | Cart | basket.products[] |
remove_from_cart | Cart | basket.products[] |
update_cart | Cart | basket.products[] |
cart_abandon | Cart | basket.id |
cart_restore | Cart | basket.id |
checkout_begin | Checkout | checkout.step |
checkout_progress | Checkout | checkout.step |
checkout_option | Checkout | checkout.step, checkout.option |
purchase | Checkout | order.id, order.total |
user_signup | User | user.id |
user_login | User | user.id |
user_logout | User | user.id |
user_update | User | user.id |
search_instant_open | Search | event |
search_query | Search | search.query |
search_filter | Search | search.filters[] |
search_sort | Search | search.sortBy |
search_page | Search | search.page |
search_results | Search | search.results |
search_zero_results | Search | search.query, search.results = 0 |
search_close | Search | event |
impression | Engagement | event |
click | Engagement | event |
close | Engagement | event |
view | Engagement | event |
hover | Engagement | event |
scroll | Engagement | event |
slider_navigate | Engagement | custom.params.direction |
slider_swipe | Engagement | custom.params.direction |
widget_impression | Engagement | custom.params.widgetId |
script_injected | Engagement | custom.params.scriptId |
script_error | Engagement | custom.params.scriptId |
identify | User | user.id |
category_filter | Search | search.category |
recent_search_click | Search | search.query |
popular_search_click | Search | search.query |
popular_category_click | Search | search.category |
popular_product_click | Product | product.sku |
wishlist | Product | product.sku |
custom_event | Custom | custom.name |
Track vs Data Layer Guidance
- Use
track(...)for direct semantic event emission. - Use
pushDataLayer(...)when mirroring structured analytics payloads. - In React Native,
pushDataLayer(...)does not send events to network by itself.
Validation Checklist
- Canonical event name is used.
- Event-family minimum fields are present.
- Product-related events include stable product identifier.
- Consent state allows event family.
- For RN, event network send is validated with
flush().