Skip to Content
DocsReferenceWell-Known Events

Well-Known Events

Standard event names with typed property schemas, validated by SDKs and the backend at ingestion time. Using well-known events gives you TypeScript types, schema validation, and built-in dashboard templates.

Custom event names (any other string) are accepted without validation.

Event index

EventCategoryDescription
page_viewNavigationPage or screen view
clickEngagementElement click
scrollEngagementScroll depth milestone
form_submitEngagementForm submission
form_fieldEngagementForm field interaction
rage_clickUXRepeated clicks on non-responsive element
dead_clickUXClick with no response
signupIdentityUser registration completed
loginIdentityUser sign-in
searchEngagementSearch query submitted
product_viewedCommerceProduct detail view
add_to_cartCommerceItem added to cart
remove_from_cartCommerceItem removed from cart
checkout_startedCommerceCheckout flow initiated
purchaseCommerceCompleted purchase

Schemas

page_view

Auto-tracked by the Web SDK on navigation and SPA route changes.

PropertyTypeRequiredDescription
$urlstringAutoCurrent page URL (auto-property)
$referrerstringAutoDocument referrer
$titlestringNoPage title

click

Auto-tracked on element clicks.

PropertyTypeRequiredDescription
tagstringNoHTML tag name (e.g. button, a)
textstringNoElement text content
hrefstringNoLink href if applicable
selectorstringNoCSS selector path

scroll

Auto-tracked at depth milestones.

PropertyTypeRequiredDescription
depthnumberYesScroll depth percentage (25, 50, 75, 100)

signup

PropertyTypeRequiredDescription
methodstringNoSignup method (e.g. email, google, github)
planstringNoInitial plan selected

login

PropertyTypeRequiredDescription
methodstringNoSign-in method
PropertyTypeRequiredDescription
querystringYesSearch query text
results_countnumberNoNumber of results returned

product_viewed

PropertyTypeRequiredDescription
product_idstringYesProduct SKU or ID
product_namestringNoDisplay name
pricenumberNoProduct price
categorystringNoProduct category

add_to_cart

PropertyTypeRequiredDescription
product_idstringYesProduct SKU or ID
quantitynumberNoQuantity added (default 1)
pricenumberNoUnit price at time of add

remove_from_cart

PropertyTypeRequiredDescription
product_idstringYesProduct SKU or ID
quantitynumberNoQuantity removed

checkout_started

PropertyTypeRequiredDescription
cart_valuenumberNoTotal cart value
item_countnumberNoNumber of items in cart

purchase

PropertyTypeRequiredDescription
revenuenumberYesTransaction amount (use number, not string)
currencystringYesISO 4217 currency code (e.g. USD, EUR)
order_idstringYesUnique order identifier
item_countnumberNoNumber of items purchased
track('purchase', { revenue: 29.99, currency: 'USD', order_id: 'ord-456', item_count: 2 }, { immediate: true })

form_submit

PropertyTypeRequiredDescription
form_idstringNoForm identifier
form_namestringNoForm name attribute

form_field

PropertyTypeRequiredDescription
form_idstringNoForm identifier
field_namestringNoField name
interactionstringNofocus, blur, or change

rage_click / dead_click

Auto-tracked by frustration detection.

PropertyTypeRequiredDescription
tagstringNoTarget element tag
selectorstringNoCSS selector
click_countnumberNoNumber of rapid clicks (rage_click only)

Validation errors

Sending invalid properties on well-known events returns invalid_argument:

{ "code": "invalid_argument", "message": "validation error", "details": [ { "field": "events[0].properties.revenue", "description": "value must be number, got string" } ] }

Custom events skip validation entirely.

TypeScript types

The Web SDK generates TypeScript types from protobuf schemas:

import type { PurchaseEvent } from '@poluruprvn/pug-web' track('purchase', { revenue: 29.99, currency: 'USD', order_id: 'ord-456' } satisfies PurchaseEvent)

Regenerate when protos change: node gen-well-known-events.mjs

Source of truth

Schemas are defined in protobuf in the cotton  repo. This page will be auto-generated from proto in a future docs pipeline.

Further reading

Last updated on