GuidesAPI ReferenceRelease Notes
HomeLog InHome
Guides

Catalog API filters

Use these filters on /stories, /moments, and /videos to retrieve only the content you need. The /ids endpoints ignore filters: see Fetching by ID.

Filters include primary filters (title, labels, status, geo, live, and dates) and entity filters (game, team, player, round, and season).

Primary filters

ParameterTypeDescription
TitlestringFilter by title (case-insensitive substring match)
LabelsFilterExpressionstringFilter using a label expression (see below)
Statusesarray of stringsFilter by current status (Draft or Active). Send Statuses=Active unless you need drafts: a Draft item's htmlUrl is an empty player.
GeostringReturn only content that can be shown in this country (ISO 3166 two-letter code). Case-sensitive: send gb, not GB
OnlyLivebooleantrue returns only currently live content. Applies to /stories only
UpdateTime.Fromstring (datetime)Updated at or after this time
UpdateTime.Tostring (datetime)Updated at or before this time
CreateTime.Fromstring (datetime)Created at or after this time
CreateTime.Tostring (datetime)Created at or before this time

Label expression filtering

LabelsFilterExpression takes a JSON array:

[operator, condition1, condition2, ...]
  • operator is "and" or "or"
  • conditions are label values, or nested arrays of the same shape
ExampleMeaning
["and", "football", "recap"]both labels
["or", "football", "basketball", "hockey"]any of the three
["and", ["or", "football", "basketball"], "highlight"]football or basketball, and highlight
["or", ["and", "football", "recap"], ["and", "basketball", "highlight"]]either combination

Label values are lowercased before matching, so Football and football behave identically. Use the identifier from labels[], not the title. There is no lookup endpoint for labels: harvest labels[].identifier from a page of content, then filter.

Date format

All date parameters should be in ISO 8601 format:

YYYY-MM-DDThh:mm:ssZ

Entity filters

An entity is a game, team, player, round, or season tied to the content.

To filter by entity, send an ID. Use either the WSC ID (wscId on the entity in the response) or the ID from the data service provider (providerId).

There is no lookup endpoint for these IDs. Request a page of content without entity filters and read metadata.game, metadata.team, metadata.player, metadata.round, and metadata.season. Each object can be null on a given item, so pull enough pages to collect the IDs you need. Most integrations pull once, build a local map, then filter against it.

There is no Sport field and no competition filter. To scope a feed to one sport, filter returned items by metadata.competitions[].wscId. metadata.competition is only the first competition on the item.

Entities.IdType tells the API which ID you are sending: WscId or ServiceProviderId. If you omit it, the API uses WscId. If you send any Entities.*.ServiceProviderId, also send Entities.IdType=ServiceProviderId. Otherwise that entity filter is ignored. An invalid value returns 400.

ParameterEntityTypeID source
Entities.Game.WscIdGameintegerWSC ID
Entities.Game.ServiceProviderIdGamestringData service provider
Entities.Team.WscIdTeamintegerWSC ID
Entities.Team.ServiceProviderIdTeamstringData service provider
Entities.Player.WscIdPlayerintegerWSC ID
Entities.Player.ServiceProviderIdPlayerstringData service provider
Entities.Round.WscIdRoundintegerWSC ID
Entities.Round.ServiceProviderIdRoundstringData service provider
Entities.Season.WscIdSeasonintegerWSC ID
Entities.Season.ServiceProviderIdSeasonstringData service provider
Entities.IdTypeAllstringWhich ID you sent: WscId or ServiceProviderId

Example requests

# Football content created in the last 24 hours
GET /v1/stories?LabelsFilterExpression=["and","football"]&CreateTime.From=2026-09-07T00:00:00Z

# Content featuring one player
GET /v1/moments?Entities.Player.WscId=12345

# Everything for one team
GET /v1/videos?Entities.Team.WscId=678

Did this page help you?