playerHeartbeat
const url = 'https://example.com/api/v1/player/heartbeat';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"noiseMeter":{"status":"active","currentLevel":1,"pendingHistory":[{"startedAt":"2026-04-15T12:00:00Z","averageLevel":1,"peakLevel":1,"monitoredMs":1,"warningMs":1,"loudMs":1,"triggerCount":1}]}}'};
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 '{ "noiseMeter": { "status": "active", "currentLevel": 1, "pendingHistory": [ { "startedAt": "2026-04-15T12:00:00Z", "averageLevel": 1, "peakLevel": 1, "monitoredMs": 1, "warningMs": 1, "loudMs": 1, "triggerCount": 1 } ] } }'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.
The optional noiseMeter object carries the Noise Meter plugin’s live state and its completed ten-second history buckets. It is derived numbers only — no audio, waveform, or sample is exchanged in either direction. The screen is taken from the authenticated device credential, never from the body, and a batch is bounded to 120 records. Storage is idempotent on screen plus bucket start, so a retried heartbeat cannot duplicate history.
Authorizations
Section titled “Authorizations”Request Body
Section titled “Request Body”The Player status document. Only the optional Noise Meter section is described here; the remaining fields are the existing heartbeat contract and are additive.
object
Noise Meter plugin state. Contains no audio, waveform, or sample, and levels are the relative 0-100 Tilecast scale rather than dB, dBA, or SPL.
object
The live relative level when the heartbeat was built.
The oldest unacknowledged ten-second buckets. Bounded per heartbeat; the rest stay queued on the Player for later heartbeats rather than accelerating the cadence.
object
Start of the fixed ten-second grid slot.
How much of the bucket the microphone actually covered, so a partly monitored slot is not read as ten seconds of quiet.
Times the Player’s state machine entered its loud state in this bucket, counted where it happened.
Responses
Section titled “ Responses ”Heartbeat accepted. data.ignoredFields names optional playback identifiers that were malformed and therefore dropped. data.noiseHistory.accepted is how many submitted Noise Meter records the server has taken responsibility for; a Player keeps its batch until it sees that count.
Heartbeat body rejected
Credential invalid or revoked
Screen disabled