Player

Video player URL parameters.

The player app is hosted on /play/ on your site. To play a slug, the url is https://yoursite.com/play/#/film/123

Note: the slug, and any player URL parameters go in the hash/fragment portion of the URL!

Supported parameters

Some of these parameters (e.g. Chromecast, Airplay) are also controlled globally by site configuration.

Parameter Type Description Default
t number Position in the video to play from. Resume from last watched. May prompt the user if they want to start over
from string Where the player was launched from. This is where the back button on the player titlebar will take you. Setting this to blank &from= will hide the back button  
nav bool Set to false to hide the player title bar and back button. true
airplay string false will disable the Airplay option true
cast bool false will disable the Chromecast option true
rates bool Enable faster playback rates UI false
p string Playtoken. If provided this is used to authorize video playback. None. The user’s auth will be used, and they’ll be redirected to sign in if unauthorized
u string User auth token. If provided this is used to authorize video playback. None. The user’s auth will be used from browser storage, and they’ll be redirected to sign in if unauthorized
m string Additional playback position telemetry URL. Telemetry will be sent here as well as Shift72 servers  

Example

https://vod.shift72.com/play/#/film/123?from=https:%2F%2Fapidocs.shift72.com&p=eyJhbGciOiJIUzI1NiIsInR5cCI...

Window messages

The player sends events to its parent window using the browser’s postMessage API. These allow an embedding page to observe playback state, update its own UI, or collect additional telemetry.

All messages are objects with an event property prefixed with s72-player:.

Playback events

Sent when playback starts or pauses.

{
  event: 's72-player:play' | 's72-player:pause';
  slug: string;
}

Playback position events

Sent when the playback position changes, playback finishes, or the user seeks to a different position.

{
  event: 's72-player:timeupdate'
       | 's72-player:ended'
       | 's72-player:seeking'
       | 's72-player:seeked';

  slug: string;
  currentTime: number;
  duration: number;
}

currentTime and duration are measured in seconds.

The timeupdate event is sent periodically during playback, and may also be sent when the playback position changes. Its frequency depends on the underlying media player.

Volume changes

Sent when the volume or mute state changes.

{
  event: 's72-player:volumechange';
  slug: string;
  volume: number;
  muted: boolean;
}

volume is a number between 0 (silent) and 1 (full volume).

Listening for events

The embedding page can listen for messages using window.addEventListener:

window.addEventListener('message', (event) => {
  // Verify the message came from your player
  if (event.origin !== 'https://yoursite.com') return;

  const message = event.data;
  if (typeof message?.event !== 'string') return;
  if (!message.event.startsWith('s72-player:')) return;

  console.log(message);
});

Additional Telemetry URL

The player sends a series of telemetry events roughly every 30 seconds of playback. This allows tracking engagement/watch time, and is also used to track playback progress.

If you provide a telemetry URL, these events will also be sent to your server as a POST request.

The user’s playtoken will be sent as the X-Play-Session header. This can be decoded to access info about the user, or any additional claims added when issuing an external user token.

The payload is documented in the telemetry endpoint

POST /your-api/telemetry
Host: yoursite.com
X-Play-Session: eyJhbGciOiJIUzI1NiIsInR5cCI...
Content-Type: application/json

{
  "ts": "2025-08-08T00:11:34.524Z",
  "slug": "/film/3283",
  "player": 1,
  "elapsed": 30,
  "buffered": 0,
  "bitrate": 4658,
  "estbitrate": 88432,
  "seeked": false,
  "position": 30,
  "length": 214,
  "droppedFrames": 0,
  "adBlocked": false
}

The web player will send telemetry with player id 1 (DASH: most browsers), or 6 (HLS: Safari and Safari-adjacent browsers). The additional telemetry URL will also be passed to Chromecast which will have player_id 4