> ## Documentation Index
> Fetch the complete documentation index at: https://developers.criteo.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Version 2026.01 Release Notes

<Info>
  Version **`2026.01`** of the Criteo Retail Media API is live as of **January 20th, 2026** and will be supported until **January 27th, 2027**.  A new Postman collection for `2026.01` is also available in the [Criteo Postman workspace](https://www.postman.com/realcriteo/workspace/criteo/overview).
</Info>

<Info>
  **New SDK Release**

  A new SDK version will be available for the `2026.01` release.
</Info>

***

This version introduces new capabilities to Criteo Retail Media API and changes to existing endpoints. This page aims at listing all changes that happened endpoint per endpoint. **Only endpoints with changes are listed here.**

The changes of versions `2026.01` are:

* a new **base URL**,
* new **authorization controls** to the API Authorization,
* updates to Sponsored Products **line item endpoints**, including **Conquesting**, **Ad Scheduling**, **Automated Bidding**, and **Flexible Start/End Date Targeting**.
* new **Retailer Configuration** endpoints, and
* new **Reporting** endpoints, including **Account Level Reporting** and **Fill Rate Reporting**.

***

# New Base URL

With the introduction of this new version, the base URL will now change from **the old base URL**:

```text URL theme={null}
https://api.criteo.com/2025-10/retail-media/{endpoint}
```

to the **new base URL**:

```text URL theme={null}
https://api.criteo.com/2026-01/retail-media/{endpoint}
```

***

# What's New

## API Authorization Controls

We are introducing **Proof Key for Code Exchange (PKCE)**, which is a security enhancement to the OAuth 2.0 Authorization Code flow designed for public clients that cannot securely store a client secret.  PKCE makes this possible by enabling clients to add a verification step to prevent intercepted authorization codes from being misused.

When PKCE is enabled, the authorization (consent) request must include a code\_challenge (derived from a client-generated code\_verifier) and optionally a code\_challenge\_method (with S256 recommended), and the subsequent token exchange must include the original code\_verifier for validation. **PKCE is optional to enable** but once enabled, PKCE becomes mandatory for the application, and authorization requests without PKCE parameters will fail.

<Info>
  You can find the documentation for the PKCE OAuth Flow [here](/retail-media/docs/oauth-app-authorization-code-pkce-setup).
</Info>

***

## Sponsored Product Line Item Updates

In version `2026.01`, we've introduced new capabilities to the sponsored products line item endpoints:

**Conquesting**

A keyword targeting strategy that allows line items to target search queries associated with competing products relative to the products being promoted.  Availability is retailer-dependent and must be explicitly enabled by the retailer.

**Ad Scheduling**

Enables time-based delivery controls for line-items, allowing advertisers to schedule when a campaign runs by specific days of the week and hours of the day, rather than running continuously. Ad Scheduling provides greater control over budget allocation, delivery timing, and exposure efficiency.

**Adaptive CPC**

Adaptive CPC dynamically adjusts bids in real time based on predicted conversion probability, pacing requirements, and forecasted traffic. This model operates in collaboration with bidding strategies such as Clicks, Conversions, and Revenue by optimizing for overall performance and efficiency.

**Flexible Start/End Date Timestamps**

Line items now support `dateTimeOffset` values, allowing users to specify dates and times according to the time zone of their choice, rather than being restricted to the account-level time zone used in previous stable versions. This update follows the [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) standard `(YYYY-MM-DDThh:mm:ss±hh:mm)` to ensure consistent and explicit time zone handling. If a request includes only a date without a `dateTimeOffset`, the value will be interpreted and submitted in the **UTC time zone by default**.

Together, these features provide advertisers with more precise control over targeting, delivery timing, and bid optimization.

<Info>
  You can find the documentation for the Sponsored Product Line Item endpoints [here](/retail-media/docs/onsite-sponsored-products-line-items).
</Info>

### Updated Endpoints

The following new endpoint can be found below:

<table>
  <thead>
    <tr>
      <th>
        <p>
          Verb
        </p>
      </th>

      <th>
        <p>
          Endpoint
        </p>
      </th>

      <th>
        <p>
          Description
        </p>
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        <p>
          <b>
            POST
          </b>
        </p>
      </td>

      <td>
        <p>
          <code>
            /retail-media/campaigns/:campaignId/auction-line-items
          </code>
        </p>
      </td>

      <td>
        <p>
          Create an Open Auction Line item
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <b>
            PUT
          </b>
        </p>
      </td>

      <td>
        <p>
          <code>
            /retail-media/auction-line-items/:lineItemId
          </code>
        </p>
      </td>

      <td>
        <p>
          Update a specific Open Auction Line item
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <b>
            GET
          </b>
        </p>
      </td>

      <td>
        <p>
          <code>
            /retail-media/auction-line-items/:lineItemId
          </code>
        </p>
      </td>

      <td>
        <p>
          Get a specific Open Auction Line item
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <b>
            GET
          </b>
        </p>
      </td>

      <td>
        <p>
          <code>
            /retail-media/campaigns/:campaignId/auction-line-items
          </code>
        </p>
      </td>

      <td>
        <p>
          Get all Open Auction Line items from a specific Campaign
        </p>
      </td>
    </tr>
  </tbody>
</table>

### Sample Requests

For POST `retail-media/campaigns/{campaignId}/auction-line-items`:

<CodeGroup>
  ```bash cURL expandable theme={null}
  curl -L -X POST "https://api.criteo.com/2026-01/retail-media/campaigns/1234567890/auction-line-items" \
      -H "Authorization: Bearer <MY_ACCESS_TOKEN>" \
      -H "Content-Type: application/json" \
      -H "Accept: application/json" \
      -d '{
              "data": {
                  "attributes": {
                      "name": "Product ABC Sponsored Weekend Conversions",
                      "targetRetailerId": "12345",
                      "status": "draft",
                      "startDate": "2025-09-01T00:00:00-04:00",
                      "endDate": "2025-12-31T23:59:59-04:00",
                      "budget": 1000.0,
                      "monthlyPacing": null,
                      "isAutoDailyPacing": false,
                      "targetBid": null,
                      "maxBid": 5,
                      "bidStrategy": "automated",
                      "optimizationStrategy": "conversion",
                      "flightSchedule": {
                          "legs": [
                              {
                                  "dayOfWeek": "Weekends",
                                  "startTime": "00:00",
                                  "endTime": "23:59"
                              }
                          ]
                      },
                      "keywordStrategy": "genericBrandedAndConquesting"
                  }
              }
          }'
  ```

  ```python Python expandable theme={null}
  import requests

  headers = {
      'Authorization': 'Bearer <MY_ACCESS_TOKEN>',
      'Content-Type': 'application/json',
      'Accept': 'application/json',
  }

  json_data = {
      'data': {
          'attributes': {
              'name': 'Product ABC Sponsored Weekend Conversions',
              'targetRetailerId': '12345',
              'status': 'draft',
              'startDate': '2025-09-01T00:00:00-04:00',
              'endDate': '2025-12-31T23:59:59-04:00',
              'budget': 1000.0,
              'monthlyPacing': None,
              'isAutoDailyPacing': False,
              'targetBid': 1.0,
              'maxBid': 5,
              'bidStrategy': 'automated',
              'optimizationStrategy': 'conversion',
              'flightSchedule': {
                  'legs': [
                      {
                          'dayOfWeek': 'Weekends',
                          'startTime': '00:00',
                          'endTime': '23:59',
                      },
                  ],
              },
              'keywordStrategy': 'genericBrandedAndConquesting',
          },
      },
  }

  response = requests.post(
      'https://api.criteo.com/2026-01/retail-media/campaigns/1234567890/auction-line-items',
      headers=headers,
      json=json_data,
  )

  # Note: json_data will not be serialized by requests
  # exactly as it was in the original request.
  #data = '{\n            "data": {\n                "attributes": {\n                    "name": "Product ABC Sponsored Weekend Conversions",\n                    "targetRetailerId": "12345",\n                    "status": "draft",\n                    "startDate": "2025-09-01T00:00:00-04:00",\n                    "endDate": "2025-12-31T23:59:59-04:00",\n                    "budget": 1000.0,\n                    "monthlyPacing": null,\n                    "isAutoDailyPacing": false,\n                    "targetBid": 1.0,\n                    "maxBid": 5,\n                    "bidStrategy": "automated",\n                    "optimizationStrategy": "conversion",\n                    "flightSchedule": {\n                        "legs": [\n                            {\n                                "dayOfWeek": "Weekends",\n                                "startTime": "00:00",\n                                "endTime": "23:59"\n                            }\n                        ]\n                    },\n                    "keywordStrategy": "genericBrandedAndConquesting"\n                }\n            }\n        }'
  #response = requests.post(
  #    'https://api.criteo.com/2026-01/retail-media/campaigns/1234567890/auction-line-items',
  #    headers=headers,
  #    data=data,
  #)
  ```

  ```php PHP theme={null}
  import java.io.IOException;
  import java.net.URI;
  import java.net.http.HttpClient;
  import java.net.http.HttpRequest;
  import java.net.http.HttpRequest.BodyPublishers;
  import java.net.http.HttpResponse;

  HttpClient client = HttpClient.newBuilder()
      .followRedirects(HttpClient.Redirect.NORMAL)
      .build();

  HttpRequest request = HttpRequest.newBuilder()
      .uri(URI.create("https://api.criteo.com/2026-01/retail-media/campaigns/1234567890/auction-line-items"))
      .POST(BodyPublishers.ofString("{\n            \"data\": {\n                \"attributes\": {\n                    \"name\": \"Product ABC Sponsored Weekend Conversions\",\n                    \"targetRetailerId\": \"12345\",\n                    \"status\": \"draft\",\n                    \"startDate\": \"2025-09-01T00:00:00-04:00\",\n                    \"endDate\": \"2025-12-31T23:59:59-04:00\",\n                    \"budget\": 1000.0,\n                    \"monthlyPacing\": null,\n                    \"isAutoDailyPacing\": false,\n                    \"targetBid\": 1.0,\n                    \"maxBid\": 5,\n                    \"bidStrategy\": \"automated\",\n                    \"optimizationStrategy\": \"conversion\",\n                    \"flightSchedule\": {\n                        \"legs\": [\n                            {\n                                \"dayOfWeek\": \"Weekends\",\n                                \"startTime\": \"00:00\",\n                                \"endTime\": \"23:59\"\n                            }\n                        ]\n                    },\n                    \"keywordStrategy\": \"genericBrandedAndConquesting\"\n                }\n            }\n        }"))
      .setHeader("Authorization", "Bearer <MY_ACCESS_TOKEN>")
      .setHeader("Content-Type", "application/json")
      .setHeader("Accept", "application/json")
      .build();

  HttpResponse&lt;String&gt; response = client.send(request, HttpResponse.BodyHandlers.ofString());
  ```

  ```java Java expandable theme={null}
  OkHttpClient client = new OkHttpClient().newBuilder()
      .build();

  MediaType mediaType = MediaType.parse("application/json");

  RequestBody body = RequestBody.create(mediaType, """
  {
      "data": {
          "attributes": {
              "name": "Product ABC Sponsored Weekend Conversions",
              "targetRetailerId": "12345",
              "status": "draft",
              "startDate": "2025-09-01T00:00:00-04:00",
              "endDate": "2025-12-31T23:59:59-04:00",
              "budget": 1000.0,
              "monthlyPacing": null,
              "isAutoDailyPacing": false,
              "targetBid": 1.0,
              "maxBid": 5,
              "bidStrategy": "automated",
              "optimizationStrategy": "conversion",
              "flightSchedule": {
                  "legs": [
                      {
                          "dayOfWeek": "Weekends",
                          "startTime": "00:00",
                          "endTime": "23:59"
                      }
                  ]
              },
              "keywordStrategy": "genericBrandedAndConquesting"
          }
      }
  }
  """);

  Request request = new Request.Builder()
      .url("https://api.criteo.com/2026-01/retail-media/campaigns/1234567890/auction-line-items")
      .method("POST", body)
      .addHeader("Authorization", "Bearer <MY_ACCESS_TOKEN>")
      .addHeader("Content-Type", "application/json")
      .addHeader("Accept", "application/json")
      .build();

  Response response = client.newCall(request).execute();
  ```
</CodeGroup>

### Sample Response

For POST `retail-media/campaigns/{campaignId}/auction-line-items`:

```json expandable theme={null}
{
    "data": {
        "id": "764555166286000000",
        "type": "SponsoredProductsLineItem",
        "attributes": {
            "name": "Product ABC Sponsored Weekend Conversions",
            "startDate": "2025-09-01T04:00:00+00:00",
            "endDate": "2026-01-01T03:59:59+00:00",
            "status": "draft",
            "targetBid": null,
            "targetRetailerId": "12345",
            "budget": 10.00,
            "campaignId": "1234567890",
            "budgetSpent": 0.00,
            "budgetRemaining": 10.00,
            "createdAt": "2025-10-10T18:29:16.3861275+00:00",
            "updatedAt": "2025-10-10T18:29:16.3861275+00:00",
            "maxBid": 0.0,
            "monthlyPacing": 1000.00,
            "dailyPacing": 0.00,
            "bidStrategy": "automated",
            "optimizationStrategy": "conversion",
            "isAutoDailyPacing": false,
            "flightSchedule": {
                "legs": [
                    {
                        "dayOfWeek": "weekends",
                        "startTime": "00:00",
                        "endTime": "23:59"
                    }
                ]
            },
            "keywordStrategy": "genericAndBranded"
        }
    },
    "warnings": [],
    "errors": []
}
```

### Sample Requests

For PUT `/retail-media/auction-line-items/:lineItemId`:

<CodeGroup>
  ```bash cURL expandable theme={null}
  curl --location --request PUT 'https://api.criteo.com/2026-01/retail-media/auction-line-items/1252' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Bearer <MY_ACCESS_TOKEN>' \
  --data '{
    "data": {
      "attributes": {
        "isAutoDailyPacing": true,
        "name": "SP LI v3",
        "startDate": "2026-01-13T04:00:00+00:00",
        "status": "active",
        "bidStrategy": "manual",
        "budget": "100.00",
        "dailyPacing": null,
        "endDate": "2026-01-31T03:59:59+00:00",
        "flightSchedule": {
          "legs": [
            {
              "dayOfWeek": "friday",
              "startTime": "18:00",
              "endTime": "23:59"
            },
            {
               "dayOfWeek": "weekends",
               "startTime": "18:00",
               "endTime": "23:59"
            }
          ]
        },
        "maxBid": "2.0",
        "monthlyPacing": null,
        "optimizationStrategy": "conversion",
        "targetBid": "1.0"
      },
      "type": "<string>"
    }
  }'
  ```

  ```python Python expandable theme={null}
  import requests

  headers = {
      'Content-Type': 'application/json',
      'Accept': 'application/json',
  }

  json_data = {
      'data': {
          'attributes': {
              'isAutoDailyPacing': True,
              'name': 'SP LI v3',
              'startDate': '2026-01-13T04:00:00+00:00',
              'status': 'active',
              'bidStrategy': 'manual',
              'budget': '100.00',
              'dailyPacing': None,
              'endDate': '2026-01-31T03:59:59+00:00',
              'flightSchedule': {
                  'legs': [
                      {
                          'dayOfWeek': 'friday',
                          'startTime': '18:00',
                          'endTime': '23:59',
                      },
                      {
                          'dayOfWeek': 'weekends',
                          'startTime': '18:00',
                          'endTime': '23:59',
                      },
                  ],
              },
              'maxBid': '2.0',
              'monthlyPacing': None,
              'optimizationStrategy': 'conversion',
              'targetBid': '1.0',
          },
          'type': '<string>',
      },
  }

  response = requests.put('https://api.criteo.com/2026-01/retail-media/auction-line-items/1252', headers=headers, json=json_data)
  ```

  ```php PHP theme={null}
  <?php
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, 'https://api.criteo.com/2026-01/retail-media/auction-line-items/1252');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
  curl_setopt($ch, CURLOPT_HTTPHEADER, [
      'Content-Type: application/json',
      'Accept: application/json',
  ]);
  curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n  \"data\": {\n    \"attributes\": {\n      \"isAutoDailyPacing\": true,\n      \"name\": \"SP LI v3\",\n      \"startDate\": \"2026-01-13T04:00:00+00:00\",\n      \"status\": \"active\",\n      \"bidStrategy\": \"manual\",\n      \"budget\": \"100.00\",\n      \"dailyPacing\": null,\n      \"endDate\": \"2026-01-31T03:59:59+00:00\",\n      \"flightSchedule\": {\n        \"legs\": [\n          {\n            \"dayOfWeek\": \"friday\",\n            \"startTime\": \"18:00\",\n            \"endTime\": \"23:59\"\n          },\n          {\n             \"dayOfWeek\": \"weekends\",\n             \"startTime\": \"18:00\",\n             \"endTime\": \"23:59\"\n          }\n        ]\n      },\n      \"maxBid\": \"2.0\",\n      \"monthlyPacing\": null,\n      \"optimizationStrategy\": \"conversion\",\n      \"targetBid\": \"1.0\"\n    },\n    \"type\": \"<string>\"\n  }\n}");
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

  $response = curl_exec($ch);

  curl_close($ch);
  ```

  ```java Java theme={null}
  import java.io.IOException;
  import java.net.URI;
  import java.net.http.HttpClient;
  import java.net.http.HttpRequest;
  import java.net.http.HttpRequest.BodyPublishers;
  import java.net.http.HttpResponse;

  HttpClient client = HttpClient.newBuilder()
      .followRedirects(HttpClient.Redirect.NORMAL)
      .build();

  HttpRequest request = HttpRequest.newBuilder()
      .uri(URI.create("https://api.criteo.com/2026-01/retail-media/auction-line-items/1252"))
      .PUT(BodyPublishers.ofString("{\n  \"data\": {\n    \"attributes\": {\n      \"isAutoDailyPacing\": true,\n      \"name\": \"SP LI v3\",\n      \"startDate\": \"2026-01-13T04:00:00+00:00\",\n      \"status\": \"active\",\n      \"bidStrategy\": \"manual\",\n      \"budget\": \"100.00\",\n      \"dailyPacing\": null,\n      \"endDate\": \"2026-01-31T03:59:59+00:00\",\n      \"flightSchedule\": {\n        \"legs\": [\n          {\n            \"dayOfWeek\": \"friday\",\n            \"startTime\": \"18:00\",\n            \"endTime\": \"23:59\"\n          },\n          {\n             \"dayOfWeek\": \"weekends\",\n             \"startTime\": \"18:00\",\n             \"endTime\": \"23:59\"\n          }\n        ]\n      },\n      \"maxBid\": \"2.0\",\n      \"monthlyPacing\": null,\n      \"optimizationStrategy\": \"conversion\",\n      \"targetBid\": \"1.0\"\n    },\n    \"type\": \"<string>\"\n  }\n}"))
      .setHeader("Content-Type", "application/json")
      .setHeader("Accept", "application/json")
      .build();

  HttpResponse&lt;String&gt; response = client.send(request, HttpResponse.BodyHandlers.ofString());
  ```
</CodeGroup>

### Sample Response

For PUT `/retail-media/auction-line-items/:lineItemId`:

```json expandable theme={null}
{
    "data": {
        "id": "1252",
        "type": "SponsoredProductsLineItem",
        "attributes": {
            "name": "SP LI v3",
            "startDate": "2026-01-13T04:00:00+00:00",
            "endDate": "2026-01-31T03:59:59+00:00",
            "status": "draft",
            "targetBid": 1.0000,
            "targetRetailerId": "180",
            "budget": 100.00,
            "campaignId": "1285",
            "budgetSpent": 0.00,
            "budgetRemaining": 100.00,
            "createdAt": "2020-03-10T15:00:03.0698531+00:00",
            "updatedAt": "2026-01-12T21:12:09.5901347+00:00",
            "maxBid": 2.0,
            "monthlyPacing": 0.00,
            "dailyPacing": 5.26,
            "optimizationStrategy": "conversion",
            "isAutoDailyPacing": true,
            "flightSchedule": {
                "legs": [
                    {
                        "dayOfWeek": "friday",
                        "startTime": "18:00",
                        "endTime": "23:59"
                    },
                    {
                        "dayOfWeek": "weekends",
                        "startTime": "18:00",
                        "endTime": "23:59"
                    }
                ]
            },
            "keywordStrategy": "genericAndBranded",
            "bidStrategy": "manual"
        }
    },
    "warnings": [],
    "errors": []
}
```

### Sample Requests

For GET `/retail-media/auction-line-items/:lineItemId`:

<CodeGroup>
  ```bash cURL theme={null}
  curl --location 'https://api.criteo.com/2026-01/retail-media/auction-line-items/1252' \
  --header 'Accept: application/json' \
  --header 'Bearer <MY_ACCESS_TOKEN>'
  ```

  ```python Python theme={null}
  import requests

  headers = {
      'Accept': 'application/json',
  }

  response = requests.get('https://api.criteo.com/2026-01/retail-media/auction-line-items/1252', headers=headers)
  ```

  ```php PHP theme={null}
  <?php
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, 'https://api.criteo.com/2026-01/retail-media/auction-line-items/1252');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
  curl_setopt($ch, CURLOPT_HTTPHEADER, [
      'Accept: application/json',
  ]);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

  $response = curl_exec($ch);

  curl_close($ch);
  ```

  ```java Java theme={null}
  import java.io.IOException;
  import java.net.URI;
  import java.net.http.HttpClient;
  import java.net.http.HttpRequest;
  import java.net.http.HttpResponse;

  HttpClient client = HttpClient.newBuilder()
      .followRedirects(HttpClient.Redirect.NORMAL)
      .build();

  HttpRequest request = HttpRequest.newBuilder()
      .uri(URI.create("https://api.criteo.com/2026-01/retail-media/auction-line-items/1252"))
      .GET()
      .setHeader("Accept", "application/json")
      .build();

  HttpResponse&lt;String&gt; response = client.send(request, HttpResponse.BodyHandlers.ofString());
  ```
</CodeGroup>

### Sample Requests

For GET `/retail-media/campaigns/:campaignId/auction-line-items`:

<CodeGroup>
  ```bash cURL theme={null}
  curl --location 'https://api.criteo.com/2026-01/retail-media/campaigns/1285/auction-line-items' \
  --header 'Accept: application/json' \
  --header 'Bearer <MY_ACCESS_TOKEN>'
  ```

  ```python Python theme={null}
  import requests

  headers = {
      'Accept': 'application/json',
  }

  response = requests.get('https://api.criteo.com/2026-01/retail-media/campaigns/1285/auction-line-items', headers=headers)
  ```

  ```php PHP theme={null}
  <?php
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, 'https://api.criteo.com/2026-01/retail-media/campaigns/1285/auction-line-items');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
  curl_setopt($ch, CURLOPT_HTTPHEADER, [
      'Accept: application/json',
  ]);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

  $response = curl_exec($ch);

  curl_close($ch);
  ```

  ```java Java theme={null}
  import java.io.IOException;
  import java.net.URI;
  import java.net.http.HttpClient;
  import java.net.http.HttpRequest;
  import java.net.http.HttpResponse;

  HttpClient client = HttpClient.newBuilder()
      .followRedirects(HttpClient.Redirect.NORMAL)
      .build();

  HttpRequest request = HttpRequest.newBuilder()
      .uri(URI.create("https://api.criteo.com/2026-01/retail-media/campaigns/1285/auction-line-items"))
      .GET()
      .setHeader("Accept", "application/json")
      .build();

  HttpResponse&lt;String&gt; response = client.send(request, HttpResponse.BodyHandlers.ofString());
  ```
</CodeGroup>

### Sample Response

For `GET`: `/retail-media/auction-line-items/:lineItemId`:

For `GET`: `/retail-media/campaigns/:campaignId/auction-line-items`:

```json expandable theme={null}
{
    "metadata": {
        "count": 1,
        "offset": 0,
        "limit": 25
    },
    "data": [
        {
            "id": "1252",
            "type": "SponsoredProductsLineItem",
            "attributes": {
                "name": "SP LI v3",
                "startDate": "2026-01-13T04:00:00+00:00",
                "endDate": "2026-01-31T03:59:59+00:00",
                "status": "draft",
                "targetBid": 1.0000,
                "targetRetailerId": "180",
                "budget": 100.00,
                "campaignId": "1285",
                "budgetSpent": 0.00,
                "budgetRemaining": 100.00,
                "createdAt": "2020-03-10T15:00:03.0698531+00:00",
                "updatedAt": "2026-01-12T21:12:09.5901347+00:00",
                "maxBid": 2.0000,
                "monthlyPacing": 0.00,
                "dailyPacing": 5.26,
                "optimizationStrategy": "conversion",
                "isAutoDailyPacing": false,
                "flightSchedule": {
                    "legs": [
                        {
                            "dayOfWeek": "friday",
                            "startTime": "18:00",
                            "endTime": "23:59"
                        },
                        {
                            "dayOfWeek": "weekends",
                            "startTime": "18:00",
                            "endTime": "23:59"
                        }
                    ]
                },
                "keywordStrategy": "genericAndBranded",
                "bidStrategy": "manual"
            }
        }
    ],
    "warnings": [],
    "errors": []
}
```

***

## Retailer Search

In version `2026.01`, we've introduced new retailer search capabilities that represent what retailers you are eligible to target as well as the eligible Campaign Types, Buy Types, and whether the retailer has them enabled for certain Page Types and Environments.

This allows users to programmatically determine targeting eligibility across available retailers and configuration constraints before creating or updating campaigns.

<Warning>
  This endpoint is recommended for integration moving forward, as it provides a more real-time and descriptive representation than the existing `/retail-media/accounts/:accountId/retailers` endpoint. The `/retail-media/accounts/:accountId/retailers` endpoint will not be released in this version or in any future versions. However, versions released between **2025-04** and **2025-10** will remain operational in accordance with our [Versioning Policy](/retail-media/docs/versioning-policy).
</Warning>

<Info>
  You can find the documentation for the Retailer Search endpoint [here](/retail-media/docs/retailer-search).
</Info>

***

### Updated Endpoints

The following new endpoint can be found below:

<table>
  <thead>
    <tr>
      <th>
        <p>
          Verb
        </p>
      </th>

      <th>
        <p>
          Endpoint
        </p>
      </th>

      <th>
        <p>
          Description
        </p>
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        <p>
          <b>
            POST
          </b>
        </p>
      </td>

      <td>
        <p>
          <code>
            /accounts/\{accountId}/retailers/search
          </code>
        </p>
      </td>

      <td>
        <p>
          Search for Retailers associated with specific account
        </p>
      </td>
    </tr>
  </tbody>
</table>

***

### Sample Requests

For POST `/accounts/{accountId}/retailers/search`:

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://api.criteo.com/2026-01/retail-media/accounts/1234567890/retailers/search" \
    -H 'Accept: application/json' \
    -H "Authorization: Bearer <MY_ACCESS_TOKEN>" \
    -H 'Content-Type: application/json' \
    -d '{
            "data": {
                "attributes": {
                    "retailerIdFilter": [
                        12345
                    ]
                }
            }
       }'
  ```

  ```python Python theme={null}
  import requests

  headers = {
      'Accept': 'application/json',
      'Authorization': 'Bearer <MY_ACCESS_TOKEN>',
      'Content-Type': 'application/json',
  }

  json_data = {
      'data': {
          'attributes': {
              'retailerIdFilter': [
                  12345,
              ],
          },
      },
  }

  response = requests.post(
      'https://api.criteo.com/2026-01/retail-media/accounts/1234567890/retailers/search',
      headers=headers,
      json=json_data,
  )
  ```

  ```php PHP theme={null}
  <?php
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, 'https://api.criteo.com/2026-01/retail-media/accounts/1234567890/retailers/search');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
  curl_setopt($ch, CURLOPT_HTTPHEADER, [
      'Accept: application/json',
      'Authorization: Bearer <MY_ACCESS_TOKEN>',
      'Content-Type: application/json',
  ]);
  curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n          \"data\": {\n              \"attributes\": {\n                  \"retailerIdFilter\": [\n                      12345\n                  ]\n              }\n          }\n     }");

  $response = curl_exec($ch);

  curl_close($ch);
  ```

  ```java Java theme={null}
  import java.io.IOException;
  import java.net.URI;
  import java.net.http.HttpClient;
  import java.net.http.HttpRequest;
  import java.net.http.HttpRequest.BodyPublishers;
  import java.net.http.HttpResponse;

  HttpClient client = HttpClient.newHttpClient();

  HttpRequest request = HttpRequest.newBuilder()
      .uri(URI.create("https://api.criteo.com/2026-01/retail-media/accounts/1234567890/retailers/search"))
      .POST(BodyPublishers.ofString("{\n          \"data\": {\n              \"attributes\": {\n                  \"retailerIdFilter\": [\n                      12345\n                  ]\n              }\n          }\n     }"))
      .setHeader("Accept", "application/json")
      .setHeader("Authorization", "Bearer <MY_ACCESS_TOKEN>")
      .setHeader("Content-Type", "application/json")
      .build();

  HttpResponse&lt;String&gt; response = client.send(request, HttpResponse.BodyHandlers.ofString());
  ```
</CodeGroup>

### Sample Response

For POST `/accounts/{accountId}/retailers/search`:

```json expandable theme={null}
{
    "metadata": {
        "count": 1,
        "offset": 0,
        "limit": 5
    },
    "data": [
        {
            "id": "299",
            "type": "RetailerResult",
            "attributes": {
                "name": "Retailer 1234",
                "campaignAvailabilities": [
                    {
                        "campaignType": "onsiteDisplay",
                        "buyType": "auction",
                        "isAvailable": true,
                        "validCombinations": [
                            {
                                "pageType": "home",
                                "pageEnvironmentType": "web"
                            },
                            {
                                "pageType": "home",
                                "pageEnvironmentType": "ios"
                            },
                            {
                                "pageType": "search",
                                "pageEnvironmentType": "web"
                            },
                            {
                                "pageType": "category",
                                "pageEnvironmentType": "web"
                            },
                            {
                                "pageType": "productDetail",
                                "pageEnvironmentType": "web"
                            },

                            // ...

                            {
                                "pageType": "confirmation",
                                "pageEnvironmentType": "web"
                            }
                        ]
                    },
                    {
                        "campaignType": "onsiteDisplay",
                        "buyType": "preferredDeals",
                        "isAvailable": true,
                        "validCombinations": [
                            {
                                "pageType": "home",
                                "pageEnvironmentType": "web"
                            },

                            // ...

                            {
                                "pageType": "confirmation",
                                "pageEnvironmentType": "web"
                            }
                        ]
                    },
                    {
                        "campaignType": "onsiteDisplay",
                        "buyType": "sponsorship",
                        "isAvailable": false,
                        "validCombinations": []
                    },
                    {
                        "campaignType": "sponsoredProducts",
                        "buyType": "auction",
                        "isAvailable": true,
                        "validCombinations": [
                            {
                                "pageType": "home",
                                "pageEnvironmentType": "web"
                            },

                            // ...

                            {
                                "pageType": "confirmation",
                                "pageEnvironmentType": "web"
                            }
                        ]
                    },
                    {
                        "campaignType": "sponsoredProducts",
                        "buyType": "sponsorship",
                        "isAvailable": true,
                        "validCombinations": [
                            {
                                "pageType": "home",
                                "pageEnvironmentType": "web"
                            },

                            // ...

                            {
                                "pageType": "confirmation",
                                "pageEnvironmentType": "web"
                            }
                        ]
                    },
                    {
                        "campaignType": "offsite",
                        "buyType": "offsite",
                        "isAvailable": false,
                        "validCombinations": []
                    }
                ]
            }
        }
    ],
    "warnings": [],
    "errors": []
}
```

<br />

***

## Account Level Reporting

In version `2026.01`, we've introduced a new reporting endpoint that enables Retail Media partners to generate flexible, asynchronous performance reports aggregated at the account level, rather than being limited to individual campaigns or line items.  It allows reporting across up to **5 account IDs in a single request**, while still supporting the same set of metrics, dimensions, filters, attribution windows, and formats already available in existing DSP analytics endpoints.

Functionally, this endpoint extends existing reporting capabilities by introducing the `accountIds` attribute and enforcing a maximum **31-day date range per request**.  It also supports both campaign-level and line-item–level aggregation.

<Info>
  You can find the documentation for the Account level reporting endpoint [here](/retail-media/docs/account-level-report).
</Info>

***

### Updated Endpoint

The following new endpoint can be found below:

<table>
  <thead>
    <tr>
      <th>
        <p>
          Verb
        </p>
      </th>

      <th>
        <p>
          Endpoint
        </p>
      </th>

      <th>
        <p>
          Description
        </p>
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        <p>
          <b>
            POST
          </b>
        </p>
      </td>

      <td>
        <p>
          <code>
            /retail-media/reports/accounts
          </code>
        </p>
      </td>

      <td>
        <p>
          Request a flexible reporting at the account level
        </p>
      </td>
    </tr>
  </tbody>
</table>

***

### Sample Request

For `/retail-media/reports/accounts`:

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api.criteo.com/2026-01/retail-media/reports/accounts \
    -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
      "data": {
        "type": "AsyncAccountsReportRequest",
        "attributes": {
          "accountIds": ["12345", "67890"],
          "reportType": "summary",
          "aggregationLevel": "campaign",
          "searchTermTypes": ["entered"],
          "searchTermTargetings": ["automatic"],
          "targetedKeywordTypes": ["generic"],
          "campaignType": "all",
          "salesChannel": "all",
          "mediaType": "all",
          "format": "json-compact",
          "clickAttributionWindow": "none",
          "viewAttributionWindow": "none",
          "dimensions": ["date", "accountId"],
          "metrics": ["impressions"],
          "startDate": "2025-10-10",
          "endDate": "2025-10-10",
          "timezone": "UTC"
        }
      }
    }'
  ```

  ```python Python expandable theme={null}
  import requests

  headers = {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
      'Content-Type': 'application/json',
  }

  json_data = {
      'data': {
          'type': 'AsyncAccountsReportRequest',
          'attributes': {
              'accountIds': [
                  '12345',
                  '67890',
              ],
              'reportType': 'summary',
              'aggregationLevel': 'campaign',
              'searchTermTypes': [
                  'entered',
              ],
              'searchTermTargetings': [
                  'automatic',
              ],
              'targetedKeywordTypes': [
                  'generic',
              ],
              'campaignType': 'all',
              'salesChannel': 'all',
              'mediaType': 'all',
              'format': 'json-compact',
              'clickAttributionWindow': 'none',
              'viewAttributionWindow': 'none',
              'dimensions': [
                  'date',
                  'accountId',
              ],
              'metrics': [
                  'impressions',
              ],
              'startDate': '2025-10-10',
              'endDate': '2025-10-10',
              'timezone': 'UTC',
          },
      },
  }

  response = requests.post('https://api.criteo.com/2026-01/retail-media/reports/accounts', headers=headers, json=json_data)

  # Note: json_data will not be serialized by requests
  # exactly as it was in the original request.
  #data = '{\n    "data": {\n      "type": "AsyncAccountsReportRequest",\n      "attributes": {\n        "accountIds": ["12345", "67890"],\n        "reportType": "summary",\n        "aggregationLevel": "campaign",\n        "searchTermTypes": ["entered"],\n        "searchTermTargetings": ["automatic"],\n        "targetedKeywordTypes": ["generic"],\n        "campaignType": "all",\n        "salesChannel": "all",\n        "mediaType": "all",\n        "format": "json-compact",\n        "clickAttributionWindow": "none",\n        "viewAttributionWindow": "none",\n        "dimensions": ["date", "accountId"],\n        "metrics": ["impressions"],\n        "startDate": "2025-10-10",\n        "endDate": "2025-10-10",\n        "timezone": "UTC"\n      }\n    }\n  }'
  #response = requests.post('https://api.criteo.com/2026-01/retail-media/reports/accounts', headers=headers, data=data)
  ```

  ```php PHP theme={null}
  <?php
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, 'https://api.criteo.com/2026-01/retail-media/reports/accounts');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
  curl_setopt($ch, CURLOPT_HTTPHEADER, [
      'Authorization: Bearer YOUR_ACCESS_TOKEN',
      'Content-Type: application/json',
  ]);
  curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n    \"data\": {\n      \"type\": \"AsyncAccountsReportRequest\",\n      \"attributes\": {\n        \"accountIds\": [\"12345\", \"67890\"],\n        \"reportType\": \"summary\",\n        \"aggregationLevel\": \"campaign\",\n        \"searchTermTypes\": [\"entered\"],\n        \"searchTermTargetings\": [\"automatic\"],\n        \"targetedKeywordTypes\": [\"generic\"],\n        \"campaignType\": \"all\",\n        \"salesChannel\": \"all\",\n        \"mediaType\": \"all\",\n        \"format\": \"json-compact\",\n        \"clickAttributionWindow\": \"none\",\n        \"viewAttributionWindow\": \"none\",\n        \"dimensions\": [\"date\", \"accountId\"],\n        \"metrics\": [\"impressions\"],\n        \"startDate\": \"2025-10-10\",\n        \"endDate\": \"2025-10-10\",\n        \"timezone\": \"UTC\"\n      }\n    }\n  }");

  $response = curl_exec($ch);

  curl_close($ch);
  ```

  ```java Java theme={null}
  import java.io.IOException;
  import java.net.URI;
  import java.net.http.HttpClient;
  import java.net.http.HttpRequest;
  import java.net.http.HttpRequest.BodyPublishers;
  import java.net.http.HttpResponse;

  HttpClient client = HttpClient.newHttpClient();

  HttpRequest request = HttpRequest.newBuilder()
      .uri(URI.create("https://api.criteo.com/2026-01/retail-media/reports/accounts"))
      .POST(BodyPublishers.ofString("{\n    \"data\": {\n      \"type\": \"AsyncAccountsReportRequest\",\n      \"attributes\": {\n        \"accountIds\": [\"12345\", \"67890\"],\n        \"reportType\": \"summary\",\n        \"aggregationLevel\": \"campaign\",\n        \"searchTermTypes\": [\"entered\"],\n        \"searchTermTargetings\": [\"automatic\"],\n        \"targetedKeywordTypes\": [\"generic\"],\n        \"campaignType\": \"all\",\n        \"salesChannel\": \"all\",\n        \"mediaType\": \"all\",\n        \"format\": \"json-compact\",\n        \"clickAttributionWindow\": \"none\",\n        \"viewAttributionWindow\": \"none\",\n        \"dimensions\": [\"date\", \"accountId\"],\n        \"metrics\": [\"impressions\"],\n        \"startDate\": \"2025-10-10\",\n        \"endDate\": \"2025-10-10\",\n        \"timezone\": \"UTC\"\n      }\n    }\n  }"))
      .setHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN")
      .setHeader("Content-Type", "application/json")
      .build();

  HttpResponse&lt;String&gt; response = client.send(request, HttpResponse.BodyHandlers.ofString());
  ```
