> ## 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.

# Minimum Bid

export const EndpointBadge = ({method = "GET", children}) => {
  const METHOD_STYLES = {
    GET: {
      bg: "mint-bg-[#2AB673]"
    },
    POST: {
      bg: "mint-bg-[#3064E3]"
    },
    PUT: {
      bg: "mint-bg-[#C28C30]"
    },
    PATCH: {
      bg: "mint-bg-[#DA622B]"
    },
    DELETE: {
      bg: "mint-bg-[#CB3A32]"
    },
    API: {
      bg: "mint-bg-black"
    }
  };
  const key = method.toUpperCase();
  const styles = METHOD_STYLES[key] ?? METHOD_STYLES.API;
  return <div className="relative mt-7">
      <span className={`absolute -top-2 -left-2 z-10 ${styles.bg} text-white px-2.5 py-0.5 rounded-full text-xs font-bold tracking-wide`}>
        {key}
      </span>
      {children}
    </div>;
};

## Introduction

1. Line items have bid settings, start & end dates, and optional budgeting & pacing controls.
2. Target & maximum bid settings must respect minimum bid (`minBid`), that can be set at product SKU level, to start delivering ads
3. Products SKU IDs are available through [Catalog](/retail-media/v2026-preview/docs/catalogs) endpoints

<Info>
  The endpoints and functionalities covered in this **page refers to features available exclusively in Preview** for now, which doesn't mean that they are the only ones available for this domain/scope.

  For more complete information about our API capabilities, check the Stable version in [Welcome to Criteo Retail Media API](/retail-media/docs/welcome-to-criteo)
</Info>

***

## Endpoints

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

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

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

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

      <td>
        <p>
          <code>
            /retailers/\{retailerId}/compute-display-min-bid
          </code>
        </p>
      </td>

      <td>
        <p>
          Retrieve Minimum Bid by creatives and product IDs
        </p>
      </td>
    </tr>
  </tbody>
</table>

***

## Min Bid Search Request Attributes

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

      <th>
        <p>
          Data Type
        </p>
      </th>

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

  <tbody>
    <tr>
      <td>
        <p>
          <code>
            retailerId
          </code>

          <span>\*</span>
        </p>
      </td>

      <td>
        <p>
          <code>
            string
          </code>
        </p>
      </td>

      <td>
        <p>
          Retailer ID where the line item will serve ads on
        </p>

        <p>
          Accepted values: int64
        </p>

        <p>
          Writeable? N / Nullable? N
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            creativeIds
          </code>

          <span>\*</span>
        </p>
      </td>

      <td>
        <p>
          <code>
            list
          </code>
        </p>
      </td>

      <td>
        <p>
          Creative IDs, generated internally by Criteo, used as filter to return the appropriate Minimum Bid by page types that the creative is eligible for
        </p>

        <p>
          Accepted values: list of int64
        </p>

        <p>
          Writeable? N / Nullable? N
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            productIds
          </code>
        </p>
      </td>

      <td>
        <p>
          <code>
            list
          </code>
        </p>
      </td>

      <td>
        <p>
          List of product IDs (optional), from Retailer's <a href="/retail-media/v2026-preview/docs/catalogs">Catalog</a>, that are intended to be attached to the creatives (usually, the SKUs promoted by the line item), to properly identify the Minimum Bid for the respective scenario of ads impressions
        </p>

        <p>
          Accepted values: list of strings, empty list

          <code>
            \[]
          </code>

          or

          <code>
            null
          </code>
        </p>

        <p>
          Writeable? N / Nullable? Y
        </p>
      </td>
    </tr>
  </tbody>
</table>

*\* Required*

<Info>
  **Field Definitions**

  * **Writeable (Y/N)**: Indicates if the field can be modified in requests.
  * **Nullable (Y/N)**: Indicates if the field can accept null/empty values.
  * **Primary Key**: A unique, immutable identifier of the entity, generated internally by Criteo. Primary keys are typically ID fields (e.g., `retailerId`, `campaignId`, `lineItemId`) and are usually required in the URL path.
