GuidesAPI ReferenceRelease Notes
HomeLog InHome
Guides

Recommendations

The recommendations endpoint returns content that is currently trending, ranked from highest to lowest trending score.

It returns full content metadata rather than IDs alone, so you can render a trending row without a second call. Trending status is calculated by the Experiences recommendations engine. You request it for one content type per call.

Endpoint

GET https://blazefeed.clipro.tv/v1/recommendations/trending

Authentication works the same way as the rest of the API. The token is sent as a query parameter, and it's the Feed Key, which is different from the app API key. If you don't have one, ask your WSC Sports account manager.

https://blazefeed.clipro.tv/v1/recommendations/trending?ContentType=Moment&ApiKey={MyToken}

Query parameters

Query parameters are sent per call.

ParameterTypeRequiredDescription
ApiKeystringYesAPI token
ContentTypestringYesThe content type to return trending content for. One value per call. Story or Moment
GeostringNoReturn content trending in a specific country, as an ISO 3166 two-letter country code, for example US. Omit for globally trending content

Trending isn't available for Videos or Streams. Requesting either returns 400 Bad Request.

This endpoint doesn't support paging. It returns the current trending set for the content type you request.

Response

The response has two fields.

FieldTypeDescription
lastUpdatedstring (datetime)When the newest item in the trending set was created. null when recommendations is empty
recommendationsarray of objectsThe trending content, ordered from the highest trending score to the lowest. Up to 100 items. Empty when there's nothing to return

Each entry in recommendations uses the same content model as the rest of the API. For the field-by-field breakdown, see Response principles, Response: Stories, and Response: Moments.

Example JSON - doesn't contain all properties

{
  "lastUpdated": "2026-09-03T09:02:41Z",
  "recommendations": [
    {
      "type": "Moment",
      "id": "6a92fa1ee363eba308515c63",
      "title": "Late header seals the win",
      "description": "",
      "subtitle": "",
      "version": 0,
      "aspectRatios": [
        "Vertical"
      ],
      "status": "Active",
      "duration": 14,
      "createTime": "2026-08-29T15:26:22.95Z",
      "updateTime": "2026-08-29T21:34:17.801Z",
      "thumbnails": [
        {
          "url": "https://cdn.example.com/games/UUID_VerticalTwoByThree.jpg",
          "aspectRatio": "TwoToThree"
        },
        {
          "url": "https://cdn.example.com/games/UUID.gif",
          "aspectRatio": "Vertical"
        }
      ],
      "metadata": {
        "competition": {
          "provider": null,
          "providerId": null,
          "wscId": 51282
        }
      },
      "labels": [
        {
          "title": "Goals",
          "identifier": "goals"
        }
      ],
      "defaultLanguage": "en",
      "translatedTitles": {
        "en": "Late header seals the win",
        "es": "Un cabezazo tardío sella la victoria"
      },
      "competitionId": "51282"
    }
  ]
}

The recommendations array holds the content type you requested, so a Moment request returns Moment objects and a Story request returns Story objects.

The response order carries the ranking. Trending scores themselves aren't included, and no field marks an individual item as trending.

When an experiment is running, only the main active configuration counts toward trending status.

An empty response

A successful call can return nothing:

{
  "lastUpdated": null,
  "recommendations": []
}

This is a 200, not an error, and it means either trending isn't enabled for what you asked for, or it is and there's no trending content at the moment. The response doesn't distinguish the two.

Trending is enabled per app and per content type, so an app can return Moments and nothing for Stories. Whether it's enabled at all also depends on how the app's recommendations are set up, which is configured on the WSC Sports side.

If you get an empty result and expect content, ask your WSC Sports account manager to confirm trending is enabled for that app and content type.

Example calls

Fetch trending Moments

const fetchTrending = async (apiKey, contentType) => {
  const response = await fetch(`blazefeed.clipro.tv/v1/recommendations/trending?ContentType=${contentType}&ApiKey=${apiKey}`);

  if (!response.ok) {
    throw new Error(`HTTP error! Status: ${response.status}`);
  }

  return await response.json();
};

Check whether specific content is trending

Because the ranking is the response order, one call tells you both whether content is trending and where it sits relative to everything else. Build your catalog from the content type endpoints, then check membership at the point where you use the result.

const getTrendingRank = async (apiKey, contentType, contentId) => {
  const { recommendations } = await fetchTrending(apiKey, contentType);
  const rank = recommendations.findIndex(item => item.id === contentId);

  return rank === -1 ? null : rank + 1;
};

Call the endpoint when you need the result, rather than caching the trending set alongside your catalog. Trending changes on its own schedule, and lastUpdated tells you when it last did.

HTTP return messages

The endpoint returns the same codes as the rest of the API. Rate limiting also works the same way. See Content catalog.

A 400 Bad Request from this endpoint means a missing or unsupported ContentType, or an invalid Geo country code.


Did this page help you?