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

# Promoted Products

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>;
};

<Note>
  **Getting Started**

  * A promoted product specifies the product that will be advertised on a line item.
  * Identify eligible products to promote by accessing your account [catalog](/retail-media/v2025.07/docs/catalogs).
  * Each product can optionally be configured with a specific bid amount, allowing you to control how much you are willing to pay per click.
  * The suggested limit is 1,500 SKUs. This is a soft limit: exceeding it won’t result in errors, but performance runs the risk of degradation at higher volumes.
</Note>

 

## **Endpoints**

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

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

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

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

      <td>
        <p>
          <code>
            /line-items/\{lineItemId}/products
          </code>
        </p>
      </td>

      <td>
        <p>
          Retrieve all products associated with a specific line item.
        </p>
      </td>
    </tr>

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

      <td>
        <p>
          <code>
            /line-items/\{lineItemId}/products/append
          </code>
        </p>
      </td>

      <td>
        <p>
          Add products to a specific line item or update their bid override.
        </p>
      </td>
    </tr>

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

      <td>
        <p>
          <code>
            /line-items/\{lineItemId}/products/delete
          </code>
        </p>
      </td>

      <td>
        <p>
          Remove products from a specific line item.
        </p>
      </td>
    </tr>

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

      <td>
        <p>
          <code>
            /line-items/\{lineItemId}/products/pause
          </code>
        </p>
      </td>

      <td>
        <p>
          Pause products on a specific line item, preventing them from being advertised.
        </p>
      </td>
    </tr>

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

      <td>
        <p>
          <code>
            /line-items/\{lineItemId}/products/unpause
          </code>
        </p>
      </td>

      <td>
        <p>
          Reactivate paused products on a specific line item, allowing them to be advertised again.
        </p>
      </td>
    </tr>
  </tbody>
</table>

 

## **Promoted Products 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>
            id
          </code>

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

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

      <td>
        <p>
          Product ID, unique identifier at the

          <a href="/retail-media/v2025.07/docs/retailers">
            Retailer
          </a>

          catalog and obtained from the account

          <a href="/retail-media/v2025.07/docs/catalogs">
            Catalog
          </a>
        </p>

        <p>
          Accepted values: up to

          <code>
            500
          </code>

          -chars string
        </p>

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

    <tr>
      <td>
        <p>
          <code>
            lineItemId
          </code>

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

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

      <td>
        <p>
          <a href="/retail-media/v2025.07/docs/line-items">
            Line Item
          </a>

          ID, in which the product is to be promoted; required in the endpoints' path to define in which line item to perform the action
        </p>

        <p>
          Accepted values: string or int64
        </p>

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

    <tr>
      <td>
        <p>
          <code>
            bidOverride
          </code>
        </p>
      </td>

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

      <td>
        <p>
          Bid value for the specific product; overrides

          <code>
            targetBid
          </code>

          specified on the

          <a href="/retail-media/v2025.07/docs/line-items">
            Line Item
          </a>

          and must satisfy

          <code>
            minBid
          </code>

          from

          <a href="/retail-media/v2025.07/docs/catalogs">
            Catalog
          </a>

          (input excludes platform fees). The value

          <code>
            0.0
          </code>

          will remove a bidOverride and the product bid will default to the line item's

          <code>
            targetBid
          </code>

          .
        </p>

        <p>
          Accepted values:

          <code>
            bidOverride
          </code>

          ≥

          <code>
            minBid
          </code>

          ,

          <code>
            0.0
          </code>
        </p>

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

    <tr>
      <td>
        <p>
          <code>
            status
          </code>
        </p>
      </td>

      <td>
        <p>
          enum
        </p>
      </td>

      <td>
        <p>
          Status of Promoted Product; can only be updated to

          <code>
            active
          </code>

          or

          <code>
            paused
          </code>

          using the endpoints below.
        </p>

        <p>
          For more details about each state, check out

          <a href="/retail-media/v2025.07/docs/campaign-lineitem-status">
            Campaign, Line Item & Products Status
          </a>
        </p>

        <p>
          Returned values:

          <code>
            active
          </code>

          ,

          <code>
            paused
          </code>

          ,

          <code>
            scheduled
          </code>

          ,

          <code>
            ended
          </code>

          ,

          <code>
            budgetHit
          </code>

          ,

          <code>
            noFunds
          </code>

          ,

          <code>
            draft
          </code>

          ,

          <code>
            archived
          </code>
        </p>

        <p>
          Writeable? Y / Nullable? N
        </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>

***

## **Get All Products on specific Line Item**

This endpoint lists all products on the specified line item.

