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

# Account Level Report

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

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 ](/retail-media/docs/metrics-and-dimensions#/).

<Info>
  You can find the list of DSP endpoints available for the `stable` version here: [Demand Side Analytics Endpoints](/retail-media/docs/demand-side-analytics-get-started).
</Info>

<Info>
  **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.**
</Info>

***

## Endpoint

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

      <th>
        <p>
          Endpoint
        </p>
      </th>

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

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

      <td>
        <p>
          <code>
            /preview/retail-media/reports/accounts
          </code>
        </p>
      </td>

      <td>
        <p>
          Request flexible reporting at the account level
        </p>
      </td>
    </tr>
  </tbody>
</table>

<Info>
  **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](/retail-media/docs/analytics)).
  * Finally, download the report using the **report output endpoint** (available [in Stable](/retail-media/docs/analytics)).
  * Report outputs are cached for at least 1 hour before expiration. Exact expiration is indicated by the `expiresAt` field in the /status response.
</Info>

***

## Report Request 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>
            accountIds
          </code>

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

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          Account ID(s) of the desired report
        </p>

        <p>
          Examples:
        </p>

        <p>
          <code>
            accountIds: "12345"
          </code>
        </p>

        <p>
          <code>
            accountIds: \["12345", "67890"]
          </code>
        </p>

        <p>
          Accepted values: single or list of string/int64 (max 5 IDs per call)
        </p>

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

    <tr>
      <td>
        <p>
          <code>
            aggregationLevel
          </code>
        </p>
      </td>

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

      <td>
        <p>
          Accepted values:

          <code>
            campaign
          </code>

          ,

          <code>
            lineItem
          </code>
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            reportType
          </code>
        </p>
      </td>

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

      <td>
        <p>
          Report types are pre-packaged reports that allow the specification of the report breakdown. See <a href="/retail-media/docs/report-types">Report Types</a> for more details about each of them.
        </p>

        <ul>
          <li>
            *Note*\*: when

            <code>
              metrics
            </code>

            and

            <code>
              dimensions
            </code>

            are used, the

            <code>
              reportType
            </code>

            is ignored.
          </li>
        </ul>

        <p>
          Accepted values: refer to

          <a href="/retail-media/docs/report-types#/">
            Report Types
          </a>

          page for a complete list of available values
        </p>

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

    <tr>
      <td>
        <p>
          <code>
            dimensions
          </code>
        </p>
      </td>

      <td>
        <p>
          list

          <code>
            \<enum>
          </code>
        </p>
      </td>

      <td>
        <p>
          Dimension attributes desired for metrics breakdown for the custom report of the campaign(s) / line item(s).
        </p>

        <ul>
          <li>
            *Note*: when

            <code>
              metrics
            </code>

            and

            <code>
              dimensions
            </code>

            are used, the

            <code>
              reportType
            </code>

            is automatically ignored
          </li>
        </ul>

        <p>
          Accepted values: refer to Metrics and Dimensions page for a complete list of available values
        </p>

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

    <tr>
      <td>
        <p>
          <code>
            metrics
          </code>
        </p>
      </td>

      <td>
        <p>
          list

          <code>
            \<enum>
          </code>
        </p>
      </td>

      <td>
        <p>
          Quantitative metrics desired in the custom report of the campaign(s) / line item(s).
        </p>

        <ul>
          <li>
            *Note*\*:
          </li>

          <li>
            when

            <code>
              metrics
            </code>

            and

            <code>
              dimensions
            </code>

            are used, the

            <code>
              reportType
            </code>

            is automatically ignored
          </li>

          <li>
            when including

            <code>
              winRate
            </code>

            metric, it is required to either define

            <code>
              campaignType
            </code>

            as

            <code>
              sponsoredProducts
            </code>

            or include

            <code>
              campaignTypeName
            </code>

            in the list of dimensions
          </li>
        </ul>

        <p>
          Accepted values: refer to Metrics and Dimensions page for a complete list of available values
        </p>

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

    <tr>
      <td>
        <p>
          <code>
            startDate
          </code>

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

      <td>
        <p>
          date
        </p>
      </td>

      <td>
        <p>
          Start date to report (inclusive)
        </p>

        <p>
          Accepted values:

          <code>
            YYYY-MM-DD
          </code>
        </p>

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

    <tr>
      <td>
        <p>
          <code>
            endDate
          </code>

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

      <td>
        <p>
          date
        </p>
      </td>

      <td>
        <p>
          End date to report (inclusive)
        </p>

        <p>
          Accepted values:

          <code>
            YYYY-MM-DD
          </code>
        </p>

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

    <tr>
      <td>
        <p>
          <code>
            campaignType
          </code>
        </p>
      </td>

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

      <td>
        <p>
          <a href="/retail-media/v2025.07/docs/campaign">
            Campaign
          </a>

          type
        </p>

        <p>
          Accepted values:

          <code>
            sponsoredProducts
          </code>

          ,

          <code>
            onSiteDisplays
          </code>
        </p>

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

    <tr>
      <td>
        <p>
          <code>
            timeZone
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          Time zone to consider in the report
        </p>

        <p>
          Accepted values:

          <a href="https://www.iana.org/time-zones">
            IANA (TZ database)
          </a>

          time zones (example:

          <code>
            America/New\_York
          </code>

          ,

          <code>
            Europe/Paris
          </code>

          ,

          <code>
            Asia/Tokyo
          </code>

          ,

          <code>
            UTC
          </code>

          )
        </p>

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

    <tr>
      <td>
        <p>
          <code>
            clickAttributionWindow
          </code>
        </p>
      </td>

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

      <td>
        <p>
          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

          <code>
            viewAttributionWindow
          </code>

          is one of the accepted values.
        </p>

        <p>
          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.
        </p>

        <p>
          Defaults to campaign settings if omitted; must be specified if

          <code>
            viewAttributionWindow
          </code>

          is one of the accepted values.
        </p>

        <p>
          Accepted values:

          <code>
            none
          </code>

          ,

          <code>
            7D
          </code>

          ,

          <code>
            14D
          </code>

          ,

          <code>
            30D
          </code>
        </p>

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

    <tr>
      <td>
        <p>
          <code>
            viewAttributionWindow
          </code>
        </p>
      </td>

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

      <td>
        <p>
          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

          <code>
            clickAttributionWindow
          </code>

          ; must be specified if

          <code>
            clickAttributionWindow
          </code>

          is one of the accepted values.
        </p>

        <p>
          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.
        </p>

        <p>
          Defaults to campaign settings if omitted; must be less than or equal to

          <code>
            clickAttributionWindow
          </code>

          ; must be specified if

          <code>
            clickAttributionWindow
          </code>

          is one of the accepted values.
        </p>

        <p>
          Accepted values:

          <code>
            none
          </code>

          ,

          <code>
            1D
          </code>

          ,

          <code>
            7D
          </code>

          ,

          <code>
            14D
          </code>

          ,

          <code>
            30D
          </code>
        </p>

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

    <tr>
      <td>
        <p>
          <code>
            salesChannel
          </code>
        </p>
      </td>

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

      <td>
        <p>
          Filter on specific sales channel: online or offline
        </p>

        <p>
          Accepted values:

          <code>
            online
          </code>

          ,

          <code>
            offline
          </code>
        </p>

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

    <tr>
      <td>
        <p>
          <code>
            format
          </code>
        </p>
      </td>

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

      <td>
        <p>
          Format of the report data returned
        </p>

        <p>
          Accepted values:

          <code>
            json
          </code>

          ,

          <code>
            json-compact
          </code>

          ,

          <code>
            json-newline
          </code>

          ,

          <code>
            csv
          </code>
        </p>

        <p>
          Default:

          <code>
            json
          </code>
        </p>

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

    <tr>
      <td>
        <p>
          <code>
            searchTermTypes
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          The match type used to associate a search term and keywords entered for the campaign.
        </p>

        <p>
          Accepted values:
        </p>

        <p>
          <code>
            Entered
          </code>

          : the search term matches exactly what was entered manually by the Commerce Max user
        </p>

        <p>
          <code>
            Searched
          </code>

          : the search term matches what a shopper searched on the retailer’s website.
        </p>

        <p>
          <code>
            Null
          </code>

          : All other cases, typically corresponding to automatically matched keywords.
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            searchTermTargeting
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          Indicates how the keyword was targeted — either manually by the user or automatically by the platform.
        </p>

        <p>
          <code>
            Manual targeting
          </code>

          : The search term matches a keyword entered in Commerce Max or a variation created via stemming.
        </p>

        <p>
          <code>
            Automatic targeting
          </code>

          : The search term was added by the automated keyword tool.
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            targetedKeywordType
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          Specifies the conquesting strategy used with the keyword.
        </p>

        <p>
          <code>
            Conquesting
          </code>

          : Targets competitors' branded keywords.
        </p>

        <p>
          <code>
            Branded
          </code>

          : Targets the advertiser’s own branded keywords.
        </p>

        <p>
          <code>
            Generic
          </code>

          : Targets neutral or non-branded keywords.
        </p>

        <p>
          <code>
            Unknown
          </code>

          : Used for keyword/product pairs without a defined conquesting type (e.g. before conquesting was implemented).
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            mediaType
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          The type of creative asset used in the ad, such as Display or Video.
        </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>

