GuidesAPI ReferenceRelease Notes
HomeLog InHome
Guides

Content catalog

The content catalog returns Experiences content metadata in JSON, so you can query your catalog and build your own experience around it. Endpoints are segmented by content type - Stories, Moments, and Videos. Content can be retrieved in pages or per given content ID. The JSON structure is similar per content type, but there are differences.

This is the pull half of the Blazefeed API. To be notified when catalog content changes instead of polling for it, see Updates. For content ranked by WSC Sports rather than queried by you, see Recommendations.

Relationship to the Experiences SDK

  • You choose what the SDK serves using labels, content IDs, or a mixture of both. Labels require mapping viewer preferences to content labels in Arena.
  • Content IDs require ingesting the Experiences content catalog with the Blazefeed pull API, querying that catalog using viewer preferences, ranking the returned content IDs, and passing the ordered list to the SDK.
  • Blazefeed is server-side access to catalog metadata and IDs for that ID path. For the full picture and setup notes (including that the Blazefeed ApiKey is not the Experiences app API key), see Explicit personalization.
  • You can implement a mix of both labels and content IDs to provide viewers with a rich content set. Consider, however, that label-based content selection is more straightforward than the Blazefeed API content ID approach, which requires more processing.

API facts

ItemValue
Base URLhttps://blazefeed.clipro.tv/v1/{endpoint}
AuthenticationAPI key sent as a query parameter: ?ApiKey={YourToken}. If you don't have a token, ask your WSC Sports account manager. Note! This token is different from the app API key
MethodGET

Endpoints

Content types are segregated by endpoint.

Content typeFiltered content listContent-specific ID
Stories/stories/stories/ids
Moments/moments/moments/ids
Videos/videos/videos/ids

A further endpoint, /recommendations/trending, returns the content that is currently trending rather than your catalog. It takes the content type as a query parameter instead of in the path, and covers Stories and Moments. See Recommendations.

Call format with authentication token

The API requires a token sent as a query parameter. This is shown in the example that follows. You need to replace {MyToken} with the token given to you by your WSC Sports account manager. Note! This token differs from the app API key.

https://blazefeed.clipro.tv/v1/stories?ApiKey={MyToken}

Query parameters

Query parameters are sent per call.

ParameterTypeRequiredDescription
ApiKeystringYesAPI token
PageNumintegerNoPage index (starting from 0)
PageSizeintegerNoNumber of results per page
ContentIdsarray of stringsYes for /ids endpointsUse to specify the IDs when calling the ID endpoints. You can send 1-many IDs, each separated by a comma.

The /recommendations/trending endpoint takes its own parameters and doesn't support paging. See Recommendations.

Example calls

Fetch all Stories

const fetchStories = async (apiKey, pageNum = 0, pageSize = 20) => {
  const response = await fetch(`blazefeed.clipro.tv/v1/stories?PageNum=${pageNum}&PageSize=${pageSize}&ApiKey=${apiKey}`);
  
  if (!response.ok) {
    throw new Error(`HTTP error! Status: ${response.status}`);
  }
  
  return await response.json();
};

Fetch videos by ID

const fetchVideosByIds = async (apiKey, contentIds) => {
  const idsParam = contentIds.map(id => `ContentIds=${encodeURIComponent(id)}`).join('&');
  const url = `blazefeed.clipro.tv/v1/videos/ids?${idsParam}&ApiKey=${apiKey}`;
  
  const response = await fetch(url);
  
  if (!response.ok) {
    throw new Error(`HTTP error! Status: ${response.status}`);
  }
  
  return await response.json();
};

HTTP return messages

The API returns the following codes.

Status codeMeaning
200 OKRequest successful
400 Bad RequestInvalid request parameters
401 UnauthorizedAuthentication required
403 ForbiddenInsufficient permissions
404 Not FoundResource not found
500 Internal Server ErrorServer error

Rate Limitation

The API implements rate limiting to ensure fair usage. Rate limit information is provided in the response headers:

  • X-RateLimit-Limit: Maximum number of requests allowed in a time window
  • X-RateLimit-Remaining: Number of requests left in the current time window
  • X-RateLimit-Reset: Time in seconds until the rate limit resets

Exceeding the rate limit will result in a 429 Too Many Requests response.


Did this page help you?