Stats Perform logo

Sports Data API - Soccer - Match Momentum Feed (MA27)

Overview

The Soccer Match Momentum feed provides information about the swing of a soccer match and indicates which team is predominant during play.

The feed combines match momentum prediction values with key match events, including goals, cards, penalties, and substitutions. It can also return match metadata, contestants, venue information, live match details, scores, lineups, team officials, attendance, and match officials when available.

Included Data Category Description
Match momentum Prediction values describing the in-match swing and predominant team context.
Key events Goals, cards, missed penalties, and substitutions.
Match metadata Fixture identifiers, competition, tournament calendar, stage, series, contestants, venue, local/UTC date and time, and coverage level.
Live data Match status, period, scores, match length, lineup, team official, attendance, and match official data when available.
External reference https://www.theanalyst.com/eu/2021/11/what-is-match-momentum/

Problem Statement & Use Cases

This API solves the business problem of quantifying the real-time flow of a soccer match in a structured, machine-readable way. Instead of relying only on scoreline or isolated events, downstream products can represent how momentum changes over time and which contestant is exerting more influence during the match.

Use Case Description
Live match momentum visualization Power live charts, timelines, and match-centre widgets that show momentum swings by team.
Editorial and commentary context Enrich automated commentary, match reports, and analyst notes with objective momentum and key-event signals.
Fan engagement and second-screen products Display real-time momentum, goals, cards, penalties, substitutions, and lineup context in mobile apps or broadcast companions.
In-match analytics pipelines Use momentum values and event timing as structured features for live models, alerts, or post-match analysis.

Compliance & Guidelines

Authentication and API Security

To comply with Stats Perform API security and best-practice requirements, refer to the Stats Perform FAQs, API Overview, and Authentication Guide.

Authentication uses the OAuth method to fetch data.

Polling Frequency

Contact a Stats Perform representative for a full list of available competitions.

Updated Polling Frequency
Every minute while the match is in-flight and at every start or stop of the period. Once 1 day prior to the fixture start date/time, then once every 45 seconds after kick-off.

Fixture UUID Requirement

The /predictions/momentum feed must be queried by fixture or match UUID.

Requirement Detail
Fixture path parameter Use {fixtureUuid} in the endpoint path to request match momentum for a specific fixture.
Fixture query parameter Use fx={fixtureUuid} to request match momentum for a specific fixture through a query parameter.
Legacy ID support The fx query parameter can filter by an Opta legacy ID.
Legacy ID limitation Only one legacy ID is supported. Do not pass a comma-separated list of legacy IDs.

Request Formatting Rules

All URLs are case-sensitive. URL strings must contain the correct case, operators, and required parameters, or the API returns an error.

Rule Requirement
Query string start Begin the query parameter string with ? immediately after the feed name.
Parameter separator Separate query parameters with &.
Multiple values: AND Use & for multiple values where the API treats parameters as AND.
Multiple values: OR Use , only if the parameter supports OR-style multiple values.
NOT operator Use ! only if the parameter supports negation.
Underscore-prefixed parameters Include the required _ prefix for parameters such as _fmt and _clbk.
Placeholder braces Remove placeholder curly braces {} from production API calls. They are documentation examples only.
Case sensitivity Preserve exact URL, parameter, and operator case.
Base URL reference The base URL format is {protocol}://{requestDomain}/{feedResource}.

JSONP Requirements

If _fmt=jsonp is used, it must be combined with the callback parameter _clbk.

Constraint Requirement Reason
JSONP callback Use _fmt=jsonp together with _clbk. JSONP requires a callback wrapper function.
Fixed callback value Use a fixed _clbk value whenever possible. Random callback names can reduce cacheability and violate API best-practice logic.
JavaScript frameworks Override framework-generated random callback names, including defaults from common frameworks such as jQuery. Some frameworks generate random JSONP function names unless explicitly configured.

Endpoints

Base URL

https://api.statsperform.com

Feed Resource

/sdapi/v1/soccerdata/predictions/momentum

Get Match Momentum by Fixture UUID

