## Introduction

This endpoint enables Retail Media DSP partners to request flexible reporting at the **account** level. This expands on existing Line Item and Campaign reporting 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](https://developers.criteo.com/retail-media/docs/metrics-and-dimensions#/).

You can find the list of DSP endpoints available here: [Demand Side Analytics Endpoints](https://developers.criteo.com/retail-media/docs/demand-side-analytics-get-started).

**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. It also only supports date ranges of up to **31 days at a time.**

* * *

## Endpoint

| Verb | Endpoint | Description |
| --- | --- | --- |
| **POST** | `/retail-media/reports/accounts` | Request 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.
- Finally, download the report using the **report output endpoint**.
- 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 |
| --- | --- | --- |
| `accountIds`* | string | Account ID(s) of the desired report<br>Examples: `accountIds: "12345"` `accountIds: ["12345", "67890"]`<br>When a supply account ID is included, other IDs in the request will be ignored. The report will include Commerce Max retailer-billed campaigns in addition to the campaigns running on that account. Use `budgetModel` to separate campaign types within the same report.<br>Accepted values: single or list of string/int64 (max 5 IDs per call) Writeable? N / Nullable? N |
| `aggregationLevel` | enum | Accepted values: `campaign`, `lineItem` |
| `reportType` | enum | Report types are pre-packaged reports that allow the specification of the report breakdown. See [Report Types](https://developers.criteo.com/retail-media/docs/report-types) for more details about each of them.<br>- _Note_*: when `metrics` and `dimensions` are used, the `reportType` is ignored.<br>Accepted values: refer to Report Types page for a complete list of available values Writeable? N / Nullable? N |
| `dimensions` | list<enum> | Dimension attributes desired for metrics breakdown for the custom report of the campaign(s) / line item(s).<br>- _Note_: when `metrics` and `dimensions` are used, the `reportType` is automatically ignored<br>Accepted values: refer to Metrics and Dimensions page for a complete list of available values Writeable? N / Nullable? N |
| `metrics` | list<enum> | Quantitative metrics desired in the custom report of the campaign(s) / line item(s).<br>- _Note_*:<br>- when `metrics` and `dimensions` are used, the `reportType` is automatically ignored<br>- when including `winRate` metric, it is required to either define `campaignType` as `sponsoredProducts` or include `campaignTypeName` in the list of dimensions<br>Accepted values: refer to Metrics and Dimensions page for a complete list of available values Writeable? N / Nullable? N |
| `startDate`* | date | Start date to report (inclusive)<br>Accepted values: `YYYY-MM-DD` Writeable? N / Nullable? N |
| `endDate`* | date | End date to report (inclusive)<br>Accepted values: `YYYY-MM-DD` Writeable? N / Nullable? N |
| `campaignType` | enum | Campaign type<br>Accepted values: `sponsoredProducts`, `onSiteDisplays` Writeable? N / Nullable? N |
| `timeZone` | string | Time zone to consider in the report<br>Accepted values: [IANA (TZ database)](https://www.iana.org/time-zones) time zones (example: `America/New_York`, `Europe/Paris`, `Asia/Tokyo`, `UTC`) Writeable? N / Nullable? Y |
| `clickAttributionWindow` | 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 `viewAttributionWindow` is one of the accepted values.<br>Accepted values: `none`, `7D`, `14D`, `30D` Writeable? N / Nullable? Y |
| `viewAttributionWindow` | 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 `clickAttributionWindow`; must be specified if `clickAttributionWindow` is one of the accepted values.<br>Accepted values: `none`, `1D`, `7D`, `14D`, `30D` Writeable? N / Nullable? Y |
| `salesChannel` | enum | Filter on specific sales channel: online or offline<br>Accepted values: `online`, `offline` Writeable? N / Nullable? Y |
| `format` | enum | Format of the report data returned<br>Accepted values: `json`, `json-compact`, `json-newline`, `csv` Default: `json` Writeable? N / Nullable? N |
| `searchTermTypes` | string | The match type used to associate a search term and keywords entered for the campaign.<br>Accepted values: `Entered`: exact match, `Searched`: matches what a shopper searched, `Null`: All other cases. |
| `searchTermTargeting` | string | Indicates how the keyword was targeted — either manually by the user or automatically by the platform. | 
| `targetedKeywordType` | string | Specifies the conquesting strategy used with the keyword. | 
| `mediaType` | string | The type of creative asset used in the ad, such as Display or Video. |
| `budgetModels` | [string] | Identifies the funding source for the campaign’s media spend. Values: `CriteoBudget`, `RetailerBudget` |
| `activationPlatforms` | [string] | Platform through which the campaign was activated<br>Values: `CommerceMax`, `PrivateMarket` |

_(*) Required_

## Create an Account Level Report

### Sample request

cURL

```
curl -X POST https://api.criteo.com/{version}/retail-media/reports/accounts \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "data": {
    "attributes": {
      "accountIds": [\
        "505471171905413120"\
      ],
      "startDate": "2026-05-01",
      "endDate": "2026-05-28",
      "aggregationLevel": "campaign",
      "campaignType": "all",
      "format": "csv",
      "mediaType": "all",
      "reportType": "summary",
      "salesChannel": "all",
      "timezone": "UTC",
      "budgetModels": ["RetailerBudget"],
      "activationPlatforms": ["CommerceMax"]
    },
    "type": "<string>"
  }
}'
```

### Sample response

```
{
    "data": {
        "attributes": {
            "status": "success",
            "rowCount": 20,
            "fileSizeBytes": 2655,
            "md5CheckSum": "18796a1e29c0f94ac63a709a9adb4bb9",
            "createdAt": "2026-06-02T14:34:09.000Z",
            "expiresAt": "2026-06-09T14:34:50.000Z",
            "message": "rows_count=20",
            "id": "acc33cef-b36e-4eaf-a421-58078ef3f071"
        },
        "id": "acc33cef-b36e-4eaf-a421-58078ef3f071",
        "type": "StatusResponse"
    },
    "warnings": [],
    "errors": []
}
```

## Responses

| Response | Description |
| --- | --- |
| 🔵`200` | Call executed with success<br>- _Report Type has been ignored_\* - Report Type has been ignored since Dimensions and Metrics have been provided. Please remove them if you want to use one of the templates.<br>When generating a report type using the `metrics` and `dimensions` filters for multi dimension reporting, a warning message will be presented in the `200` to inform that `reportType` is ignored. This is because multi dimension takes priority in this scenario. |
| 🔴`400` | Common Validation Errors<br>- **`endDate` cannot be more than 100 days from `startDate`**<br>- Using a date range with more than 100 days apart<br>- **`reportType` invalid**<br> - calling an unsupported<br>`report type` will throw a 400 error<br>- **`timeZone` must be a valid timezone**<br>- using a time zone value that is not listed in the list tz database time zones<br>- **format invalid**<br>- using an unsupported file format | 
| 🔴`410` | Expired or Lost Report Error<br>The report is expired, lost, or failed to create. Re-create the report through a new request.