</Info>

***

## Min Bid Search Response Attributes

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

      <th>
        <p>
          Data Type
        </p>
      </th>

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

  <tbody>
    <tr>
      <td>
        <p>
          <code>
            creativeId
          </code>
        </p>
      </td>

      <td>
        <p>
          <code>
            string
          </code>
        </p>
      </td>

      <td>
        <p>
          Creative ID, generated internally by Criteo, which, together with the page type (and any possible SKU attached), contains the respective Minimum Bid
        </p>

        <p>
          Accepted values: int64
        </p>

        <p>
          Writeable? N / Nullable? N
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            pageType
          </code>
        </p>
      </td>

      <td>
        <p>
          <code>
            list
          </code>
        </p>
      </td>

      <td>
        <p>
          Page type available in the current integration of the associated Retailer which, together with the Creative (and any possible SKU attached), contains the respective Minimum Bid
        </p>

        <p>
          Accepted values: case-insensitive values of
        </p>

        <ul>
          <li>
            <code>
              Home
            </code>
          </li>

          <li>
            <code>
              Search
            </code>
          </li>

          <li>
            <code>
              Category
            </code>
          </li>

          <li>
            <code>
              ProductDetail
            </code>
          </li>

          <li>
            <code>
              Merchandising
            </code>
          </li>

          <li>
            <code>
              Deals
            </code>
          </li>

          <li>
            <code>
              Favorites
            </code>
          </li>

          <li>
            <code>
              SearchBar
            </code>
          </li>

          <li>
            <code>
              CategoryMenu
            </code>
          </li>

          <li>
            <code>
              Checkout
            </code>
          </li>

          <li>
            <code>
              Confirmation
            </code>
          </li>
        </ul>

        <p>
          Writeable? N / Nullable? N
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            minBid
          </code>
        </p>
      </td>

      <td>
        <p>
          <code>
            decimal
          </code>
        </p>
      </td>

      <td>
        <p>
          Minimum Bid resulted from the combination of the respective Creative (considering any possible SKU attached) and page type from Retailer's environment
        </p>

        <p>
          Acceptable values:

          <code>
            minBid
          </code>

          ≥

          <code>
            0.01
          </code>
        </p>

        <p>
          Writeable? N / Nullable? N
        </p>
      </td>
    </tr>
  </tbody>
</table>

***

## Retrieve Minimum Bid from SKU IDs

<EndpointBadge method="post">
  ```http theme={null}
  https://api.criteo.com/preview/retailers/{retailerId}/compute-display-min-bid
  ```
</EndpointBadge>

**Sample Request**

