media server logo
Toggle documentation navigation
Callaba home

Web player groups

Use Web player groups to give viewers one page for switching between approved language feeds, camera angles, or replay variants.

What it doesLet viewers switch between feeds

Choose this whenSeveral existing players need one viewer page for language, angle, or replay switching.

Use another module whenUse Web Players to create and verify each underlying playback endpoint first.

1Choose the players2Set shared access3Publish one page
POST /api/vod-group/create
8 endpoints

Before you start

All management methods require a valid x-access-token. Create and test the individual web players before adding their identifiers to a group.

What you can do

  • create and update define membership, default selection, access, branding, and event settings.
  • getAll, getCount, and getById inspect groups.
  • start and stop control group availability.
  • remove deletes the group but leaves its member web players intact.

Example workflow

  1. Create and validate one web player for each language feed.
  2. Create a group containing those player identifiers.
  3. Select the primary language as the default.
  4. Apply the shared access and event settings.
  5. Start the group and publish its viewer URL or embed.

Common use cases

  • Offer parallel language or commentary feeds on one event page.
  • Publish a curated set of replay or episode variants.
  • Apply one restricted or pay-per-view policy to several players.

Limits and troubleshooting

A group depends on valid, playable member resources. Removing or stopping a member can leave an unavailable option in the group until it is updated. Test the default selection, access flow, and every member before publishing.

Next steps

Open Web players to prepare each source, then embed or link the tested group in the viewer experience.

REST solution recipe

Create a pay-per-view event experience

Prepare the player or players first, group the approved feeds under one viewer page, and apply the pay-per-view and access settings on that group.

  1. Create the event playerPrepare each live or recorded feed that viewers may purchase.POST /api/vod/create
  2. Create the paid groupAttach the player entries and configure pay_per_view_settings, access, branding, and event metadata.POST /api/vod-group/create
  3. Open the viewer experienceStart the group only after purchase and playback checks pass.POST /api/vod-group/start

A payment configuration is not a completed commerce test. Validate purchase, authorization, support contact, and playback with a test customer before the event.

See the pay-per-view product
POST
/api/vod-group/create
API token required

Use this method when several players should go live as one viewer-facing experience with shared switching, branding, event framing, or access policy.

It is the standard setup step for multi-language, multi-angle, or commentary groups, especially when password or pay-per-view rules must apply across the whole group. If operators trigger publication from production tools, the preset examples below include matching vMix Script requests.

Language selector group

Use this when several parallel web players represent language or commentary variants and one should be selected by default.

Language selector group
Copy code
curl --request POST \
--url http://localhost/api/vod-group/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"name": "Main event language selector",
"type": "LANGUAGE_LIST",
"players": [
{
"id": "PLAYER_ID_ENGLISH",
"name": "English",
"selected": true
},
{
"id": "PLAYER_ID_SPANISH",
"name": "Spanish",
"selected": false
}
],
"authorization": {
"authorization_type": "VOD_PASSWORD_DISABLED",
"credentials": []
},
"pay_per_view_settings": {
"type": "PAY_PER_VIEW_DISABLED"
},
"support_email": "[email protected]",
"eventDateStatus": "EVENTS_DATE_DISABLED",
"active": true
}'
File playlist group

Use this when the grouped browser experience should switch between on-demand assets or prepared file-backed players.

File playlist group
Copy code
curl --request POST \
--url http://localhost/api/vod-group/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"name": "On-demand episode selector",
"type": "FILES_LIST",
"players": [
{
"id": "PLAYER_ID_EPISODE_1",
"name": "Episode 1",
"selected": true
},
{
"id": "PLAYER_ID_EPISODE_2",
"name": "Episode 2",
"selected": false
}
],
"authorization": {
"authorization_type": "VOD_PASSWORD_DISABLED",
"credentials": []
},
"pay_per_view_settings": {
"type": "PAY_PER_VIEW_DISABLED"
},
"eventDateStatus": "EVENTS_DATE_DISABLED",
"active": true
}'
Password-protected event group

Use this when the grouped playback should stay private behind a shared guest password.

Password-protected event group
Copy code
curl --request POST \
--url http://localhost/api/vod-group/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"name": "Private webinar playback group",
"type": "LANGUAGE_LIST",
"players": [
{
"id": "PLAYER_ID_PRIVATE_MAIN",
"name": "Main stream",
"selected": true
}
],
"authorization": {
"authorization_type": "VOD_USE_PASSWORD",
"credentials": [
{
"name": "Guest",
"password": "guest-password"
}
]
},
"pay_per_view_settings": {
"type": "PAY_PER_VIEW_DISABLED"
},
"support_email": "[email protected]",
"eventDateStatus": "EVENTS_DATE_DISABLED",
"active": true
}'
Pay-per-view event group

Use this when a branded event page should wrap one or more players with PayPal-based access and event timing metadata.