GET /sdapi/v1/soccerdata/predictions/momentum/{fixtureUuid}?{queryParameters}
GET https://api.statsperform.com/sdapi/v1/soccerdata/predictions/momentum/{fixtureUuid}?_fmt={dataFormat}
Usage Feed
Get match momentum data for the match and the predominant team by fixture UUID. /sdapi/v1/soccerdata/predictions/momentum/{fixtureUuid}?{queryParameters}

Get Match Momentum by fx Query Parameter

GET /sdapi/v1/soccerdata/predictions/momentum?_fmt={dataFormat}&fx={fixtureUuid}
GET https://api.statsperform.com/sdapi/v1/soccerdata/predictions/momentum?_fmt={dataFormat}&fx={fixtureUuid}
Usage Feed
Get match momentum data for a specified fixture by passing the fixture or match UUID to the fx query parameter. /sdapi/v1/soccerdata/predictions/momentum?_fmt={dataFormat}&fx={fixtureUuid}

Query Parameters

This feed uses Global query parameters and the feed-specific parameters listed below.

Query /predictions/momentum by fixture or match UUID. The fx parameter supports a single Opta legacy ID only; comma-separated legacy ID lists are not supported.

Global Query Parameters

Parameter Required Description Values / Format Notes
_fmt Yes in examples Response data format. {dataFormat} such as xml, json, or jsonp. Global query parameter.
_clbk Conditional JSONP callback function name. Fixed callback function name. Required when _fmt=jsonp.

Feed-Specific Query Parameters

Parameter Location Required Description Accepted Values / Format Example Request
fixtureUuid Path Yes when using the path endpoint Gets momentum data for a match by fixture UUID. Fixture or match UUID. GET https://api.statsperform.com/sdapi/v1/soccerdata/predictions/momentum/{fixtureUuid}?_fmt={dataFormat}
fx Query Yes when not using the path endpoint Gets momentum data for the specified fixture. Pass the fixture or match UUID to the fx parameter. Fixture or match UUID; one Opta legacy ID is also supported. GET https://api.statsperform.com/sdapi/v1/soccerdata/predictions/momentum?_fmt={dataFormat}&fx={fixtureUuid}

Output Schema

The feed response fields are documented using XML element names. JSON responses contain similar fields, but XML-only wrapper elements are omitted or represented differently.

If no live data is available, such as when the fixture is scheduled but not playing or not yet played, an empty liveData element can be returned and some sub-elements may be omitted. The feed is updated when new information becomes available.

`<match

Momentum>`

Property Value
Format XML only
Nesting matchMomentum
Description Required root element for match momentum prediction fields.
JSON behavior Not present in JSON feed response; the JSON root element is matchInfo.
Attribute Required Description Values
xmlns:soccerdata Yes Schema reference returned for XML only. http://www.performgroup.com/schema/soccerdata

`<match

Info>`

Property Value
Nesting matchMomentum/matchInfo
Description Required root element for match information fields.
Attribute Required Description Values
id Yes Unique ID of the fixture or match. String; alphanumeric UUID
coverageLevel Yes Coverage level, also known as Tier, used to understand analyst data-collection coverage and data availability. String; numeric
date Yes Fixture or match date in UTC. Date in format YYYY-MM-DDZ
time No Fixture or match start time in UTC. May be absent, empty, or updated after confirmation. Time in format hh:mm:ssZ
localDate Yes Match date in the local time zone. Date in format YYYY-MM-DD
localTime Yes Match time in the local time zone. Time in format hh:mm:ss
week No Week in which the match is taking place. String
numberOfPeriods Yes Number of periods to be played in the match. Integer
periodLength Yes Length of each period in minutes. Integer
var Yes Indicator confirming whether VAR is applicable in the match. Integer
attendanceInfoId No Attendance information ID. Examples: 1 = Behind Closed Doors; 2 = Limited Audience. When returned, the attendance node and value normally under matchDetailsExtra are suppressed. Integer
attendanceInfo No Additional attendance information, such as Behind Closed Doors or Limited Audience. When returned, the attendance node and value normally under matchDetailsExtra are suppressed. String
lastUpdated Yes UTC timestamp when the fixture information or record was last updated. Date/Time in format YYYY-MM-DDThh:mm:ssZ

