Revelator’s Analytics API provides a complete view of performance and earnings data across your catalog.
Use the V3 Analytics endpoints for:
For revenue analytics, continue using the endpoints described in Comprehensive Analytics.
For a simplified endpoint with pre-calculated, enterprise-level metrics, see Keymetrics.
The primary analytics endpoints follow a standardized URL template with interchangeable components.
/analytics/{dataSet}/{aggregationDimension}?dateGranularity={granularity} …
Each analytics response includes a metadata object and may optionally include date information, depending on your
query parameters.
metadata varies depending on the aggregationDimension. It can be represented as a generic type with a metadata
type parameter: AnalyticsResponseItem<TMetadata>, using a specific TMetadata for each aggregationDimension.date should be excluded or set to null if dateGranularity is null or all.| Component | Passed as | Description |
|---|---|---|
| Data Set required | URL parameter | Data range to be aggregated. Currently supports:
|
| Aggregation Dimension required | URL parameter | Data grouping dimension. Currently supports:
|
| Date Granularity optional | Querystring parameter: dateGranularity | Filter Level of date grouping. Options are:
|
| Filter | Multiple querystring parameters based on the desired filter. | Filters to be applied to the dataSet before grouping. You can apply multiple filters simultaneously. Currently supports:
Important: How to format array filters in the URL To provide an array of IDs, you must format the query string parameters by encoding the array brackets ( []) and providing an index for each value. Example: To filter for releaseIds=[1035587, 1628168], your query string would look like this:?releaseIds%5B0%5D=1035587&releaseIds%5B1%5D=1628168 |
| Page optional | Querystring parameters:
| Controls the amount of response data provided. |
| Order optional | Querystring parameters:
| Controls how the response data is ordered, and by what property. |
| Date range optional | Querystring parameters:
| Filters the results by date. Both parameters expect an ISO 8601 date format (e.g., YYYY-MM-DD). Behavior: - If fromDate and toDate are both provided: The API returns results for the specified date range.- If only fromDate is provided: The API returns results for a three-month period starting from the fromDate.- If only toDate is provided: The API returns results for a three-month period ending on the toDate.- If neither is provided: The API returns results for the last three months by default. |
| Targer Enterprise optional | Querystring parameter: targetEnterpriseId (integer) | Allows a parent enterprise user to retrieve data specifically for one of their child enterprises. Important: Currently, this parameter is only effective when the Data Set (URL parameter) is revenue. It will be ignored for other Data Sets. |
Example requests for different combinations of Data Sets and Aggregation Dimensions.
revenue) AnalyticsThe following endpoint retrieves aggregated revenue analytics data by date.
/analytics/revenue/metricsByDateRetrieves monthly revenue analytics data. Each object in the response represents one month within the selected date range.
| Parameter | Type | Description |
|---|---|---|
fromDate optional | string | The start date for the date range, in YYYY-MM-DD format. Defaults to the most current date with available data. As Revenue data is segregated monthly, this date should typically be the first of the month. |
toDate optional | string | The end date for the date range, in YYYY-MM-DD format. Defaults to the most current date with available data. As Revenue data is segregated monthly, this date should typically be the first of the month. |
metrics optional | string | Defaults to all available metrics. To request specific metrics, provide the parameter once for each desired metric. Example: metrics=monthRevenue |
targerEnterpriseId optional | integer | Allows a parent enterprise user to retrieve metrics specifically for one of their child enterprises. |
The Revelator Analytics API (v3) provides a comprehensive set of endpoints for retrieving detailed consumption and engagement metrics. This version replaces the previous Trends API and is now the standard analytics interface.
Currently, V3 includes only the consumption and engagement data endpoints. Additional data types—such as revenue - and expanded metrics will be introduced in future releases.
/analytics/{metric}/{aggregation}Retrieves analytics data - such as consumption or engagement metrics - aggregated by various dimensions.
consumption - formerly known as trends.engagement - engagement-based analytics, including user interaction metrics.Each metric returns its own set of metrics in the response object.
| Aggregation | Description |
|---|---|
byArtist | Grouped by artist. |
byCountry | Grouped by listener country. |
byDate | Aggregated by date. |
byDeliveryType | Aggregated by delivery type (e.g., streaming, download). |
byDiscoveryType | Grouped by discovery source. |
byDistributor | Grouped by DSP. |
byLabel | Grouped by label. |
byRecordingVersion | Aggregated by audio version (e.g., stereo, Dolby Atmos). |
byRelease | Grouped by release. |
byTrack | Grouped by track. |
bySourceOfStream | Grouped by stream source. |
byDate endpoint does not include a metadata object in its response items.dateGranularity, results are nested within a metrics array for each item.releaseIds=2384320&releaseIds=1628168| Parameter | Type | Description |
|---|---|---|
fromDate required | string | Start date for the data range (YYYY-MM-DD). |
toDate required | string | End date for the data range (YYYY-MM-DD). |
dateGranularity optional | string | Date granularity for results. Possible values: Daily, Weekly, Monthly, Quarterly, Yearly, All, Null. |
pageSize optional | integer | Number of items per page. |
pageNumber optional | integer | Page number for pagination. |
orderByProperty optional | string | Property to order results by (e.g., streamsCount). |
orderByDescending optional | boolean | If true, orders results in descending order. |
| Filter | Type | Description | Applicable Aggregations |
|---|---|---|---|
releaseIds | array of integers | Filter by one or more release IDs. | All |
trackIds | array of integers | Filter by one or more track IDs. | All |
artistIds | array of integers | Filter by one or more artist IDs. | All |
labelIds | array of integers | Filter by one or more label IDs. | All |
distributorIds | array of integers | Filter by one or more distributor IDs. | All |
excludeDistributorIds | array of integers | Exclude specific distributor IDs from the results. | All |
excludeTikTok | boolean | If true, excludes TikTok data from the results. Defaults to false. | All |
countryIds | array of integer | Filter by one or more country IDs. | All |
deliveryTypeIds | array of integers | Filter by one or more delivery type IDs. | byDeliveryType |
discoveryTypeIds | array of integers | Filter by one or more discovery type IDs. | byDiscoveryType |
recordingVersionTypeIds | array of integers | Filter by one or more recording version type IDs. | byRecordingVersion |
sourceOfStreamIds | array of integers | Filter by one or more source of stream IDs. | bySourceOfStream |
isUgc | boolean | If true, filters results to only include User-Generated Content (UGC) metrics. If false or omitted, only includes non-UGC metrics. This affects which metric fields are populated. | All |
isSkipRate | boolean | If true, this filter will exclude entire items from the results where the skipRate metric is 0. This parameter is only relevant when the {metric} type is engagement. | All |
| Parameter | Type | Description |
|---|---|---|
totals | object | Aggregated totals for the entire request. Values will differ based on the data set (consumption or engagement). |
totals.streamsCount | integer | [All types] Total count for streams. |
totals.trackDownloadCount | integer | [consumption] Total count for track downloads. |
totals.releaseDownloadCount | integer | [consumption] Total count for release downloads. |
totals.sub30sCount | integer | [enagement] Total count of streams bellow 30 seconds. |
totals.savesCount | integer | [enagement] Total count of saves. |
totals.skipRate | float | [enagement] A float value representing the total skip rate. |
totals.completeRate | float | [enagement] A float value representing the total complete rate. |
totals.creationsCount | integer | [engagement] Total count of creations. (Will be 0 if isUgc is false or omitted). |
totals.likesCount | integer | [engagement] Total count of likes. (Will be 0 if isUgc is false or omitted). |
totals.sharesCount | integer | [enagagement] Total count of shares. (Will be 0 if isUgc is false or omitted). |
totals.commentsCount | integer | [engagement] Total count of comments. (Will be 0 if isUgc is false or omitted). |
totals.watchTime | float | [engagement] Total watch time. (Will be 0 if isUgc is false or omitted). |
fromDate | string | Start date of the data range. |
toDate | string | End date of the data range. |
totalItemsCount | integer | Total number of items in the result set. |
pageNumber | integer | Current page number. |
pageSize | integer | Number of items per page. |
items | array | Resulting array of consumption data items. |
items.metadata | object | Metadata for the item. This value changes depending on the aggregation dimension (null if byDate aggregation is used). |
items.metrics | object | Metrics for the item. TValues will differ between different data set types (consumption or engagement). |
items.metrics.streamsCount | integer | [All types] Count for streams. (Will be null if isUgc is true). |
items.metrics.trackDownloadCount | integer | [consumption] Count for track downloads. (Will be null if isUgc is true). |
items.metrics.releaseDownloadCount | integer | [consumption] Count for release downloads. (Will be null if isUgc is true). |
items.metrics.eventDate | string | [consumption] Date of the event (null if not applicable) |
items.metrics.sub30sCount | integer | [enagement] Count of streams bellow 30 seconds. (Will be null if isUgc is true). |
items.metrics.savesCount | integer | [enagement] Count saves. (Will be null if isUgc is true). |
items.metrics.skipRate | float | [enagement] A float value representing the skip rate for the item. (Will be null if isUgc is true). |
items.metrics.completeRate | float | [enagement] A float value representing the complete rate for the item. (Will be null if isUgc is true). |
items.metrics.viewsCount | integer | [consumption] Views count for the item. (Will be null if isUgc is false). |
items.metrics.creationsCount | integer | [engagement] Total count of creations for the item. (Will be null if isUgc is false). |
items.metrics.likesCount | integer | [engagement] Total count of likes for the item. (Will be null if isUgc is false). |
items.metrics.sharesCount | integer | [enagagement] Total count of shares for the item. (Will be null if isUgc is false). |
items.metrics.commentsCount | integer | [engagement] Total count of comments for the item. (Will be null if isUgc is false). |
items.metrics.watchTime | float | [engagement] Total watch time for the item. (Will be null if isUgc is false). Relevant only for Youtube and will not be populated for /engagement/byRelease?isUgc=true because YT does not have releases. |
consumption) Examplesengagement) ExamplesbyDate AggregationThe byDate aggregation is unique because it returns a single item in the main items array. This single item
contains a metrics array, and the structure of this metrics array is determined by the dateGranularity parameter.
When using byDate, the metadata object is not present in the response.
Here’s how each dateGranularity option affects the metrics array within the byDate aggregation:
dateGranularity Value | Resulting metrics Array Structure |
|---|---|
Daily | An array of objects, one for each day in the requested date range. Each object’s eventDate will be the date of the metrics (e.g., 2024-07-01T00:00:00Z). |
Weekly | An array of objects, one for each week in the requested date range. Each object’s eventDate will be the start of the week (Monday at midnight UTC, e.g., 2024-07-01T00:00:00Z). |
Monthly | An array of objects, one for each month in the requested date range. Each object’s eventDate will be the first day of the month (at midnight UTC, e.g., 2024-07-01T00:00:00Z). |
Quarterly | An array of objects, one for each quarter in the requested date range. Each object’s eventDate will be the first day of the quarter (Jan 1, Apr 1, Jul 1, Oct 1). |
Yearly | An array of objects, one for each year in the requested date range. Each object’s eventDate will be the first day of the year (Jan 1). |
All, Null, or omitted | A single object in the array, containing the aggregated total metrics for the entire specified date range. The eventDate for this object will be null. |
byDate Aggregation ExamplesArtificial streaming endpoints allow you to verify whether streams from client-provided content originate from automated or fraudulent sources (e.g., bots, scripts, or click farms) rather than genuine listener activity.
The fewer artificial streams detected, the healthier the catalog performance and revenue accuracy.
/analytics/artificialStreams/{aggregation}Retrieves artificial streaming data aggregated by various dimensions.
| Aggregation | Description |
|---|---|
byTrack | Grouped by track. |
byRelease | Grouped by release. |
byArtist | Grouped by artist. |
byLabel | Grouped by label. |
byCountry | Grouped by listener country. |
byDistributor | Grouped by DSP. |
byDate | Aggregated by date. |
byClient | Grouped by client account. |
byDate endpoint does not include a metadata object in its response items.dateGranularity, results are nested within a metrics array for each item.releaseIds=2384320&releaseIds=1628168The response includes a key value:
finesAmount - the total amount withheld from the next royalty run due to artificial streaming detections during
the queried period.This value helps identify the financial impact of detected artificial streaming activity.
| Parameter | Type | Description |
|---|---|---|
fromDate optional | string | The start date for the data range, in YYYY-MM-DD format. If both fromDate and toDate are omitted, the API returns results from the past three months. |
toDate optional | string | The end date for the data range, in YYYY-MM-DD format. If both fromDate and toDate are omitted, the API returns results from the past three months. |
dateGranularity optional | string | Date granularity for results. Possible values: Monthly, All, Null. |
pageSize optional | integer | Number of items per page. |
pageNumber optional | integer | Page number for pagination. |
orderByProperty optional | string | Property to order results by (e.g., artificialStreamsCount). |
orderByDescending optional | boolean | If true, orders results in descending order. |
| Filter | Type | Description | Applicable Aggregations |
|---|---|---|---|
targetEnterpriseId | integer | Filter by your child enterprise. | All |
releaseIds | array of integers | Filter by one or more release IDs. | All |
trackIds | array of integers | Filter by one or more track IDs. | All |
artistIds | array of integers | Filter by one or more artist IDs. | All |
labelIds | array of integers | Filter by one or more label IDs. | All |
distributorIds | array of integers | Filter by one or more distributor IDs. | All |
excludeDistributorIds | array of integers | Exclude specific distributor IDs from the results. | All |
countryIds | array of integers | Filter by one or more country IDs. | All |
| Parameter | Type | Description |
|---|---|---|
totals | object | Aggregated totals for the entire request. |
totals.artificialStreamsCount | integer | Total count for artificial streams. |
totals.flaggedAssetsCount | integer | Total count for assets flagged with artificial streams. |
totals.finesAmount | float | Total amount of applied fines. |
fromDate | string | Start date of the data range (ISO 8601 format). |
toDate | string | End date of the data range (ISO 8601 format). |
totalItemsCount | integer | Total number of items in the result set. |
pageNumber | integer | Current page number. |
pageSize | integer | Number of items per page. |
items | array | Resulting array of artificial streams data items. |
items.metadata | object | Metadata for the item. This value changes depending on the aggregation dimension (null if byDate aggregation is used). |
items.metrics | object | Metrics for the item. |
items.metrics.artificialStreamsCount | integer | Count for artificial streams. |
items.metrics.flaggedAssetsCount | integer | Count for flagged assets. |
items.metrics.finesAmount | float | Total amount of fines. |
items.metrics.eventDate | string | Date of the event (ISO 8601 format; null if dateGranularity = All or Null). |
byDate AggregationThe byDate aggregation is unique because it returns a single item in the main items array. This single item
contains a metrics array, and the structure of this metrics array is determined by the dateGranularity parameter.
When using byDate, the metadata object is not present in the response.
Here’s how each dateGranularity option affects the metrics array within the byDate aggregation:
dateGranularity Value | Resulting metrics Array Structure |
|---|---|
Monthly | An array of objects, one for each month in the requested date range. Each object’s eventDate will be the first day of the month (at midnight UTC, e.g., 2024-07-01T00:00:00Z). |
All, Null, or omitted | A single object in the array, containing the aggregated total metrics for the entire specified date range. The eventDate for this object will be null. |
byDate Aggregation Examples/analytics/artificialStreams/dashboard/byClientRetrieves artificial streaming data aggregated by client, comparing a specified date range against a previous one.
When comparison parameters are not provided, certain fields in the response will always be 0 or null:
| Field | Description |
|---|---|
previousArtificialStreamsCount | Artificial stream count for the previous date range. |
artificialStreamsChange | Absolute difference between current and previous counts. |
artificialStreamsChangePct | Percentage change between current and previous counts. |
increase | Indicates whether the change represents an increase (true) or decrease (false). |
These values are 0 or null when either:
previousFromDate and previousToDate are omitted, ordateGranularity = Monthly is used.In these cases, there is no valid prior period for comparison, or the data is aggregated at a consolidated level (e.g., “All”), where per-item changes cannot be calculated.
| Parameter | Type | Description |
|---|---|---|
fromDate optional | string | Start date for the data current range (YYYY-MM-DD). |
toDate optional | string | End date for the data current range (YYYY-MM-DD). |
previousFromDate optional | string | Start date for the previous data range (YYYY-MM-DD). |
previousToDate optional | string | End date for the previous data range (YYYY-MM-DD). |
dateGranularity optional | string | Date granularity for results. Possible values: Monthly, All, Null. |
pageSize optional | integer | Number of items per page. |
pageNumber optional | integer | Page number for pagination. |
orderByProperty optional | string | Property to order results by (e.g., artificialStreamsCount). |
orderByDescending optional | boolean | If true, orders results in descending order. |
| Filter | Type | Description |
|---|---|---|
targetEnterpriseId | integer | Filter by your child enterprise. |
releaseIds | array of integers | Filter by one or more release IDs. |
trackIds | array of integers | Filter by one or more track IDs. |
artistIds | array of integers | Filter by one or more artist IDs. |
labelIds | array of integers | Filter by one or more label IDs. |
distributorIds | array of integers | Filter by one or more distributor IDs. |
excludeDistributorIds | array of integers | Exclude specific distributor IDs from the results. |
countryIds | array of integers | Filter by one or more country IDs. |
| Parameter | Type | Description |
|---|---|---|
totals | object | Aggregated totals for the entire request. |
totals.artificialStreamsCount | integer | Total count for artificial streams (current period). |
totals.previousArtificialStreamsCount | integer | Total count for artificial streams (previous period). |
totals.artificialStreamsChange | integer | The numerical change in artificial streams count (current vs. previous period). |
totals.artificialStreamsChangePct | float | The percentage change in artificial streams count (current vs. previous period). |
fromDate | string | Start date of the current data range (ISO 8601 format). |
toDate | string | End date of the current data range (ISO 8601 format). |
totalItemsCount | integer | Total number of items in the result set. |
pageNumber | integer | Current page number. |
pageSize | integer | Number of items per page. |
items | array | Resulting array of artificial streams data items. |
items.metadata | object | Metadata for the item. |
items.metadata.id | object | Enterprise ID. |
items.metadata.name | object | Enterprise name. |
items.metrics | object | Metrics for the item. |
items.metrics.artificialStreamsCount | integer | Count for artificial streams (current period). |
items.metrics.previousArtificialStreamsCount | integer | Count for artificial streams (previous period). |
items.metrics.artificialStreamsChange | integer | Numerical change in artificial streams count (current vs. previous period). |
items.metrics.artificialStreamsChangePct | float | Percentage change in artificial streams count (current vs. previous period). |
items.metrics.increase | boolean | Indicates if there was an increase in artificial streams (current vs. previous period). |
items.metrics.eventDate | string | Date of the event (ISO 8601 format; null if dateGranularity = All or Null). |