The product click event should be triggered whenever a visitor clicks an item from the search results.
A product click event should be sent in the following situations:
When a user clicks on a product from search results (pop-up or listing)
When a user clicks on a product from a category or brand listing page
If a user adds a product to the cart directly from the pop-up or listing without going to PDP, send the product-click event before the add-to-cart event (if not already sent)
Endpoint
Visit our Postman collection to test this request.
Payload Fields
The product click event supports the following properties:
Attribute Name | Type | Validation | Default | Description |
|---|---|---|---|---|
eventType | String | required, equals=product-click | - | Type of event |
source | String | oneof: search-popup, search-listing, category-listing, brand-listing, other | search-listing | Source origin where the event was triggered |
userId | String | - | Default | Unique identifier of the user |
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 |
searchSessionId | String | excludes_space | - | Deprecated. Use product.traceId instead. Falls back bidirectionally with product.traceId. Kept for backward compatibility. |
product | Object | required | - | The product clicked by the user |
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 |
Product Click Product Fields
The product object (singular, not an array):
Parameter | Data Type | Validation | Default | Description |
|---|---|---|---|---|
id | String | required, excludes_space | - | Unique product identifier (catalog ID). Must not contain spaces |
groupCode | String | - | - | Product group code. Without it, group-level analytics cannot be calculated |
price | Double | required | - | Price of the product |
convertedPrice | Double | If not provided, price is used | Converted price in preferred currency | |
currency | String | required, excludes_space | - | Currency of the price (ISO 4217). Must not contain spaces. |
preferredCurrency | String | - | If not specified, currency is used | The main currency of your site |
sorting | String | oneof_sorting | Relevancy | Sorting method. Only valid sorting values are accepted |
resultCount | Integer | required unless no result, min=1 | - | Number of search results returned |
itemsPerPage | Integer | required unless no result, min=1 | - | Number of items per page |
totalPages | Integer | required unless no result, min=1 | - | Total number of pages |
currentPage | Integer | required unless no result, min=1 | - | Current page number |
facets | List of facets | - | - | Applied filters |
SessionId | String | - | - | Browser/app session identifier |
strategyId | String | - | - | Optional strategy identifier |
quantity | Integer | - | 1 | Quantity (defaults to 1 for click events) |
isMerchandisedItem | Boolean | Boolean | - | Indicates whether the product is a merchandised (promoted/sponsored) item |
Source-Dependent Required Fields
Different fields are required in the product object depending on the source value.
Source | Required Product Field | Description |
|---|---|---|
search-popup | product.query | The search query that produced the results |
search-listing | product.query | The search query that produced the results |
category-listing | product.listValue | The category hierarchy (e.g., "categoryA~categoryB~categoryC") |
brand-listing | product.listValue | The brand hierarchy |
other | product.query | The search query |
Refer to Common Properties for further details.
Source-Dependent Validation:
When source is search-popup or search-listing, product.query is expected. When source is category-listing or brand-listing, product.listValue is expected. Sending the wrong combination results in a validation error.
Default Values Applied:
product.quantity: Defaults to 1
product.sorting: Defaults to "Relevancy" if empty
product.traceId <-> searchSessionId: Bidirectional fallback
Advanced Analytics (September 01, 2025 release)
After this release, the event now retrieves currentPage from the product-level fields instead of the top-level fields, and the product object has been enriched with new fields (groupCode, convertedPrice, preferredCurrency, displayPosition, clickPosition, query, facets, sorting, resultCount, itemsPerPage, totalPages, currentPage). You may continue sending these values at the event level for backward compatibility, but it is recommended to update your implementation to the new product-level structure.
Sample Requests
In the examples below, you will find a sample request along with guidance on modifying the required fields. This will help you seamlessly integrate and make the most of the provided configuration.
Before usage, it is essential to modify the values such as x-auth-token and x-partner-config-key.
Click after Search 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/search-results",
"source": "search-listing",
"searchSessionId": "search-session-abc123",
"userId": "user-12345",
"platform": "mobile-web",
"campId": 100,
"variationId": 200,
"product": {
"id": "product-001",
"groupCode": "group-1",
"query": "queryA",
"price": 1299.99,
"convertedPrice": 1199.99,
"currency": "USD",
"preferredCurrency": "EUR",
"clickPosition": 3,
"displayPosition": 3,
"quantity": 1,
"resultCount": 25,
"itemsPerPage": 10,
"totalPages": 3,
"facets": [
{
"label": "Fiyat",
"field": "price",
"values": ["500", "2000"]
}
],
"sorting": "PriceAsc",
"currentPage": 1,
"traceId": "search-session-abc123",
"strategyId": "strategy-id-123",
"sessionId": "session-id-123"
},
"eventType": "product-click",
"integrationType": "web",
"createdAt": "2025-11-25T10:35:00Z"
}'Click after 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",
"searchSessionId": "trace-cat-456",
"userId": "user-12345",
"platform": "desktop-web",
"product": {
"id": "product-001",
"groupCode": "group-1",
"listValue": "categoryA~categoryB",
"price": 999.99,
"convertedPrice": 949.99,
"currency": "USD",
"preferredCurrency": "EUR",
"clickPosition": 1,
"displayPosition": 1,
"resultCount": 120,
"itemsPerPage": 24,
"totalPages": 5,
"sorting": "Relevancy",
"currentPage": 1,
"traceId": "trace-cat-456",
"sessionId": "session-abc123"
},
"eventType": "product-click",
"integrationType": "api",
"createdAt": "2026-01-20T14:32:00Z"
}'