<CodeGroup>
  ```bash cURL theme={null}
  curl -L -X POST "https://api.criteo.com/preview/retail-media/retailers/12345/compute-display-min-bid" \
      -H "Authorization: Bearer <MY_ACCESS_TOKEN>" \
      -H "Content-Type: application/json" \
      -H "Accept: application/json" \
      -d '{
              "data": {
                  "type": "<string>",
                  "attributes": {
                      "creativeIds": [
                          "758332652442912345",
                          "735093382380667890"
                      ],
                      "productIds": [
                          "1234567",
                          "7654321"
                      ]
                  }
          }'

  ```

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

  url = "https://api.criteo.com/preview/retail-media/retailers/12345/compute-display-min-bid"

  payload = json.dumps({
      "data": {
          "type": "<string>",
          "attributes": {
              "creativeIds": [
                  "758332652442912345",
                  "735093382380667890"
              ],
              "productIds": [
                  "1234567",
                  "7654321"
              ]
          }
      }
  })
  headers = {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'Authorization': 'Bearer <MY_ACCESS_TOKEN>'
  }

  response = requests.post(url, headers=headers, data=payload)

  print(response.text)
  ```

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

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

  RequestBody body = RequestBody.create(mediaType, 
      "{\"data\":{\"type\":\"<string>\",\"attributes\":{\"creativeIds\":[\"758332652442912345\",\"735093382380667890\"],\"productIds\":[\"1234567\",\"7654321\"]}}}");

  Request request = new Request.Builder()
    .url("https://api.criteo.com/preview/retail-media/retailers/12345/compute-display-min-bid")
    .method("POST", body)
    .addHeader("Content-Type", "application/json")
    .addHeader("Accept", "application/json")
    .addHeader("Authorization", "Bearer <MY_ACCESS_TOKEN>")
    .build();

  Response response = client.newCall(request).execute();

  ```

  ```php PHP theme={null}
  <?php
  require_once 'HTTP/Request2.php';
  $request = new HTTP_Request2();
  $request->setUrl('https://api.criteo.com/preview/retail-media/retailers/12345/compute-display-min-bid');
  $request->setMethod(HTTP_Request2::METHOD_POST);
  $request->setConfig(array(
    'follow_redirects' => TRUE
  ));
  $request->setHeader(array(
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
    'Authorization' => 'Bearer <MY_ACCESS_TOKEN>'
  ));
  $request->setBody('{"data":{"type":"<string>","attributes":{"creativeIds":["758332652442912345","735093382380667890"],"productIds":["1234567","7654321"]}}}');
  try {
    $response = $request->send();
    if ($response->getStatus() == 200) {
      echo $response->getBody();
    }
    else {
      echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
      $response->getReasonPhrase();
    }
  }
  catch(HTTP_Request2_Exception $e) {
    echo 'Error: ' . $e->getMessage();
  }
  ```
</CodeGroup>

**Sample Response**

```json expandable theme={null}
{
    "data": [
        {
            "type": "DisplayAuctionMinBidResult",
            "attributes": {
                "minBid": 10.00,
                "pageType": "Home",
                "creativeId": "758332652442912345"
            }
        },
        {
            "type": "DisplayAuctionMinBidResult",
            "attributes": {
                "minBid": 2.50,
                "pageType": "Search",
                "creativeId": "758332652442912345"
            }
        },
        {
            "type": "DisplayAuctionMinBidResult",
            "attributes": {
                "minBid": 2.50,
                "pageType": "ProductDetail",
                "creativeId": "758332652442912345"
            }
        },
      
        // ...

        {
            "type": "DisplayAuctionMinBidResult",
            "attributes": {
                "minBid": 2.50,
                "pageType": "Confirmation",
                "creativeId": "758332652442912345"
            }
        },
        {
            "type": "DisplayAuctionMinBidResult",
            "attributes": {
                "minBid": 10.00,
                "pageType": "Home",
                "creativeId": "735093382380667890"
            }
        },
        {
            "type": "DisplayAuctionMinBidResult",
            "attributes": {
                "minBid": 2.50,
                "pageType": "Search",
                "creativeId": "735093382380667890"
            }
        },
        {
            "type": "DisplayAuctionMinBidResult",
            "attributes": {
                "minBid": 2.50,
                "pageType": "ProductDetail",
                "creativeId": "735093382380667890"
            }
        },
      
        // ...

        {
            "type": "DisplayAuctionMinBidResult",
            "attributes": {
                "minBid": 2.50,
                "pageType": "Confirmation",
                "creativeId": "735093382380667890"
            }
        }
    ],
    "warnings": [],
    "errors": []
}
```

***

## Responses

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

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

  <tbody>
    <tr>
      <td>
        <p>
          🟢

          <code>
            200
          </code>
        </p>
      </td>

      <td>
        <p>
          Call executed with success
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          🔴

          <code>
            400
          </code>
        </p>
      </td>

      <td>
        <p>
          <b>
            json-serialization-error
          </b>
        </p>

        <p>
          Required attribute missing or with unexpected format in request's body
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          🔴

          <code>
            404
          </code>
        </p>
      </td>

      <td>
        <p>
          <b>
            Not Found
          </b>
        </p>

        <p>
          Retailer ID informed in request's path was not found
        </p>
      </td>
    </tr>
  </tbody>
</table>

***

<br />
