Tactical positions now have a name. New type TacticalPosition with id, name and shortName (e.g. 4, Centre back, CB).
TacticalFormationPosition.position returns the position of a formation slot.MatchTactical.position returns the position of the formation slot at posIndex. A formation lookup per row is no longer needed.Positions cover football only (ids 1–13). For other sports, or when the id is unknown, position is null; TacticalFormationPosition.positionId still returns the raw id. MatchTactical.position is also null when tacticalFormationId or posIndex is missing or the formation has no matching slot.
A formation can use the same position more than once, e.g. three centre backs in the 3-1-4-2. Use xpos (0 = left, 1 = right) and ypos (0 = own goal, upwards) to tell them apart.
query MatchPositions($matchIds: [ID!]) {
tacticalFormation(filter: {id: 21}) {
name
positions {
posIndex
positionId
position {
id
name
shortName
}
}
}
matches(filter: {ids: $matchIds}) {
data {
id
tacticals {
personId
posIndex
position {
id
name
shortName
}
xpos
ypos
}
}
}
}
New root query competitionCollections returns a paginated list of competition collections, ordered by ID. Use filter.ids to select 1–100 collections, or omit the filter to list all accessible collections.
New root query competitionCollection(filter: {id: ...}) returns a single competition collection, or null when the ID does not exist.
Both queries reuse the existing CompetitionCollection.view permission. Users with allowed collection IDs can only list or request those collections; explicitly requesting a disallowed ID returns an authorization error. With no allowed-ID restriction, all collections are accessible. Site administrators have unrestricted access.
Collection allowed-ID restrictions now also apply to nested relationships and searchId(category: COMPETITION_COLLECTION), following the same global data-access filtering as applications and competitions. For example, Application.competitionCollection returns null when its collection is outside the user's allowed IDs. Collection search caches are separated by collection permissions.
The existing fields and relationships are available, including unpaginated applications and paginated competitions. Related fields retain their existing permission checks. globalParameters.language can select the language of nested competitions; collection names and descriptions are not localized.
query CompetitionCollections($ids: [ID!], $id: ID!) {
competitionCollections(filter: {ids: $ids}, first: 20, page: 1) {
data {
id
name
description
}
paginatorInfo {
total
hasMorePages
}
}
competitionCollection(filter: {id: $id}, globalParameters: {language: EN_US}) {
id
name
applications {
id
}
competitions(first: 20) {
data {
id
name
}
}
}
}
New root query promotionTypes returns a paginated list of promotion types, ordered by ID. Filter by ids (1–100 IDs) and kind (DEFAULT or ODDSBOOST). Omitting kind returns all kinds.
New root query promotionType(filter: {id: ...}) returns a single promotion type, or null when the ID does not exist.
filter.language selects the localized name. When omitted or null, globalParameters.language is used, falling back to the configured default (DE_DE). Missing translations return name: null. Use translations(filter: {languages: [DE_DE, EN_US]}) for multiple languages; omitting or passing null for languages returns all translations.
Both queries require the new PromotionType.view permission, granting access to the full promotion-type catalog. The permission is not automatically granted to existing users. Existing nested Promotion.promotionType access is unchanged.
query {
promotionTypes(filter: {kind: ODDSBOOST, language: EN_US}, first: 20) {
data {
id
name
inputMask
translations(filter: {languages: [DE_DE, EN_US]}) {
language
name
}
}
paginatorInfo {
total
hasMorePages
}
}
promotionType(filter: {id: 99, language: EN_US}) {
id
name
}
}
All match related statistics are now served from HeimSpiel instead of the Sportscube database, with one union per sport like the existing statsByPerson. All values are numbers (Int or Float) and null if HeimSpiel does not deliver them.
SeasonPersonStats, SeasonTeamStats and MatchTeamStats (currently FootballSeasonPersonStats, FootballSeasonTeamStats and FootballMatchTeamStats), to be queried with inline fragments. The relation fields season/team (season statistics) and match/team (MatchTeamStats and MatchPersonStats) resolve the related entity and are null if the id is missing or unknown.Team.statsByMatch and Person.statsByMatch require the Competition.view and CompetitionCollection.view permissions, also when the team or person is reached through another field.passesTotal on FootballMatchPersonStats (Match.statsByPerson / Person.statsByMatch).playing (Int) on FootballMatchPersonStats and FootballSeasonPersonStats: playingLineup + playingSubstituteIn. null if both are null, otherwise a missing value counts as 0.Team.statsByMatch, Team.statsBySeason, Team.statsBySeasonPerson, Person.statsBySeason, Person.statsByMatch and MatchEntity.statsByPerson are paginated (data, paginatorInfo, first, page). The full list is requested from HeimSpiel and cached, only the response is paged. MatchEntity.statsByTeam is a plain, non-null list ([X!]!). The filters are required, because HeimSpiel has to be asked for explicit seasons or matches (one request per season or match):
matchesFilter (Team.statsByMatch) must match at most 100 matches, and only matches of the team are used.matchesFilter (Person.statsByMatch) must match at most 100 matches, and only matches of a team the person belonged to on the match date are used (club and national teams; memberships without dates count for their season).seasonsFilter (Team.statsBySeason, Person.statsBySeason) must match at most 30 seasons, counted together for all teams/persons of the same field in one query. Unless ids are given, Team.statsBySeason only counts seasons in which the team has matches, and Person.statsBySeason only seasons in which the current team of the person has matches (a person without a current team has no season statistics then). Season statistics are cached for one hour.seasonIds (Team.statsBySeasonPerson) takes at most 30 seasons, personIds is optional.Match.statsByTeam can be requested for at most 100 matches at once.The statistics provider is temporarily unavailable, please try again later. is added once to errors. It has no path, extensions.reason names the statistics, the failedIds of the seasons or matches and the field (e.g. Team.statsBySeason). An empty list without this error means HeimSpiel has no statistics.id of the season statistics is {seasonId}_{personId}_{teamId} (person) or {seasonId}_{teamId} (team), the id of the match team statistics is {matchId}_{teamId}.StatsSeasonPerson, StatsSeasonTeam and StatsMatchTeam.Team.statsByMatch: [StatsMatchTeam!] (paginated) → [MatchTeamStats!]! (paginated)Team.statsBySeason: [StatsSeasonTeam!] (paginated) → [SeasonTeamStats!]! (paginated)Team.statsBySeasonPerson: [StatsSeasonPerson!] (paginated) → [SeasonPersonStats!]! (paginated)Person.statsBySeason: [StatsSeasonPerson!] (paginated) → [SeasonPersonStats!]! (paginated)MatchEntity.statsByTeam: [StatsMatchTeam!] → [MatchTeamStats!]!ballsTouched (count): dropped. Team statistics have ballsTouchedPercentage (Float, a different measure), person statistics have none.playing: dropped, use playingLineup, playingSubstituteIn, playingSubstituteOut and playingMinutes.scorerpoints: dropped.matches: dropped.createdAt, updatedAt: dropped.StatsSeasonPerson.score, assists, ...: unchanged names, additional fields like expectedGoals, passesTotal, tackles.goalKicks, throwIn, shotsOffGoal, expectedGoals, expectedAssists, passes*, duels*, saves.query TeamStatistics($teamId: ID!, $seasonId: [ID!], $matchIds: [ID!]!, $from: DateTime!, $to: DateTime!) {
team(filter: {id: $teamId}) {
statsBySeason(filter: {seasonsFilter: {ids: $seasonId}}) {
... on FootballSeasonTeamStats {
seasonId
ballsTouchedPercentage
throwIn
expectedGoals
}
}
statsByMatch(filter: {matchesFilter: {ids: $matchIds, matchDateFrom: $from, matchDateTo: $to}}) {
... on FootballMatchTeamStats {
matchId
goalKicks
shotsOnGoal
}
}
}
}
When a match has multiple external associations (e.g. Sportradar, Kicker, Opta, Transfermarkt), the match's association now always returns the entry with the latest updated_at.
promotions filters countries and countrySubdivisionCodes now also return global promotions, i.e. promotions without any country or subdivision assignment, in addition to those assigned to the requested countries or subdivisions. Previously global promotions were excluded.
Bookie.applicationAssociations filter countries now treats associations without a country as global ones. For each requested country, the association assigned to that country is returned if it exists, otherwise the global association is used as a fallback. Global associations are returned only once, and associations of countries that were not requested are never returned.
New HeimSpiel data is available in the GraphQL API:
honourTitle and honourTitles (paginated, filter by ids and kinds) return honour titles. tacticalFormation and tacticalFormations (optional ids filter) return tactical formations.TacticalFormation.positions returns the positions of a formation.Person.nationality returns all nationalities of a person (including dual nationality), each with an optional country.Person.honours and Team.honours return honours, filterable by competitionIds, seasonIds, honourTitleIds and kinds. Each honour exposes its honourTitle.MatchEntity.tacticals returns the raw tactical entries of a match. sourceId is the data source, and tacticalFormationId links to MatchTactical.tacticalFormation.query HeimSpielData($personIds: [ID!], $matchIds: [ID!]) {
honourTitles(filter: {kinds: ["top_scorer"]}, first: 10) {
data {
id
name
kind
}
}
tacticalFormations(filter: {ids: [21, 53]}) {
id
name
positions {
posIndex
xpos
ypos
}
}
persons(filter: {ids: $personIds}) {
data {
id
nationality {
countryId
country {
id
}
}
honours(filter: {kinds: ["top_scorer"]}) {
id
name
honourTitle {
shortName
}
}
}
}
matches(filter: {ids: $matchIds}) {
data {
id
tacticals {
sourceId
tacticalFormationId
kind
posIndex
tacticalFormation {
name
}
}
}
}
}
Promotion.goLinks now also returns go links of any type that carry one of the promotion's goLinkTags (one tag per line, case-insensitive) and belong to the promotion's bookmaker. These are merged with the go links directly assigned to the promotion, without duplicates.
searchId now returns results in ascending ID order for every category, including all-language searches. SearchIdFilter.limit accepts values from 1 to 500. When omitted or null, the query returns at most the first 500 matching results. Searches that previously returned more than 500 results now return only those first 500.
query SearchTeamIds {
searchId(filter: {searchTerm: "Madrid", category: TEAM, limit: 10}) {
... on Team {
id
name
}
}
}
Bookmaker payout ranges are now available through Bookie.applicationAssociations. Each association exposes nullable payoutMin and payoutMax values and can be filtered by application ID or country ISO.
query BookmakersWithPayoutRanges($applicationIds: [Int!], $countries: [CountryEnum!]) {
bookies {
data {
id
name
applicationAssociations(filter: {applicationIds: $applicationIds, countries: $countries}) {
applicationId
countryId
payoutMin
payoutMax
}
}
}
}
GlobalParameters now supports country and countrySubdivisionCode. These values apply to compatible filters throughout a query, including country and country-subdivision list filters. Local filter values take precedence.
query AustrianBookies {
bookies(globalParameters: {country: AT, countrySubdivisionCode: "AT-9"}) {
data {
id
name
}
}
}
MatchEntity.statsByPerson and Person.statsByMatch now return HeimSpiel match-person statistics as paginated MatchPersonStats unions. This is a breaking change from the previous StatsMatchPerson list response: select football KPIs through an inline fragment and read results from data.
Person.statsByMatch now requires filter, including a non-empty matchesFilter.MatchesRelationFilter.matchDateFrom and matchDateTo are optional when ids is provided. Without ids, both dates are required.MatchEntity.statsByPerson returns a paginator response rather than a plain list. Update selections to use data.MatchPersonStats union rather than StatsMatchPerson. Wrap football-stat selections in ... on FootballMatchPersonStats.FootballMatchPersonStats fields corners, freeKicks, and savePercentage were removed. Use cornerKicks, freekicks, and keeperSweeper where applicable.query MatchPersonStats($id: ID!) {
match(filter: {id: $id}) {
statsByPerson(first: 10, page: 1) {
data {
... on FootballMatchPersonStats {
matchId
personId
playingMinutes
}
}
}
}
}
Payment method images are now available through PaymentType.images. Use the existing ImageFilter to select the PAYMENT_TYPE style and Image.url to retrieve the image URL.
query BookiePaymentMethodImages($id: ID!) {
bookie(filter: {id: $id}) {
paymentTypeAssociations {
paymentType {
id
name
images(filter: {style: PAYMENT_TYPE}) {
url
}
}
}
}
}
Bookmaker platform support is now available through Bookie.platformAssociations, including global and country-specific associations, localized platform names, and optional platform images.
Bookie.platformAssociations supports isCountryFallbackActive. When used with countries, it returns both country-specific and globally available platform associations.
query BookiePlatforms($id: ID!, $countries: [CountryEnum!]) {
bookie(filter: {id: $id}) {
platformAssociations(filter: {
countries: $countries
isCountryFallbackActive: true
}) {
country {
iso
}
platform(filter: {language: EN_US}, scopeApplicator: ["Platform.name"]) {
id
priority
slug
name
shortName
images {
url
}
}
}
}
}
Bookmaker availability regions are now available through Bookie.countries and Bookie.countrySubdivisions. Both fields are ordered by code and include the existing localized translations. Bookies can also be filtered by country ISO or country subdivision code.
query BookieAvailability($country: CountryEnum!) {
bookies(first: 10, filter: {countries: [$country]}) {
data {
name
countries(first: 100) {
data {
code
translations(filter: {languages: [EN_US]}) {
name
}
}
}
countrySubdivisions(first: 100) {
data {
code
}
}
}
}
}
Match venues are now available through MatchEntity.place, including the localized name, country, and all place translations.
query MatchPlace($id: ID!) {
match(filter: {id: $id}, globalParameters: {language: EN_US}) {
place {
name
town
capacity
country {
id
name
}
translations(filter: {languages: [DE_DE, EN_US]}) {
language
name
}
}
}
}
Bookie reviews are now available through Bookie.reviews, including review articles, localized article categories, reviewers, and reviewer images.
query BookieReviews($id: ID!, $applicationId: Int!) {
bookie(filter: {id: $id}) {
reviews(filter: {languages: [EN_US], applicationId: $applicationId, isActive: true}) {
reviewer {
firstName
lastName
}
articles {
text
category(filter: {language: EN_US}) {
name
}
}
}
}
}
Sport1 source-association data is now available through MatchEntity.associations.sport1.
query MatchSport1Association($id: ID!) {
match(filter: {id: $id}) {
id
associations {
sport1 {
sport1MatchId
sport1CompetitionName
}
}
}
}
MatchesFilter now supports sports: [SportEnum!] to restrict matches to competitions in the requested sports.
query FootballMatches {
matches(filter: {sports: [FOOTBALL]}) {
data {
id
matchDate
}
}
}
Competition.competitionCollectionCompetitionAssociations now exposes each competition's collection-specific ELO coefficient through eloCoefficient.
Use filter: {competitionCollectionIds: [Int!]} to limit the associations to specific competition collections.
query CompetitionEloCoefficient($id: ID!, $competitionCollectionIds: [Int!]) {
competition(filter: {id: $id}) {
id
competitionCollectionCompetitionAssociations(filter: {
competitionCollectionIds: $competitionCollectionIds
}) {
data {
competitionCollectionId
eloCoefficient
}
}
}
}
Bookie metadata is now available through these association fields:
customerServiceAssociationsbettingMarketAssociationsfeatureAssociationspaymentTypeAssociationsratingslicenseAssociationsTeamPerson now exposes its related team and role:
TeamPerson.team: TeamTeamPerson.role: RoleGoLink.hrefReplaced(filter: HrefReplacedFilter) now also supports geo filters:
countries: [CountryEnum]countrySubdivisionCodes: [String]These filters restrict the returned replaced href entries to the requested countries and/or country subdivisions.
The relation goLinks filter now supports isFiltersFallbackActive: Boolean on these fields:
Bookie.goLinks(filter: RelationGoLinksFilter)Bonus.goLinks(filter: RelationGoLinksFilter)Promotion.goLinks(filter: RelationGoLinksFilter)Channel.goLinks(filter: RelationGoLinksFilter)When isFiltersFallbackActive: true is used and the requested client-specific filters remove all matching goLinks for a relation item, the resolver performs a fallback query and returns goLinks with these filters relaxed:
countriescountrySubdivisionCodesdeviceslanguagesplatformsThe fallback still keeps the relation scope and the other goLink filters such as types, applicationIds, isActive, and tags.
query PromotionGoLinksWithFallback($id: ID!) {
promotion(filter: {id: $id}) {
id
goLinks(filter: {
isFiltersFallbackActive: true
countries: [AT]
devices: [MOBILE]
languages: [DE_DE]
}) {
id
href
}
}
}
A new Absence GraphQL type has been added for player absence data.
New fields are now available on existing types:
MatchEntity.absences: [Absence!]!Competition.currentAbsences: [Absence!]!Absence also includes a nested person field to resolve the related Person.
query MatchAbsences($id: ID!) {
match(filter: {id: $id}) {
id
absences {
id
kind
reason
person {
id
fullName
}
}
}
}
query CompetitionCurrentAbsences($id: ID!) {
competition(filter: {id: $id}) {
id
currentAbsences {
id
kind
reason
person {
id
fullName
}
}
}
}
Match association fields are now grouped under a new nested field on MatchEntity:
associations: MatchAssociationsUse the new nested path for provider-specific match association data:
match.associations.betqlmatch.associations.asmatch.associations.deltatrematch.associations.dflmatch.associations.fazmatch.associations.futbol24match.associations.gazzettamatch.associations.kickermatch.associations.manualmatch.associations.oddsetmatch.associations.optamatch.associations.phoenixmatch.associations.roninmatch.associations.sportradarmatch.associations.transfermarktmatch.associations.tonlinematch.associations.toralarmmatch.associations.livescorematch.associations.goaldotcommatch.associations.globomatch.associations.xscoresThe legacy top-level match association fields on MatchEntity are deprecated and will be removed on 2026-08-01. Use associations.<provider> instead.
query OldQuery($id: ID!) {
match(filter: {id: $id}) {
id
betql {
id
}
opta {
id
}
}
}
query NewQuery($id: ID!) {
match(filter: {id: $id}) {
id
associations {
betql {
id
}
opta {
id
}
}
}
}
The SearchIdTeamFilter input now supports competitionIds: [Int!]. This filter applies only when searchId.filter.category is TEAM and returns only teams that:
searchTermWhen multiple competition ids are provided, the filter uses OR semantics. A team is returned if it
has participated in any of the given competitions.
The SearchIdCompetitionFilter input now supportincludeInternational: Boolean.
When includeInternational: true is used on its own, only competitions without a country
(countryId = null) are returned.
When country and includeInternational: true are used together, the result includes both:
A new set of alias relations and GraphQL types has been added:
Sport.sportAliases: [SportAlias!]!Team.teamAliases: [TeamAlias!]!Competition.competitionAliases: [CompetitionAlias!]!Person.personAliases: [PersonAlias!]!The new alias types expose the alias entries as nested objects:
SportAliasTeamAliasCompetitionAliasPersonAliasTeamAlias also includes competitionId to expose the competition-specific alias scope.
For Person, the existing single-value alias field is kept for backward compatibility, and the new
personAliases field should be used to access the full list of aliases.
A new nested categoryFilters input has been added to SearchIdFilter. It groups the
per-category filters so each category can be filtered with its relevant fields:
team: SearchIdTeamFilter — applied when category is TEAM. Fields:
sports: [SportEnum!], kind: TeamKindEnum, gender: GenderEnum, age: AgeEnum, country: CountryEnum.competition: SearchIdCompetitionFilter — applied when category is COMPETITION.
Same fields as the team filter.person: SearchIdPersonFilter — applied when category is PERSON. Field:
country: CountryEnum.A new SportEnum is introduced for the sports filter on team and competition category filters with the following values:
FOOTBALL, BASKETBALL, BASEBALL, ICE_HOCKEY, TENNIS, HANDBALL, GOLF,
RUGBY, AMERICAN_FOOTBALL, CRICKET, VOLLEYBALL, FORMULA_1.
When both the legacy top-level fields and categoryFilters are provided, the values in
categoryFilters take precedence.
The TeamsFilter input now supports sports: [SportEnum!] for filtering teams by sport.
The legacy sportIds: [Int] filter on TeamsFilter is deprecated and will be removed on
2026-08-01. Use sports instead.
The incorrect person alias field aliasName will be
removed in a future release. A person can have multiple aliases, so clients should migrate to
personAliases.
The top-level age and gender arguments on SearchIdFilter are deprecated and will be
removed on 2026-08-01. After this date, queries using the deprecated arguments
will no longer be supported. Use categoryFilters instead.
The deprecated sportIds argument on TeamsFilter will be removed on 2026-08-01.
After this date, queries using the deprecated argument will no longer be supported.
query OldQuery {
searchId(filter: {searchTerm: "Madrid", category: TEAM, language: DE_DE, age: A_TEAM, gender: MALE}) {
... on Team {
id
name
}
}
}
query NewQuery {
searchId(filter: {
searchTerm: "Madrid",
category: TEAM,
language: DE_DE,
categoryFilters: {
team: {
sports: [FOOTBALL],
age: A_TEAM,
gender: MALE,
country: ES
}
}
}) {
... on Team {
id
name
}
}
}
query OldTeamsQuery($sportIds: [Int]) {
teams(filter: {sportIds: $sportIds}) {
paginatorInfo {
total
}
}
}
{
"sportIds": [1]
}
query NewTeamsQuery($sports: [SportEnum!]) {
teams(filter: {sports: $sports}) {
paginatorInfo {
total
}
}
}
{
"sports": ["FOOTBALL"]
}
A new groupOptions filter has been added to StandingsFilter.
It consists of two subfilters:
groupMode - ENUM possible values: LEAGUE, CONFERENCE, DIVISION. (Default: LEAGUE)returnGroupCompetitors - BOOLEAN. (Default: false)If roundIds and teamIds is provided and returnGroupCompetitors is true, the response will include the team's group competitors based on the provided groupMode and teamIds.
When matches are sorted by score, or the score field is queried, and no other filters are active:
A new h2hTeamIds filter has been added to MatchesFilter. It accepts an array of exactly 2 team IDs and restricts results to head-to-head matches between those teams. This filter is mutually exclusive with the teamIds filter.
The searchId query has been enhanced with the following changes:
language argument is provided, the search now queries across all available languages in the translation tables instead of defaulting to a single language. This applies to TEAM, COMPETITION, and SPORT categories.SearchIdFilter:
age: AgeEnum — Filter results by age category (e.g. A_TEAM, U21, U19). Applies to TEAM and COMPETITION categories.gender: GenderEnum — Filter results by gender (MALE, FEMALE, MIXED). Applies to TEAM and COMPETITION categories.query {
searchId(filter: {searchTerm: "Real Madrid", category: TEAM}) {
... on Team {
id
name
ageName
primaryColor
}
}
}
query {
searchId(filter: {searchTerm: "Madrid", category: TEAM, language: DE_DE, age: A_TEAM, gender: MALE}) {
... on Team {
id
name
ageName
gender
}
}
}
Added new fields to the Standing type
rankDivisionrankConferencewinPercentageDivisionwinPercentageConferencestreakwinDivisionlostDivisiondrawDivisionwinConferencelostConferencedrawConferencegamesLivewinOnPenaltylostOnPenaltywinOnExtraTimelostOnExtraTimewinOnPenaltyAwaywinOnPenaltyHomelostOnPenaltyAwaylostOnPenaltyHomewinOnExtraTimeAwaywinOnExtraTimeHomelostOnExtraTimeAwaylostOnExtraTimeHomeuserId field form these types:
ApplicationBettingMarketBettingMarketOutcomeBonusBonusTypeBookieBookieCountrySubdivisionAssociationChannelCountryCurrencyGoLinkPaymentTypePromotionPromotionOddsBoostPromotionOddsBoostMatchAssociationPromotionOddsBoostMatchAssociationBettingMarketOutcomeAssociationPromotionTypecomment field form these types: Bonus, MatchResultproductOwnerUserId field form Application typeuniqueId field to the Bet type. This field is unique for each bet.images field to the Sport typebrandColor field of type ImageBrandColor to the Image typebookieId on BetFilter input typematchMonth on Bet type is removedmatchDate added to MatchesOrderBy input type. This argument allows to sort matches by match date.HrefReplaced type added to the GoLink type. This type is used to retrieve the href of the link with replaced tracking parameters (when available).
query MyQuery {
goLink(filter: {id: "1"}) {
id
href
hrefReplaced(filter: {bookieIds: [2]}) {
href
affiliateId
applicationId
entityId
entityType
country
countrySubdivisionCode
}
}
}
{
"data": {
"goLink": {
"id": "1",
"href": "https://www.test.com/open-account?###affiliate_params###",
"hrefReplaced": [
{
"href": "https://www.test.com/open-account?affiliate=case123",
"affiliateId": "affiliate=case123",
"applicationId": 1,
"entityId": 2,
"entityType": 'bookie',
"country": null,
"countrySubdivisionCode": null
},
{
"href": "https://www.test.com/open-account?affiliate=case456",
"affiliateId": "affiliate=case456",
"applicationId": 1,
"entityId": 2,
"entityType": 'bookie',
"country": "AT",
"countrySubdivisionCode": null
}
]
}
}
}
roundMarker on Round type now returns an arrayround and roundsRoundFilter and RoundsFilter are addedRoundFilter type renamed to the CompetitionRoundFilterids, seasonIds and currentMatchDays are added to the CompetitionRoundFilter with the same functionality as the old argumentsid, seasonId and currentMatchDay in CompetitionRoundFilter will be deprecatedids is required without seasonIds on CompetitionRoundFilterroundIdsMatchDay argument in Matches filter are also considering group_matchdayTeamPerson relation added to the Person typePersonsFilterThe old arguments will be removed on November 18, 2025. After this date, queries using the deprecated arguments will no longer be supported.
query OldQuery($filter: RoundFilter!) {
competitions {
data {
rounds(filter: $filter) {
data {
id
}
}
}
}
}
{
"filter": {
"id": ["1"],
"currentMatchDay": [10],
"seasonId": [10]
}
}
query NewQuery($filter: CompetitionRoundFilter!) {
competitions {
data {
rounds(filter: $filter) {
data {
id
}
}
}
}
}
{
"filter": {
"ids": ["1"],
"currentMatchDays": [10],
"seasonIds": [10]
}
}
SerachId field is now available for application groups, channels, markets, persons, and sports.
The SearchIdResult type is extended to support the new types.
differenceName will be replaced by differenceType in the Standing type.differenceName is now nullable.The old field will be removed on October 27, 2025. After this date, queries using the deprecated types will no longer be supported.
query OldQuery {
standings {
data {
id
differenceName
}
}
}
query NewQuery {
standings {
data {
id
differenceType
}
}
}
The goLinks filters now use soft filtering. Soft Filtering means that if, for example, you filter by Country AT, you will get back both all AT goLinks and all globally available goLinks without a country restriction. Previously, globally defined goLinks were excluded when filtering by a specific country. The same behaviour also applies to the other mentioned soft filters.
The soft filter arguments are:
The country argument in these filters is renamed to countries.
The old argument will be removed on October 27, 2025. After this date, queries using the deprecated argument will no longer be supported.
query OldQuery {
matches {
data {
id
bets(filter: {
bookieIds: 10,
country: [AT, DE] # Deprecated
}) {
data {
id
}
}
}
}
}
query NewQuery {
matches {
data {
id
bets(filter: {
bookieIds: 10,
countries: [AT, DE]
}) {
data {
id
}
}
}
}
}
competitionCollectionId argument in the MatchesFilter is replaced by competitionCollectionIds and now accepts arrays.The old argument will be removed on October 27, 2025. After this date, queries using the deprecated argument will no longer be supported.
query OldQuery {
matches(filter: {competitionCollectionId: 2}) {
data {
id
competitionId
}
}
}
query NewQuery {
matches(filter: {competitionCollectionIds: [2]}) {
data {
id
competitionId
}
}
}
The deprecated fileds will be removed on October 27, 2025. After this date, queries using the deprecated fields will no longer be supported.
query OldQeury {
bookies {
data {
id
deepLinks(filter: {country: AT}) { #deprecated
id #deprecated
countries #deprecated
urlPattern #deprecated
isFillingBetSlip
glue
}
}
}
}
query NewQuery {
bookies {
data {
id
goLinks(filter: {countries: AT, types: [DEEP_LINK, MULTI_DEEP_LINK]}) {
data {
id # same as deepLink id
countries # same as deepLink countries
href # same as deepLink urlPattern
deepLink {
isFillingBetSlip
glue
}
}
}
}
}
}