Results are paginated using `offset` and `limit` query parameters; if omitted, defaults to `0` and `500`, respectively. See [API Response](/retail-media/v2025.07/docs/api-response#pagination).

Additional query parameter `fields` is supported to receive a comma-separated list of optional attributes to include in the response, to optimize response time and payload length

<EndpointBadge method="get">
  ```http theme={null}
  https://api.criteo.com/{version}/retail-media/line-items/{lineItemId}/products
  ```
</EndpointBadge>

**Sample Request**

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET "https://api.criteo.com/{version}/retail-media/line-items/2465695028166499188/products?offset=0&limit=10&fields=bidOverride,status" \
      -H "Authorization: Bearer <MY_ACCESS_TOKEN>"
  ```

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

  url = "https://api.criteo.com/{version}/retail-media/line-items/2465695028166499188/products?offset=0&limit=10&fields=bidOverride"

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

  response = requests.request("GET", url, headers=headers, data=payload)

  print(response.text)
  ```

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

  MediaType mediaType = MediaType.parse("text/plain");

  RequestBody body = RequestBody.create(mediaType, "");

  Request request = new Request.Builder()
    .url("https://api.criteo.com/{version}/retail-media/line-items/2465695028166499188/products?offset=0&limit=10&fields=bidOverride")
    .method("GET", body)
    .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/{version}/retail-media/line-items/2465695028166499188/products?offset=0&limit=10&fields=bidOverride');
  $request->setMethod(HTTP_Request2::METHOD_GET);
  $request->setConfig(array(
    'follow_redirects' => TRUE
  ));
  $request->setHeader(array(
    'Accept' => 'application/json',
    'Authorization' => 'Bearer <MY_ACCESS_TOKEN>'
  ));
  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**

🔵 HTTP code `200`:

```json theme={null}
{
    "meta": {
        "offset": 0,
        "limit": 10,
        "count": 34,
        "responseCount": 34
    },
    "data": [
        {
            "id": "06d3049c3e1642ec92479dbeca1fc39f",
            "type": "RetailMediaPromotedProduct",
            "attributes": {
                "bidOverride": 0.70,
                "status": "active"
            }
        },
        // ...
        {
            "id": "926097",
            "type": "RetailMediaPromotedProduct",
            "attributes": {
                "bidOverride": 0.30,
                "status": "active"
            }
        }
    ]
}
```

## **Add Products to specific Line Item, or Update Bid Override**

This endpoint adds one or more products to promote on the specified line item. If the product already exists, only its bid override will be updated.

<EndpointBadge method="post">
  ```http theme={null}
  https://api.criteo.com/{version}/retail-media/line-items/{lineItemId}/products/append
  ```
</EndpointBadge>

**Sample Request**

<CodeGroup>
  ```bash cURL theme={null}
  curl -L -X POST 'https://api.criteo.com/{version}/retail-media/line-items/2465695028166499188/products/append' \
      -H 'Accept: application/json' \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer <MY_ACCESS_TOKEN>' \
      -d '{
              "data": [
                  {
                      "id": "492731",
                      "type": "RetailMediaPromotedProduct",
                      "attributes": {
                          "id": "492731",
                          "status": "paused",
                          "bidOverride": "0.0"
                      }
                  }
              ]
          }'
  ```

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

  url = "https://api.criteo.com/{version}/retail-media/line-items/2465695028166499188/products/append"

  payload = json.dumps({
      "data": [
          {
              "id": "492731",
              "type": "RetailMediaPromotedProduct",
              "attributes": {
                  "id": "492731",
                  "status": "paused",
                  "bidOverride": "0.0"
              }
          }
      ]
  })
  headers = {
      'Accept': 'application/json',
      'Content-Type': 'application/json',
      'Authorization': 'Bearer <MY_ACCESS_TOKEN>'
  }

  response = requests.request("POST", url, headers=headers, data=payload)

  print(response.text)
  ```

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

  MediaType mediaType = MediaType.parse("application/json");
  RequestBody body = RequestBody.create("""
  {
      "data": [
          {
              "id": "492731",
              "type": "RetailMediaPromotedProduct",
              "attributes": {
                  "id": "492731",
                  "status": "paused",
                  "bidOverride": "0.0"
              }
          }
      ]
  }
  """, mediaType);

  Request request = new Request.Builder()
      .url("https://api.criteo.com/{version}/retail-media/line-items/2465695028166499188/products/append")
      .post(body)
      .addHeader("Accept", "application/json")
      .addHeader("Content-Type", "application/json")
      .addHeader("Authorization", "Bearer <MY_ACCESS_TOKEN>")
      .build();

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

  ```php PHP expandable theme={null}
  <?php
  require_once 'HTTP/Request2.php';
  $request = new HTTP_Request2();
  $request->setUrl('https://api.criteo.com/{version}/retail-media/line-items/2465695028166499188/products/append');
  $request->setMethod(HTTP_Request2::METHOD_POST);
  $request->setConfig(array(
      'follow_redirects' => TRUE
  ));
  $request->setHeader(array(
      'Accept' => 'application/json',
      'Content-Type' => 'application/json',
      'Authorization' => 'Bearer <MY_ACCESS_TOKEN>'
  ));

  $body = <<&lt;JSON
  {
      "data": [
          {
              "id": "492731",
              "type": "RetailMediaPromotedProduct",
              "attributes": {
                  "id": "492731",
                  "status": "paused",
                  "bidOverride": "0.0"
              }
          }
      ]
  }
  JSON;
  $request-&gt;setBody($body);

  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**

🔵 HTTP code `204` (no body content)

## **Remove Products from a specific Line Item**

This endpoint removes one or more products from the specified line item.  The resulting state of the line item is returned as a single page.  Line items can be created without any promoted products, but once any products are added, at least one product must remain.

<EndpointBadge method="post">
  ```http theme={null}
  https://api.criteo.com/{version}/retail-media/line-items/{lineItemId}/products/delete
  ```
</EndpointBadge>

**Sample Request**

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://api.criteo.com/{version}/retail-media/line-items/2465695028166499188/products/delete" \
      -H "Authorization: Bearer <MY_ACCESS_TOKEN>" \
      -H "Content-Type: application/json" \
      -d '{
              "data": [
                  {
                      "id": "sku1",
                      "type": "RetailMediaPromotedProduct"
                  }
              ]
          }'
  ```

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

  url = "https://api.criteo.com/{version}/retail-media/line-items/325713346766241792/products/delete"

  payload = json.dumps({
    "data": [
      {
        "id": "be5a3dbc8eaf46608d58ce68107a5854",
        "type": "RetailMediaDeleteProduct",
        "attributes": {
          "bidOverride": "0.30"
        }
      }
    ]
  })
  headers = {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'Authorization': 'Bearer <MY_ACCESS_TOKEN>'
  }

  response = requests.request("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, "{\n  \"data\": [\n    {\n      \"id\": \"be5a3dbc8eaf46608d58ce68107a5854\",\n      \"type\": \"RetailMediaDeleteProduct\",\n      \"attributes\": {\n        \"bidOverride\": \"0.30\"\n      }\n    }\n  ]\n}");

  Request request = new Request.Builder()
    .url("https://api.criteo.com/{version}/retail-media/line-items/325713346766241792/products/delete")
    .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/{version}/retail-media/line-items/325713346766241792/products/delete');
  $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('{\n  "data": [\n    {\n      "id": "be5a3dbc8eaf46608d58ce68107a5854",\n      "type": "RetailMediaDeleteProduct",\n      "attributes": {\n        "bidOverride": "0.30"\n      }\n    }\n  ]\n}');
  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**

🔵 HTTP code `204` (no body content)

## **Pause Products on a specific Line Item**

This endpoint allows reactivating one or multiple paused products on a line item:

<EndpointBadge method="post">
  ```http theme={null}
  https://api.criteo.com/{version}/retail-media/line-items/{lineItemId}/products/pause
  ```
</EndpointBadge>

**Sample Request**

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST 'https://api.criteo.com/{version}/retail-media/line-items/311990577399115776/products/pause' \
  		-H 'Content-Type: application/json' \
  		-H'Authorization: Bearer <MY_ACCESS_TOKEN>' \
      -d '{
            "data": [
              {
                "id": "4f5c49fce3c94542b5023e7cc1e1f5ca",
                "type": "RetailMediaPromotedProduct"
              }
           ]
      }'
  ```

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

  url = "https://api.criteo.com/{version}/retail-media/line-items/325713346766241792/products/pause"

  payload = json.dumps({
    "data": [
      {
        "id": "be5a3dbc8eaf46608d58ce68107a5854",
        "type": "RetailMediaPausePromoteDProduct"
      }
    ]
  })
  headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer <MY_ACCESS_TOKEN>'
  }

  response = requests.request("POST", url, headers=headers, data=payload)

  print(response.text)
  ```

  ```php PHP theme={null}
  <?php
  require_once 'HTTP/Request2.php';
  $request = new HTTP_Request2();
  $request->setUrl('https://api.criteo.com/{version}/retail-media/line-items/325713346766241792/products/pause');
  $request->setMethod(HTTP_Request2::METHOD_POST);
  $request->setConfig(array(
    'follow_redirects' => TRUE
  ));

  $request->setHeader(array(
    'Content-Type' => 'application/json',
    'Authorization' => 'Bearer <MY_ACCESS_TOKEN>'
  ));

  $request->setBody('{\n  "data": [\n    {\n      "id": "be5a3dbc8eaf46608d58ce68107a5854",\n      "type": "RetailMediaPausePromoteDProduct"\n    }\n  ]\n}');
  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();
  }
  ```

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

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

  RequestBody body = RequestBody.create(mediaType, "{\n  \"data\": [\n    {\n      \"id\": \"be5a3dbc8eaf46608d58ce68107a5854\",\n      \"type\": \"RetailMediaPausePromoteDProduct\"\n    }\n  ]\n}");

  Request request = new Request.Builder()
    .url("https://api.criteo.com/{version}/retail-media/line-items/325713346766241792/products/pause")
    .method("POST", body)
    .addHeader("Content-Type", "application/json")
    .addHeader("Authorization", "Bearer <MY_ACCESS_TOKEN>")
    .build();

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

**Sample Response**

🔵 HTTP code `204` (no body content)

## **Unpaused Products on a Specific Line Item**

This endpoint allows unpausing one or multiple products on a line item:

<EndpointBadge method="post">
  ```http theme={null}
  https://api.criteo.com/{version}/retail-media/line-items/{lineItemId}/products/unpause
  ```
</EndpointBadge>

**Sample Request**

<CodeGroup>
  ```bash cURL theme={null}
  curl -L -X POST 'https://api.criteo.com/{version}/retail-media/line-items/311990577399115776/products/unpause' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <MY_ACCESS_TOKEN>' \
  -d '{
    "data": [
      {
        "id": "4f5c49fce3c94542b5023e7cc1e1f5ca",
        "type": "RetailMediaPromotedProduct"
      }
    ]
  }'
  ```

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

  url = "https://api.criteo.com/{version}/retail-media/line-items/325713346766241792/products/unpause"

  payload = json.dumps({
    "data": [
      {
        "id": "be5a3dbc8eaf46608d58ce68107a5854",
        "type": "RetailMediaPausePromoteDProduct"
      }
    ]
  })
  headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer <MY_ACCESS_TOKEN>'
  }

  response = requests.request("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, "{\n  \"data\": [\n    {\n      \"id\": \"be5a3dbc8eaf46608d58ce68107a5854\",\n      \"type\": \"RetailMediaPausePromoteDProduct\"\n    }\n  ]\n}");

  Request request = new Request.Builder()
    .url("https://api.criteo.com/{version}/retail-media/line-items/325713346766241792/products/unpause")
    .method("POST", body)
    .addHeader("Content-Type", "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/{version}/retail-media/line-items/325713346766241792/products/unpause');
  $request->setMethod(HTTP_Request2::METHOD_POST);
  $request->setConfig(array(
    'follow_redirects' => TRUE
  ));
  $request->setHeader(array(
    'Content-Type' => 'application/json',
    'Authorization' => 'Bearer <MY_ACCESS_TOKEN>'
  ));

  $request->setBody('{\n  "data": [\n    {\n      "id": "be5a3dbc8eaf46608d58ce68107a5854",\n      "type": "RetailMediaPausePromoteDProduct"\n    }\n  ]\n}');
  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**

🔵 HTTP code `204` (no body content)

## **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 completed with success
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          🟢

          <code>
            204
          </code>
        </p>
      </td>

      <td>
        <p>
          Promoted product paused or un-paused with success (no body content returned)
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          🔴

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

      <td>
        <p>
          Bad Request - Common validation errors:
        </p>

        <ul>
          <li>
            Could not find the SKU ID used to append to the line item. Make sure the SKU exists in the retailer's catalog
          </li>

          <li>
            Product bid override less than the product min bid
          </li>

          <li>
            Invalid bid override: Cannot use bid override attribute for a product belonging to a preferred deals line item
          </li>

          <li>
            Pausing/Un-pausing promoted products: Only the ID is required; do not include

            <code>
              BidOverride
            </code>

            or

            <code>
              Status
            </code>

            attributes.
          </li>
        </ul>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          🔴

          <code>
            403
          </code>
        </p>
      </td>

      <td>
        <p>
          API user does not have authorization to make requests for the account ID. For authorization, follow the

          <a href="/retail-media/v2025.07/docs/authorization-requests">
            authorization request
          </a>

          steps.
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          🔴

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

      <td>
        <p>
          Line item ID not found
        </p>
      </td>
    </tr>
  </tbody>
</table>
