Skip to content

Tracking

Whenever a user interacts with the Sprii player, a tracking event is emittet. These events can be captured and used to fit your purposer.

The basic implemtation takes this form:

js




window.onSpriiReady = (sdk) => {
  ...
   sdk.on('cart.added-to-cart', (payload) => {
    //Your logic to capture the add to cart event
  });
  ...
};

Tracking events

The following events are supported:

IdDescription
cart.added-to-cartProduct added to cart
cart.opened-cartCart opened
catalog.opened-product-urlProduct URL opened
catalog.returned-to-listReturned to product list
catalog.scrolled-to-playing-productScrolled to currently playing product
catalog.switched-product-imageSwitched product image
catalog.viewed-product-detailsViewed product details
checkout.began-checkoutBegan checkout process
player.comments-hiddenComments hidden in player
player.comments-shownComments shown in player
player.closedPlayer closed
player.endedVideo ended in player
player.jumped-to-cueJumped to a specific cue point in video
player.maximizedPlayer maximized
player.minimizedPlayer minimized
player.playVideo started playing
player.pausedVideo paused
player.mutedPlayer muted
player.unmutedPlayer unmuted
user.commentedUser left a comment
user.reactedUser reacted to content

Each event has different payload. This section shows payload for each event.

cart.added-to-cart

js
export type CardAddProductEventHandler = (payload: {
  trackingEvent: "cart.added-to-cart";
  trackingInfo: {
    product: {
      price: number;
      uid: string;
      sku: string;
      externalId: string;
      name: string;
      url: string;
      product_id: string;
      fromSdk: boolean;
    };
    qty: number;
    variantName: string;
    variantUid: string;
  };
  timestamp: number;
  pageUid: string;
  userUid: string;
  campaignUid?: string;
  checkoutUid?: string;
  eventUid?: string;
  eventStatus?: LiveEventCurrentStatus;
  videoAbsoluteTime?: number;
  currency?: Currency;
  playingProducts?: Array<{
    price: number;
    uid: string;
    sku: string;
    externalId: string;
    name: string;
    url: string;
    product_id: string;
    fromSdk: boolean;
  }>;
}) => void;

cart.opened-cart

js
export type CartOpenEventHandler = (payload: {
  trackingEvent: "cart.opened-cart";
  timestamp: number;
  pageUid: string;
  userUid: string;
  campaignUid?: string;
  checkoutUid?: string;
  eventUid?: string;
  eventStatus?: LiveEventCurrentStatus;
  videoAbsoluteTime?: number;
  currency?: Currency;
  playingProducts?: Array<{
    price: number;
    uid: string;
    sku: string;
    externalId: string;
    name: string;
    url: string;
    product_id: string;
    fromSdk: boolean;
  }>;
}) => void;

catalog.opened-product-url

js

export type CatalogOpenedProductUrlEventHandler = (payload: {
  trackingEvent: "catalog.opened-product-url";
  trackingInfo: {
    product: {
      price: number;
      uid: string;
      sku: string;
      externalId: string;
      name: string;
      url: string;
      product_id: string;
      fromSdk: boolean;
    };
  };
  timestamp: number;
  pageUid: string;
  userUid: string;
  campaignUid?: string;
  checkoutUid?: string;
  eventUid?: string;
  eventStatus?: LiveEventCurrentStatus;
  videoAbsoluteTime?: number;
  currency?: Currency;
  playingProducts?: Array<{
    price: number;
    uid: string;
    sku: string;
    externalId: string;
    name: string;
    url: string;
    product_id: string;
    fromSdk: boolean;
  }>;
}) => void;

catalog.returned-to-list

js

export type CatalogReturnedToListEventHandler = (payload: {
  trackingEvent: "catalog.returned-to-list";
  trackingInfo: {
    product: {
      price: number;
      uid: string;
      sku: string;
      externalId: string;
      name: string;
      url: string;
      product_id: string;
      fromSdk: boolean;
    };
  };
  timestamp: number;
  pageUid: string;
  userUid: string;
  campaignUid?: string;
  checkoutUid?: string;
  eventUid?: string;
  eventStatus?: LiveEventCurrentStatus;
  videoAbsoluteTime?: number;
  currency?: Currency;
  playingProducts?: Array<{
    price: number;
    uid: string;
    sku: string;
    externalId: string;
    name: string;
    url: string;
    product_id: string;
    fromSdk: boolean;
  }>;
}) => void;

