Account Level Report
Introduction
This endpoint enables Retail Media DSP partners to request flexible reporting at the account level. This expands on existing Line Item and Campaign report capabilities by allowing reporting across one or more Account IDs, up to five at a time.
The endpoint supports asynchronous report generation and provides access to the same set of metrics and dimensions .
You can find the list of DSP endpoints available for the
stable
version here: Demand Side Analytics Endpoints.
Filter Parity This endpoint supports the same filters as the Campaign and Line Item endpoints, with one key difference: it introduces the
accountIds
attribute, allowing up to 5 account IDs per request for account-level reporting.
Endpoint
Verb | Endpoint | Description |
---|---|---|
POST | /preview/retail-media/reports/accounts | Request a flexible reporting at the account level |
Reporting Asynchronous Workflow
- First, create a request for the account report with the desired attributes,
- This generates a
reportId
representing the report.- Next, use the
reportId
to poll the report status endpoint until one is successfully computed (available in Stable).- Finally, download the report using the report output endpoint (available in Stable).
- Report outputs are cached for at least 1 hour before expiration. Exact expiration is indicated by the
expiresAt
field in the /status response.
Report Request Attributes
Attribute | Data Type | Description |
---|---|---|
| string | Account ID(s) of the desired report Examples:
Accepted values: single or list of string/int64 (max 5 IDs per call) Writeable? N / Nullable? N |
| enum | Accepted values: |
| enum | Report types are pre-packaged reports that allow the specification of the report breakdown. See Report Types for more details about each of them.
Accepted values: refer to Report Types page for a complete list of available values Writeable? N / Nullable? N |
| list | Dimension attributes desired for metrics breakdown for the custom report of the campaign(s) / line item(s).
Accepted values: refer to Metrics and Dimensions page for a complete list of available values Writeable? N / Nullable? N |
| list | Quantitative metrics desired in the custom report of the campaign(s) / line item(s).
Accepted values: refer to Metrics and Dimensions page for a complete list of available values Writeable? N / Nullable? N |
| date | Start date to report (inclusive) Accepted values: |
| date | End date to report (inclusive) Accepted values: |
| enum | Campaign type Accepted values: |
| string | Time zone to consider in the report Accepted values: IANA (TZ database) time zones (example: |
| enum | The post-click attribution window, defined as the maximum number of days considered between a click and a conversion for attribution; conversions are attributed to the date of conversion, not the date of click; defaults to campaign settings if omitted; must be specified if The post-click attribution window, defined as the maximum number of days considered between a click and a conversion for attribution; conversions are attributed to the date of conversion, not the date of click.
Defaults to campaign settings if omitted; must be specified if Accepted values: |
| enum | The post-view attribution window, defined as the maximum number of days considered between an impression and a conversion for attribution; conversions are attributed to the date of conversion, not the date of impression; defaults to campaign settings if omitted; must be less than or equal to The post-view attribution window, defined as the maximum number of days considered between an impression and a conversion for attribution; conversions are attributed to the date of conversion, not the date of impression.
Defaults to campaign settings if omitted; must be less than or equal to Accepted values: |
| enum | Filter on specific sales channel: online or offline Accepted values: |
| enum | Format of the report data returned Accepted values: |
| string | The match type used to associate a search term and keywords entered for the campaign. Accepted values:
|
| string | Indicates how the keyword was targeted — either manually by the user or automatically by the platform.
|
| string | Specifies the conquesting strategy used with the keyword.
|
| string | The type of creative asset used in the ad, such as Display or Video. |
(*) 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.
Create an Account Level Report

https://api.criteo.com/preview/retail-media/reports/accounts
Sample request
curl -X POST https://api.criteo.com/preview/retail-media/reports/accounts \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"data": {
"type": "AsyncAccountsReportRequest",
"attributes": {
"accountIds": ["12345", "67890"],
"reportType": "summary",
"aggregationLevel": "campaign",
"searchTermTypes": ["entered"],
"searchTermTargetings": ["automatic"],
"targetedKeywordTypes": ["generic"],
"campaignType": "all",
"salesChannel": "all",
"mediaType": "all",
"format": "json-compact",
"clickAttributionWindow": "none",
"viewAttributionWindow": "none",
"dimensions": ["date", "accountId"],
"metrics": ["impressions"],
"startDate": "2025-10-10",
"endDate": "2025-10-10",
"timezone": "UTC"
}
}
}'
import requests
url = "https://api.criteo.com/preview/retail-media/reports/accounts"
headers = {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
}
payload = {
"data": {
"type": "AsyncAccountsReportRequest",
"attributes": {
"accountIds": ["12345", "67890"],
"reportType": "summary",
"searchTermTypes": ["entered"],
"searchTermTargetings": ["automatic"],
"targetedKeywordTypes": ["generic"],
"campaignType": "all",
"salesChannel": "all",
"mediaType": "all",
"format": "json-compact",
"clickAttributionWindow": "none",
"viewAttributionWindow": "none",
"dimensions": ["date", "accountId"],
"metrics": ["impressions"],
"startDate": "2025-10-10",
"endDate": "2025-10-10",
"timezone": "UTC"
}
}
}
response = requests.post(url, headers=headers, json=payload)
print("Status Code:", response.status_code)
print("Response Body:", response.json())
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
public class CriteoAccountReport {
public static void main(String[] args) {
try {
URL url = new URL("https://api.criteo.com/preview/retail-media/reports/accounts");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Authorization", "Bearer YOUR_ACCESS_TOKEN");
conn.setRequestProperty("Content-Type", "application/json");
conn.setDoOutput(true);
String jsonInputString = """
{
"data": {
"type": "AsyncAccountsReportRequest",
"attributes": {
"accountIds": ["12345", "67890"],
"reportType": "summary",
"searchTermTypes": ["entered"],
"searchTermTargetings": ["automatic"],
"targetedKeywordTypes": ["generic"],
"campaignType": "all",
"salesChannel": "all",
"mediaType": "all",
"format": "json-compact",
"clickAttributionWindow": "none",
"viewAttributionWindow": "none",
"dimensions": ["date", "accountId"],
"metrics": ["impressions"],
"startDate": "2025-10-10",
"endDate": "2025-10-10",
"timezone": "UTC"
}
}
}
""";
try (OutputStream os = conn.getOutputStream()) {
byte[] input = jsonInputString.getBytes(StandardCharsets.UTF_8);
os.write(input, 0, input.length);
}
int responseCode = conn.getResponseCode();
System.out.println("Response Code: " + responseCode);
// Optionally read the response body here with InputStream if needed
} catch (Exception e) {
e.printStackTrace();
}
}
}
<?php
$accessToken = 'YOUR_ACCESS_TOKEN'; // Replace with your token
$apiUrl = 'https://api.criteo.com/preview/retail-media/reports/accounts';
$data = [
"data" => [
"type" => "AsyncAccountsReportRequest",
"attributes" => [
"accountIds" => ["12345", "67890"],
"reportType" => "summary",
"searchTermTypes" => ["entered"],
"searchTermTargetings" => ["automatic"],
"targetedKeywordTypes" => ["generic"],
"campaignType" => "all",
"salesChannel" => "all",
"mediaType" => "all",
"format" => "json-compact",
"clickAttributionWindow" => "none",
"viewAttributionWindow" => "none",
"dimensions" => ["date", "accountId"],
"metrics" => ["impressions"],
"startDate" => "2025-10-10",
"endDate" => "2025-10-10",
"timezone" => "UTC"
]
]
];
$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . $accessToken,
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
} else {
echo "HTTP Code: $httpCode\n";
echo "Response:\n$response";
}
curl_close($ch);
Sample response
{
"data": {
"type": "RetailMediaReportStatus",
"id": "f5a2cd3d-1e83-41b1-98b1-abcde1234567",
"attributes": {
"status": "pending",
"rowCount": null,
"fileSizeBytes": null,
"md5Checksum": null,
"createdAt": null,
"expiresAt": null,
"message": null
}
}
}
Responses
Response | Description |
---|---|
🔵 | Call executed with success
When generating a report type using the |
🔴 | Common Validation Errors
|
🔴 | Validation Error In the API, win rate metric will be available to sponsored product campaigns only. When using this metric, please specify **"title": " "detail": "Please provide either the |
🔴 | Expired or Lost Report Error The report is expired, lost, or failed to create. Re-create the report through a new request. |
Updated 3 days ago