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
| Item | Value |
|---|---|
| Base URL | https://blazefeed.clipro.tv/v1/{endpoint} |
| Authentication | API 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 |
| Method | GET |
Endpoints
Content types are segregated by endpoint.
| Content type | Filtered content list | Content-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.
| Parameter | Type | Required | Description |
|---|---|---|---|
ApiKey | string | Yes | API token |
PageNum | integer | No | Page index (starting from 0) |
PageSize | integer | No | Number of results per page |
ContentIds | array of strings | Yes for /ids endpoints | Use 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 code | Meaning |
|---|---|
200 OK | Request successful |
400 Bad Request | Invalid request parameters |
401 Unauthorized | Authentication required |
403 Forbidden | Insufficient permissions |
404 Not Found | Resource not found |
500 Internal Server Error | Server 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 windowX-RateLimit-Remaining: Number of requests left in the current time windowX-RateLimit-Reset: Time in seconds until the rate limit resets
Exceeding the rate limit will result in a 429 Too Many Requests response.
Updated 1 day ago