Pay-per-view event group
Copy code
curl --request POST \
--url http://localhost/api/vod-group/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"name": "Paid event player group",
"type": "LANGUAGE_LIST",
"players": [
{
"id": "PLAYER_ID_MAIN_STAGE",
"name": "Main stage",
"selected": true
}
],
"authorization": {
"authorization_type": "VOD_PASSWORD_DISABLED",
"credentials": []
},
"pay_per_view_settings": {
"type": "PAY_PER_VIEW_PAYPAL",
"amount": 19,
"client_id": "PAYPAL_CLIENT_ID"
},
"support_email": "[email protected]",
"event_date": "2026-04-01T18:00:00.000Z",
"timeZone": "Europe/Istanbul",
"eventDateStatus": "EVENTS_SET_DATE",
"active": true
}'
Request body parameters
Identity
name
string
Copy direct link

Dashboard label: Group name.

Human-readable name of the grouped playback experience.

type
string
Copy direct link

Dashboard label: Type.

Real product values include LANGUAGE_LIST and FILES_LIST.

Players
players[]
array
Copy direct link

List of linked player entries. Each item includes id, display name, and a selected flag used for the default choice.

Access
authorization
object
Copy direct link

Optional viewer authorization block. Real product modes include VOD_PASSWORD_DISABLED, VOD_USE_PASSWORD, and email-plus-password flows.

Monetization
pay_per_view_settings
object
Copy direct link

Optional pay-per-view block. The current dashboard exposes a PayPal-based mode in addition to the disabled default.

Presentation
cover_path / logo_path / useCustomLogo / useCustomBackground
mixed
Copy direct link

Optional branding fields for the grouped playback page.

support_email
string
Copy direct link

Optional support contact shown alongside the event-style player experience.

event_date / timeZone / eventDateStatus
mixed
Copy direct link

Optional event timing metadata stored on the group.

Runtime
active
boolean
Copy direct link

Dashboard label: Enable once created.

Controls whether the group should be active right after provisioning.

Create web player group
Copy code
curl --request POST \
--url http://localhost/api/vod-group/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"name": "Main event language selector",
"type": "LANGUAGE_LIST",
"players": [
{
"id": "PLAYER_ID_ENGLISH",
"name": "English",
"selected": true
},
{
"id": "PLAYER_ID_SPANISH",
"name": "Spanish",
"selected": false
}
],
"authorization": {
"authorization_type": "VOD_PASSWORD_DISABLED",
"credentials": []
},
"pay_per_view_settings": {
"type": "PAY_PER_VIEW_DISABLED"
},
"support_email": "[email protected]",
"eventDateStatus": "EVENTS_DATE_DISABLED",
"active": true
}'
Response
Identity
_id / id / name / type
mixed
Copy direct link

Identifiers and the core group identity fields.

Players
players[]
array
Copy direct link

Stored player entries in the group, including default-selection state.

Access
authorization / users
mixed
Copy direct link

Authorization state plus any linked viewer users that belong to the group.

Monetization
pay_per_view_settings
object
Copy direct link

Stored pay-per-view configuration for the group.

Presentation
cover_path / logo_path / support_email / event_date / timeZone / eventDateStatus
mixed
Copy direct link

Branding and event metadata returned with the group object.

Runtime
active / created / modified
mixed
Copy direct link

Current running-state flag and backend-managed timestamps.

Operation result
success
boolean
Copy direct link

The model exposes success: true as a virtual field in successful responses.

Response: Create web player group
JSON
Copy code
{
"_id": "6a1144aa22bb33cc44dd55ee",
"id": "6a1144aa22bb33cc44dd55ee",
"name": "Main event language selector",
"type": "LANGUAGE_LIST",
"players": [
{
"id": "6a1144aa22bb33cc44dd5601",
"name": "English",
"selected": true
},
{
"id": "6a1144aa22bb33cc44dd5602",
"name": "Spanish",
"selected": false
}
],
"authorization": {
"authorization_type": "VOD_PASSWORD_DISABLED"
},
"pay_per_view_settings": {
"type": "PAY_PER_VIEW_DISABLED"
},
"cover_path": "",
"logo_path": "",
"useCustomLogo": "VOD_DISABLE_LOGO",
"useCustomBackground": "VOD_DISABLE_BACKGROUND",
"support_email": "[email protected]",
"event_date": "2026-04-01T18:00:00.000Z",
"timeZone": "Europe/Istanbul",
"eventDateStatus": "EVENTS_DATE_DISABLED",
"active": true,
"created": "2026-03-24T18:00:00.000Z",
"modified": "2026-03-24T18:00:00.000Z",
"success": true
}
POST
/api/vod-group/getCount
API token required
POST
/api/vod-group/getAll
API token required
POST
/api/vod-group/getById
API token required
POST
/api/vod-group/update
API token required
POST
/api/vod-group/start
API token required
POST
/api/vod-group/stop
API token required
DELETE
/api/vod-group/remove
API token required