</CodeGroup>

### Sample Response

For `/retail-media/reports/accounts`:

```json theme={null}
{
  "data": {
    "type": "RetailMediaReportStatus",
    "id": "f5a2cd3d-1e83-41b1-98b1-abcde1234567",
    "attributes": {
      "status": "pending",
      "rowCount": null,
      "fileSizeBytes": null,
      "md5Checksum": null,
      "createdAt": null,
      "expiresAt": null,
      "message": null
    }
  }
}
```

***

## Fill Rate Reporting

In version `2026.01`, we've introduced new fill rate reporting endpoints that provide retailers with a comprehensive view of how effectively their available ad placements are being monetized by comparing the number of successfully filled placement impressions against the total number of delivered placements.  By analyzing fill rate and related coverage metrics across dimensions such as placement, page type, or environment, for example, retailers can identify gaps between supply and demand that limit revenue potential.  This insight helps surface where inventory is underutilized or insufficient, or where technical or configuration issues prevent ads from rendering, enabling more informed optimization decisions to maximize yield.

Retailers can request either a standard **fill rate report** or a more granular **unfilled placements report** that breaks down the specific reasons inventory went unfilled.  Together, the fill rate and unfilled reasons reports give retailers both a high-level performance signal and actionable diagnostics, making it easier to prioritize demand growth, improve inventory coverage, and resolve supply-side constraints that impact monetization.

