GuidesAPI ReferenceRelease Notes
HomeLog InHome
Guides

Recommendations API

Request currently trending content, ranked from highest trending score to lowest. Send one ContentType per call: Story or Moment.

Endpoint

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

The token is sent as a query parameter. 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}

Treat feed URLs as credentials. The key travels in the URL, so it can appear in server logs, browser history, and CDN logs. Call the feed from your server, not from a browser.

Rate limit:

  • Limit: 50 requests per 60 seconds per content type, per app
  • Feed keys: all keys for the same app share the limit
  • Successful responses: no quota headers.

Parameters

ParameterTypeRequiredDescription
ApiKeystringYesAPI token
ContentTypestringYesThe content type to return trending content for. One value per call. Story or Moment
GeostringNoReturn content trending in this country (ISO 3166 two-letter code). Send gb, not GB. Omit for globally trending content

Trending isn't available for Videos. Requesting ContentType=Video 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(`https://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

Status codeMeaning
200 OKRequest successful
400 Bad RequestMissing or unsupported ContentType, or an invalid Geo country code
401 UnauthorizedMissing, invalid, or inactive API key
429 Too Many RequestsRate limit exceeded. Includes Retry-After (seconds) and a plain-text body
500 Internal Server ErrorServer error

Did this page help you?