Page Intelligence endpoint, its request and response objects, and the expected integration behavior for retailers using holistic optimization across organic and sponsored products.
Business Context
Page Intelligence helps retailers optimize search and category pages holistically by evaluating organic and sponsored products together instead of managing them through separate decisioning flows.
It uses the same Sponsored Products campaigns and reporting, while adding a unified scoring and policy layer so retailers can control how sponsored SKUs appear across placements without compromising relevance or shopper experience.
Endpoint Behavior
Page Intelligence helps retailers maximize page-level value by balancing organic and sponsored products across placements using a unified scoring and policy layer.
The endpoint lets you:
- Send page context and organic candidates for placements that require holistic optimization.
- Receive multiple optimized placements, each with its own ranked list of products.
- Implement both product-level and placement-level beacons for measurement and model training.
Prerequisites
- The retailer is already integrated with Criteo Retail Media Delivery.
Page Intelligenceconfiguration and policy settings are set up with your Criteo team.- You can send a stable
retailerVisitorIdand relevant page context.
Recommendations
- Do not re-rank the products returned in each placement.
- Implement both product-level and placement-level beacons from the response.
- Include
organicSkusfor requests that use holistic optimization.
Endpoint Overview
Method | Endpoint | Description |
|---|---|---|
|
| Optimize one or more placements across organic and sponsored products using a unified scoring and policy layer. |
Request Body
Top-level request object
Attribute | Data type | Required | Description |
|---|---|---|---|
|
| Yes | ID of the page that this ad call is for. |
|
| No | Page context for the ad request. Contains composable properties that inform ad selection algorithms based on page content and context. |
|
| No | Unique, unauthenticated user ID persisted across sessions on the same device. Can be a string ID or SHA256-hashed email. |
|
| No | Unique ID of the authenticated user for the current session. |
|
| No | Store ID selected by the user when browsing the retailer site. |
OptimizeAdContext
The pageAdContext object uses a flat, composable structure. Each property can be included or omitted depending on the content and context needed for each ad request.
Attribute | Data type | Required | Description |
|---|---|---|---|
|
| No | Keyword search string entered by the user. |
|
| No | Category or taxonomy text of the page the user is browsing. |
|
| No* | Organic SKUs returned by a search query or category in rank order. Up to 1000 values. Required for ad calls that utilize HPO. |
|
| No | Filters applied by the shopper on the result set. Up to 10 filters. |
|
| No | Page number for paginated results or dynamically loaded result folds. |
|
| No | SKU ID corresponding to the product on a product detail page. |
|
| No | Current price of the product added to the basket, including discount if any. |
|
| No | Whether the product is in stock. |
- Required for requests that use holistic optimization.
OrganicSku
Attribute | Data type | Required | Description |
|---|---|---|---|
|
| Yes | ID of the organic SKU. |
|
| Yes | If |
|
| No | Quality or relevancy score assigned by the retailer to this SKU. |
RequestFilter
Attribute | Data type | Required | Description |
|---|---|---|---|
|
| Yes | Name of the filter. |
|
| Yes | Filter operator. |
|
| Yes | Values the operator applies to. Up to 10 values. |
In and NotIn support multiple values. The other operators support a single value.
OperatorEnum
Value | Description |
|---|---|
| Equal to. |
| Greater than. |
| Less than. |
| Greater than or equal to. |
| Less than or equal to. |
| Membership in a list. |
| Not equal to. |
| Not in the membership list. |
Sample Request
Response Body
The response supports multiple placements in a single response. Each placement has its ownformat, products, and placement-level beacons. The response uses a resource-style envelope with data.type and data.attributes.
Response overview
Attribute | Data type | Required | Description |
|---|---|---|---|
|
| Yes | Response data payload. |
|
| No | Warnings about this specific request. |
|
| No | Errors that happened while handling this request. |
data object includes a type field set to "OptimizeData" and an attributes object containing the actual response payload.
OptimizeData
Attribute | Data type | Required | Description |
|---|---|---|---|
|
| Yes | Unique ID of this optimize response, used for debugging purposes. |
|
| Yes | List of placements returned in the response. The key is the placement name. |
OptimizePlacement
Attribute | Data type | Required | Description |
|---|---|---|---|
|
| Example response | Placement identifier shown in the current contract example response. |
|
| Yes | Ad format of the placement. |
|
| Yes | List of products to include in the placement. Can include both ads and organic product results. |
|
| Yes | Placement-level tracking beacons. |
|
| No | VAST tag URL for video ad formats. |
|
| No | VAST tag XML for video ad formats. |
OptimizeProduct
Attribute | Data type | Required | Description |
|---|---|---|---|
|
| Yes | Type of product, such as organic or sponsored. |
|
| Yes | SKU ID of the product. |
|
| Yes | Parent SKU ID. If the product does not have a parent, its own ID is used. |
|
| Example response | Product name shown in the current contract example response. |
|
| No | URL for the product detail page. |
|
| No | URL for the product image. |
|
| No | Product rating. |
|
| Yes | Current price in the retailer’s currency. |
|
| No | Original price before discount, if any. |
|
| No | Retailer-provided JSON-serialized dictionary of additional rendering properties. |
|
| Yes | Product-level tracking beacons for this product. |
Placement-level beacons
Attribute | Data type | Required | Description |
|---|---|---|---|
|
| Yes | Structured beacon to fire when the placement is loaded. See StructuredBeacon below. |
|
| Yes | URL to call when the placement is viewed according to IAB guidelines. |
|
| No | URL to call when the placement is clicked. |
StructuredBeacon
The placementonLoadBeacon returned from the /optimize endpoint is always a StructuredBeacon object — not a plain URL string. This format supports large payloads (up to 100 organic SKUs) by splitting the beacon into a base URL and a set of key-value parameters sent as the POST body.
Field | Type | Description |
|---|---|---|
|
| Base beacon URL. |
|
| Key-value pairs to send as the |
Product-level beacons
Attribute | Data type | Required | Description |
|---|---|---|---|
|
| Yes | URL to call when the product is viewed according to IAB guidelines. |
|
| Yes | URL to call when the product is clicked. |
|
| Yes | URL to call when the product is added to the basket. |
|
| Yes | URL to call when the product is added to a wishlist. |
Sample Response
Integration Notes
- Use this endpoint on pages where you want Criteo to optimize across organic and sponsored products together.
- Include the relevant page context and
organicSkusinpageAdContextfor holistic optimization scenarios. - Render each placement exactly as returned.
- Implement all beacons returned in the response. For placement
onLoadBeacon, fire the beacon usingnavigator.sendBeacon(url, data)whereurlisStructuredBeacon.urlanddatais thepayloadserialized asapplication/x-www-form-urlencoded. Ifnavigator.sendBeaconis not available, use aPOSTrequest with the same form-encoded body. - If using BeaconSDK, set
data-criteo-placement-onloadbeaconto theurlvalue and add onedata-criteo-placement-onloadbeacon-payload-[key]attribute per entry in thepayloadobject on the placement element. BeaconSDK handles thenavigator.sendBeacon(url, data)call automatically.
Response Codes
Response code | Title | Detail | Troubleshooting |
|---|---|---|---|
|
| Request succeeded and returned one or more placements, each with a ranked products list. | Render each placement as-is, use |
|
| Request body is invalid, for example because required fields are missing or the filter structure is invalid. | Verify that required attributes are present and that the request structure is valid. |
|
| Authentication failed or token is missing or invalid. | Check API credentials and authorization header. |
|
| Internal error while processing the request. | Retry with backoff. If the issue persists, contact your Criteo representative with |