<Info>
  You can find the documentation for Fill Rate reporting endpoints [here](/retail-media/docs/fill-rate-report).
</Info>

***

### Updated Endpoints

The following new endpoint can be found below:

<table>
  <thead>
    <tr>
      <th>
        <p>
          Verb
        </p>
      </th>

      <th>
        <p>
          Endpoint
        </p>
      </th>

      <th>
        <p>
          Description
        </p>
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        <p>
          <b>
            POST
          </b>
        </p>
      </td>

      <td>
        <p>
          <code>
            /reports/fillrate
          </code>
        </p>
      </td>

      <td>
        <p>
          Request a fill rate report creation
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <b>
            POST
          </b>
        </p>
      </td>

      <td>
        <p>
          <code>
            /reports/unfilled-placements
          </code>
        </p>
      </td>

      <td>
        <p>
          Request an unfilled reasons report
        </p>
      </td>
    </tr>
  </tbody>
</table>

***

### Sample Request

For `/retail-media/reports/fillrate`:

<CodeGroup>
  ```bash cURL expandable theme={null}
  curl -X 'POST' \
    'https://api.criteo.com/2026-01/retail-media/reports/fillrate' \
    -H 'accept: text/plain' \
    -H 'Content-Type: application/json-patch+json' \
    -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
    -d '{
    "data": {
      "type": "string",
      "attributes": {
        "supplyAccountIds": [
          "8639134211138xxxx"
        ],
        "dimensions": [
            "date",
            "retailerId",
            "retailerName",
            "placementId",
            "placementName",
            "pageTypeName",
            "environment",
            "servedCategory",
            "retailerCategoryId",
            "retailerCategoryName",
            "adServerType"
        ],
        "metrics": [
            "pageViews",
            "availablePlacements",
            "unfilledPlacements",
            "fillRate",
            "placementImpressions",
            "productImpressions",
            "impressions",
            "placementClicks",
            "productClicks",
            "clicks",
            "placementImpressionsCTR",
            "productImpressionsCTR",
            "cpm",
            "cpc",
            "placementImpressionsRevenue",
            "productClicksRevenue",
            "revenue",
            "workingMedia",
            "netRevenue",
            "nonDeliverablePlacements",
            "deliverablePlacements",
            "placementsWithCandidates",
            "coveredPlacements",
            "coverageRate"
                  ],
        "adServerType": "all",
        "format": "csv",
        "startDate": "2025-09-08",
        "endDate": "2025-09-09",
        "timezone": "America/New_York"
      }
    }
  }'
  ```

  ```python Python theme={null}
  import requests

  headers = {
      'accept': 'text/plain',
      'Content-Type': 'application/json-patch+json',
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
  }

  data = '{\n  "data": {\n    "type": "string",\n    "attributes": {\n      "supplyAccountIds": [\n        "8639134211138xxxx"\n      ],\n      "dimensions": [\n          "date",\n          "retailerId",\n          "retailerName",\n          "placementId",\n          "placementName",\n          "pageTypeName",\n          "environment",\n          "servedCategory",\n          "retailerCategoryId",\n          "retailerCategoryName",\n          "adServerType"\n      ],\n      "metrics": [\n          "pageViews",\n          "availablePlacements",\n          "unfilledPlacements",\n          "fillRate",\n          "placementImpressions",\n          "productImpressions",\n          "impressions",\n          "placementClicks",\n          "productClicks",\n          "clicks",\n          "placementImpressionsCTR",\n          "productImpressionsCTR",\n          "cpm",\n          "cpc",\n          "placementImpressionsRevenue",\n          "productClicksRevenue",\n          "revenue",\n          "workingMedia",\n          "netRevenue",\n          "nonDeliverablePlacements",\n          "deliverablePlacements",\n          "placementsWithCandidates",\n          "coveredPlacements",\n          "coverageRate"\n                ],\n      "adServerType": "all",\n      "format": "csv",\n      "startDate": "2025-09-08",\n      "endDate": "2025-09-09",\n      "timezone": "America/New_York"\n    }\n  }\n}'

  response = requests.post('https://api.criteo.com/2026-01/retail-media/reports/fillrate', headers=headers, data=data)
  ```

  ```php PHP theme={null}
  <?php
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, 'https://api.criteo.com/2026-01/retail-media/reports/fillrate');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
  curl_setopt($ch, CURLOPT_HTTPHEADER, [
      'accept: text/plain',
      'Content-Type: application/json-patch+json',
      'Authorization: Bearer YOUR_ACCESS_TOKEN',
  ]);
  curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n  \"data\": {\n    \"type\": \"string\",\n    \"attributes\": {\n      \"supplyAccountIds\": [\n        \"8639134211138xxxx\"\n      ],\n      \"dimensions\": [\n          \"date\",\n          \"retailerId\",\n          \"retailerName\",\n          \"placementId\",\n          \"placementName\",\n          \"pageTypeName\",\n          \"environment\",\n          \"servedCategory\",\n          \"retailerCategoryId\",\n          \"retailerCategoryName\",\n          \"adServerType\"\n      ],\n      \"metrics\": [\n          \"pageViews\",\n          \"availablePlacements\",\n          \"unfilledPlacements\",\n          \"fillRate\",\n          \"placementImpressions\",\n          \"productImpressions\",\n          \"impressions\",\n          \"placementClicks\",\n          \"productClicks\",\n          \"clicks\",\n          \"placementImpressionsCTR\",\n          \"productImpressionsCTR\",\n          \"cpm\",\n          \"cpc\",\n          \"placementImpressionsRevenue\",\n          \"productClicksRevenue\",\n          \"revenue\",\n          \"workingMedia\",\n          \"netRevenue\",\n          \"nonDeliverablePlacements\",\n          \"deliverablePlacements\",\n          \"placementsWithCandidates\",\n          \"coveredPlacements\",\n          \"coverageRate\"\n                ],\n      \"adServerType\": \"all\",\n      \"format\": \"csv\",\n      \"startDate\": \"2025-09-08\",\n      \"endDate\": \"2025-09-09\",\n      \"timezone\": \"America/New_York\"\n    }\n  }\n}");

  $response = curl_exec($ch);

  curl_close($ch);
  ```

  ```java Java theme={null}
  import java.io.IOException;
  import java.net.URI;
  import java.net.http.HttpClient;
  import java.net.http.HttpRequest;
  import java.net.http.HttpRequest.BodyPublishers;
  import java.net.http.HttpResponse;

  HttpClient client = HttpClient.newHttpClient();

  HttpRequest request = HttpRequest.newBuilder()
      .uri(URI.create("https://api.criteo.com/2026-01/retail-media/reports/fillrate"))
      .POST(BodyPublishers.ofString("{\n  \"data\": {\n    \"type\": \"string\",\n    \"attributes\": {\n      \"supplyAccountIds\": [\n        \"8639134211138xxxx\"\n      ],\n      \"dimensions\": [\n          \"date\",\n          \"retailerId\",\n          \"retailerName\",\n          \"placementId\",\n          \"placementName\",\n          \"pageTypeName\",\n          \"environment\",\n          \"servedCategory\",\n          \"retailerCategoryId\",\n          \"retailerCategoryName\",\n          \"adServerType\"\n      ],\n      \"metrics\": [\n          \"pageViews\",\n          \"availablePlacements\",\n          \"unfilledPlacements\",\n          \"fillRate\",\n          \"placementImpressions\",\n          \"productImpressions\",\n          \"impressions\",\n          \"placementClicks\",\n          \"productClicks\",\n          \"clicks\",\n          \"placementImpressionsCTR\",\n          \"productImpressionsCTR\",\n          \"cpm\",\n          \"cpc\",\n          \"placementImpressionsRevenue\",\n          \"productClicksRevenue\",\n          \"revenue\",\n          \"workingMedia\",\n          \"netRevenue\",\n          \"nonDeliverablePlacements\",\n          \"deliverablePlacements\",\n          \"placementsWithCandidates\",\n          \"coveredPlacements\",\n          \"coverageRate\"\n                ],\n      \"adServerType\": \"all\",\n      \"format\": \"csv\",\n      \"startDate\": \"2025-09-08\",\n      \"endDate\": \"2025-09-09\",\n      \"timezone\": \"America/New_York\"\n    }\n  }\n}"))
      .setHeader("accept", "text/plain")
      .setHeader("Content-Type", "application/json-patch+json")
      .setHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN")
      .build();

  HttpResponse&lt;String&gt; response = client.send(request, HttpResponse.BodyHandlers.ofString());
  ```