<description>

Property Value
Nesting matchMomentum/matchInfo/description
Description Optional match description, such as contestant names.
Value String
Attributes None

<sport>

Property Value
Nesting matchMomentum/matchInfo/sport
Description Required root element for sport fields. In XML, the element value is the sport name, such as Soccer.
Attribute Required Description Values
id Yes Unique ID of the sport. String; alphanumeric UUID
name Yes Name of the sport. JSON only. String

<ruleset>

Property Value
Nesting matchMomentum/matchInfo/ruleset
Description Required root element for ruleset fields. In XML, the element value is the ruleset name.
Attribute Required Description Values
id Yes Unique ID of the ruleset. String; alphanumeric UUID
name Yes Name of the ruleset. JSON only. String

<competition>

Property Value
Nesting matchMomentum/matchInfo/competition
Description Required root element for competition fields.
Attribute Required Description Values
id Yes Unique ID of the competition. String; alphanumeric UUID
name Yes Name of the competition. String
knownName Yes Known name of the competition. String
competitionCode Yes Short three-digit competition code. String
competitionFormat Yes Format of the competition. Domestic league, Domestic cup, Domestic super cup, International cup, International super cup

<country> for Competition

Property Value
Nesting matchMomentum/matchInfo/competition/country
Description Required root element for the country that the competition is based in. In XML, the element value is the country name.
Attribute Required Description Values
id Yes Unique ID of the country that the competition is based in. String; alphanumeric UUID
name Yes Name of the country. JSON only. String

`<tournament

Calendar>`

Property Value
Nesting matchMomentum/matchInfo/tournamentCalendar
Description Required root element for tournament calendar fields. In XML, the element value is the tournament calendar name.
Attribute Required Description Values
id Yes Unique ID of the tournament calendar. String; alphanumeric UUID
startDate Yes Start date of the tournament calendar in UTC. Date in format YYYY-MM-DDZ
endDate Yes End date of the tournament calendar in UTC. Date in format YYYY-MM-DDZ
name Yes Name of the tournament calendar. JSON only. String

<stage>

Property Value
Nesting matches/match/matchInfo/stage
Description Required root element for stage fields. In XML, the element value is the stage name.
Attribute Required Description Values
id Yes Unique ID of the stage. String; alphanumeric UUID
formatId Yes Unique ID of the stage format. A contestant can have the same format ID across seasons but a different stage ID, because the stage ID is linked with stage and season. String; alphanumeric UUID
startDate Yes Start date of the stage in UTC. Date in format YYYY-MM-DDZ
endDate Yes End date of the stage in UTC. Date in format YYYY-MM-DDZ
name Yes Name of the stage. JSON only. String

<series>

Property Value
Nesting matchMomentum/matchInfo/series
Description Optional root element for series fields. In XML, the element value is the series name.
Attribute Required Description Values
id Yes Unique ID of the series. String; alphanumeric UUID
formatId Yes Unique ID related to the series format of the competition. String; alphanumeric UUID
name Yes Name of the series. JSON only. String

<contestants>

Property Value
Format XML only
Nesting matchMomentum/matchInfo/contestants
Description Optional root element for contestants. May not always be returned.
JSON behavior Not present in JSON/JSONP; individual contestant elements are returned instead.
Attributes None

<contestant>

Property Value
Nesting matchMomentum/matchInfo/contestants/contestant
Description Optional root element for a contestant. May not be returned if the match is scheduled but contestants are not yet known; the record is updated once known.
Attribute Required Description Values
id Yes Unique ID of the contestant. String; alphanumeric UUID
name Yes Name of the contestant. String
shortName No Short name commonly used to refer to the contestant. String
officialName Yes Official name of the contestant. String
code No Three-character contestant code, often used on TV scoreboards. String
position Yes Contestant position in the list. home, away

<country> for Contestant

Property Value
Nesting matchMomentum/matchInfo/contestants/contestant/country
Description Optional root element for the contestant country. In XML, the element value is the country name.
Attribute Required Description Values
id Yes Unique ID of the country the contestant is from. String; alphanumeric UUID
name Yes Name of the country. JSON only. String