catalog.scrolled-to-playing-product

js

export type CatalogScrolledToPlayingProductEventHandler = (payload: {
  trackingEvent: "catalog.scrolled-to-playing-product";
  trackingInfo: {
    product: {
      price: number;
      uid: string;
      sku: string;
      externalId: string;
      name: string;
      url: string;
      product_id: string;
      fromSdk: boolean;
    };
  };
  timestamp: number;
  pageUid: string;
  userUid: string;
  campaignUid?: string;
  checkoutUid?: string;
  eventUid?: string;
  eventStatus?: LiveEventCurrentStatus;
  videoAbsoluteTime?: number;
  currency?: Currency;
  playingProducts?: Array<{
    price: number;
    uid: string;
    sku: string;
    externalId: string;
    name: string;
    url: string;
    product_id: string;
    fromSdk: boolean;
  }>;
}) => void;

catalog.switched-product-image

js

export type CatalogSwitchedProductImageEventHandler = (payload: {
  trackingEvent: "catalog.switched-product-image";
  trackingInfo: {
    product: {
      price: number;
      uid: string;
      sku: string;
      externalId: string;
      name: string;
      url: string;
      product_id: string;
      fromSdk: boolean;
    };
    url: string;
  };
  timestamp: number;
  pageUid: string;
  userUid: string;
  campaignUid?: string;
  checkoutUid?: string;
  eventUid?: string;
  eventStatus?: LiveEventCurrentStatus;
  videoAbsoluteTime?: number;
  currency?: Currency;
  playingProducts?: Array<{
    price: number;
    uid: string;
    sku: string;
    externalId: string;
    name: string;
    url: string;
    product_id: string;
    fromSdk: boolean;
  }>;
}) => void;

catalog.viewed-product-details

js

export type CatalogViewedProductDetailsEventHandler = (payload: {
  trackingEvent: "catalog.viewed-product-details";
  trackingInfo: {
    product: {
      price: number;
      uid: string;
      sku: string;
      externalId: string;
      name: string;
      url: string;
      product_id: string;
      fromSdk: boolean;
    };
  };
  timestamp: number;
  pageUid: string;
  userUid: string;
  campaignUid?: string;
  checkoutUid?: string;
  eventUid?: string;
  eventStatus?: LiveEventCurrentStatus;
  videoAbsoluteTime?: number;
  currency?: Currency;
  playingProducts?: Array<{
    price: number;
    uid: string;
    sku: string;
    externalId: string;
    name: string;
    url: string;
    product_id: string;
    fromSdk: boolean;
  }>;
}) => void;

checkout.began-checkout

js

export type CheckoutBeganCheckoutEventHandler = (payload: {
  trackingEvent: "checkout.began-checkout";
  trackingInfo: {
    reservation: {
      totalPrice: number;
      items: Array<{
        product: {
          price: number;
          uid: string;
          sku: string;
          externalId: string;
          name: string;
          url: string;
          product_id: string;
          fromSdk: boolean;
        };
        qty: number;
        totalPrice: number;
        unitPrice: number;
        variantName: string;
        variantUid: string;
      }>;
    };
  };
  timestamp: number;
  pageUid: string;
  userUid: string;
  campaignUid?: string;
  checkoutUid?: string;
  eventUid?: string;
  eventStatus?: LiveEventCurrentStatus;
  videoAbsoluteTime?: number;
  currency?: Currency;
  playingProducts?: Array<{
    price: number;
    uid: string;
    sku: string;
    externalId: string;
    name: string;
    url: string;
    product_id: string;
    fromSdk: boolean;
  }>;
}) => void;

player.closed

js