***

## Create an Account Level Report

<EndpointBadge method="post">
  ```http theme={null}
  https://api.criteo.com/preview/retail-media/reports/accounts
  ```
</EndpointBadge>

### Sample request

<CodeGroup>
  ```bash cURL theme={null}
  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"
        }
      }
    }'
  ```

  ```python Python expandable theme={null}
  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())

  ```

  ```java Java expandable theme={null}
  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 PHP expandable theme={null}
  <?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);

  ```
</CodeGroup>

### Sample response

```json theme={null}
{
  "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

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

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

  <tbody>
    <tr>
      <td>
        <p>
          🔵

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

      <td>
        <p>
          Call executed with success
        </p>

        <ul>
          <li>
            *Report Type has been ignored*\* - Report Type has been ignored since Dimensions and Metrics has been provided. Please remove them if you want to use one of the templates.
          </li>
        </ul>

        <p>
          When generating a report type using the

          <code>
            metrics
          </code>

          and

          <code>
            dimensions
          </code>

          filters for multi dimension reporting, a warning message will be presented in the

          <code>
            200
          </code>

          to inform that

          <code>
            reportType
          </code>

          is ignored. This is because multi dimension takes priority in this scenario.
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          🔴

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

      <td>
        <p>
          Common Validation Errors
        </p>

        <ul>
          <li>
            <b>
              <code>
                endDate
              </code>

              cannot be more than 100 days from

              <code>
                startDate
              </code>
            </b>

            * Using a date range with more than 100 days apart
          </li>

          <li>
            <b>
              <code>
                reportType
              </code>

              invalid
            </b>

            * calling an unsupported

            <code>
              report type
            </code>

            will throw a 400 error
          </li>

          <li>
            <b>
              <code>
                timeZone
              </code>

              must be a valid timezone
            </b>

            * using a time zone value that is not listed in the list tz database time zones
          </li>

          <li>
            <b>
              format invalid
            </b>

            * using an unsupported file format
          </li>
        </ul>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          🔴

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

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

        <p>
          In the API, win rate metric will be available to sponsored product campaigns only. When using this metric, please specify

          <code>
            campaignTypeName
          </code>

          in the list of dimensions to obtain a value
        </p>

        <p>
          <b>
            "title": "

            <code>
              WinRate
            </code>

            metric is only supported for Sponsored Products campaigns.",
          </b>
        </p>

        <p>
          <b>
            "detail": "Please provide either the

            <code>
              campaignTypeName
            </code>

            in dimensions or filter on

            <code>
              SponsoredProducts
            </code>

            using the

            <code>
              campaignType
            </code>

            filter."
          </b>
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          🔴

          <code>
            410
          </code>
        </p>
      </td>

      <td>
        <p>
          Expired or Lost Report Error
        </p>

        <p>
          The report is expired, lost, or failed to create. Re-create the report through a new request.
        </p>
      </td>
    </tr>
  </tbody>
</table>

## What's next

* [Metrics & Dimensions](/retail-media/v2026-preview/docs/metrics-dimensions)
