Send the product-click event every time:
When a user clicks on a product from search results or a listing page.
The product field is a single object (not an array).
Event-Level Fields
For the complete list of all fields (including optional ones), where to get each value, refer to Common Properties.
Field | Required | Notes |
|---|---|---|
eventType | Yes | Must be "product-click" |
source | No | oneof: search-popup, search-listing, category-listing, brand-listing, other Defaults to search-listing |
userId | No | Unique user identifier. Defaults to "default" |
platform | Yes | required, oneof: desktop-web, mobile-web, tablet-web, ios, android, other |
integrationType | Yes | One of: api, web, sdk, app |
searchSessionId | No | Deprecated. Use product.traceId instead. Bidirectional fallback with product.traceId. No spaces. |
product | Yes | Single product object (not an array) |
referrer | Yes | Must be a valid URL |
createdAt | No | RFC 3339 timestamp. Defaults to the current time if omitted or invalid |
campId | No | Campaign identifier. Defaults to 999999 |
variationId | No | Variation identifier. Defaults to 999999 |
Refer to Common Properties for further details.
Product Fields
The product field is a single object (not an array):
Field | Required | Notes |
|---|---|---|
id | Yes | Unique product identifier. No spaces |
groupCode | No | Product group code. Needed for group-level analytics |
price | Yes | Price of the product |
convertedPrice | No | Converted price in preferred currency. Defaults to price if not provided |
traceId | Yes | Must match the traceId from the originating search/listing event |
searchSessionId | No | Deprecated. Use traceId instead. Bidirectional fallback with traceId |
query | Conditional | Required when the source is search-popup, search-listing, or other. Must not be blank. Defaults to "default" |
listValue | Conditional | Required when the source is category-listing or brand-listing. Must not be blank. |
displayPosition | Yes | Position when first displayed. Min: 1 |
clickPosition | Yes | Position when clicked. Min: 1 |
currency | Yes | ISO 4217 currency code. No spaces |
preferredCurrency | No | Main currency of your site. Defaults to currency if not specified |
sorting | No | Sorting method. Defaults to "Relevancy" |
resultCount | Yes | Number of search results returned. Min: 1 |
itemsPerPage | Yes | Number of items per page. Min: 1 |
totalPages | Yes | Total number of pages. Min: 1 |
currentPage | Yes | Current page number. Min: 1 |
facets | No | Applied filters |
SessionId | No | Browser/app session identifier |
strategyId | No | Optional strategy identifier |
quantity | No | Defaults to 1 for click events |
isMerchandisedItem | No | Whether the product is a merchandised (promoted/sponsored) item. |
Refer to Common Properties for further details.
Source-Dependent Fields
Source | Required Product Field | Description |
|---|---|---|
search-popup, search-listing | product.query | The search query. listValue must not be provided |
category-listing, brand-listing | product.listValue | Category/brand hierarchy. The query must not be provided |
Refer to Common Properties for further details.
Sending the wrong combination (e.g. query with category-listing) results in a validation error.
Position Fields
Field | Meaning |
|---|---|
displayPosition | Where the user first saw the product on the page |
clickPosition | Where the product was when the user clicked it. |
After sorting or filter changes, the same product may appear in a different position. In this case, displayPosition (original) and clickPosition (at time of click) may differ.
Sample Requests
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 '{
"eventType": "product-click",
"source": "search-listing",
"userId": "user-123",
"platform": "desktop-web",
"searchSessionId": "sess-abc-123",
"integrationType": "api",
"referrer": "https://example.com/search?q=queryA",
"product": {
"id": "product-001",
"groupCode": "group-1",
"query": "queryA",
"price": 999.99,
"currency": "USD",
"displayPosition": 3,
"clickPosition": 3,
"resultCount": 25,
"itemsPerPage": 10,
"totalPages": 3,
"currentPage": 1,
"sorting": "Relevancy",
"traceId": "sess-abc-123",
"sessionId": "session-123"
}
}'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 '{
"eventType": "product-click",
"source": "category-listing",
"userId": "user-123",
"platform": "desktop-web",
"searchSessionId": "trace-cat-456",
"integrationType": "api",
"referrer": "https://example.com/category/categoryA",
"product": {
"id": "product-001",
"groupCode": "group-1",
"listValue": "categoryA~categoryB",
"price": 999.99,
"currency": "USD",
"displayPosition": 1,
"clickPosition": 1,
"resultCount": 120,
"sorting": "Relevancy",
"traceId": "trace-cat-456"
}
}'