export type PlayerClosedEventHandler = (payload: {
  trackingEvent: "player.closed";
  timestamp: number;
  pageUid: string;
  userUid: string;
  campaignUid?: string;
  checkoutUid?: string;
  eventUid?: string;
  eventStatus?: LiveEventCurrentStatus;
  videoAbsoluteTime?: number;
  currency?: Currency;
  playingProducts?: Array<{
    price: number;
    uid: string;
    sku: string;
    externalId: string;
    name: string;
    url: string;
    product_id: string;
    fromSdk: boolean;
  }>;
}) => void;

player.comments-hidden

js

export type PlayerCommentsHiddenEventHandler = (payload: {
  trackingEvent: "player.comments-hidden";
  timestamp: number;
  pageUid: string;
  userUid: string;
  campaignUid?: string;
  checkoutUid?: string;
  eventUid?: string;
  eventStatus?: LiveEventCurrentStatus;
  videoAbsoluteTime?: number;
  currency?: Currency;
  playingProducts?: Array<{
    price: number;
    uid: string;
    sku: string;
    externalId: string;
    name: string;
    url: string;
    product_id: string;
    fromSdk: boolean;
  }>;
}) => void;

player.comments-shown

js

export type PlayerCommentsShownEventHandler = (payload: {
  trackingEvent: "player.comments-shown";
  trackingInfo: { unseenComments: number };
  timestamp: number;
  pageUid: string;
  userUid: string;
  campaignUid?: string;
  checkoutUid?: string;
  eventUid?: string;
  eventStatus?: LiveEventCurrentStatus;
  videoAbsoluteTime?: number;
  currency?: Currency;
  playingProducts?: Array<{
    price: number;
    uid: string;
    sku: string;
    externalId: string;
    name: string;
    url: string;
    product_id: string;
    fromSdk: boolean;
  }>;
}) => void;

player.ended

js

export type PlayerEndedEventHandler = (payload: {
  trackingEvent: "player.ended";
  timestamp: number;
  pageUid: string;
  userUid: string;
  campaignUid?: string;
  checkoutUid?: string;
  eventUid?: string;
  eventStatus?: LiveEventCurrentStatus;
  videoAbsoluteTime?: number;
  currency?: Currency;
  playingProducts?: Array<{
    price: number;
    uid: string;
    sku: string;
    externalId: string;
    name: string;
    url: string;
    product_id: string;
    fromSdk: boolean;
  }>;
}) => void;

player.jumped-to-cue

js

export type PlayerJumpedToCueEventHandler = (payload: {
  trackingEvent: "player.jumped-to-cue";
  trackingInfo: {
    product: {
      price: number;
      uid: string;
      sku: string;
      externalId: string;
      name: string;
      url: string;
      product_id: string;
      fromSdk: boolean;
    };
    cue: { start: number; end: number };
  };
  timestamp: number;
  pageUid: string;
  userUid: string;
  campaignUid?: string;
  checkoutUid?: string;
  eventUid?: string;
  eventStatus?: LiveEventCurrentStatus;
  videoAbsoluteTime?: number;
  currency?: Currency;
  playingProducts?: Array<{
    price: number;
    uid: string;
    sku: string;
    externalId: string;
    name: string;
    url: string;
    product_id: string;
    fromSdk: boolean;
  }>;
}) => void;

player.maximized

js

export type PlayerMaximizedEventHandler = (payload: {
  trackingEvent: "player.maximized";
  timestamp: number;
  pageUid: string;
  userUid: string;
  campaignUid?: string;
  checkoutUid?: string;
  eventUid?: string;
  eventStatus?: LiveEventCurrentStatus;
  videoAbsoluteTime?: number;
  currency?: Currency;
  playingProducts?: Array<{
    price: number;
    uid: string;
    sku: string;
    externalId: string;
    name: string;
    url: string;
    product_id: string;
    fromSdk: boolean;
  }>;
}) => void;

player.minimized

js

