Event Collection API: Product List View Event

Prev Next

The product list view event is used for tracking impressions on non-search listing pages:

  • When a user visits a category listing page (e.g., categoryA > categoryB)

  • When a user visits a brand listing page (e.g., brandA > brandB)

  • When the user changes the sorting option on a listing page

  • When the user applies or removes a filter on a listing page

  • When the user navigates to a different page (pagination)

Endpoint

POST https://eurekaevent.api.useinsider.com/api/v1/events

Visit our Postman collection to test this request.

Payload Fields

The product list view event supports the following properties:

Attribute Name

Type

Validation

Default

Description

eventType

String

required, equals=product-list-view

-

Type of event. Must be product-list-view

source

String

required, oneof: category-listing, brand-listing

-

Component where the search engine is used

listValue

String

required, non_blank_string

-

Tilde-separated category/brand path (e.g. "categoryA~categoryB"). Whitespace-only values are rejected

userId

String

excludes_space

Default

Unique identifier of the user. Must not contain spaces

platform

String

required, oneof: desktop-web, mobile-web, tablet-web, ios, android, other

-

Platform used by the user

integrationType

String

required, oneof: api, web, sdk, app

-

Type of integration. For API integrations, send "api"

traceId

String

required, excludes_space

-

Unique trace identifier created for the current query. Use this as the primary identifier

SessionId

String

excludes_space

-

Browser/app session identifier. Must not contain spaces

sorting

String

oneof_sorting, excludes_space

Relevancy

Sorting method used. Must be a valid sorting option and must not contain spaces. Unlike search events, sorting is not required for page view events.

resultCount

Integer

required, min=0

-

Number of results returned

itemsPerPage

Integer

-

-

Number of items per page

totalPages

Integer

required unless no result, min=1

-

Total number of pages returned by search

currentPage

Integer

-

-

Current page number

products

list of product

required, min=1

-

List of products displayed on the page. At least 1 product is required

referrer

String

required, url

-

Source URL of the referring page

createdAt

String

RFC 3339

If omitted or invalid, defaults to the current time

Time when the event is created

campId

Integer

-

999999

Campaign identifier

variationId

Integer

-

999999

Variation identifier

sessionId

String

-

excludes_space

Browser/app session identifier. Must not contain spaces

strategyId

String

excludes_space

-

Optional strategy identifier. Must not contain spaces

facets

List of facets

-

-

List of facets. Required if any facet is selected

Refer to Common Properties for further details.

Deprecation notice: searchSessionIdtraceId

The searchSessionId field in event payloads (search, product-click, add-to-cart, purchase) is deprecated in favor of traceId.

  • Existing integrations: No action required. Payloads sent with searchSessionId will continue to be accepted and processed as-is.

  • New integrations: Send traceId only. Do not include searchSessionId in new implementations.

Both fields are currently supported on the API side to ensure backward compatibility during the transition.

Source Fallback:

The deprecated value collection-listing is automatically mapped to category-listing.

Page View Product Fields

Each product in the products array:

Parameter

Data Type

Validation

Default

Description

id

String

required, excludes_space

-

Unique product identifier (catalog ID). Must not contain spaces

groupCode

String

excludes_space

-

Unique group code for the product. Must not contain spaces. Without it, group-level analytics cannot be calculated

price

Double

required, min=0

Price of the product. Must be zero or positive

convertedPrice

Double

min=0

If not provided, price is used

Converted price in preferred currency. Must be zero or positive

currency

String

required, excludes_space

-

Currency of the price (ISO 4217). Must not contain spaces.

preferredCurrency

String

excludes_space

If not specified, currency is used

The main currency of your site. Must not contain spaces

displayPosition

Integer

-

-

Position of the product on the current page when first displayed

position

Integer

-

-

Product position (legacy field, use displayPosition instead). Not present in the codebase struct; retained for backward compatibility documentation.

isMerchandisedItem

Boolean

Boolean

false

Whether the product was positioned by merchandising rules

Trace ID for Listing Pages

Each list page request must be assigned a uniquely generated traceId. All products sent with the same traceId are grouped and counted as one page view in the Eureka Analytics dashboard.

How it works:

  1. When a user views a listing page, generate a unique traceId and send it with the product-list-view event.

  2. When the user changes sorting, applies filters, or paginates, keep the same traceId and only send new products not previously sent under this traceId.

  3. When the user navigates to a different category or brand page, generate a new traceId.

Deduplication example:

