Engagement
Engagement analytics describe how listeners interact with your catalog: whether they save a track, skip it, or play it to the end on streaming services, and how they create with it, like, share, and comment on it on user-generated content (UGC) platforms.
For the date range, pagination, sorting, and shared filters, see the Analytics Overview.
Moving from the V1.0 API? Responses are unchanged—only the route and a few parameters differ. See Migrating from the V1.0 API.
Media Types
The mediaType parameter is required and selects which data you read. The metrics of the other media type are
returned as null (or 0 when a dateGranularity is set).
mediaType | Metrics |
|---|---|
streaming | sub30sCount, savesCount, skipRate, completeRate |
ugc | creationsCount, likesCount, sharesCount, commentsCount, watchTime |
skipRate and completeRate are percentages from 0 to 100. watchTime is in minutes.
Dimensions
| Dimension | Groups by | Populated metadata fields |
|---|---|---|
track | Track. | id, name, version, imageId |
release | Release. | id, name, version, imageId |
artist | Artist. | id, name, imageId |
label | Label. | id, name, imageId |
country | Listener country. | id, iso2Code |
distributor | DSP. | id, name |
consumptionType | Consumption type, such as the listener’s subscription plan. | id, name |
deliveryType | Delivery type (e.g., Subscription Streaming, Ad-Supported Streaming). | id, name |
recordingVersion | Audio format (e.g., stereo, Dolby Atmos). | id, name |
sourceOfStream | Where the stream started on the DSP (e.g., a playlist, radio, the listener’s collection). Streaming only. | sourceOfStreamId, sourceOfStreamName, discoveryTypeId, discoveryTypeName, distributorId, distributorName |
discoveryType | How the listener found the music (e.g., active discovery, passive discovery). Streaming only. | id, name |
date | Nothing. Returns totals for the whole range, or a time series with dateGranularity. | None |
Requesting a streaming-only dimension with mediaType=ugc returns 400 Bad Request.
With dimension=date and a dateGranularity other than all, the response has a single item whose metrics array
holds one entry per period, and totalItemsCount equals the number of periods rather than the number of items. See
Pagination.
The IDs used by the dimension-specific filters (deliveryTypeIds, consumptionTypeIds, recordingVersionTypeIds,
sourceOfStreamIds, discoveryTypeIds) are the ones returned in metadata when you group by that dimension.
Sorting
orderByProperty accepts a metric column, eventdate, or a column of the requested dimension. For how sorting
works, see the Analytics Overview.
| Column | Accepted with |
|---|---|
sub30scount, savescount, skiprate, completerate | mediaType=streaming |
creationscount, likescount, sharescount, commentscount, watchtime | mediaType=ugc |
eventdate | Always. The start of each period when a dateGranularity is set. |
| Dimension | Dimension columns |
|---|---|
track | trackid, trackname, trackversion |
release | releaseid, releasename, releaseversion |
artist | artistid, artistname |
label | labelid, labelname |
country | countryid, iso2code |
distributor | distributorid, distributorname |
consumptionType | consumptiontypeid, consumptiontypename |
deliveryType | deliverytypeid, deliverytypename |
recordingVersion | recordingversiontypeid, recordingversiontypename |
sourceOfStream | sourceofstreamid, sourceofstreamname, discoverytypeid, discoverytypename, distributorid, distributorname |
discoveryType | discoverytypeid, discoverytypename |
date | None |
Get Engagement
/analytics/v1/engagement Retrieves streaming or UGC engagement metrics grouped by the requested dimension.
Query Parameters
| Parameter | Description |
|---|---|
mediaType * string | Which data to read (case-insensitive). See the Media Types section above. Examples: streaming, ugc |
isSkipRate boolean | Return only rows with a skip rate above zero. Streaming only; ignored for |
deliveryTypeIds integer[] | Restrict to these delivery types. Only applied with |
consumptionTypeIds integer[] | Restrict to these consumption types. Only applied with |
recordingVersionTypeIds integer[] | Restrict to these recording versions. Only applied with |
sourceOfStreamIds integer[] | Restrict to these sources of stream. Only applied with |
discoveryTypeIds integer[] | Restrict to these discovery types. Only applied with |
uniqueKeys string[] | Restrict to specific source-of-stream rows, each identified by Examples: 4/10, -1/61 |
dimension * string | How to group the results (case-insensitive). See the Dimensions section above. Examples: track, artist, country, sourceOfStream, date |
countryIds integer[] | Restrict to these listener countries. Retrieved from GET /common/lookup/countries on the V1.0 API. |
distributorIds integer[] | Restrict to these DSPs. Use the |
excludeDistributorIds integer[] | Leave out these DSPs. Use the |
excludeTikTok boolean | Leave out TikTok. Equivalent to adding TikTok to |
releaseIds integer[] | Restrict to these releases. |
trackIds integer[] | Restrict to these tracks. |
artistIds integer[] | Restrict to these artists. Do not send for artist portal accounts—the request is rejected with |
labelIds integer[] | Restrict to these labels. Do not send for label portal accounts—the request is rejected with |
dateGranularity string | Splits each row's metrics into periods (case-insensitive). See Date Granularity in the Analytics Overview. Examples: daily, weekly, monthly, quarterly, yearly, all |
onlyNew boolean | Return only data first loaded today. Cannot be combined with |
orderByProperty string | Sort column (case-insensitive). The accepted values depend on Examples: savescount, skiprate, likescount, watchtime, eventdate |
orderByDescending boolean | Sort in descending order. Defaults to |
pageSize integer | Items per page. Defaults to 2000, which is also the maximum. |
pageNumber integer | 1-based page number. Defaults to 1. |
fromDate string | Inclusive start date ( |
toDate string | Inclusive end date ( |
targetEnterpriseId integer | Scope the request to a single client by passing its ID. |
Responses
object totals EngagementTotalsModel streamsCount integer | null sub30sCount integer | null savesCount integer | null skipRate number | null completeRate number | null creationsCount integer | null likesCount integer | null sharesCount integer | null commentsCount integer | null watchTime number | null fromDate string | null YYYY-MM-DD) after defaults were applied. toDate string | null YYYY-MM-DD) after defaults were applied. totalItemsCount integer pageNumber integer | null pageSize integer | null totalPagesCount number items EngagementListModel[] metadata EngagementMetadataModel null. See the Dimensions section above. id integer | null track, a DSP ID for distributor, and so on). name string | null version string | null imageId string | null iso2Code string | null country dimension. sourceOfStreamId integer | null sourceOfStream dimension. sourceOfStreamName string | null discoveryTypeId integer | null discoveryTypeName string | null distributorId integer | null distributorName string | null metrics EngagementMetricModel[] | null dateGranularity is set. sub30sCount integer | null savesCount integer | null skipRate number | null completeRate number | null creationsCount integer | null likesCount integer | null sharesCount integer | null commentsCount integer | null watchTime number | null eventDate string (date-time) | null null when no dateGranularity (or all) is set./analytics/v1/engagement curl -X GET "https://platform.revelator.com/analytics/v1/engagement?mediaType=streaming&dimension=track&fromDate=2026-09-01&toDate=2026-09-30&orderByProperty=savescount&orderByDescending=true&pageSize=2" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" curl -X GET "https://platform.revelator.com/analytics/v1/engagement?mediaType=streaming&dimension=track&fromDate=2026-09-01&toDate=2026-09-30&orderByProperty=savescount&orderByDescending=true&pageSize=2" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" Example response 200
{
"totals": {
"streamsCount": 249615409,
"sub30sCount": 43711182,
"savesCount": 6802782,
"skipRate": 18.5477,
"completeRate": 73.2953,
"creationsCount": 0,
"likesCount": 0,
"sharesCount": 0,
"commentsCount": 0,
"watchTime": 0
},
"fromDate": "2026-09-01",
"toDate": "2026-09-30",
"totalItemsCount": 80281,
"pageNumber": 1,
"pageSize": 2,
"totalPagesCount": 40141,
"items": [
{
"metadata": {
"id": 7887109,
"name": "Track Title",
"version": null,
"imageId": null,
"iso2Code": null,
"sourceOfStreamId": null,
"sourceOfStreamName": null,
"discoveryTypeId": null,
"discoveryTypeName": null,
"distributorId": null,
"distributorName": null
},
"metrics": [
{
"sub30sCount": 105919,
"savesCount": 252276,
"skipRate": 14.1635,
"completeRate": 77.2199,
"creationsCount": null,
"likesCount": null,
"sharesCount": null,
"commentsCount": null,
"watchTime": null,
"eventDate": null
}
]
},
{
"metadata": {
"id": 8133422,
"name": "Another Track",
"version": null,
"imageId": null,
"iso2Code": null,
"sourceOfStreamId": null,
"sourceOfStreamName": null,
"discoveryTypeId": null,
"discoveryTypeName": null,
"distributorId": null,
"distributorName": null
},
"metrics": [
{
"sub30sCount": 572026,
"savesCount": 74367,
"skipRate": 32.2325,
"completeRate": 47.0366,
"creationsCount": null,
"likesCount": null,
"sharesCount": null,
"commentsCount": null,
"watchTime": null,
"eventDate": null
}
]
}
]
} {
"totals": {
"streamsCount": 249615409,
"sub30sCount": 43711182,
"savesCount": 6802782,
"skipRate": 18.5477,
"completeRate": 73.2953,
"creationsCount": 0,
"likesCount": 0,
"sharesCount": 0,
"commentsCount": 0,
"watchTime": 0
},
"fromDate": "2026-09-01",
"toDate": "2026-09-30",
"totalItemsCount": 80281,
"pageNumber": 1,
"pageSize": 2,
"totalPagesCount": 40141,
"items": [
{
"metadata": {
"id": 7887109,
"name": "Track Title",
"version": null,
"imageId": null,
"iso2Code": null,
"sourceOfStreamId": null,
"sourceOfStreamName": null,
"discoveryTypeId": null,
"discoveryTypeName": null,
"distributorId": null,
"distributorName": null
},
"metrics": [
{
"sub30sCount": 105919,
"savesCount": 252276,
"skipRate": 14.1635,
"completeRate": 77.2199,
"creationsCount": null,
"likesCount": null,
"sharesCount": null,
"commentsCount": null,
"watchTime": null,
"eventDate": null
}
]
},
{
"metadata": {
"id": 8133422,
"name": "Another Track",
"version": null,
"imageId": null,
"iso2Code": null,
"sourceOfStreamId": null,
"sourceOfStreamName": null,
"discoveryTypeId": null,
"discoveryTypeName": null,
"distributorId": null,
"distributorName": null
},
"metrics": [
{
"sub30sCount": 572026,
"savesCount": 74367,
"skipRate": 32.2325,
"completeRate": 47.0366,
"creationsCount": null,
"likesCount": null,
"sharesCount": null,
"commentsCount": null,
"watchTime": null,
"eventDate": null
}
]
}
]
} Migrating from the V1.0 API
This endpoint replaces the V1.0 GET /analytics/engagement/{aggregation} routes. The V1.0 routes are deprecated: after November 25, 2026, they are no longer supported and may stop working
without prior notice.
The response is identical, field for field, and you keep using the same access token. Two things change:
- The route. The
by…path segment becomes thedimensionquery parameter. - The media type.
isUgcis replaced bymediaType, which is now required.
| V1.0 | V2.0 |
|---|---|
https://api.revelator.com/analytics/engagement/by{Aggregation} | https://platform.revelator.com/analytics/v1/engagement?dimension={dimension} |
isUgc=false or omitted | mediaType=streaming |
isUgc=true | mediaType=ugc |
| V1.0 aggregation | dimension |
|---|---|
byTrack | track |
byRelease | release |
byArtist | artist |
byLabel | label |
byCountry | country |
byDistributor | distributor |
byConsumptionType | consumptionType |
byDeliveryType | deliveryType |
byRecordingVersion | recordingVersion |
bySourceOfStream | sourceOfStream |
byDiscoveryType | discoveryType |
byDate | date |
All other query parameters—fromDate, toDate, dateGranularity, isSkipRate, pagination, sorting, and
filters—keep their names and behavior.
- GET https://api.revelator.com/analytics/engagement/byTrack?isUgc=false&fromDate=2026-09-01&toDate=2026-09-30
+ GET https://platform.revelator.com/analytics/v1/engagement?mediaType=streaming&dimension=track&fromDate=2026-09-01&toDate=2026-09-30