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

# Brands

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 brand is a collection of products marketed and sold under a unified name. The brands associated with an account define the products that the account can promote on retailer sites.

An account can have access to one or more brands, and this access is typically managed by Criteo.

Brand attributes are standardized across retailers to ensure consistency.

***

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

      <td>
        <p>
          Get Brands
        </p>
      </td>
    </tr>

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

      <td>
        <p>
          <code>
            /brands/search
          </code>
        </p>
      </td>

      <td>
        <p>
          Search for Brands by name in Retailer(s)

          <a href="/retail-media/v2025.10/docs/catalogs">
            Catalogs
          </a>
        </p>
      </td>
    </tr>
  </tbody>
</table>

***

## Brand 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>
          Brand ID, generated internally by Criteo and originated from brand name provided in retailer's

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

        <p>
          Accepted values: 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>
          Brand name, keyword to use as filter in the search (case-insensitive) or returned as final brand name available
        </p>

        <p>
          Accepted values: string
        </p>

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

    <tr>
      <td>
        <p>
          <code>
            retailerIds
          </code>

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

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

      <td>
        <p>
          List of

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

          IDs, to use as filter in the search or returned as containing the specific brand
        </p>

        <p>
          Accepted values: list of strings of int32
        </p>

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

    <tr>
      <td>
        <p>
          <code>
            brandType
          </code>
        </p>
      </td>

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

      <td>
        <p>
          Type of brands, to consider in the search or returned as attribute of the specific brand
        </p>

        <ul>
          <li>
            <code>
              all
            </code>

            : all brands
          </li>

          <li>
            <code>
              retailer
            </code>

            : brands specific to the retailer
          </li>

          <li>
            <code>
              uc
            </code>

            : brands referenced to our Universal Catalog
          </li>
        </ul>

        <p>
          Accepted values:

          <code>
            all
          </code>

          ,

          <code>
            retailer
          </code>

          ,

          <code>
            uc
          </code>

          (case-insensitive)
        </p>

        <p>
          Default:

          <code>
            all
          </code>
        </p>

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

This endpoint lists all brands associated with an account.

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}/brands
  ```
</EndpointBadge>

### Sample Request

<CodeGroup>
  ```bash cURL theme={null}
  curl -L -X GET "https://api.criteo.com/{version}/retail-media/accounts/18446744073709551616/brands?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/4/brands?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/4/brands?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/4/brands?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_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}
{
    "data": [
        {
            "id": "7672171780147256541",
            "type": "RetailMediaBrand",
            "attributes": {
                "name": "Brand 123"
            }
        },
 
        // ...
 
        {
            "id": "5979998329674492121",
            "type": "RetailMediaBrand",
            "attributes": {
                "name": "Brand 789"
            }
        }
    ],
    "metadata": {
        "totalItemsAcrossAllPages": 15,
        "currentPageSize": 25,
        "currentPageIndex": 0,
        "totalPages": 1,
        "nextPage": null,
        "previousPage": null
    }
}
```

***

## Search for Brands by name

This endpoint searches for Brands, by name term, across one or multiple retailers. Results are paginated.

<EndpointBadge method="post">
  ```http theme={null}
  https://api.criteo.com/{version}/retail-media/brands/search
  ```
</EndpointBadge>

### Sample Request

<CodeGroup>
  ```bash cURL theme={null}
  curl -L -X POST 'https://api.criteo.com/{version}/retail-media/brands/search?offset=0&limit=25' \
      -H 'Content-Type: application/json' \
      -H 'Accept: application/json' \
      -H 'Authorization: Bearer <MY_ACCESS_TOKEN>' \
      -d '{
              "data": {
                  "type": "<string>",
                  "attributes": {
                      "retailerIds": [
                          "123",
                          "456"
                      ],
                      "name": "brand abc",
                      "brandType": "all"
                  }
              }
          }'
  ```

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

  url = "https://api.criteo.com/{version}/retail-media/brands/search?offset=0&limit=25"

  payload = json.dumps({
      "data": {
          "type": "<string>",
          "attributes": {
              "retailerIds": [
                  "123",
                  "456"
              ],
              "name": "brand abc",
              "brandType": "all"
          }
      }
  })
  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, "{\"data\":{\"type\":\"<string>\",\"attributes\":{\"retailerIds\":[\"123\",\"456\"],\"name\":\"brand abc\",\"brandType\":\"all\"}}}");

  Request request = new Request.Builder()
    .url("https://api.criteo.com/{version}/retail-media/brands/search?offset=0&limit=25")
    .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/brands/search?offset=0&limit=25');
  $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":{"retailerIds":["123","456"],"name":"brand abc","brandType":"all"}}}');
  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": {
        "count": 2,
        "offset": 0,
        "limit": 25
    },
    "data": [
        {
            "id": "2149023412134133",
            "type": "BrandIdSearchResult",
            "attributes": {
                "id": "2149023412134133",
                "name": "brand abcdef",
                "brandType": "Retailer",
                "retailerIds": [
                    123
                ]
            }
        },
        {
            "id": "62342",
            "type": "BrandIdSearchResult",
            "attributes": {
                "id": "62342",
                "name": "Brand ABC",
                "brandType": "UC",
                "retailerIds": [
                    123,
                    456
                ]
            }
        }
    ],
    "warnings": [],
    "errors": []
}
```

***

## Responses

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

      <th>
        <p>
          Error
        </p>
      </th>

      <th>
        <p>
          Message
        </p>
      </th>

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

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

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

      <td />

      <td />

      <td>
        <p>
          Call completed successfully
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          🔴

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

      <td>
        <p>
          Validation Error
        </p>
      </td>

      <td>
        <p>
          <code>
            One or more validation errors occurred.
          </code>
        </p>
      </td>

      <td>
        <p>
          One of the parameters provided in the request does not match the format accepted. Check the error details and the parameters informed in the call
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          🔴

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

      <td>
        <p>
          Authorization Error
        </p>
      </td>

      <td>
        <p>
          <code>
            Resource access forbidden: does not have permissions
          </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

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

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

## What's next

* [Sellers](/retail-media/v2025.10/docs/sellers)
* [Retailers](/retail-media/v2025.10/docs/retailers)
* [Account Creation and Management (Private Market)](/retail-media/v2025.10/docs/account-creation-and-management-private-market)
