# Reporting Suite API V3 — Developer Guide

- **Applies to:** Sprinklr Reporting Suite APIs V3
- **V2 API reference:** [Reporting Suite APIs | Sprinklr Developer Portal](https://dev.sprinklr.com/reporting-suite)


## 1. Overview

Sprinklr’s Reporting Suite APIs standardize data extraction through a predefined set of metrics and dimensions across all channels.
A reporting suite is essentially a master template for analytics exports, ensuring consistency, efficiency, and reliability in how performance data is captured and shared.

## Why Reporting Suites Matter

Brands often struggle to gain a complete view of campaign performance.
They pull separate reports for each channel, repeat the process for every update, and manually export data for compliance.
At the same time, reporting needs to evolve with campaigns, yet there is no simple way to sync data with internal systems.
The Reporting Suite addresses these challenges with a unified, automated, and customizable framework for reporting.

## Types of Reporting Suites

Sprinklr offers two types of reporting suites:

### Standard Reporting Suites

These are pre-built reporting suites for common use cases and are ready to use immediately.

### Custom Reporting Suites

These are custom reporting suites that are customized according to your requirements.
You can create these from scratch or clone a standard suite and modify it according to your needs.
These are useful for industry-specific metrics, custom calculations, unique dimension combinations, and special export formats.

**Reporting Suite V3 exposes full CRUD across multiple resource paths:**

| Operation | Method | Path |
|  --- | --- | --- |
| Create suite | `POST` | `/api/v3/reportingSuite/suite` |
| Search suites | `POST` | `/api/v3/reportingSuite/suite/search` |
| Create export config | `POST` | `/api/v3/reportingSuite/exportConfig` |
| Search export configs | `POST` | `/api/v3/reportingSuite/exportConfig/search` |
| Update suite (partial) | `PATCH` | `/api/v3/reportingSuite/suite?entityId=` |
| Update export config | `PATCH` | `/api/v3/reportingSuite/exportConfig?entityId=` |
| Get suite by ID | `GET` | `/api/v3/reportingSuite/suite?entityId=` |
| Get export config by ID | `GET` | `/api/v3/reportingSuite/exportConfig?entityId=` |
| Fetch field mappings | `GET` | `/api/v3/reportingSuite/fieldMappings?moduleType=&breakdownType=` |
| Delete suite | `DELETE` | `/api/v3/reportingSuite/suite?entityId=` |
| Delete export config | `DELETE` | `/api/v3/reportingSuite/exportConfig?entityId=` |


## 2. Base URLs and environments

All API calls are sent to the production endpoint:

```
https://api3.sprinklr.com/{env}/api/v3
```

So the reporting suite resource in production is:

```
https://api3.sprinklr.com/{env}/api/v3/reportingSuite
```

Replace `{env}` with your assigned environment identifier. The specification declares the `env` server variable with default `prod` and the following enumerated values:

`prod`, `prod0`, `prod2`, `prod3`, `prod4`, `prod5`, `prod6`, `prod8`, `prod11`, `prod12`, `prod15`, `prod16`, `prod17`, `prod18`, `prod19`, `prod21`, `prod25`

See [APIs | Sprinklr Developer Portal](https://dev.sprinklr.com/apis) for the published environment list.

## 3. Authentication and common headers

All Reporting Suite API calls are authenticated with OAuth 2.0. See [API Overview](https://dev.sprinklr.com/api-overview) for portal registration, API key and secret generation, and the Authorize flow.

| Header | Value | Purpose | Required on |
|  --- | --- | --- | --- |
| `Authorization` | `Bearer {{accessToken}}` | Authenticates the user with the server | All requests |
| `Key` | `{{apiKey}}` | Authenticates the application with the server | All requests |
| `Content-Type` | `application/json` | Declares the request body media type | `POST`, `PUT`, `PATCH` |
| `Accept` | `application/json` | Declares the acceptable response type | All requests |


## 4. Write operations

### 4.1 Create a reporting suite

**`POST /api/v3/reportingSuite/suite`**

Creates a custom reporting suite to standardize analytics exports. You can define specific metrics and dimensions or clone a standard suite and extend it with additional fields, such as LinkedIn-specific metrics.

#### Request body parameters

| **Parameter** | **Required / Optional** | **Description** | **Type** |
|  --- | --- | --- | --- |
| `name` | Optional | Name of the reporting suite. | String |
| `description` | Optional | Description of the suite’s purpose. | String |
| `moduleType` | Required | Module type for the suite.**Supported Values:** `PAID`, `REPORTING`, `LISTENING`, `MESSAGE` | String |
| `breakdownType` | Required | Type of data breakdown. Must match the breakdownType of the standard reporting suite being cloned.**Supported Values:** See the breakdownType Values table below. | String |
| `baseReportingSuite` | Optional | ID of a standard suite to clone. If not specified, a new custom suite is created without cloning. | String |
| `dimensions` | Optional | List of dimension names to include. Values must be obtained from the Field Mappings API for the chosen `moduleType` and `breakdownType`.**Example:** `["budget", "adFormat"]` | Array |
| `measurements` | Optional | List of measurement names to include. Values must be obtained from the Field Mappings API for the chosen `moduleType` and `breakdownType`.**Example:** `["conversionRate", "reach"]` | Array |


**breakdownType Values**

| **moduleType** | **Supported breakdownType values** |
|  --- | --- |
| **PAID** | **Facebook:** `FACEBOOK_AD_SET`, `FACEBOOK_AD_VARIANT`, `FACEBOOK_AGE_GENDER`, `FACEBOOK_COUNTRY`, `FACEBOOK_DESTINATION`, `FACEBOOK_DMA`, `FACEBOOK_PAID_INITIATIVE`, `FACEBOOK_PLATFORM_POSITION`, `FACEBOOK_PRODUCT`, `FACEBOOK_REGION`**Google:** `GOOGLE_AD_AGE_RANGE`, `GOOGLE_AD_SET`, `GOOGLE_AD_VARIANT`, `GOOGLE_DEVICE`, `GOOGLE_GENDER`, `GOOGLE_GEO`, `GOOGLE_GEO_COUNTRY`, `GOOGLE_KEYWORD_STAT`, `GOOGLE_PAID_INITIATIVE`, `GOOGLE_PLACEMENT`, `GOOGLE_SEARCH_QUERY`, `GOOGLE_VIDEO`**LinkedIn:** `LINKEDIN_AD_SET`, `LINKEDIN_AD_VARIANT`, `LINKEDIN_COMPANY`, `LINKEDIN_COUNTRY`, `LINKEDIN_INDUSTRY`, `LINKEDIN_JOB_TITLE`, `LINKEDIN_PAID_INITIATIVE`**Snapchat:** `SNAPCHAT_AD_SET`, `SNAPCHAT_AD_VARIANT`, `SNAPCHAT_AGE`, `SNAPCHAT_COUNTRY`, `SNAPCHAT_DMA`, `SNAPCHAT_GENDER`, `SNAPCHAT_INTEREST`, `SNAPCHAT_MAKE`, `SNAPCHAT_OS`, `SNAPCHAT_PAID_INITIATIVE`, `SNAPCHAT_PRODUCT`, `SNAPCHAT_REGION`**TikTok:** `TIKTOK_AD_SET`, `TIKTOK_AD_TYPE`, `TIKTOK_AD_VARIANT`, `TIKTOK_AGE`, `TIKTOK_COUNTRY`, `TIKTOK_DMA`, `TIKTOK_GENDER`, `TIKTOK_INTEREST`, `TIKTOK_LANGUAGE`, `TIKTOK_PAID_INITIATIVE`, `TIKTOK_PLACEMENT`, `TIKTOK_PLATFORM`, `TIKTOK_PRODUCT`**X (Twitter Ads):** `X_AD_SET`, `X_AD_VARIANT`, `X_AGE`, `X_AUCTION`, `X_EVENTS`, `X_GENDER`, `X_INTEREST`, `X_KEYWORD`, `X_LOCATION`, `X_PAID_INITIATIVE`, `X_PLATFORM` |
| **REPORTING** | `CASE`, `FACEBOOK_PAGE_*`, `FACEBOOK_POST_*`, `INSTAGRAM_*`, `LINKEDIN_*`, `SNAPCHAT_*`, `TIKTOK_*`, `TWITTER_*`, `YOUTUBE_*` |
| **LISTENING** | `RESEARCH_INSIGHTS` |
| **MESSAGE** | `MESSAGE` |


#### Request

```bash
curl --location --request POST 'https://api3.sprinklr.com/{env}/api/v3/reportingSuite/suite' \
--header 'Authorization: Bearer {Access Token}' \
--header 'Key: {API KEY}' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data '{
  "name": "Custom Facebook Initiative Suite",
  "description": "Analyzes Facebook Initiative performance",
  "breakdownType": "FACEBOOK_PAID_INITIATIVE",
  "moduleType": "PAID",
  "dimensions": ["paidInitiativeName", "currency"],
  "measurements": ["clicks", "impressions", "spent"]
}'
```

### 4.2 Search reporting suites

**`POST /api/v3/reportingSuite/suite/search`**

Searches for reporting suites with filters and pagination. You can filter results by suite type, module type, or other suite properties, and manage output using pagination.

#### Request body parameters

| **Parameter** | **Required / Optional** | **Description** | **Type** |
|  --- | --- | --- | --- |
| query | Required | Defines search criteria, including pagination, filters, and whether to return total counts. | Object |


#### query Object

| **Parameter** | **Sub-Parameter** | **Required / Optional** | **Description** | **Type** |
|  --- | --- | --- | --- | --- |
| page |  | Optional | Parent object for pagination settings | Object |
|  | page | Optional | Page number to retrieve (0-based index). Example: `0`, `1`, `2` | Number |
|  | size | Optional | Number of results per page. Example: `50`, `100` | Number |
| filter |  | Optional | Object containing filter details for narrowing down suites | Object |
|  | filterType | Required | Type of filter operation. Supported: `AND`, `OR`, `NOT`, `IN`, `GT`, `GTE`, `LT`, `LTE`, `NIN`, `EQUALS`, `NOT_EQUALS`, `CONTAINS` | String |
|  | field | Required | Field name to filter on. Supported: `suiteType` (`STANDARD`, `CUSTOM`), `name`, `moduleType`, `breakdownType`, `baseReportingSuite`, `deleted`, `ownerUserId`, etc. | String |
|  | values | Required | Value(s) to match against the field. Single string or array of values | String / Array |
| returnTotalCount |  | Optional | Whether to include total count of matching results. Supported: `true`, `false` | Boolean |


#### Request

```bash
curl --location --request POST 'https://api3.sprinklr.com/{env}/api/v3/reportingSuite/suite/search' \
  -H 'Authorization: Bearer {Enter your Access Token}' \
  -H 'Key: {Enter your API KEY}' \
  -H 'Content-Type: application/json' \
  -H 'accept: application/json'
--data '{
    "query": {
        "page": {
            "page": 0,
            "size": 10
        },
        "filter": {
            "filterType": "EQUALS",
            "field": "suiteType",
            "values": "STANDARD"
        },
        "returnTotalCount": true
    },
    "searchStr": ""
}'
```

### 4.3 Create export config

**`POST /api/v3/reportingSuite/exportConfig`**

Creates a new export configuration for a reporting suite. Supports both **one‑time** and **scheduled exports**, allowing automated delivery of reporting data to an external S3 storage location. You can customize exports by defining filters, specifying date ranges, and configuring schedules.

#### Request body parameters

| **Parameter** | **Required / Optional** | **Description** | **Type** |
|  --- | --- | --- | --- |
| name | Required | Name of the export configuration | String |
| reportingSuite | Required | ID of the associated reporting suite.Obtain this ID from suite creation or search.**Example:** `67a3494047906e5dd61ae727` | String |
| exportType | Required | Type of export.**Supported Values:** `ONE_TIME`, `SCHEDULED` | String |
| externalStorageId | Optional | ID of the S3 storage location where the export will be delivered.**Example:** `67a4af1dd2643eb564239265` | String |
| timeRangeFilter | Optional | Defines the date range for the export. See **timeRangeFilter Object** below. | Object |
| scheduleConfig | Optional | Configuration for recurring exports. See **scheduleConfig Object** below. | Object |
| filters | Optional | List of filters to apply to the export data. See **filters Object** below. | Array of Objects |


#### timeRangeFilter Object

| **Parameter** | **Sub-Parameter** | **Required / Optional** | **Description** | **Type** |
|  --- | --- | --- | --- | --- |
| startTime |  | Optional | Start timestamp for one-time exports (epoch ms).**Example:** `1735705800000` | Number |
| endTime |  | Optional | End timestamp for one-time exports (epoch ms).**Example:** `1738211400000` | Number |
| timeRange |  | Optional | Date range preset for scheduled exports.**Supported Values:** `TODAY`, `YESTERDAY`, `THIS_WEEK`, `LAST_WEEK`, `THIS_MONTH`, `LAST_MONTH`, `DYNAMIC_DURATION` | String |
| timezone |  | Optional | Free‑form IANA zone ID string.**Examples:** `UTC`, `GMT` | String |
| dynamicTimeRange |  | Optional | Object defining a dynamic duration. Contains `durationUnit`, `durationValue`, `endingValue`. | Object |
| durationUnit |  | Optional | Unit of time.**Supported Values:** `MINUTES`, `HOURS`, `DAYS`, `WEEKS`, `MONTHS`, `YEARS` | String |
| durationValue |  | Optional | Length of the dynamic duration.**Example:** `5` | Number |
| endingValue |  | Optional | Offset from current time at which duration ends.**Example:** `0` | Number |


#### scheduleConfig Object

| **Parameter** | **Sub-Parameter** | **Required / Optional** | **Description** | **Type** |
|  --- | --- | --- | --- | --- |
| scheduleFrequency |  | Optional | Defines frequency settings for scheduled exports. Contains `scheduleType` and `repeatFrequency`. | Object |
| scheduleType |  | Optional | Frequency type.**Supported Values:** `DAILY`, `MINUTES`, `HOURLY`, `WEEKLY` | String |
| repeatFrequency |  | Optional | Interval for scheduled exports.**Example:** `3` (positive integer) | Number |


#### filters Object

| **Parameter** | **Required / Optional** | **Description** | **Type** |
|  --- | --- | --- | --- |
| filterType | Optional | Type of filter.**Supported Values:** `AND`, `OR`, `NOT`, `IN`, `GT`, `GTE`, `LT`, `LTE`, `NIN`, `EQUALS`, `NOT_EQUALS`, `CONTAINS` | String |
| field | Optional | Field to filter on. Must be a valid dimension name from the suite’s field mapping.**Example:** `accountId` | String |
| values | Optional | Values to filter by.**Example:** `[12345, 23414]` | Array |


#### Request

```bash
curl --location --request POST 'https://api3.sprinklr.com/{env}/api/v3/reportingSuite/exportConfig' \
  -H 'Authorization: Bearer {Enter your Access Token}' \
  -H 'Key: {Enter your API KEY}' \
  -H 'Content-Type: application/json' \
  -H 'accept: application/json'
--data '{
    "name": "Ad Variant Schedule Export - one time",
    "reportingSuite": "6a1e8b0a259e22bdc9eb2797",
    "exportType": "ONE_TIME",
    "timeRangeFilter": {
        "startTime": 1739100163000,
        "endTime": 1739445763000,
        "timezone": "UTC"
    }
}'
```

### 4.4 Search export configs

**`POST /api/v3/reportingSuite/exportConfig/search`**

Searches for export configurations associated with reporting suites. You can filter results by export type, suite ID, or other properties, and manage output using pagination.

#### Request body parameters

| **Parameter** | **Required / Optional** | **Type** | **Description** |
|  --- | --- | --- | --- |
| query | Required | Object | Defines the search criteria, including pagination, filters, and whether to return total counts. See the **query Object** table below. |


#### query Object

| **Parameter** | **Sub-Parameter** | **Required / Optional** | **Type** | **Description** |
|  --- | --- | --- | --- | --- |
| page |  | Optional | Object | Object containing pagination details for the search results. |
|  | page | Optional | Integer | Page number to retrieve (0-based index).**Example:** `1`, `2` |
|  | size | Optional | Integer | Number of results per page.**Example:** `10`, `50`, `100` |
| filter |  | Optional | Object | Object containing filter details for narrowing down export configs. |
|  | filterType | Required | String | Type of filter operation.**Supported Values:** `AND`, `OR`, `NOT`, `IN`, `GT`, `GTE`, `LT`, `LTE`, `NIN`, `EQUALS`, `NOT_EQUALS`, `CONTAINS` |
|  | field | Required | String | Dimension or property to filter on.**Examples:** `accountId`, `ownerUserId`Other searchable properties: `exportType` (`ONE_TIME`, `SCHEDULED`), `reportingSuite`, `name`, `externalStorageId`, `deleted` |
|  | values | Required | String / Array of Strings | Value(s) to match against the chosen field. Always passed as an array, even if only one value.**Example:** `["SCHEDULED"]` |
| returnTotalCount |  | Optional | Boolean | Whether to include the total count of matching results.**Example:** `true`, `false` |


#### Request

```bash
curl --location --request POST 'https://api3.sprinklr.com/{env}/api/v3/reportingSuite/exportConfig/search' \
  -H 'Authorization: Bearer {Enter your Access Token}' \
  -H 'Key: {Enter your API KEY}' \
  -H 'Content-Type: application/json' \
  -H 'accept: application/json'
--data '{
    "query": {
        "page": {
            "page": 0,
            "size": 10
        }
    },
    "searchStr": "Schedule"
}'
```

### 4.5 Update reporting suite

**`PATCH /api/v3/reportingSuite/suite`**

Updates specific fields of an existing reporting suite. This endpoint allows you to modify suite metadata, dimensions, measurements, or filters after creation.
**Note**: Certain fields cannot be changed once the suite is created.

#### Query parameter

| **Parameter** | **Required / Optional** | **Description** | **Type** |
|  --- | --- | --- | --- |
| `entityId` | Required | Unique identifier of the reporting suite.You can obtain this from the response when creating a suite, or by searching for existing suites.**Example:** `67a3515847906e5dd61aea24` | String |


#### Request body parameters

| **Parameter** | **Required / Optional** | **Description** | **Type** |
|  --- | --- | --- | --- |
| fieldName | Required | Name of the field to update.**Supported Values:** `name`, `description`, `dimensions`, `measurements`, `filters`, `baseReportingSuite`**Dev Notes:** The following fields cannot be changed once the suite is created: `suiteType`, `deleted`. Modifying `moduleType` or `breakdownType` after suite creation is not recommended. | String |
| value | Optional | New value for the specified field. | Object / String |
| op | Required | Operation to perform on the field.**Supported Values:** `SET`, `UNSET`, `INC`, `DEC`, `INCREMENT_BY`, `DECREMENT_BY`, `ADD`, `REMOVE`, `PUSH`, `MERGE`, `SET_IF_ABSENT` | String |


#### Request

```bash
curl --location --request PATCH 'https://api3.sprinklr.com/{env}/api/v3/reportingSuite/suite?entityId=6a1e6c3c259e22bdc9eb1c59' \
  -H 'Authorization: Bearer {Enter your Access Token}' \
  -H 'Key: {Enter your API KEY}' \
  -H 'Content-Type: application/json' \
  -H 'accept: application/json'
--data '{
    "updateFields": {
        "op": "SET",
        "fieldName": "dimensions",
        "value": [
            "linkedinMemberCompanyId",
            "linkedinCompany",
            "LinkedIn"
        ]
    }
}'
```

### 4.6 Update export config

**`PATCH /api/v3/reportingSuite/exportConfig`**

Updates specific fields of an existing export configuration. This endpoint allows you to modify export settings such as filters, schedules, storage location, or time ranges after creation.

#### Query parameter

| **Parameter** | **Required / Optional** | **Description** | **Type** |
|  --- | --- | --- | --- |
| `entityId` | Required | Unique identifier of the export config.**Example:** `67a3515847906e5dd61aea24` | String |


#### Request body parameters

| **Parameter** | **Required / Optional** | **Description** | **Type** |
|  --- | --- | --- | --- |
| fieldName | Required | Name of the field to update.**Supported Values:** `timeRangeFilter`, `name`, `filters`, `scheduleConfig`, `externalStorageId`, `exportType` | String |
| value | Required | New value for the specified field.**Example:** `{"startTime": 1735705800000, "endTime": 1738211400000, "timezone": "GMT"}` | Object / String |
| op | Required | Operation to perform on the field.**Supported Values:** `SET`, `UNSET`, `INC`, `DEC`, `INCREMENT_BY`, `DECREMENT_BY`, `ADD`, `REMOVE`, `PUSH`, `MERGE`, `SET_IF_ABSENT` | String |


#### Request

```bash
curl --location --request PATCH 'https://api3.sprinklr.com/{env}/api/v3/reportingSuite/exportConfig?entityId=6a1e8bcb259e22bdc9eb27d6' \
  -H 'Authorization: Bearer {Enter your Access Token}' \
  -H 'Key: {Enter your API KEY}' \
  -H 'Content-Type: application/json' \
  -H 'accept: application/json'
--data '{
    "updateFields": {
        "op": "SET",
        "fieldName": "name",
        "value": "update export suite config"
    }
}'
```

## 5. Read operations

### 5.1 Read field mappings

**`GET /api/v3/reportingSuite/fieldMappings`**

Retrieves immutable field mappings used to define metrics and dimensions in reporting suites. These mappings standardize data extraction across channels, supporting the creation of custom reporting suites by providing available dimensions (for example, campaignName) and measurements (for example, clicks).

#### Query parameters

| **Parameter** | **Required / Optional** | **Description** | **Type** |
|  --- | --- | --- | --- |
| `moduleType` | Required | Specifies the module type for the mappings.**Supported Values:** `PAID`, `REPORTING`, `LISTENING`, `MESSAGE` | String |
| `breakdownType` | Optional | Filters mappings by a specific breakdown type. If not specified, the API returns all mappings for the given `moduleType`.**Supported Values:** See breakdownType table below. | String |


#### breakdownType Values

| **moduleType** | **Supported breakdownType values** |
|  --- | --- |
| **PAID** | **Facebook:** `FACEBOOK_AD_SET`, `FACEBOOK_AD_VARIANT`, `FACEBOOK_AGE_GENDER`, `FACEBOOK_COUNTRY`, `FACEBOOK_DESTINATION`, `FACEBOOK_DMA`, `FACEBOOK_PAID_INITIATIVE`, `FACEBOOK_PLATFORM_POSITION`, `FACEBOOK_PRODUCT`, `FACEBOOK_REGION`**Google:** `GOOGLE_AD_AGE_RANGE`, `GOOGLE_AD_SET`, `GOOGLE_AD_VARIANT`, `GOOGLE_DEVICE`, `GOOGLE_GENDER`, `GOOGLE_GEO`, `GOOGLE_GEO_COUNTRY`, `GOOGLE_KEYWORD_STAT`, `GOOGLE_PAID_INITIATIVE`, `GOOGLE_PLACEMENT`, `GOOGLE_SEARCH_QUERY`, `GOOGLE_VIDEO`**LinkedIn:** `LINKEDIN_AD_SET`, `LINKEDIN_AD_VARIANT`, `LINKEDIN_COMPANY`, `LINKEDIN_COUNTRY`, `LINKEDIN_INDUSTRY`, `LINKEDIN_JOB_TITLE`, `LINKEDIN_PAID_INITIATIVE`**Snapchat:** `SNAPCHAT_AD_SET`, `SNAPCHAT_AD_VARIANT`, `SNAPCHAT_AGE`, `SNAPCHAT_COUNTRY`, `SNAPCHAT_DMA`, `SNAPCHAT_GENDER`, `SNAPCHAT_INTEREST`, `SNAPCHAT_MAKE`, `SNAPCHAT_OS`, `SNAPCHAT_PAID_INITIATIVE`, `SNAPCHAT_PRODUCT`, `SNAPCHAT_REGION`**TikTok:** `TIKTOK_AD_SET`, `TIKTOK_AD_TYPE`, `TIKTOK_AD_VARIANT`, `TIKTOK_AGE`, `TIKTOK_COUNTRY`, `TIKTOK_DMA`, `TIKTOK_GENDER`, `TIKTOK_INTEREST`, `TIKTOK_LANGUAGE`, `TIKTOK_PAID_INITIATIVE`, `TIKTOK_PLACEMENT`, `TIKTOK_PLATFORM`, `TIKTOK_PRODUCT`**X (Twitter Ads):** `X_AD_SET`, `X_AD_VARIANT`, `X_AGE`, `X_AUCTION`, `X_EVENTS`, `X_GENDER`, `X_INTEREST`, `X_KEYWORD`, `X_LOCATION`, `X_PAID_INITIATIVE`, `X_PLATFORM` |
| **REPORTING** | `CASE`, `FACEBOOK_PAGE_*`, `FACEBOOK_POST_*`, `INSTAGRAM_*`, `LINKEDIN_*`, `SNAPCHAT_*`, `TIKTOK_*`, `TWITTER_*`, `YOUTUBE_*` |
| **LISTENING** | `RESEARCH_INSIGHTS` |
| **MESSAGE** | `MESSAGE` |


#### Request

```bash
curl --location --request GET 'https://api3.sprinklr.com/{env}/api/v3/reportingSuite/fieldMappings?moduleType=PAID&breakdownType=FACEBOOK_COUNTRY' \
  -H 'Authorization: Bearer {Enter your Access Token}' \
  -H 'Key: {Enter your API KEY}' \
  -H 'Content-Type: application/json' \
  -H 'accept: application/json'
```

### 5.2 Read reporting suite

**`GET /api/v3/reportingSuite/suite`**

Retrieves detailed information about a specific reporting suite using its unique identifier. This endpoint is useful for inspecting the configuration of a suite, including its dimensions, measurements, and metadata, after creation or modification.

#### Query parameter

| **Parameter** | **Required / Optional** | **Description** | **Type** |
|  --- | --- | --- | --- |
| `entityId` | Required | Unique identifier of the reporting suite.You can obtain this ID from the response when you create a suite or when you search for suites.**Example:** `67a3494047906e5dd61ae727` | String |


#### Request

```bash
curl --location --request GET 'https://api3.sprinklr.com/{env}/api/v3/reportingSuite/suite?entityId=6a97b9e25efb429a803919be'
```

### 5.3 Read reporting suite export config

**`GET /api/v3/reportingSuite/fieldMappings`**

Retrieves detailed information about a specific export configuration using its unique identifier. This endpoint allows users to inspect export settings, such as filters, schedules, and storage details, for auditing or modification purposes.

#### Query parameter

| **Parameter** | **Required / Optional** | **Description** | **Type** |
|  --- | --- | --- | --- |
| `entityId` | Required | Unique identifier of the reporting suite.You can obtain this ID from the response when you create a suite or when you search for suites.**Example:** `67a3494047906e5dd61ae727` | String |


#### Request

```bash
curl --location --request GET 'https://api3.sprinklr.com/{env}/api/v3/reportingSuite/exportConfig?entityId=6a97bac05efb429a803919c5' \
  -H 'Authorization: Bearer {Enter your Access Token}' \
  -H 'Key: {Enter your API KEY}' \
  -H 'Content-Type: application/json' \
  -H 'accept: application/json'
```

### 5.4 Read export run status

**`POST /api/v3/reportingSuite/exportStatus/`**

Retrieves the status of export runs for a specific export configuration, including whether they are completed and providing download URLs for finished exports. This endpoint monitors queued or scheduled export processes managed by Sprinklr.

#### Query Parameter

| **Parameter** | **Required / Optional** | **Description** | **Type** |
|  --- | --- | --- | --- |
| `exportConfigId` | Required | Unique identifier of the export config.**Example:** `67a34bbe47906e5dd61ae7a4` | String |


#### Request body parameters

| **Parameter** | **Sub-Parameter** | **Required / Optional** | **Description** | **Type** |
|  --- | --- | --- | --- | --- |
| `page` | — | Required | Parent object for pagination settings | Object |
| `page` | page | Required | Page number for pagination.**Example:** `0`, `1`, `2` (non‑negative integers) | Number |
| `page` | size | Required | Number of items per page.**Example:** `10` (positive integers) | Number |
| `returnTotalCount` | — | Required | Whether to include total count of items.**Example:** `true`, `false` | Boolean |


#### Example Request

```bash
curl --location --request POST 'https://api3.sprinklr.com/{env}/api/v3/reportingSuite/exportStatus/?exportConfigId=6a1e8bcb259e22bdc9eb27d6' \
--header 'Authorization: Bearer {Access Token}' \
--header 'Key: {API KEY}' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data '{
    "query": {
        "page": {
            "page": 0,
            "size": 10
        },
        "returnTotalCount": true
    }
}'
```

## 6. Delete operations

### 6.1 Delete reporting suite

**`DELETE /api/v3/reportingSuite/suite`**

Deletes a specified reporting suite. This is useful for cleaning up unused or obsolete suites, ensuring only relevant configurations remain active.

#### Query parameter

| **Parameter** | **Required / Optional** | **Description** | **Type** |
|  --- | --- | --- | --- |
| `{entityId}` | Required | Unique identifier of the reporting suite.You can obtain this from the response when creating a suite, or by searching for existing suites.**Example:** `67a3515847906e5dd61aea24` | String |


#### Request

```bash
curl --location --request DELETE 'https://api3.sprinklr.com/{env}/api/v3/reportingSuite/suite?entityId=6a97a6615efb429a80391526' \
  -H 'Authorization: Bearer {Enter your Access Token}' \
  -H 'Key: {Enter your API KEY}' \
  -H 'Content-Type: application/json' \
  -H 'accept: application/json'
```

### 6.2 Delete export config

**`DELETE /api/v3/reportingSuite/exportConfig`**

Deletes a specified export configuration, stopping any associated scheduled exports and removing it from the system. This endpoint helps manage export configurations by eliminating obsolete or unnecessary ones.

#### Query parameter

| **Parameter** | **Required / Optional** | **Description** | **Type** |
|  --- | --- | --- | --- |
| `entityId` | Required | Unique identifier of the export config.**Example:** `67a3515847906e5dd61aea24` | String |


#### Request

```bash
curl --location --request DELETE 'https://api3.sprinklr.com/{env}/api/v3/reportingSuite/exportConfig?entityId=6a97a70a5efb429a803915cd' \
  -H 'Authorization: Bearer {Enter your Access Token}' \
  -H 'Key: {Enter your API KEY}' \
  -H 'Content-Type: application/json' \
  -H 'accept: application/json'
```

## 7. Response format and status codes

### 7.1 The V3 envelope

Reporting Suite API V3 endpoints return a consistent two‑part envelope:

```json
{
  "data": {
  },
  "errors": []
}
```

|| **Field**              | **Type**          | **Description** |
|-------------------------|-------------------|-----------------|
| `data`                 | Array[Object]     | Array of suite or export config objects matching the request criteria |
| `errors`               | Array[Error]      | Array of error objects (empty if no errors) |

### 7.2 Example responses

**Create reporting suite**

```json
{
    "data": {
        "id": "6a97b9e25efb429a803919be",
        "entityId": "6a97b9e25efb429a803919be",
        "suiteType": "CUSTOM",
        "name": "LinkedIn Company BR2",
        "description": "LinkedIn Company Level Performace for Ads11",
        "dimensions": [
            "linkedinMemberCompanyId",
            "linkedinCompany"
        ],
        "measurements": [
            "impressions"
        ],
        "moduleType": "PAID",
        "breakdownType": "LINKEDIN_COMPANY",
        "ownerUserId": 66000149,
        "createdTime": "Sep 02, 2026, 05:53:38 AM",
        "modifiedTime": "Sep 02, 2026, 05:53:38 AM",
        "lastModifiedUserId": 66000149,
        "deleted": false
    },
    "errors": []
}
```

**Search reporting suite**

```json
{
  "data": {
    "results": [
      {
        "id": "67d82467b64b120df93fe38f",
        "entityId": "67d82467b64b120df93fe38f",
        "suiteType": "STANDARD",
        "name": "Facebook Ad Set",
        "description": "Facebook Ad Set Level Performance",
        "moduleType": "PAID",
        "breakdownType": "FACEBOOK_AD_SET",
        "dimensions": ["adObjective", "currency", "paidInitiative", "adSet", "date", "adChannel", "adAccount", "gender", "age"],
        "measurements": ["spent", "impressions", "clicks", "dailyReach", "facebookLinkClicks", "facebookVideoPlays"],
        "createdTime": "Mar 17, 2025, 01:32:23 PM",
        "modifiedTime": "Mar 17, 2025, 01:32:23 PM",
        "deleted": false
      },
      {
        "id": "67d920aeca56fb471938fa6f",
        "entityId": "67d920aeca56fb471938fa6f",
        "suiteType": "STANDARD",
        "name": "Facebook Ad Variant",
        "description": "Facebook Ad Variant Level Performance",
        "moduleType": "PAID",
        "breakdownType": "FACEBOOK_AD_VARIANT",
        "dimensions": ["adVariant", "adObjective", "currency", "paidInitiative", "adSet", "date", "adChannel", "adAccount"],
        "measurements": ["spent", "impressions", "clicks", "dailyReach", "facebookLinkClicks", "facebookVideoPlays"],
        "createdTime": "Mar 18, 2025, 07:28:46 AM",
        "modifiedTime": "Mar 18, 2025, 07:28:47 AM",
        "deleted": false
      },
      {
        "id": "67d920f0ca56fb471938faff",
        "entityId": "67d920f0ca56fb471938faff",
        "suiteType": "STANDARD",
        "name": "Facebook Initiative",
        "description": "Facebook Paid Initiative Level Performance",
        "moduleType": "PAID",
        "breakdownType": "FACEBOOK_PAID_INITIATIVE",
        "dimensions": ["adObjective", "currency", "paidInitiative", "date", "adChannel", "adAccount"],
        "measurements": ["spent", "impressions", "clicks", "dailyReach", "facebookLinkClicks"],
        "createdTime": "Mar 18, 2025, 07:29:52 AM",
        "modifiedTime": "Mar 18, 2025, 07:29:52 AM",
        "deleted": false
      }
    ]
  },
  "errors": []
}
```

**Create export config**

```json
{
    "data": {
        "id": "6a97d5c45efb429a803922b9",
        "entityId": "6a97d5c45efb429a803922b9",
        "name": "Ad Variant Schedule Export BR2",
        "reportingSuite": "6a1e8b0a259e22bdc9eb2797",
        "exportType": "ONE_TIME",
        "timeRangeFilter": {
            "startTime": 1739100163000,
            "endTime": 1739445763000,
            "timezone": "UTC"
        },
        "ownerUserId": 66014658,
        "createdTime": "Sep 02, 2026, 07:52:36 AM",
        "modifiedTime": "Sep 02, 2026, 07:52:39 AM",
        "lastModifiedUserId": 66014658,
        "deleted": false
    },
    "errors": []
}
```

**Search export config**

```json
{
  "data": {
    "results": [
      {
        "id": "67b5fcf97f63067cacbea917",
        "entityId": "67b5fcf97f63067cacbea917",
        "name": "Ad Variant Schedule Export - one time",
        "reportingSuite": "67b5fc887f63067cacbea8db",
        "exportType": "ONE_TIME",
        "timeRangeFilter": {
          "startTime": 1739100163000,
          "endTime": 1739445763000,
          "timezone": "UTC"
        },
        "createdTime": "Feb 19, 2025, 03:47:05 PM",
        "deleted": false
      },
      {
        "id": "67b6f76be0d90b2d088fa825",
        "entityId": "67b6f76be0d90b2d088fa825",
        "name": "Ad Variant Schedule Export - one time",
        "reportingSuite": "67b6c5afe0d90b2d088fa0f9",
        "exportType": "ONE_TIME",
        "timeRangeFilter": {
          "startTime": 1739100163000,
          "endTime": 1739445763000,
          "timezone": "UTC"
        },
        "externalStorageId": "abc",
        "createdTime": "Feb 20, 2025, 09:35:39 AM",
        "deleted": false
      },
      {
        "id": "67b6fb9de0d90b2d088fa94b",
        "entityId": "67b6fb9de0d90b2d088fa94b",
        "name": "Ad Variant Schedule Export - one time",
        "reportingSuite": "67b6fb80e0d90b2d088fa935",
        "exportType": "ONE_TIME",
        "timeRangeFilter": {
          "startTime": 1739100163000,
          "endTime": 1839445763000,
          "timezone": "UTC"
        },
        "externalStorageId": "abc",
        "createdTime": "Feb 20, 2025, 09:53:33 AM",
        "deleted": false
      }
    ],
    "hasMore": true,
    "totalCount": 0
  },
  "errors": []
}
```

**Update reporting suite**

```
204 No Content
```

**Update export config**

```
204 No Content
```

**Read reporting suite**

```json
{
    "data": [
        {
            "id": "6a97b9e25efb429a803919be",
            "entityId": "6a97b9e25efb429a803919be",
            "suiteType": "CUSTOM",
            "name": "LinkedIn Company BR2",
            "description": "LinkedIn Company Level Performace for Ads11",
            "dimensions": [
                "linkedinMemberCompanyId",
                "linkedinCompany"
            ],
            "measurements": [
                "impressions"
            ],
            "moduleType": "PAID",
            "breakdownType": "LINKEDIN_COMPANY",
            "ownerUserId": 66000149,
            "createdTime": "Sep 02, 2026, 05:53:38 AM",
            "modifiedTime": "Sep 02, 2026, 05:53:38 AM",
            "lastModifiedUserId": 66000149,
            "deleted": false
        }
    ],
    "errors": []
}
```

**Read export config**

```json
{
    "data": [
        {
            "id": "6a97bac05efb429a803919c5",
            "entityId": "6a97bac05efb429a803919c5",
            "name": "Ad Variant Schedule Export BR2",
            "reportingSuite": "6a1e8b0a259e22bdc9eb2797",
            "exportType": "ONE_TIME",
            "timeRangeFilter": {
                "startTime": 1739100163000,
                "endTime": 1739445763000,
                "timezone": "UTC"
            },
            "ownerUserId": 66014658,
            "createdTime": "Sep 02, 2026, 05:57:20 AM",
            "modifiedTime": "Sep 02, 2026, 05:57:20 AM",
            "lastModifiedUserId": 66014658,
            "deleted": false
        }
    ],
    "errors": []
}
```

**Read export run status**

```json
{
  "data": {
    "results": [
      {
        "id": "67d2a86d2627b839008e9468",
        "exportConfigId": "67d2a86d2627b839008e9461",
        "status": "SUCCESS",
        "downloadUrl": "https://dummy-url.com/export/67d2a86d2627b839008e9461_20250224_20250225.json",
        "runTimestamp": "Mar 13, 2025, 09:42:05 AM",
        "createdTimestamp": "Mar 13, 2025, 09:42:05 AM",
        "exportSinceTime": 1740375386000,
        "exportUntilTime": 1740461786000,
        "createdTime": 1741858925345
      },
      {
        "id": "67d2a86d2627b839008e9466",
        "exportConfigId": "67d2a86d2627b839008e9461",
        "status": "SUCCESS",
        "downloadUrl": "https://dummy-url.com/export/67d2a86d2627b839008e9461_20250222_20250223.json",
        "runTimestamp": "Mar 13, 2025, 09:42:05 AM",
        "createdTimestamp": "Mar 13, 2025, 09:42:05 AM",
        "exportSinceTime": 1740202586000,
        "exportUntilTime": 1740288986000,
        "createdTime": 1741858925342
      },
      {
        "id": "67d2a86d2627b839008e9464",
        "exportConfigId": "67d2a86d2627b839008e9461",
        "status": "SUCCESS",
        "downloadUrl": "https://dummy-url.com/export/67d2a86d2627b839008e9461_20250220_20250221.json",
        "runTimestamp": "Mar 13, 2025, 09:42:05 AM",
        "createdTimestamp": "Mar 13, 2025, 09:42:05 AM",
        "exportSinceTime": 1740029786000,
        "exportUntilTime": 1740116186000,
        "createdTime": 1741858925339
      },
      {
        "id": "67d2a86d2627b839008e9462",
        "exportConfigId": "67d2a86d2627b839008e9461",
        "status": "SUCCESS",
        "downloadUrl": "https://dummy-url.com/export/67d2a86d2627b839008e9461_20250218_20250219.json",
        "runTimestamp": "Mar 13, 2025, 09:42:05 AM",
        "createdTimestamp": "Mar 13, 2025, 09:42:05 AM",
        "exportSinceTime": 1739856986000,
        "exportUntilTime": 1739943386000,
        "createdTime": 1741858925329
      }
    ],
    "hasMore": false,
    "totalCount": 4
  },
  "errors": []
}
```

**Delete Reporting Suite**

```
204 No Content
```

**Delete Export Config**

```
204 No Content
```

### 7.3 Response codes

| HTTP Code | Scenario | Description |
|  --- | --- | --- |
| `200 OK` | Success | Profiles found and returned successfully |
| `400 Bad Request` | Invalid Parameters | Missing required parameters or invalid parameter combinations |
| `401 Unauthorized` | Authentication Failed | Invalid or missing `Authorization` token |
| `403 Forbidden` | Insufficient Permissions | User lacks `VIEW` permission for `AUDIENCE_PROFILE` |
| `404 Not Found` | No Profiles Found | No profiles match the search criteria |
| `500 Internal Server Error` | Server Error | Unexpected server-side error occurred |


## 7. V2 → V3 migration

The Reporting Suite APIs have been redesigned in V3 for consistency and clarity.
Here’s a comparison of V2 vs V3 endpoints and behavior:

| **Operation** | **V2 Endpoint** | **V3 Endpoint** | **Key Differences** |
|  --- | --- | --- | --- |
| Fetch Field Mappings | `GET /api/v2/reporting-suite/field-mappings/{moduleType}?breakdownType=` | `GET /api/v3/reportingSuite/fieldMappings?moduleType=&breakdownType=` | V2 used path parameter for moduleType; V3 uses query parameters for both moduleType and breakdownType. |
| Create Suite | `POST /api/v2/reporting-suite/suite` | `POST /api/v3/reportingSuite/suite` | Endpoint path changed; request/response envelope standardized in V3. |
| Fetch Suite by ID | `GET /api/v2/reporting-suite/suite/{entityId}` | `GET /api/v3/reportingSuite/suite?entityId=` | V2 used path parameter; V3 uses query parameter. |
| Search Suites | `POST /api/v2/reporting-suite/suite/search` | `POST /api/v3/reportingSuite/suite/search` | Same operation; V3 response envelope includes `metadata` for pagination. |
| Update Suite | `PATCH /api/v2/reporting-suite/suite/{entityId}` | `PATCH /api/v3/reportingSuite/suite?entityId=` | V2 used path parameter; V3 uses query parameter. |
| Delete Suite | `DELETE /api/v2/reporting-suite/suite/{entityId}` | `DELETE /api/v3/reportingSuite/suite?entityId=` | V2 used path parameter; V3 uses query parameter. |
| Create Export Config | `POST /api/v2/reporting-suite/export-config` | `POST /api/v3/reportingSuite/exportConfig` | Endpoint path changed; V3 supports richer `timeRangeFilter` and `scheduleConfig`. |
| Fetch Export Config by ID | `GET /api/v2/reporting-suite/export-config/{entityId}` | `GET /api/v3/reportingSuite/exportConfig?entityId=` | V2 used path parameter; V3 uses query parameter. |
| Search Export Configs | `POST /api/v2/reporting-suite/export-config/search` | `POST /api/v3/reportingSuite/exportConfig/search` | Same operation; V3 response envelope standardized with `metadata`. |
| Update Export Config | `PATCH /api/v2/reporting-suite/export-config/{entityId}` | `PATCH /api/v3/reportingSuite/exportConfig?entityId=` | V2 used path parameter; V3 uses query parameter. |
| Delete Export Config | `DELETE /api/v2/reporting-suite/export-config/{entityId}` | `DELETE /api/v3/reportingSuite/exportConfig?entityId=` | V2 used path parameter; V3 uses query parameter. |
| Fetch Export Run Status | `POST /api/v2/reporting-suite/export-status/{exportConfigId}` | `POST /api/v3/reportingSuite/exportStatus?exportConfigId=` | V2 used path parameter; V3 uses query parameter. Request body structure aligned with other V3 search endpoints. |