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

# Retailers

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

A retailer offers a selection of products from multiple brands.

Retailers act as publishers, providing advertising inventory for brands to promote their products.

An account can have access to one or more retailers, with this access typically managed by Criteo.

A retailer typically allows multiples types of pages to be targeted. A *page* is an inventory that can be targeted by [Campaigns](/retail-media/v2025.10/docs/campaign) and  [Line Items](/retail-media/v2025.10/docs/line-items) with specific configurations.

## **Endpoint**

<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>
            /accounts/\{accountId}/retailers
          </code>
        </p>
      </td>

      <td>
        <p>
          Get all retailers
        </p>
      </td>
    </tr>

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

      <td>
        <p>
          <code>
            /retailers/\{retailerId}/pages
          </code>
        </p>
      </td>

      <td>
        <p>
          Get all pages types from specific retailer
        </p>
      </td>
    </tr>
  </tbody>
</table>

## **Retailer 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>
        </p>
      </td>

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

      <td>
        <p>
          Retailer ID, generated internally by Criteo
        </p>

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

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

    <tr>
      <td>
        <p>
          <code>
            name
          </code>
        </p>
      </td>

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

      <td>
        <p>
          Retailer name, arbitrary and defined during retailer integration phase
        </p>

        <p>
          Accepted values: up to 100-chars string
        </p>

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

    <tr>
      <td>
        <p>
          <code>
            campaignEligibilities
          </code>
        </p>
      </td>

      <td>
        <p>
          list\\
        </p>
      </td>

      <td>
        <p>
          Type(s) of campaigns that are supported on each retailer. It's dependent on their current technical integration and other business conditions
        </p>

        <p>
          Accepted values:

          <code>
            auction
          </code>

          ,

          <code>
            preferred
          </code>

          ,

          <code>
            offsite
          </code>

          ,

          <code>
            offsitecpc
          </code>
        </p>

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

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

## **Retailer Page Type 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>
        </p>
      </td>

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

      <td>
        <p>
          Retailer ID, generated internally by Criteo
        </p>

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

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

    <tr>
      <td>
        <p>
          <code>
            pageTypes
          </code>
        </p>
      </td>

      <td>
        <p>
          list

          <code>
            \<enum>
          </code>
        </p>
      </td>

      <td>
        <p>
          Page types available in the associated Retailer
        </p>

        <p>
          Accepted values:
        </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>
  </tbody>
</table>

## **Get all Retailers**

This endpoint retrieves a list of all retailers associated with the respective account and whose environments are available as inventory for its campaigns and line items.

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

<EndpointBadge method="get">
  ```http theme={null}
  https://api.criteo.com/{version}/retail-media/accounts/{accountId}/retailers
  ```
</EndpointBadge>

<Info>
  **API reference**

  You can find this endpoint in [the API reference](/retail-media/reference/authorization/get-token) as well.
</Info>

**Sample Request**

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET "https://api.criteo.com/{version}/retail-media/accounts/18446744073709551616/retailers?pageIndex=0&pageSize=25" \
    -H 'Accept: application/json' \
    -H "Authorization: Bearer <MY_ACCESS_TOKEN>"
  ```

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

  url = "https://api.criteo.com/{version}/retail-media/accounts/18446744073709551616/retailers?pageIndex=0&pageSize=25"

  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/accounts/18446744073709551616/retailers?pageIndex=0&pageSize=25")
    .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/accounts/18446744073709551616/retailers?pageIndex=0&pageSize=25');
  $request->setMethod(HTTP_Request2::METHOD_GET);
  $request->setConfig(array(
    'follow_redirects' => TRUE
  ));

  $request->setHeader(array(
    'Accept' => 'application/json',
    'Authorization' => 'Bearer <MY_ACCES_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**

```json expandable theme={null}
{
    "metadata": {
        "totalItemsAcrossAllPages": 10,
        "currentPageSize": 25,
        "currentPageIndex": 0,
        "totalPages": 1,
        "nextPage": null,
        "previousPage": null
    },
    "data": [
        {
            "id": "1234",
            "type": "RetailMediaRetailer",
            "attributes": {
                "name": "Retailer 1234",
                "campaignEligibilities": [
                    "auction",
                    "preferred",
                    "offsiteCpc",
                    "offsite"
                ]
            }
        },
        // ...
        {
            "id": "5678",
            "type": "RetailMediaRetailer",
            "attributes": {
                "name": "Retailer 5678",
                "campaignEligibilities": [
                    "auction",
                    "preferred"
                ]
            }
        }
    ]
}
```

## **Get all Page Types from specific Retailer**

This endpoint lists all page types available in the current retailer integration.

<EndpointBadge method="get">
  ```http theme={null}
  https://api.criteo.com/{version}/retail-media/retailers/{retailerId}/pages
  ```
</EndpointBadge>

**Sample Response**

<CodeGroup>
  ```bash cURL theme={null}
  curl -L -X GET "https://api.criteo.com/{version}/retail-media/retailers/1234/pages" \
    -H 'Accept: application/json' \
    -H "Authorization: Bearer <MY_ACCESS_TOKEN>"
  ```

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

  url = "https://api.criteo.com/{version}/retail-media/retailers/299/pages"
  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/retailers/299/pages")
    .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/retailers/299/pages');
  $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**

```json theme={null}
{
    "pageTypes": [
        "Home",
        "Search",
        "Category",
        "ProductDetail",
        "Merchandising",
        "Deals",
        "Checkout",
        "Confirmation"
    ]
}
```

## **Responses**

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

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

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

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

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

    <tr>
      <td>
        <p>
          🔴
        </p>

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

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

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

        <p>
          steps
        </p>
      </td>
    </tr>
  </tbody>
</table>

## What's next

* [Balances](/retail-media/v2025.10/docs/balances)
* [Audiences](/retail-media/v2025.10/docs/audiences)
* [Catalog](/retail-media/v2025.10/docs/catalogs)
* [Campaigns](/retail-media/v2025.10/docs/campaign)
* [Line Items](/retail-media/v2025.10/docs/line-items-endpoints)
* [Onsite Sponsored Products](/retail-media/v2025.10/docs/onsite-sponsored-products)
