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

MethodEndpointDescription
GET/accounts/{accountId}/brandsGet Brands
POST/brands/searchSearch for Brands by name in Retailer(s) Catalogs

Brand Attributes

AttributeData TypeDescription
idstringBrand ID, generated internally by Criteo and originated from brand name provided in retailer's Catalog

Accepted values: int64
Writeable? N / Nullable? N
namestringBrand name, keyword to use as filter in the search (case-insensitive) or returned as final brand name available

Accepted values: string
Writeable? N / Nullable? N
retailerIds*listList of Retailer IDs, to use as filter in the search or returned as containing the specific brand

Accepted values: list of strings of int32
Writeable? N / Nullable? N
brandTypeenumType of brands, to consider in the search or returned as attribute of the specific brand

* all: all brands
* retailer: brands specific to the retailer
* uc: brands referenced to our Universal Catalog

Accepted values: all, retailer, uc (case-insensitive)
Default: all
Writeable? N / Nullable? N

(*) Required

📘

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.

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, respective - see API Response

https://api.criteo.com/{version}/retail-media/accounts/{accountId}/brands?pageIndex={pageIndex}&pageSize={pageSize}

📘

View in the API Reference

You can also check this endpoint in the API reference.

Sample Request

curl -L -X GET "https://api.criteo.com/{version}/retail-media/accounts/18446744073709551616/brands?pageIndex=0&pageSize=25" \
    -H "Authorization: Bearer <MY_ACCESS_TOKEN>"
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)
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
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();
}

Sample Response

{
    "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.

https://api.criteo.com/preview/retail-media/brands/search?offset=0&limit=25

Sample Request

curl -L -X POST 'https://api.criteo.com/preview/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"
                }
            }
        }'
import requests
import json

url = "https://api.criteo.com/preview/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)
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/preview/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
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://api.criteo.com/preview/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();
}

Sample Response

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

ResponseErrorMessageDescription
🟢 200Call completed successfully
🔴 400Validation ErrorOne or more validation errors occurred.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
🔴 403Authorization ErrorResource access forbidden: does not have permissionsAPI user does not have the authorization to make requests to the account ID. For an authorization request, follow the authorization request steps