export type PlayerMinimizedEventHandler = (payload: {
  trackingEvent: "player.minimized";
  timestamp: number;
  pageUid: string;
  userUid: string;
  campaignUid?: string;
  checkoutUid?: string;
  eventUid?: string;
  eventStatus?: LiveEventCurrentStatus;
  videoAbsoluteTime?: number;
  currency?: Currency;
  playingProducts?: Array<{
    price: number;
    uid: string;
    sku: string;
    externalId: string;
    name: string;
    url: string;
    product_id: string;
    fromSdk: boolean;
  }>;
}) => void;

player.muted

js

export type PlayerMutedEventHandler = (payload: {
  trackingEvent: "player.muted";
  timestamp: number;
  pageUid: string;
  userUid: string;
  campaignUid?: string;
  checkoutUid?: string;
  eventUid?: string;
  eventStatus?: LiveEventCurrentStatus;
  videoAbsoluteTime?: number;
  currency?: Currency;
  playingProducts?: Array<{
    price: number;
    uid: string;
    sku: string;
    externalId: string;
    name: string;
    url: string;
    product_id: string;
    fromSdk: boolean;
  }>;
}) => void;

player.play

js

export type PlayerPlayEventHandler = (payload: {
  trackingEvent: "player.play";
  timestamp: number;
  pageUid: string;
  userUid: string;
  campaignUid?: string;
  checkoutUid?: string;
  eventUid?: string;
  eventStatus?: LiveEventCurrentStatus;
  videoAbsoluteTime?: number;
  currency?: Currency;
  playingProducts?: Array<{
    price: number;
    uid: string;
    sku: string;
    externalId: string;
    name: string;
    url: string;
    product_id: string;
    fromSdk: boolean;
  }>;
}) => void;

player.paused

js

export type PlayerPausedEventHandler = (payload: {
  trackingEvent: "player.paused";
  timestamp: number;
  pageUid: string;
  userUid: string;
  campaignUid?: string;
  checkoutUid?: string;
  eventUid?: string;
  eventStatus?: LiveEventCurrentStatus;
  videoAbsoluteTime?: number;
  currency?: Currency;
  playingProducts?: Array<{
    price: number;
    uid: string;
    sku: string;
    externalId: string;
    name: string;
    url: string;
    product_id: string;
    fromSdk: boolean;
  }>;
}) => void;

player.unmuted

js

export type PlayerUnmutedEventHandler = (payload: {
  trackingEvent: "player.unmuted";
  timestamp: number;
  pageUid: string;
  userUid: string;
  campaignUid?: string;
  checkoutUid?: string;
  eventUid?: string;
  eventStatus?: LiveEventCurrentStatus;
  videoAbsoluteTime?: number;
  currency?: Currency;
  playingProducts?: Array<{
    price: number;
    uid: string;
    sku: string;
    externalId: string;
    name: string;
    url: string;
    product_id: string;
    fromSdk: boolean;
  }>;
}) => void;

user.commented

js

export type UserCommentedEventHandler = (payload: {
  trackingEvent: "user.commented";
  timestamp: number;
  pageUid: string;
  userUid: string;
  campaignUid?: string;
  checkoutUid?: string;
  eventUid?: string;
  eventStatus?: LiveEventCurrentStatus;
  videoAbsoluteTime?: number;
  currency?: Currency;
  playingProducts?: Array<{
    price: number;
    uid: string;
    sku: string;
    externalId: string;
    name: string;
    url: string;
    product_id: string;
    fromSdk: boolean;
  }>;
}) => void;

user.reacted

js
export type UserReactedEventHandler = (payload: {
  trackingEvent: "user.reacted";
  trackingInfo: { type: string };
  timestamp: number;
  pageUid: string;
  userUid: string;
  campaignUid?: string;
  checkoutUid?: string;
  eventUid?: string;
  eventStatus?: LiveEventCurrentStatus;
  videoAbsoluteTime?: number;
  currency?: Currency;
  playingProducts?: Array<{
    price: number;
    uid: string;
    sku: string;
    externalId: string;
    name: string;
    url: string;
    product_id: string;
    fromSdk: boolean;
  }>;
}) => void;