Request Lifecycle
The following steps describe what happens during a playback session with Brightcove Recommendations enabled:
- Video starts playback — The player requests recommendations from the Recommendations service. A regular
video_viewevent is tracked. - Recommendations are displayed — The recommendation slate appears (based on the timing configuration). A
recommendation_impressionevent is tracked. The initial video is registered as watched. - Countdown begins — If autoplay is enabled, the countdown timer starts. The next recommended video is pre-fetched.
- Recommended video plays — A new
video_viewis tracked withsource_video_idset to the initial video's ID. The player requests the next set of recommendations based on the initial video (not the current one). Previously watched videos are filtered out. - Cycle continues — Steps 2–4 repeat for each subsequent recommendation. All requests remain anchored to the initial video.
Algorithms
Brightcove Recommendations offers three recommendation strategies. Each uses a different primary signal but all apply the same eligibility and restriction rules.
Related Content
Finds semantically similar content using AI-based similarity as the primary ranking signal. The system analyzes your video metadata to identify the most closely related content in your catalog.
Two boosters refine the results:
- Tag similarity — Favors videos with overlapping tags, improving precision when metadata is well-structured.
- Recency booster — Slightly favors newer content so that fresh videos surface alongside evergreen matches.
Trending Now
Identifies viral and popular content by combining multiple signals:
- Popularity score — Based on total video views within the configured timeframe (daily or weekly).
- Momentum score — Measures the acceleration of video views, identifying content that is gaining traction quickly.
- Time decay — Favors recently trending content over older spikes.
After calculating trending scores, the results are rescored by semantic similarity to the initial video and tag matching to maintain relevance.
Recently Added
Surfaces the latest published content by sorting videos by their publication date (newest first). The results are then rescored by semantic similarity to the initial video and tag matching so that the most relevant new content ranks higher.
Deduplication
The player automatically tracks which videos have already been shown during a session and filters them from future recommendations. The source video is also excluded from its own recommendations.
If the player state is reset (e.g., a page refresh), the tracking resets and previously shown videos may appear again.
Fallback Strategy
When the Expand Recommendations setting is enabled in the Admin module and no results are found:
- The system retries the query without the look-back period and duration constraints.
- Restrictions remain enforced during fallback — they are never relaxed.
This ensures that recommendation slates are not empty while still respecting editorial guardrails.
Recommendations API
In addition to the player plugin, you can access recommendations programmatically via the Recommendations API to power custom UX elements such as rails, carousels, and discovery pages.
Endpoint
POST /v1/accounts/{account_id}/recommendations
Request Body
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
video_id |
string | Yes | — | The source video ID (currently playing or anchor video). |
excluded_ids |
array of strings | No | null | List of video IDs to exclude (for deduplication). |
limit |
integer | No | 1 | Number of recommendations to return (min: 1, max: 50). |
mode |
string | No | related |
Recommendation mode: related, trending, or recent. |
enable_featured_content |
boolean | No | true | Whether to include promoted content in the results. |
Example Request
POST /v1/accounts/1234567890/recommendations
Content-Type: application/json
{
"video_id": "6345678901234",
"limit": 6,
"mode": "related",
"excluded_ids": ["6345678901111", "6345678901222"],
"enable_featured_content": true
}
Example Response
{
"recommendations": [
{
"video_id": "6345678901235",
"reason": "related"
},
{
"video_id": "6345678901236",
"reason": "related"
},
{
"video_id": "6345678901237",
"reason": "featured"
}
],
"count": 3
}
Each recommendation includes a reason field indicating why the video was recommended: related, trending, recent, or featured (for promoted content).