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
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: searchSessionId → traceId
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:
When a user views a listing page, generate a unique traceId and send it with the product-list-view event.
When the user changes sorting, applies filters, or paginates, keep the same traceId and only send new products not previously sent under this traceId.
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 analyticsThe 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"
}'