Skip to content
Get API key (opens in a new tab)

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.

Warning:

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.

Example request
{
  "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
    }
  ]
}
publishableKeystringrequired

Your Cevoid publishable key.

eventsobject[]required

The events in this batch.

events[] properties
typestringrequired

Event family. Every public event is widget, sale.complete included.

namestringrequired

Event name. One of widget.load, widget.view, post.view, post.click, post.view.popup, post.clap, product.click.tag, product.click.post, product.click.card, gallery.load_more, gallery.upload_cta_click, sale.complete.

timestampstringrequired

When the SDK created the event, as an ISO 8601 date-time in UTC.

contextobjectrequired

The page the event happened on.

context properties
devicestringrequired

From the viewport width: mobile below 768px, tablet below 1024px, otherwise desktop. One of mobile, tablet, desktop.

languagestring

The browser language, from navigator.language.

page_urlstring

The full URL of the page, query string included.

refererstring

The same value as page_url.

session_idstring

The visitor session the event belongs to.

has_session_cookiebooleanrequired

Whether a session cookie (ca_session, or the legacy cevoid_sid) was set when the batch was sent.

dataobjectrequired

The event fields in snake_case. Each event lists its own.

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'.

widgetIdstring

ID of the Cevoid widget the event belongs to. Leave it out for an event that does not come from a widget.

marketIdstring

Your Cevoid market ID, for localized storefronts.

postsLoadedCountnumber

Number of posts loaded into the widget.

fallbackPostsCountnumber

Number of fallback posts among them.

pagePositionXnumber

Horizontal position of the widget on the page, in pixels.

pagePositionYnumber

Vertical 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'.

widgetIdstring

ID of the Cevoid widget the event belongs to. Leave it out for an event that does not come from a widget.

marketIdstring

Your Cevoid market ID, for localized storefronts.

postIdstringrequired

Cevoid post ID.

postPositionnumber

Zero-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'.

widgetIdstring

ID of the Cevoid widget the event belongs to. Leave it out for an event that does not come from a widget.

marketIdstring

Your Cevoid market ID, for localized storefronts.

postIdstringrequired

Cevoid post ID the product was clicked from.

productIdstringrequired

Your 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.

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'.

widgetIdstring

ID of the Cevoid widget the event belongs to. Leave it out for an event that does not come from a widget.

marketIdstring

Your Cevoid market ID, for localized storefronts.

loadMoreTypestringrequired

How the shopper loaded more posts. One of infinity_loader, button.

pagePositionXnumber

Horizontal position of the widget on the page, in pixels.

pagePositionYnumber

Vertical position of the widget on the page, in pixels.

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'.

widgetIdstring

ID of the Cevoid widget the event belongs to. Leave it out for an event that does not come from a widget.

marketIdstring

Your Cevoid market ID, for localized storefronts.

pagePositionXnumber

Horizontal position of the widget on the page, in pixels.

pagePositionYnumber

Vertical 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.

marketIdstring

Your Cevoid market ID. Telemetry uses it to match SKUs to products.

orderIdstringrequired

Your order ID.

customerIdstring

Your customer ID.

currencystringrequired

ISO 4217 currency code of revenue. Trimmed and uppercased before it is checked.

revenuenumberrequired

Order revenue in major units of currency, for example 129.99.

skusstring[]

SKUs of the purchased products.