</CodeGroup>

### Sample Request

For `retail-media/reports/unfilled-placements`:

<CodeGroup>
  ```bash cURL expandable theme={null}
  curl -X 'POST' \
    'https://api.criteo.com/2026-01/retail-media/reports/unfilled-placements' \
    -H 'accept: text/plain' \
    -H 'Content-Type: application/json-patch+json' \
    -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
    -d '{
    "data": {
      "type": "string",
      "attributes": {
        "supplyAccountIds": [
          "8639134211138xxxx"
        ],
        "dimensions": [
          "adServerType", "date"
        ],
        "metrics": [
                "totalUnfilledPlacements",
                "unfilledNotEnoughDemand",
                "nonDeliverableUnmappedCategories",
                "nonDeliverablePagesWithUnknownProducts",
                "nonDeliverableBlockedOptOut",
                "nonDeliverableBlockedPageCategory",
                "nonDeliverableInsufficientOrganicResults",
                "nonDeliverableTestPlacement",
                "uncoveredSearchTermWithoutCategory",
                "uncoveredNoDemandBrandedKeywordConquestingEnabled",
                "uncoveredNoDemandBrandedKeywordConquestingDisabled",
                "uncoveredNoDemandUnbrandedInventory",
                "uncoveredFilteredOutDemand",
                "uncoveredBrokenPlacement",
                "uncoveredNotPainted",
                "availablePlacements",
                "fillRate",
                "placementImpressions",
                "productImpressions",
                "placementClicks",
                "productClicks",
                "clicks",
                "placementImpressionsCTR",
                "productImpressionsCTR",
                "cpm",
                "cpc",
                "placementImpressionsRevenue",
                "productClicksRevenue",
                "revenue",
                "nonDeliverablePlacements",
                "placementsWithCandidates",
                "coveredPlacements",
                "coverageRate"
        ],
        "format": "csv",
        "startDate": "2025-09-08",
        "endDate": "2025-09-09",
        "timezone": "America/New_York"
      }
    }
  }'
  ```

  ```python Python theme={null}
  import requests

  headers = {
      'accept': 'text/plain',
      'Content-Type': 'application/json-patch+json',
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
  }

  data = '{\n  "data": {\n    "type": "string",\n    "attributes": {\n      "supplyAccountIds": [\n        "8639134211138xxxx"\n      ],\n      "dimensions": [\n        "adServerType", "date"\n      ],\n      "metrics": [\n              "totalUnfilledPlacements",\n              "unfilledNotEnoughDemand",\n              "nonDeliverableUnmappedCategories",\n              "nonDeliverablePagesWithUnknownProducts",\n              "nonDeliverableBlockedOptOut",\n              "nonDeliverableBlockedPageCategory",\n              "nonDeliverableInsufficientOrganicResults",\n              "nonDeliverableTestPlacement",\n              "uncoveredSearchTermWithoutCategory",\n              "uncoveredNoDemandBrandedKeywordConquestingEnabled",\n              "uncoveredNoDemandBrandedKeywordConquestingDisabled",\n              "uncoveredNoDemandUnbrandedInventory",\n              "uncoveredFilteredOutDemand",\n              "uncoveredBrokenPlacement",\n              "uncoveredNotPainted",\n              "availablePlacements",\n              "fillRate",\n              "placementImpressions",\n              "productImpressions",\n              "placementClicks",\n              "productClicks",\n              "clicks",\n              "placementImpressionsCTR",\n              "productImpressionsCTR",\n              "cpm",\n              "cpc",\n              "placementImpressionsRevenue",\n              "productClicksRevenue",\n              "revenue",\n              "nonDeliverablePlacements",\n              "placementsWithCandidates",\n              "coveredPlacements",\n              "coverageRate"\n      ],\n      "format": "csv",\n      "startDate": "2025-09-08",\n      "endDate": "2025-09-09",\n      "timezone": "America/New_York"\n    }\n  }\n}'

  response = requests.post('https://api.criteo.com/2026-01/retail-media/reports/unfilled-placements', headers=headers, data=data)
  ```

  ```php PHP theme={null}
  <?php
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, 'https://api.criteo.com/2026-01/retail-media/reports/unfilled-placements');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
  curl_setopt($ch, CURLOPT_HTTPHEADER, [
      'accept: text/plain',
      'Content-Type: application/json-patch+json',
      'Authorization: Bearer YOUR_ACCESS_TOKEN',
  ]);
  curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n  \"data\": {\n    \"type\": \"string\",\n    \"attributes\": {\n      \"supplyAccountIds\": [\n        \"8639134211138xxxx\"\n      ],\n      \"dimensions\": [\n        \"adServerType\", \"date\"\n      ],\n      \"metrics\": [\n              \"totalUnfilledPlacements\",\n              \"unfilledNotEnoughDemand\",\n              \"nonDeliverableUnmappedCategories\",\n              \"nonDeliverablePagesWithUnknownProducts\",\n              \"nonDeliverableBlockedOptOut\",\n              \"nonDeliverableBlockedPageCategory\",\n              \"nonDeliverableInsufficientOrganicResults\",\n              \"nonDeliverableTestPlacement\",\n              \"uncoveredSearchTermWithoutCategory\",\n              \"uncoveredNoDemandBrandedKeywordConquestingEnabled\",\n              \"uncoveredNoDemandBrandedKeywordConquestingDisabled\",\n              \"uncoveredNoDemandUnbrandedInventory\",\n              \"uncoveredFilteredOutDemand\",\n              \"uncoveredBrokenPlacement\",\n              \"uncoveredNotPainted\",\n              \"availablePlacements\",\n              \"fillRate\",\n              \"placementImpressions\",\n              \"productImpressions\",\n              \"placementClicks\",\n              \"productClicks\",\n              \"clicks\",\n              \"placementImpressionsCTR\",\n              \"productImpressionsCTR\",\n              \"cpm\",\n              \"cpc\",\n              \"placementImpressionsRevenue\",\n              \"productClicksRevenue\",\n              \"revenue\",\n              \"nonDeliverablePlacements\",\n              \"placementsWithCandidates\",\n              \"coveredPlacements\",\n              \"coverageRate\"\n      ],\n      \"format\": \"csv\",\n      \"startDate\": \"2025-09-08\",\n      \"endDate\": \"2025-09-09\",\n      \"timezone\": \"America/New_York\"\n    }\n  }\n}");

  $response = curl_exec($ch);

  curl_close($ch);
  ```

  ```java Java theme={null}
  import java.io.IOException;
  import java.net.URI;
  import java.net.http.HttpClient;
  import java.net.http.HttpRequest;
  import java.net.http.HttpRequest.BodyPublishers;
  import java.net.http.HttpResponse;

  HttpClient client = HttpClient.newHttpClient();

  HttpRequest request = HttpRequest.newBuilder()
      .uri(URI.create("https://api.criteo.com/2026-01/retail-media/reports/unfilled-placements"))
      .POST(BodyPublishers.ofString("{\n  \"data\": {\n    \"type\": \"string\",\n    \"attributes\": {\n      \"supplyAccountIds\": [\n        \"8639134211138xxxx\"\n      ],\n      \"dimensions\": [\n        \"adServerType\", \"date\"\n      ],\n      \"metrics\": [\n              \"totalUnfilledPlacements\",\n              \"unfilledNotEnoughDemand\",\n              \"nonDeliverableUnmappedCategories\",\n              \"nonDeliverablePagesWithUnknownProducts\",\n              \"nonDeliverableBlockedOptOut\",\n              \"nonDeliverableBlockedPageCategory\",\n              \"nonDeliverableInsufficientOrganicResults\",\n              \"nonDeliverableTestPlacement\",\n              \"uncoveredSearchTermWithoutCategory\",\n              \"uncoveredNoDemandBrandedKeywordConquestingEnabled\",\n              \"uncoveredNoDemandBrandedKeywordConquestingDisabled\",\n              \"uncoveredNoDemandUnbrandedInventory\",\n              \"uncoveredFilteredOutDemand\",\n              \"uncoveredBrokenPlacement\",\n              \"uncoveredNotPainted\",\n              \"availablePlacements\",\n              \"fillRate\",\n              \"placementImpressions\",\n              \"productImpressions\",\n              \"placementClicks\",\n              \"productClicks\",\n              \"clicks\",\n              \"placementImpressionsCTR\",\n              \"productImpressionsCTR\",\n              \"cpm\",\n              \"cpc\",\n              \"placementImpressionsRevenue\",\n              \"productClicksRevenue\",\n              \"revenue\",\n              \"nonDeliverablePlacements\",\n              \"placementsWithCandidates\",\n              \"coveredPlacements\",\n              \"coverageRate\"\n      ],\n      \"format\": \"csv\",\n      \"startDate\": \"2025-09-08\",\n      \"endDate\": \"2025-09-09\",\n      \"timezone\": \"America/New_York\"\n    }\n  }\n}"))
      .setHeader("accept", "text/plain")
      .setHeader("Content-Type", "application/json-patch+json")
      .setHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN")
      .build();

  HttpResponse&lt;String&gt; response = client.send(request, HttpResponse.BodyHandlers.ofString());
  ```
</CodeGroup>

### Sample Response

For `/retail-media/reports/fillrate`:

For `retail-media/reports/unfilled-placements`:

```json theme={null}
{
  "data": {
    "attributes": {
      "status": "pending",
      "rowCount": 0,
      "fileSizeBytes": 0,
      "md5CheckSum": null,
      "createdAt": "2025-09-15T19:45:55.758Z",
      "expiresAt": null,
      "message": null,
      "id": "4dcd1f71-77f0-4bf2-b225-3e7a0dxxxxx"
    },
    "id": "4dcd1f71-77f0-4bf2-b225-3e7a0ddxxxxxx",
    "type": "StatusResponse"
  },
  "warnings": [],
  "errors": []
}
```

<br />
