playerHeartbeat
const url = 'https://example.com/api/v1/player/heartbeat';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"playerFamily":"example","playerArchitecture":"example","browser":{"browserName":"chrome","browserMajorVersion":1,"displayMode":"browser_tab","fullscreenActive":true,"audioUnlocked":true,"wakeLock":"active","storagePersistence":"persistent","storageUsageBytes":1,"storageQuotaBytes":1,"offlineContent":"ready","serviceWorker":"controlling","serviceWorkerVersion":"example","wasDiscarded":true}}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://example.com/api/v1/player/heartbeat \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "playerFamily": "example", "playerArchitecture": "example", "browser": { "browserName": "chrome", "browserMajorVersion": 1, "displayMode": "browser_tab", "fullscreenActive": true, "audioUnlocked": true, "wakeLock": "active", "storagePersistence": "persistent", "storageUsageBytes": 1, "storageQuotaBytes": 1, "offlineContent": "ready", "serviceWorker": "controlling", "serviceWorkerVersion": "example", "wasDiscarded": true } }'Accepts the authenticated Player heartbeat. Optional Linux Display Control fields report detected providers, independent capabilities, display power observations, and policy state. They do not determine Player online status; command acknowledgement and display state confirmation remain separate.
Players released with the retired Noise Meter plugin may still send a noiseMeter object. The server accepts it and ignores it, so the rest of the heartbeat is recorded.
Authorizations
Section titled “Authorizations”Request Body
Section titled “Request Body”The Player status document. Only the release family fields are described here; the remaining fields are the existing heartbeat contract and are additive.
object
android, electron-linux, edge, windows or browser. The server keeps only these values; another value is recorded as absent.
x86_64 or aarch64, kept only with playerFamily: edge or playerFamily: windows. An Edge or Windows screen without a known architecture is incompatible for its family’s deployments.
Facts only a Browser Player can measure. A Browser Player also reports the generic reliability fields where their meaning matches: foregroundState (foreground, background, frozen or recovering), immersiveModeActive (the effective unattended presentation: fullscreen or an installed app), keepScreenOn, activeHoursState (active or off_hours) and cachedFallbackAvailable. Every value is a measurement. The server draws the health conclusions. The Browser Player sends no identifier that could single out one browser.
object
standalone_pwa when the page runs as an installed app, otherwise browser_tab.
Whether the browser allows audible playback now.
persistent only when the browser said so. best_effort means the browser may remove downloaded content under storage pressure.
True when the browser discarded this page and the Player restarted it.
Responses
Section titled “ Responses ”Heartbeat accepted. data.ignoredFields names optional playback identifiers that were malformed and therefore dropped.
object
object
Optional playback identifiers that were malformed and therefore dropped.
Examplegenerated
{ "data": { "accepted": true, "ignoredFields": [ "example" ] }}Heartbeat body rejected
Credential invalid or revoked
Screen disabled