<venue>

Property Value
Nesting matchMomentum/matchInfo/venue
Description Optional root element for venue fields. In XML, the element value is the venue name.
Attribute Required Description Values
id Yes Unique ID of the venue. String; alphanumeric UUID
neutral No Indicates whether the venue is neutral. yes means the venue is neutral; no means the venue is not neutral. no, yes
longName Yes Long or extended name of the venue. String
latitude No Latitude coordinate for the venue location. String
longitude No Longitude coordinate for the venue location. String
shortName No Short name of the venue. JSON only. String

`<live

Data>`

Property Value
Nesting matchMomentum/liveData
Description Optional root element for live data fields.
Attributes None

If no live data is available, such as when the fixture is scheduled but not playing or has not been played, an empty liveData element is returned and some sub-elements may be omitted.

`<match

Details>`

Property Value
Nesting matchMomentum/liveData/matchDetails
Description Optional root element for match detail fields.

Returned only if data is available. If no data is available, the liveData element may be empty or some sub-elements may be omitted.

Attribute Required Description Values
periodId Yes Current match period. 1 = First half; 2 = Second half; 3 = Extra time first half; 4 = Extra time second half; 5 = Penalty shootout; 10 = Half time; 11 = End of second half before extra time; 12 = Extra time half time; 13 = End of extra time before penalties; 14 = Full time; 16 = Pre-match
matchStatus Yes Match status. Awarded is used when the match does not take place or when one contestant is awarded the match with an associated result. Fixture, Playing, Played, Cancelled, Postponed, Suspended, Awarded
winner No Match outcome. Returned only when the match is completed and matchStatus="Played". home, away, draw
aggregateId No Unique identifier used to group and link both legs of a paired soccer match, such as a two-legged tie. String; alphanumeric UUID
previousAggregateIds No Aggregate IDs for previous rounds of the fixture, such as previousRoundAggregateId1 or previousRoundAggregateId2. String
previousMatchIds No UUID of a previous match. String; alphanumeric UUID
advancementAggregateId No Reference to the aggregateId indicating which aggregate winner advances to the next round or stage in a paired soccer match series. String; alphanumeric UUID
matchLengthMin No Total number of full minutes played, including stoppage time. Returned only when the match is completed and matchStatus="Played". Integer
matchLengthSec No Seconds in addition to the full minutes played, including stoppage time. Returned only when the match is completed and matchStatus="Played". Integer

<periods>

Property Value
Format XML only
Nesting matchMomentum/liveData/matchDetails/periods
Description Optional root element for periods in a match.
JSON behavior Not present in JSON/JSONP; individual period elements are returned instead.
Attributes None

Periods and/or period elements are returned only if the call includes live=yes, data is available, and matchStatus is Playing, Played, Suspended, Cancelled, or Postponed.

<period>

Property Value
Nesting matchMomentum/liveData/matchDetails/periods/period
Description Optional root element for a match period.

Returned only if data is available and matchStatus is Playing, Played, Suspended, Cancelled, or Postponed.

Attribute Required Description Values
id Yes Match period ID. 1 = First half; 2 = Second half; 3 = Extra time first half; 4 = Extra time second half
start Yes Period start date and time in UTC. Date/Time in format YYYY-MM-DDThh:mm:ssZ
end Yes Period end date and time in UTC. Date/Time in format YYYY-MM-DDThh:mm:ssZ
lengthMin Yes Total minutes in the period, including stoppage time. Integer
lengthSec Yes Seconds in addition to the total minutes in the period, including stoppage time. Integer
announcedInjuryTime Yes Duration of injury time in seconds. Integer

<scores>

Property Value
Nesting matchMomentum/liveData/matchDetails/scores
Description Optional root element for score fields.
Attributes None

Returned only if data is available and matchStatus is Playing, Played, Suspended, Cancelled, or Postponed.

<ht>

Property Value
Nesting matches/match/liveData/matchDetails/scores/ht
Description Optional root element for first-half scores.
Attribute Required Description Values
home Yes Half-time score of the home team. Integer
away Yes Half-time score of the away team. Integer

