How Recommendations Work

Learn how Brightcove Recommendations generates recommendations, including the request lifecycle, algorithms, deduplication, and the Recommendations API.

Request Lifecycle

The following steps describe what happens during a playback session with Brightcove Recommendations enabled:

  1. Video starts playback — The player requests recommendations from the Recommendations service. A regular video_view event is tracked.
  2. Recommendations are displayed — The recommendation slate appears (based on the timing configuration). A recommendation_impression event is tracked. The initial video is registered as watched.
  3. Countdown begins — If autoplay is enabled, the countdown timer starts. The next recommended video is pre-fetched.
  4. Recommended video plays — A new video_view is tracked with source_video_id set 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.
  5. 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.

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.

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:

  1. The system retries the query without the look-back period and duration constraints.
  2. 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

Request body fields
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).