User views "categoryA > categoryB" (traceId: "trace-cat-456")
  → 24 products sent → 24 rows in DB → counted as 1 page view in analytics

User changes sorting (same traceId: "trace-cat-456")
  → 5 new products sent → now 29 rows → still 1 page view in analytics

User navigates to "categoryC" (new traceId: "trace-cat-789")
  → separate page view in analytics

The traceId for category/brand pages does not need to follow the base64 encoding convention used for search traceIds. It can be any unique string identifier.

listValue Format

The listValue field represents the category or brand hierarchy.

Hierarchical categories use a tilde (~) as a separator:

  • "categoryA~categoryB" → categoryA > categoryB

  • "categoryA~categoryB~categoryC" → categoryA > categoryB > categoryC

Flat categories and brand values can be sent as plain text, without separators:

  • "flat category example" → Flat Category Example

The API internally splits tilde-separated values into an array for analytics processing: "categoryA~categoryB"["categoryA", "categoryB"]

Sample Requests

In the examples below, you will find sample requests along with guidance on modifying the required fields. This will help you seamlessly integrate and make the most of the provided configuration.

Before usage, modifying the values such as x-auth-token and x-partner-config-key is essential.

Hierarchical Category Listing Example

curl --location --request POST 'https://eurekaevent.api.useinsider.com/api/v1/events' \
--header 'x-auth-token: YOUR_AUTH_TOKEN' \
--header 'x-partner-config-key: YOUR_PARTNERID-YOUR_LOCALE' \
--header 'Content-Type: application/json' \
--data-raw '{
  "referrer": "https://example.com/category/categoryA",
  "source": "category-listing",
  "listValue": "categoryA~categoryB",
  "userId": "user-12345",
  "platform": "desktop-web",
  "traceId": "trace-abc123",
  "sessionId": "session-abc123",
  "strategyId": "strategy-001",
  "sorting": "PriceAsc",
  "resultCount": 120,
  "itemsPerPage": 24,
  "totalPages": 5,
  "currentPage": 1,
  "integrationType": "api",
  "createdAt": "2026-01-20T14:30:00Z",
  "facets": [
    {
      "label": "Brand",
      "field": "brand_en",
      "values": ["brandA", "brandB"]
    }
  ],
  "products": [
    {
      "id": "product-001",
      "groupCode": "group-1",
      "price": 999.99,
      "convertedPrice": 949.99,
      "currency": "USD",
      "preferredCurrency": "EUR",
      "position": 1,
      "displayPosition": 1,
      "isMerchandisedItem": false
    },
    {
      "id": "product-002",
      "groupCode": "group-2",
      "price": 1299.99,
      "convertedPrice": 1249.99,
      "currency": "USD",
      "preferredCurrency": "EUR",
      "position": 2,
      "displayPosition": 2,
      "isMerchandisedItem": false
    }
  ],
  "eventType": "product-list-view"
}'

Flat Category Listing Example

curl --location --request POST 'https://eurekaevent.api.useinsider.com/api/v1/events' \
--header 'x-auth-token: YOUR_AUTH_TOKEN' \
--header 'x-partner-config-key: YOUR_PARTNERID-YOUR_LOCALE' \
--header 'Content-Type: application/json' \
--data-raw '{
  "referrer": "https://example.com/category/categoryA",
  "source": "category-listing",
  "listValue": "flat category example",
  "userId": "user-12345",
  "platform": "desktop-web",
  "traceId": "trace-abc123",
  "sessionId": "session-abc123",
  "strategyId": "strategy-001",
  "sorting": "PriceAsc",
  "resultCount": 120,
  "itemsPerPage": 24,
  "totalPages": 5,
  "currentPage": 1,
  "integrationType": "api",
  "createdAt": "2026-01-20T14:30:00Z",
  "products": [
    {
      "id": "product-001",
      "groupCode": "group-1",
      "price": 999.99,
      "convertedPrice": 949.99,
      "currency": "USD",
      "preferredCurrency": "EUR",
      "position": 1,
      "displayPosition": 1,
      "isMerchandisedItem": false
    },
    {
      "id": "product-002",
      "groupCode": "group-2",
      "price": 1299.99,
      "convertedPrice": 1249.99,
      "currency": "USD",
      "preferredCurrency": "EUR",
      "position": 2,
      "displayPosition": 2,
      "isMerchandisedItem": false
    }
  ],
  "eventType": "product-list-view"
}'