<ft>

Property Value
Nesting matchMomentum/liveData/matchDetails/scores/ft
Description Optional root element for full-time scores.
Attribute Required Description Values
home Yes Full-time score of the home team. Integer
away Yes Full-time score of the away team. Integer

<total>

Property Value
Nesting matchMomentum/liveData/matchDetails/scores/total
Description Optional root element for total scores.
Attribute Required Description Values
home Yes Total score of the home team. Integer
away Yes Total score of the away team. Integer

<predictions>

Property Value
Nesting matchMomentum/liveData/Predictions
Description Optional root element for prediction fields.

Returned only if data is available. If no prediction data is currently available, liveData may be empty or prediction sub-elements may be omitted.

Attribute Required Description Values
type Yes Prediction type. String; example: Momentum
timeMin Yes Game time in minutes. String
timeMinSec Yes Game time in seconds. String
periodId Yes Current match period. String

<prediction> for Momentum

Property Value
Nesting matchMomentum/liveData/Predictions/prediction
Description Optional element containing the specified momentum prediction and probability rating.
Attribute Required Description Values
type Yes Prediction target. Home is the predicted momentum value for the home team; Away is the predicted momentum value for the away team; Combined is the aggregated value between home and away, where Home - Away = Combined. Home, Away, Combined
probability Yes Probability rating for the specified momentum, up to 5 decimal places. String; numeric

<goal>

Property Value
Nesting matchMomentum/liveData/goal
Description Optional root element for goal events in the match.
Attribute Required Description Values
contestantId Yes Unique ID of the contestant. String; alphanumeric UUID
periodId Yes Match period when the goal occurred. 1 = First half; 2 = Second half; 3 = Extra time first half; 4 = Extra time second half; 5 = Penalty shootout; 10 = Half time; 11 = End of second half before extra time; 12 = Extra time half time; 13 = End of extra time before penalties; 14 = Full time; 16 = Pre-match
timeMin Yes Minute when the goal was scored. Integer
timeMinSec Yes Seconds value for the goal time. Integer
lastUpdated Yes UTC timestamp when goal information was last updated. Date/Time in format YYYY-MM-DDThh:mm:ssZ
timestamp No UTC timestamp when the goal was scored. Date/Time in format YYYY-MM-DDThh:mm:ssZ
type Yes Descriptive tag for the goal. String
scorerId Yes Unique ID of the scorer. String; alphanumeric UUID
scorerName Yes Name of the scorer. String
optaEventId Yes Unique ID of the Opta event. Integer
homeScore Yes Home-team score after the goal. String
awayScore Yes Away-team score after the goal. String

`<missed

Pen>`

Property Value
Nesting matchMomentum/liveData/missedPen
Description Optional root element for missed penalties in the match.
Attribute Required Description Values
contestantId Yes Unique ID of the contestant whose player missed the penalty. String; alphanumeric UUID
periodId Yes Match period when the penalty was missed. 1 = First half; 2 = Second half; 3 = Extra time first half; 4 = Extra time second half
timeMin Yes Minute when the penalty was missed. Integer
timeMinSec Yes Seconds value when the penalty was missed. Integer
lastUpdated Yes UTC timestamp when missed penalty information was last updated. Date/Time in format YYYY-MM-DDThh:mm:ssZ
timestamp No UTC timestamp when the missed penalty occurred. Date/Time in format YYYY-MM-DDThh:mm:ssZ
type Yes Descriptive tag for the missed penalty. String
playerId Yes Unique ID of the player. String; alphanumeric UUID
playerName Yes Name of the player who missed the penalty. String
optaEventId Yes Unique ID of the Opta event. Integer

<card>

