openapi: 3.0.3
info:
title: MoEngage Analytics Dashboard and Chart API
description: |
Read-only REST APIs to access your MoEngage Custom Dashboards and the analytics data behind their charts. All endpoints are `GET` requests and do not modify any data.
version: '5.0'
servers:
- url: 'https://api-{dc}.moengage.com'
description: MoEngage API Server
variables:
dc:
default: '01'
description: 'The ''dc'' in the API Endpoint URL refers to the MoEngage Data Center (DC). MoEngage hosts each customer in a different DC. You can find your DC number and replace the value of ''dc'' in the URL by referring to the DC and API endpoint mapping [here](/api/introduction#data-centers). Your MoEngage Data Center (DC) can be 01, 02, 03, 04, 05, 06, or 101.'
tags:
- name: Dashboards
description: Read custom dashboards and their chart data.
security:
- basicAuth: []
paths:
/v5/analytics/dashboards:
get:
tags:
- Dashboards
summary: List Dashboards
description: |
Returns the custom dashboards available to the authenticated workspace. Archived dashboards are excluded.
x-mint:
content: |
Only workspace-level (public) dashboards are returned. Private dashboards are not available through this API.
operationId: listDashboards
responses:
'200':
description: |
This response is returned when the request is processed successfully.
Each item contains the dashboard ID and name. Use the dashboard ID with [Get Dashboard Charts](/api/dashboards/get-dashboard-charts) to retrieve the charts on a dashboard.
content:
application/json:
schema:
type: object
properties:
response_id:
$ref: '#/components/schemas/ResponseId'
type:
type: string
description: The type of resource returned in the `data` field.
example: dashboard
data:
type: array
description: The list of dashboards accessible to the workspace.
items:
$ref: '#/components/schemas/DashboardSummary'
example:
response_id: b3f1c0d2-2a4e-4f9b-9c1a-6d2e8f0a1b23
type: dashboard
data:
- _id: 63ede292b4c6a68b18c2c93f
name: Acquisition Overview
- _id: 63ef1f824da10b4fd96c6e3b
name: Retention Deep Dive
'401':
$ref: '#/components/responses/Unauthorized'
'500':
$ref: '#/components/responses/InternalError'
/v5/analytics/dashboards/{dashboard_id}/charts:
get:
tags:
- Dashboards
summary: Get Dashboard Charts
description: |
Returns the details of a single dashboard, including its name, creator, and owner. It also returns the list of charts on the dashboard, in layout order. Each chart entry contains the chart's ID and name.
x-mint:
content: |
Chart data is not returned here. To fetch the data for a chart, use [Get Chart Data](/api/dashboards/get-chart-data) with the dashboard ID and chart ID.
operationId: getDashboardCharts
parameters:
- $ref: '#/components/parameters/DashboardId'
responses:
'200':
description: This response is returned when the request is processed successfully.
content:
application/json:
schema:
type: object
properties:
response_id:
$ref: '#/components/schemas/ResponseId'
type:
type: string
description: The type of resource returned in the `data` field.
example: dashboard
data:
$ref: '#/components/schemas/DashboardData'
example:
response_id: b3f1c0d2-2a4e-4f9b-9c1a-6d2e8f0a1b23
type: dashboard
data:
name: Acquisition Overview
created_by: john.doe@example.com
owned_by: john.doe@example.com
chart_ids:
- _id: 67f9d9df279348ecdc84415f
name: New Users by Day
- _id: 68f08c79d33bd238d3ef00e0
name: Sign-ups by Channel
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
/v5/analytics/dashboards/{dashboard_id}/charts/{chart_id}:
get:
tags:
- Dashboards
summary: Get Chart Data
description: |
Returns the data behind a single chart, as an array of rows. Each call runs the chart's analytics query and returns the result.
x-mint:
content: |
**About the chart data:**
- The data matches what the chart shows in the MoEngage dashboard. It uses the chart's saved settings, such as its date range, segment, filters, and breakdowns. You can't change these settings through the API, because the endpoint accepts no date-range or segment parameters.
- By default, the response is served from a server-side cache. To recompute the chart with the latest data, set the `cache` query parameter to `false`.
- The fields in each row depend on the chart's analysis type: Behavior, Funnels, Retention, User, or Session and Source. To learn more about these analysis types, see [MoEngage Analytics](/user-guide/analyze/moengage-analytics/overview).
operationId: getChartData
parameters:
- $ref: '#/components/parameters/DashboardId'
- $ref: '#/components/parameters/ChartId'
- $ref: '#/components/parameters/Cache'
responses:
'200':
description: This response is returned when the request is processed successfully.
content:
application/json:
schema:
type: object
properties:
response_id:
$ref: '#/components/schemas/ResponseId'
type:
type: string
description: The type of resource returned in the `data` field.
example: chart_data
data:
type: array
description: The resolved chart data, as an array of metric rows.
items:
$ref: '#/components/schemas/ChartSeriesPoint'
examples:
behavior:
summary: Behavior analysis
value:
response_id: b3f1c0d2-2a4e-4f9b-9c1a-6d2e8f0a1b23
type: chart_data
data:
- metric: 1.0
granularity: 2026/06/29
splitby: []
grouped_by: []
step: A
tseq: 0
cseq: 0
funnel:
summary: Funnel analysis
value:
response_id: b3f1c0d2-2a4e-4f9b-9c1a-6d2e8f0a1b23
type: chart_data
data:
- step: 1
metric: 4
splitby: []
granularity: entire
split_by_weight: 4
tseq: 0
cseq: 0
- step: 2
metric: 0
splitby: []
granularity: entire
split_by_weight: 4
tseq: 0
cseq: 0
retention:
summary: Retention analysis
value:
response_id: b3f1c0d2-2a4e-4f9b-9c1a-6d2e8f0a1b23
type: chart_data
data:
- metric: 0.0
granularity: 2026/06/29
splitby: []
total_users: 1
retained_user: 0
retention_comparison_index: 0
retention_compared_by: 2026/06/29
tseq: 0
cseq: 0
user:
summary: User analysis
value:
response_id: b3f1c0d2-2a4e-4f9b-9c1a-6d2e8f0a1b23
type: chart_data
data:
- metric: 14
granularity: entire
splitby: []
step: A
tseq: 0
cseq: 0
bucket: "1.0"
- metric: 8559
granularity: entire
splitby: []
step: A
tseq: 0
cseq: 0
bucket: "0.0"
- metric: 2
granularity: entire
splitby: []
step: A
tseq: 0
cseq: 0
bucket: "2.0"
sessionAndSource:
summary: Session and Source analysis
value:
response_id: b3f1c0d2-2a4e-4f9b-9c1a-6d2e8f0a1b23
type: chart_data
data:
- analysis_type: session_count
splitby: []
granularity: 2026/06/29
metric: 48.0
fseq: 0
event_name: MOE_SESSION
tseq: 0
cseq: 0
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'428':
$ref: '#/components/responses/QuotaExceeded'
'500':
$ref: '#/components/responses/InternalError'
components:
securitySchemes:
basicAuth:
type: http
scheme: basic
description: |
Authentication is done via Basic Auth. This requires a base64-encoded string of your credentials in the format `username:password`.
- **Username**: Use your MoEngage workspace ID (also known as the App ID). You can find it in the MoEngage dashboard at **Settings** > **Account** > **APIs** > **Workspace ID (earlier app id)**.
- **Password**: Use your Data API Key, which you can find in the MoEngage dashboard at **Settings** > **Account** > **APIs**.
For more information, see [Authentication](/api/introduction#authentication).
parameters:
DashboardId:
name: dashboard_id
in: path
required: true
description: The unique identifier of the dashboard. You can retrieve dashboard IDs from the [List Dashboards](/api/dashboards/list-dashboards) response.
schema:
type: string
example: 6a10ae88f3a1896d59d5bf8f
ChartId:
name: chart_id
in: path
required: true
description: The unique identifier of the chart on the dashboard. You can retrieve chart IDs from the [Get Dashboard Charts](/api/dashboards/get-dashboard-charts) response.
schema:
type: string
example: 6a10af49f3a1896d59d5bfbd
Cache:
name: cache
in: query
required: false
description: Controls whether the chart data is served from the server-side cache. Set to `false` to bypass the cache and recompute the chart. Defaults to `true`.
schema:
type: boolean
default: true
schemas:
DashboardSummary:
type: object
description: A dashboard accessible to the workspace.
properties:
_id:
type: string
description: The unique identifier of the dashboard.
example: 63ede292b4c6a68b18c2c93f
name:
type: string
description: The name of the dashboard.
example: Acquisition Overview
ChartSummary:
type: object
description: A chart laid out on the dashboard.
properties:
_id:
type: string
description: The unique identifier of the chart.
example: 67f9d9df279348ecdc84415f
name:
type: string
description: The name of the chart.
example: New Users by Day
DashboardData:
type: object
description: A dashboard's details and the charts laid out on it.
properties:
name:
type: string
description: The name of the dashboard.
example: Acquisition Overview
created_by:
type: string
format: email
description: The email address of the user who created the dashboard.
example: john.doe@example.com
owned_by:
type: string
format: email
description: The email address of the dashboard's current owner.
example: john.doe@example.com
chart_ids:
type: array
description: The charts laid out on the dashboard, in layout order. Each entry includes the chart's ID and name.
items:
$ref: '#/components/schemas/ChartSummary'
ChartSeriesPoint:
type: object
description: |
One row of a chart's resolved data series. The keys below are common across analysis types, but each analysis type returns additional, type-specific keys. For example:
- **Behavior** adds `grouped_by` and `step`.
- **Funnels** add `step` (the step number) and `split_by_weight`.
- **Retention** adds `total_users`, `retained_user`, `retention_comparison_index`, and `retention_compared_by`.
- **User** adds `step` and `bucket`.
- **Session and Source** adds `analysis_type`, `event_name`, and `fseq`.
See the response examples for a sample of each analysis type.
properties:
metric:
type: number
description: The metric value for this data point.
example: 48.0
granularity:
type: string
description: The time bucket for this data point, such as a day, week, or month. Returns `entire` when the result is not bucketed by time.
example: 2026/06/29
splitby:
type: array
description: The split-by dimension values applied to this data point, if any.
items: {}
tseq:
type: integer
description: The time-sequence index of this data point within the series.
example: 0
cseq:
type: integer
description: The category-sequence index of this data point within the series.
example: 0
additionalProperties: true
ResponseId:
type: string
description: A unique identifier for this response. Include it when reporting issues to MoEngage Support to help trace the request.
example: b3f1c0d2-2a4e-4f9b-9c1a-6d2e8f0a1b23
responses:
BadRequest:
description: This response is returned when the dashboard ID or chart ID is invalid, or the request is malformed.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: A machine-readable error code.
example: VALIDATION_FAILED
message:
type: string
description: A human-readable description of the error.
example: Invalid dashboard_id.
doc_url:
type: string
description: A link to documentation about this error, when available.
response_id:
$ref: '#/components/schemas/ResponseId'
Unauthorized:
description: This response is returned when the authentication credentials are missing or invalid.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: A machine-readable error code.
example: UNAUTHORIZED
message:
type: string
description: A human-readable description of the error.
example: Missing or invalid credentials.
doc_url:
type: string
description: A link to documentation about this error, when available.
response_id:
$ref: '#/components/schemas/ResponseId'
Forbidden:
description: This response is returned when the caller does not have access to the requested dashboard or chart.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: A machine-readable error code.
example: FORBIDDEN
message:
type: string
description: A human-readable description of the error.
example: You do not have access to this dashboard.
doc_url:
type: string
description: A link to documentation about this error, when available.
response_id:
$ref: '#/components/schemas/ResponseId'
NotFound:
description: This response is returned when the requested dashboard or chart does not exist.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: A machine-readable error code.
example: NOT_FOUND
message:
type: string
description: A human-readable description of the error.
example: Dashboard not found.
doc_url:
type: string
description: A link to documentation about this error, when available.
response_id:
$ref: '#/components/schemas/ResponseId'
InternalError:
description: This response is returned when the system runs into an unexpected error.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: A machine-readable error code.
example: INTERNAL_ERROR
message:
type: string
description: A human-readable description of the error.
example: An unexpected error occurred while processing the request.
doc_url:
type: string
description: A link to documentation about this error, when available.
response_id:
$ref: '#/components/schemas/ResponseId'
QuotaExceeded:
description: This response is returned when the workspace has reached its monthly Fair Usage Policy limit for analytics usage.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: A machine-readable error code.
example: QUOTA_EXCEEDED
message:
type: string
description: A human-readable description of the error.
example: Your workspace has reached its monthly Fair Usage Policy limit for analytics usage. Please contact your Customer Success Manager to expand your quota.
doc_url:
type: string
description: A link to documentation about this error, when available.
example: https://www.moengage.com/docs/api/dashboards/get-chart-data
response_id:
$ref: '#/components/schemas/ResponseId'