Event types
Browse Analytics SDK events with the trigger, what you pass, the browser event, the request sent to Cevoid, and the fields of each event.
Use this page when you want the Analytics SDK event catalog. Each event lists its trigger, what you pass to the SDK, the data it sends to Cevoid, and its fields. Events that take the same fields list them once. The examples and fields come from the published SDK, so they match what it sends.
You pass fields in camelCase; the SDK sends them to Cevoid in snake_case, inside the request envelope. Events that Cevoid galleries and cards send carry widgetType gallery or card. Events you send with trackEvent() always carry widgetType api, so the examples below show api.
Request envelope
Every event below is sent inside this request. Consent changes some of its fields.
The SDK does not check fields before it sends. Cevoid checks each request as a whole: one event that misses a required field or has an invalid value, such as a currency that is not a 3-letter code, rejects the whole batch, and the SDK does not retry. Calls made before init() are dropped, so call init() before the first trackEvent() or trackSale().
The SDK queues events and sends up to 20 at a time in one POST to https://telemetry.cevoid.com/events: every 2 seconds, as soon as 20 are queued, and when the page is hidden. It sends with navigator.sendBeacon, falling back to fetch with keepalive, and keeps at most 100 queued events, dropping the oldest.
{
"publishableKey": "cev_pk_example",
"events": [
{
"name": "widget.load",
"type": "widget",
"timestamp": "2026-11-03T09:30:00.000Z",
"context": {
"device": "desktop",
"language": "sv-SE",
"page_url": "https://shop.example.com/products/linen-shirt?color=sand",
"referer": "https://shop.example.com/products/linen-shirt?color=sand"
},
"session_id": "sess_4f9c2a7e1b3d4c8e9a6f2",
"data": {
"widget_id": "gallery-homepage",
"market_id": "market_se",
"posts_loaded_count": 12,
"fallback_posts_count": 0,
"page_position_x": 0,
"page_position_y": 640,
"widget_type": "api"
},
"has_session_cookie": false
}
]
}publishableKeystringrequiredYour Cevoid publishable key.
eventsobject[]requiredThe events in this batch.
Widget lifecycle
widget.load
Sent when a widget finishes loading its initial content.
trackEvent('widget.load', {
widgetId: 'gallery-homepage',
marketId: 'market_se',
postsLoadedCount: 12,
fallbackPostsCount: 0,
pagePositionX: 0,
pagePositionY: 640
}){
"widget_id": "gallery-homepage",
"market_id": "market_se",
"posts_loaded_count": 12,
"fallback_posts_count": 0,
"page_position_x": 0,
"page_position_y": 640,
"widget_type": "api"
}The SDK also fires cevoid:widget.load on window; its event.detail is what you pass plus widgetType: 'api'.
widgetIdstringID of the Cevoid widget the event belongs to. Leave it out for an event that does not come from a widget.
marketIdstringYour Cevoid market ID, for localized storefronts.
postsLoadedCountnumberNumber of posts loaded into the widget.
fallbackPostsCountnumberNumber of fallback posts among them.
pagePositionXnumberHorizontal position of the widget on the page, in pixels.
pagePositionYnumberVertical position of the widget on the page, in pixels.
widget.view
Sent each time a widget becomes visible to the shopper.
trackEvent('widget.view', {
widgetId: 'gallery-homepage',
marketId: 'market_se',
postsLoadedCount: 12,
fallbackPostsCount: 0,
pagePositionX: 0,
pagePositionY: 640
}){
"widget_id": "gallery-homepage",
"market_id": "market_se",
"posts_loaded_count": 12,
"fallback_posts_count": 0,
"page_position_x": 0,
"page_position_y": 640,
"widget_type": "api"
}The SDK also fires cevoid:widget.view on window; its event.detail is what you pass plus widgetType: 'api'.
Takes the same fields as widget.load.
Post events
post.view
Sent each time a post enters the viewport. The SDK drops a post.view with the same data sent again within 300 ms.
trackEvent('post.view', {
widgetId: 'gallery-homepage',
marketId: 'market_se',
postId: 'post_123',
postPosition: 4,
taggedProductIds: ['prod_1', 'prod_2']
}){
"widget_id": "gallery-homepage",
"market_id": "market_se",
"post_id": "post_123",
"post_position": 4,
"tagged_product_ids": [
"prod_1",
"prod_2"
],
"widget_type": "api"
}The SDK also fires cevoid:post.view on window; its event.detail is what you pass plus widgetType: 'api'.
widgetIdstringID of the Cevoid widget the event belongs to. Leave it out for an event that does not come from a widget.
marketIdstringYour Cevoid market ID, for localized storefronts.
postIdstringrequiredCevoid post ID.
postPositionnumberZero-based position of the post in the widget.
taggedProductIdsstring[]Your store's IDs of the products tagged in the post: product (variant group) IDs, not variant IDs or SKUs.
post.click
Sent when a shopper clicks a post.
trackEvent('post.click', {
widgetId: 'gallery-homepage',
marketId: 'market_se',
postId: 'post_123',
postPosition: 4,
taggedProductIds: ['prod_1', 'prod_2']
}){
"widget_id": "gallery-homepage",
"market_id": "market_se",
"post_id": "post_123",
"post_position": 4,
"tagged_product_ids": [
"prod_1",
"prod_2"
],
"widget_type": "api"
}The SDK also fires cevoid:post.click on window; its event.detail is what you pass plus widgetType: 'api'.
Takes the same fields as post.view.
post.view.popup
Sent when a post is viewed in the popup experience.
trackEvent('post.view.popup', {
widgetId: 'gallery-homepage',
marketId: 'market_se',
postId: 'post_123',
postPosition: 4,
taggedProductIds: ['prod_1', 'prod_2']
}){
"widget_id": "gallery-homepage",
"market_id": "market_se",
"post_id": "post_123",
"post_position": 4,
"tagged_product_ids": [
"prod_1",
"prod_2"
],
"widget_type": "api"
}The SDK also fires cevoid:post.view.popup on window; its event.detail is what you pass plus widgetType: 'api'.
Takes the same fields as post.view.
post.clap
Sent when a shopper claps a post.
trackEvent('post.clap', {
widgetId: 'gallery-homepage',
marketId: 'market_se',
postId: 'post_123',
postPosition: 4,
taggedProductIds: ['prod_1', 'prod_2']
}){
"widget_id": "gallery-homepage",
"market_id": "market_se",
"post_id": "post_123",
"post_position": 4,
"tagged_product_ids": [
"prod_1",
"prod_2"
],
"widget_type": "api"
}The SDK also fires cevoid:post.clap on window; its event.detail is what you pass plus widgetType: 'api'.
Takes the same fields as post.view.
Product click events
product.click.tag
Sent when a shopper clicks a product tag on a post.
trackEvent('product.click.tag', {
widgetId: 'gallery-homepage',
marketId: 'market_se',
postId: 'post_123',
productId: 'prod_1'
}){
"widget_id": "gallery-homepage",
"market_id": "market_se",
"post_id": "post_123",
"product_id": "prod_1",
"widget_type": "api"
}The SDK also fires cevoid:product.click.tag on window; its event.detail is what you pass plus widgetType: 'api'.
widgetIdstringID of the Cevoid widget the event belongs to. Leave it out for an event that does not come from a widget.
marketIdstringYour Cevoid market ID, for localized storefronts.
postIdstringrequiredCevoid post ID the product was clicked from.
productIdstringrequiredYour store's ID of the clicked product: the product (variant group) ID, not a variant ID or SKU.
product.click.post
Sent when a shopper clicks a post that links straight to a product. A post.click is sent with it.
trackEvent('product.click.post', {
widgetId: 'gallery-homepage',
marketId: 'market_se',
postId: 'post_123',
productId: 'prod_1'
}){
"widget_id": "gallery-homepage",
"market_id": "market_se",
"post_id": "post_123",
"product_id": "prod_1",
"widget_type": "api"
}The SDK also fires cevoid:product.click.post on window; its event.detail is what you pass plus widgetType: 'api'.
Takes the same fields as product.click.tag.
product.click.card
Sent when a shopper clicks a product in the list of products shown with a post, such as in the post popup.
trackEvent('product.click.card', {
widgetId: 'card-product-page',
marketId: 'market_se',
postId: 'post_123',
productId: 'prod_1'
}){
"widget_id": "card-product-page",
"market_id": "market_se",
"post_id": "post_123",
"product_id": "prod_1",
"widget_type": "api"
}The SDK also fires cevoid:product.click.card on window; its event.detail is what you pass plus widgetType: 'api'.
Takes the same fields as product.click.tag.
Gallery actions
gallery.load_more
Sent when a shopper loads more posts in a gallery widget.
trackEvent('gallery.load_more', {
widgetId: 'gallery-homepage',
marketId: 'market_se',
loadMoreType: 'button',
pagePositionX: 0,
pagePositionY: 1280
}){
"widget_id": "gallery-homepage",
"market_id": "market_se",
"load_more_type": "button",
"page_position_x": 0,
"page_position_y": 1280,
"widget_type": "api"
}The SDK also fires cevoid:gallery.load_more on window; its event.detail is what you pass plus widgetType: 'api'.
widgetIdstringID of the Cevoid widget the event belongs to. Leave it out for an event that does not come from a widget.
marketIdstringYour Cevoid market ID, for localized storefronts.
loadMoreTypestringrequiredHow the shopper loaded more posts. One of infinity_loader, button.
pagePositionXnumberHorizontal position of the widget on the page, in pixels.
pagePositionYnumberVertical position of the widget on the page, in pixels.
gallery.upload_cta_click
Sent when a shopper clicks the upload CTA inside a gallery.
trackEvent('gallery.upload_cta_click', {
widgetId: 'gallery-homepage',
marketId: 'market_se',
pagePositionX: 0,
pagePositionY: 920
}){
"widget_id": "gallery-homepage",
"market_id": "market_se",
"page_position_x": 0,
"page_position_y": 920,
"widget_type": "api"
}The SDK also fires cevoid:gallery.upload_cta_click on window; its event.detail is what you pass plus widgetType: 'api'.
widgetIdstringID of the Cevoid widget the event belongs to. Leave it out for an event that does not come from a widget.
marketIdstringYour Cevoid market ID, for localized storefronts.
pagePositionXnumberHorizontal position of the widget on the page, in pixels.
pagePositionYnumberVertical position of the widget on the page, in pixels.
Conversion event
sale.complete
Sent by trackSale() when a completed purchase is tracked. Use trackSale(data) for conversions rather than trackEvent('sale.complete', ...).
trackSale({
orderId: 'order_123',
marketId: 'market_se',
customerId: 'cust_456',
currency: 'SEK',
revenue: 1299.5,
skus: ['SKU-1', 'SKU-2']
}){
"market_id": "market_se",
"order_id": "order_123",
"customer_id": "cust_456",
"currency": "SEK",
"revenue": 1299.5,
"skus": [
"SKU-1",
"SKU-2"
]
}The SDK also fires cevoid:sale.complete on window; its event.detail is what you pass.
marketIdstringYour Cevoid market ID. Telemetry uses it to match SKUs to products.
orderIdstringrequiredYour order ID.
customerIdstringYour customer ID.
currencystringrequiredISO 4217 currency code of revenue. Trimmed and uppercased before it is checked.
revenuenumberrequiredOrder revenue in major units of currency, for example 129.99.
skusstring[]SKUs of the purchased products.