Property Value
Nesting matchMomentum/liveData/card
Description Optional root element for card events in the match.
Attribute Required Description Values
contestantId Yes Unique ID of the contestant. String; alphanumeric UUID
periodId Yes Match period when the card was given. 1 = First half; 2 = Second half; 3 = Extra time first half; 4 = Extra time second half; 5 = Penalty shootout; 10 = Half time; 11 = End of second half before extra time; 12 = Extra time half time; 13 = End of extra time before penalties
timeMin Yes Minute when the card was given. Integer
timeMinSec Yes Seconds value when the card was given. Integer
lastUpdated Yes UTC timestamp when the card information was last updated. Date/Time in format YYYY-MM-DDThh:mm:ssZ
timestamp No UTC timestamp when the card was given. Date/Time in format YYYY-MM-DDThh:mm:ssZ
type Yes Descriptive tag for the card. String
playerId Yes Unique ID of the player. String; alphanumeric UUID
playerName Conditional Match name of the player. Present only if the card is awarded to a player during a match. String
scorerName Yes Player identifier or name as provided by the source. String
optaEventId Yes Unique ID of the Opta event. Integer
cardReason Yes Reason the card was displayed. String

<substitute>

Property Value
Nesting matchMomentum/liveData/substitute
Description Optional root element for substitution events in the match.
Attribute Required Description Values
contestantId Yes Unique ID of the contestant. String; alphanumeric UUID
periodId Yes Match period when the substitution occurred. 1 = First half; 2 = Second half; 3 = Extra time first half; 4 = Extra time second half; 5 = Penalty shootout; 10 = Half time; 11 = End of second half before extra time; 12 = Extra time half time; 13 = End of extra time before penalties
timeMin Yes Minute when the substitute player entered the match. Integer
timeMinSec Yes Seconds value when the substitute player entered the match. Integer
lastUpdated Yes UTC timestamp when substitute player information was last updated. Date/Time in format YYYY-MM-DDThh:mm:ssZ
timestamp No UTC timestamp when the substitute player entered the match. Date/Time in format YYYY-MM-DDThh:mm:ssZ
playerOnId Yes Unique ID of the substitute player coming on. String; alphanumeric UUID
playerOnName Yes Name of the substitute player coming on. String
playerOffId Yes Unique ID of the player being substituted off. String; alphanumeric UUID
playerOffName Yes Name of the player being substituted off. String
subReason Yes Reason for the substitution. String

`<line

Up>`

Property Value
Nesting matchMomentum/liveData/lineUp
Description Optional root element for contestant lineup information in the match.
Attribute Required Description Values
contestantId Yes Unique ID of the contestant. String; alphanumeric UUID
formationUsed Yes Formation used by the contestant. Integer

<player>

Property Value
Nesting matchMomentum/liveData/lineUp/player
Description Optional root element for player information in a lineup.
Attribute Required Description Values
playerId Yes Unique ID of the player. String; alphanumeric UUID
firstName Yes First name of the player. String
lastName Yes Last name of the player. String
shortFirstName Yes Short first name of the player. String
shortLastName Yes Short last name of the player. String
matchName Yes Match name of the player. String
shirtNumber Yes Shirt number of the player. Integer
position Yes Position of the player. String
positionSide Yes Position side of the player. String
formationPlace Yes Formation place of the player. String

`<team

Official>`

Property Value
Nesting matchMomentum/liveData/lineUp/teamOfficial
Description Optional element containing information related to a team official involved in the match.
Attribute Required Description Values
id Yes Unique ID of the team official. String; alphanumeric UUID
firstName Yes First name of the team official. String
lastName Yes Last name of the team official. String
shortFirstName Yes Short first name of the team official. String
shortLastName Yes Short last name of the team official. String
type Yes Type of team official. String

`<match

DetailsExtra>`

Property Value
Nesting matchMomentum/liveData/matchDetailsExtra
Description Optional root element for extra match details. Returned only if data is available.
Attribute Required Description Values
attendance Yes Attendance information. Integer

`<match

Official>`

Property Value
Nesting matchMomentum/liveData/matchDetailsExtra/matchOfficial
Description Optional element for match official information. It may not be returned if the fixture is scheduled, not playing, or has not been played.
Attribute Required Description Values
Id Yes Unique ID of the match official. String; alphanumeric UUID
type Yes Type of match official. String
firstName Yes First name of the match official. String
lastName Yes Last name of the match official. String
shortFirstName Yes Short first name of the match official. String
shortLastName Yes Short last name of the match official. String