GuidesAPI ReferenceRelease Notes
HomeLog InHome
Guides

Content catalog API

Call the Catalog pull API with the base URL, authentication, endpoints, paging, rate limits, and HTTP status codes below. Filtering is on Filters. Response fields are on Response principles.

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. This token is different from the Experiences app API key
MethodGET

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.

Endpoints

Content types are segregated by endpoint.

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

Recommendations is a separate option. You request currently trending content with ContentType (Story or Moment), not from your catalog. See Recommendations.

Example URL

https://blazefeed.clipro.tv/v1/stories?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.

Paging

ParameterTypeRequiredDescription
PageNumintegerNoPage index, starting at 0. Defaults to 0
PageSizeintegerNoNumber of results per page. Defaults to 50. PageSize=0 returns no items and totalItems: 0, so you cannot use it to obtain a count.
ContentIdsarray of stringsYes for /ids endpointsIDs to fetch on the /ids endpoints. Send one or many, separated by commas.

Results are sorted most-recently-updated first. A deep walk can repeat or miss items if content updates mid-walk. Pull incrementally with UpdateTime.From and deduplicate by id. totalItems is the total matching your query, not the size of the current page.

Fetching by ID

The /ids endpoints take ContentIds and paging only. Any content filter you send with them is accepted and then ignored: you receive a 200 with unfiltered results, not an error. Filter on the list endpoints, then fetch by ID.

Example calls

Fetch all Stories

const fetchStories = async (apiKey, pageNum = 0, pageSize = 50) => {
  const response = await fetch(`https://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 = `https://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 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?