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 and Line Items with specific configurations.

Endpoint

MethodEndpointDescription
GET/accounts/{accountId}/retailersGet all retailers
GET/retailers/{retailerId}/pagesGet all pages types from specific retailer

Retailer Attributes

AttributeData TypeDescription
idstringRetailer ID, generated internally by Criteo

Accepted values: string of int64
Writeable? N / Nullable? N
namestringRetailer name, arbitrary and defined during retailer integration phase

Accepted values: up to 100-chars string
Writeable? Y / Nullable? N
campaignEligibilitieslistType(s) of campaigns that are supported on each retailer. It's dependent on their current technical integration and other business conditions

Accepted values: auction, preferred, offsite, offsitecpc
Writeable? N / Nullable? N

📘

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.

Retailer Page Type Attributes

AttributeData TypeDescription
retailerIdstringRetailer ID, generated internally by Criteo

Accepted values: string of int64
Writeable? N / Nullable? N
pageTypeslistPage types available in the associated Retailer

Accepted values:
* Home
* Search
* Category
* ProductDetail
* Merchandising
* Deals
* Favorites
* SearchBar
* CategoryMenu
* Checkout
* Confirmation

Writeable? N / Nullable? N

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

https://api.criteo.com/{version}/retail-media/accounts/{accountId}/retailers

📘

API reference

You can find this endpoint in the API reference as well.

Sample Request

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>"
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)
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
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();
}

Sample Response

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

https://api.criteo.com/{version}/retail-media/retailers/{retailerId}/pages

Sample Response

curl -L -X GET "https://api.criteo.com/{version}/retail-media/retailers/1234/pages" \
  -H 'Accept: application/json' \
  -H "Authorization: Bearer <MY_ACCESS_TOKEN>"
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)
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
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();
}

Sample Response

{
    "pageTypes": [
        "Home",
        "Search",
        "Category",
        "ProductDetail",
        "Merchandising",
        "Deals",
        "Checkout",
        "Confirmation"
    ]
}

Responses

ResponseDescription
🟢 200Call executed with success
🔴 403API user does not have the authorization to make requests to the account ID. For an authorization request, follow the authorization request steps