API REFERENCE
Read listening activity
On this page
/api/players/{id}/activityPrivate 30-day summary plus up to 100 events, newest first. Returns measurement=browser_reported_playback, dspStreams=null, periodDays, offset, limit and report (sessions, connectedFans, reportedListeningMs, playEvents, campaigns, activity). Activity has session_id, provider, track_id, event, position_ms, listened_ms, received_at, fan_id and display_name. Anonymous Apple sessions have no fan identity. These are reported SDK observations, not DSP stream counts, cross-device monitoring, or causal uplift. MCP: get_release_player_activity.
Authentication
x-api-key in header
bearerAuth bearer
Request
curl --request GET \
--url 'https://api.recoupable.dev/api/players/YOUR_ID/activity' \
--header 'x-api-key: YOUR_API_KEY'Replace the YOUR_ placeholders with your values. Required query parameters are included; optional parameters are listed below.
Try it
Fill in the fields, send the request from your browser, and read the live response. The curl below updates as you type.
Kept in this browser tab only and cleared when it closes.
curl --request GET \
--url 'https://recoup-api.vercel.app/api/players/{id}/activity'Parameters
Path parameters
idstringrequiredQuery parameters
organizationIdstring | nulloffsetintegerDefault: 0
Responses
200PlayerReportResponse fields returned by the release player service.+
application/json
measurementstringrequireddspStreamsnullrequiredperiodDaysintegerrequiredoffsetintegerrequiredformat: int64
limitintegerrequiredreportobjectrequiredProperties for report
sessionsintegerrequiredformat: int64
connectedFansintegerrequiredformat: int64
reportedListeningMsintegerrequiredformat: int64
playEventsintegerrequiredformat: int64
campaignsarray<object>requiredItem properties for campaigns
providerstringsourcestring | nullcampaignstring | nullsessionsintegerformat: int64
listened_msintegerformat: int64
activityarray<PlayerActivity>requiredItem properties for activity
idstringrequiredformat: uuid
session_idstringrequiredformat: uuid
eventstringrequiredproviderstring · enumrequiredValues: "spotify", "apple_music"
track_idstring | nullposition_msintegerformat: int64
listened_msintegerrequiredformat: int64
received_atstringrequiredformat: date-time
fan_idstring | nullformat: uuid
display_namestring | nullcontact_idstring | nullformat: uuid
400Invalid input+
application/json
errorstringrequiredstatusstring401Missing/invalid authentication or failed provider authorization+
application/json
errorstringrequiredstatusstring403Workspace, origin, or session access denied+
application/json
errorstringrequiredstatusstring404Player not available+
application/json
errorstringrequiredstatusstring429Request rate limit exceeded+
application/json
errorstringrequiredstatusstring503Feature/configuration temporarily unavailable+
application/json
errorstringrequiredstatusstringFull specification
Download the OpenAPI file for complete schemas, constraints, and examples.
Download players.jsonView operation source
{
"summary": "Read player listening activity",
"description": "Private 30-day summary plus up to 100 events, newest first. Returns measurement=browser_reported_playback, dspStreams=null, periodDays, offset, limit and report (sessions, connectedFans, reportedListeningMs, playEvents, campaigns, activity). Activity has session_id, provider, track_id, event, position_ms, listened_ms, received_at, fan_id and display_name. Anonymous Apple sessions have no fan identity. These are reported SDK observations, not DSP stream counts, cross-device monitoring, or causal uplift. MCP: get_release_player_activity.",
"security": [
{
"apiKeyAuth": []
},
{
"bearerAuth": []
}
],
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "organizationId",
"in": "query",
"schema": {
"type": [
"string",
"null"
],
"format": "uuid",
"description": "Authorized workspace; omit for the authenticated account. Never send account_id."
}
},
{
"name": "offset",
"in": "query",
"schema": {
"type": "integer",
"minimum": 0,
"maximum": 100000,
"default": 0
}
}
],
"responses": {
"200": {
"description": "PlayerReportResponse fields returned by the release player service.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PlayerReportResponse"
}
}
}
},
"400": {
"description": "Invalid input",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PlayerError"
}
}
}
},
"401": {
"description": "Missing/invalid authentication or failed provider authorization",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PlayerError"
}
}
}
},
"403": {
"description": "Workspace, origin, or session access denied",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PlayerError"
}
}
}
},
"404": {
"description": "Player not available",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PlayerError"
}
}
}
},
"429": {
"description": "Request rate limit exceeded",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PlayerError"
}
}
}
},
"503": {
"description": "Feature/configuration temporarily unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PlayerError"
}
}
}
}
}
}