Skip navigation

Call to Action (CTA)

Updated: 12.08.2026
Open as Markdown
This feature has @experimental status. It is stable enough to use, but API details may change. Follow the player changelog .

A CTA is a call to action displayed over a video. Use it for subscriptions, links, timeline buttons, or lead forms. Configure CTAs in playlist[].cta when you create a player . You can also use setPlaylistItemOptions .

You can configure a simple CTA at the end of a video without code. Use a player template .

Display types

The type field defaults to overlay:

typeBehavior
overlayCovers the player and pauses playback
popupShows a pop-up panel without pausing playback
panelShows a transparent panel without pausing playback
bannerShows a banner with an image or link
buttonsShows buttons over the frame. A click can move through the playlist or timeline
leadgenCollects user data and sends it to your URL

Quick start: overlay

function onKinescopeIframeAPIReady(playerFactory) {
  playerFactory
    .create('player', {
      url: 'https://kinescope.io/VIDEO_ID',
      playlist: [
        {
          cta: [
            {
              id: 'subscribe-cta',
              type: 'overlay', // Optional: this is the default value
              title: 'Did you enjoy the video?',
              description: 'Subscribe to the channel so you do not miss new releases.',
              skippable: true,
              button: { text: 'Subscribe' },
              trigger: { percentages: [50] },
            },
          ],
        },
      ],
    })
    .then((player) => {
      player.on(player.Events.CallAction, (event) => {
        // event.data.id === 'subscribe-cta'
        window.open('https://example.com/subscribe', '_blank')
        player.closeCTA()
      })
    })
}

When a user clicks the CTA button, the CallAction event fires. Handle your action and close the screen with closeCTA() . Playback resumes after an overlay closes.

If you set button.url, the player can open the link. You still receive CallAction, which is useful for analytics.

Common fields and trigger

FieldTypeDescription
idstringIdentifier included in CallAction
typeSee display typesDisplay mode. The default is overlay
trigger.percentagesnumber[]Playback percentages, such as [50, 100]
trigger.timePointsnumber[]Time points in seconds, such as [60, 600]
trigger.pausebooleanShows the CTA when playback pauses

Set at least one trigger: percentages, timePoints, or pause. You can combine them.

overlay, popup, and panel

Common fields:

FieldTypeDescription
titlestringTitle
descriptionstringDescription
skippablebooleanLets the user close or skip the CTA
button.textstringButton label
button.styleCSSPropertiesButton styles
button.urlstringURL opened on click

Additional fields:

FieldTypesDescription
linkoverlaySecond link: { text, url, style? }
posteroverlayPoster or image on the CTA screen
positionpopup, panel'top' | 'bottom'

Example of a popup displayed on pause:

{
  id: 'pause-offer',
  type: 'popup',
  position: 'bottom',
  title: 'Continue later?',
  button: { text: 'Save progress', url: 'https://example.com/save' },
  skippable: true,
  trigger: { pause: true },
}
FieldTypeDescription
title, description, skippable, buttonSame as overlayMain fields
urlstringBanner link
imagestring | poster objectImage
positionstring'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right'
variant'vertical' | 'horizontal'Layout
styleCSSPropertiesContainer styles

buttons

This type shows buttons over the frame. Playback continues by default. Set pause on the item to pause it.

{
  id: 'hotspots',
  type: 'buttons',
  trigger: { timePoints: [30] },
  list: [
    {
      id: 'go-chapter-2',
      title: 'Chapter 2',
      position: { x: 0.2, y: 0.5 }, // Relative to the frame, from 0 to 1
      goTo: { playlistItem: 0, time: 120 },
    },
  ],
}
FieldDescription
list[].idButton ID
list[].titleLabel
list[].position{ x, y } relative to the frame size
list[].goTonumber for time in seconds, or { playlistItem, time? }
list[].styleButton styles
pausePauses playback when the CTA appears

leadgen

This type collects user data. The player sends the fields to your url with a POST request.

FieldTypeDescription
urlstringForm submission endpoint
fieldsArray<'name' | 'email' | 'company'>Fields to show
privacyPolicyUrlstringPrivacy policy link
lifetimenumberHow long this id counts as submitted. The default is 30 days
skippablebooleanLets the user close the form without submitting it
triggerSame as other CTA types
{
  id: 'lead-end',
  type: 'leadgen',
  url: 'https://example.com/api/leads',
  fields: ['name', 'email'],
  privacyPolicyUrl: 'https://example.com/privacy',
  skippable: true,
  trigger: { percentages: [100] },
}

Next steps