Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents

Ably American Football Match State V1

Introduction

The document describes the American Football V1 Match state contract and provides examples of using it.

American Football Match State

Expand
titleAmerican Football Match State example message
Code Block
languagejson
{ "firstHalf": { "drives": [ { "teamInPossession": "Home", "isKickOff": true, "plays": [ { "sequence": 2, "downNumber": 1, "yardsToGo": 10, "scrimmageLocation": { "scrimmageYard": 30, "sideOfPitch": "Home" }, "snap": { "isConfirmed": true, "timestampUtc": "2021-06-02T20:31:36.955Z" }, "isVoid": false, "isConfirmed": true, "isFinished": true, "period": { "number": 1, "type": "Regular" }, "actions": [ { "sequence": 1, "team": "Home", "type": "Kickoff", "players": [ { "playerType": "Kicker", "id": "10" } ], "yards": 30, "activeUnits": { "home": "Offensive", "away": "Defensive" } } ], "penalties": [ { "team": "Home", "playerId": "10", "type": "OffensiveHolding", "yards": 10, "activeUnits": { "home": "Offensive", "away": "Offensive" }, "utcTimestamp": "2021-06-02T20:31:36.955Z" } ], "startedAtGameTime": "00:12:43", "endedAtGameTime": "00:12:11", "startedAtUtc": "2021-06-02T20:31:36.955Z", "endedAtUtc": "2021-06-02T20:31:36.955Z", "description": "(12:43) K.Cousins pass deep left to A.Thielen to HST 49 for 18 yards (E.Murray)." } ], "conversionPlays": [ { "teamInPossession": "Home", "type": "TwoPoints", "isVoid": false, "isConfirmed": true, "isFinished": true, "period": { "number": 1, "type": "Regular" }, "actions": [ { "sequence": 2, "team": "Away", "type": "Kickoff", "players": [ { "playerType": "Kicker", "id": "23" } ], "yards": 30, "activeUnits": { "home": "Offensive", "away": "Defensive" } } ], "penalties": [ { "team": "Away", "playerId": "20", "type": "OffensiveHolding", "yards": 15, "activeUnits": { "home": "Offensive", "away": "Defensive" }, "utcTimestamp": "2021-06-02T20:31:36.955Z" } ], "startedAtGameTime": "00:09:23", "endedAtGameTime": "00:09:00", "startedAtUtc": "2021-06-02T20:31:36.955Z", "endedAtUtc": "2021-06-02T20:31:36.955Z", "description": "string" } ], "score": [ { "period": { "number": 2, "type": "Regular" }, "type": "Touchdown", "team": "Home", "points": 6, "isConfirmed": true, "utcTimestamp": "2021-06-02T20:31:36.955Z" } ], "isFinished": true } ], "timeouts": [ { "team": "Away", "gameTime": "00:04:24", "period": { "number": 2, "type": "Regular" }, "utcTimestamp": "2021-06-02T20:31:36.955Z", "isConfirmed": true } ], "timeoutsRemaining": { "away": 2, "home": 2 }, "coinToss": { "winnerTeam": "Home", "wasDeferred": true, "awayChoice": "Kick", "homeChoice": "Kick" } }, "secondHalf": { "drives": [ { "teamInPossession": "Away", "isKickOff": true, "plays": [ { "sequence": 3, "scrimmageLocation": { "scrimmageYard": 30, "sideOfPitch": "Away" }, "isVoid": false, "isConfirmed": true, "isFinished": true, "period": { "number": 3, "type": "Regular" }, "actions": [ { "sequence": 4, "team": "Away", "type": "Kickoff", "players": [ { "playerType": "Kicker", "id": "21" } ], "yards": 40, "activeUnits": { "home": "Offensive", "away": "Defensive" } } ], "penalties": [ { "team": "Home", "playerId": "10", "type": "OffensiveHolding", "yards": 15, "activeUnits": { "home": "Offensive", "away": "Defensive" }, "utcTimestamp": "2021-06-02T20:31:36.955Z" } ], "startedAtGameTime": "00:13:11", "endedAtGameTime": "00:12:30", "startedAtUtc": "2021-06-02T20:31:36.955Z", "endedAtUtc": "2021-06-02T20:31:36.955Z", "description": "string" } ], "conversionPlays": [ { "teamInPossession": "Away", "type": "OnePoint", "isVoid": false, "isConfirmed": true, "isFinished": true, "period": { "number": 3, "type": "Regular" }, "actions": [ { "sequence": 5, "team": "Away", "type": "Kickoff", "players": [ { "playerType": "Kicker", "id": "11" } ], "yards": 20, "activeUnits": { "home": "Defensive", "away": "Ofensive" } } ], "penalties": [ { "team": "Home", "playerId": "13", "type": "DefensiveHolding", "yards": 10, "activeUnits": { "home": "Defensive", "away": "Offensive" }, "utcTimestamp": "2021-06-02T20:31:36.956Z" } ], "startedAtGameTime": "00:12:11", "endedAtGameTime": "00:11:02", "startedAtUtc": "2021-06-02T20:31:36.956Z", "endedAtUtc": "2021-06-02T20:31:36.956Z", "description": "string" } ], "score": [ { "period": { "number": 1, "type": "Regular" }, "type": "Touchdown", "team": "Away", "points": 6, "isConfirmed": true, "utcTimestamp": "2021-06-02T20:31:36.956Z" } ], "isFinished": true } ], "timeouts": [ { "team": "Home", "gameTime": "00:13:20", "period": { "number": 5, "type": "Overtime" }, "utcTimestamp": "2021-06-02T20:31:36.956Z", "isConfirmed": true } ], "timeoutsRemaining": { "away": 1, "home": 1 }, "coinToss": { "winnerTeam": "Home", "wasDeferred": true, "awayChoice": "Kick", "homeChoice": "Kick" } }, "overtimePeriods": [ { "period": 5, "drives": [ { "teamInPossession": "Away", "isKickOff": true, "plays": [ { "sequence": 1, "downNumber": 3, "yardsToGo": 3, "scrimmageLocation": { "scrimmageYard": 10, "sideOfPitch": "Home" }, "snap": { "isConfirmed": true, "timestampUtc": "2021-06-02T20:31:36.956Z" }, "isVoid": false, "isConfirmed": true, "isFinished": true, "period": { "number": 1, "type": "Regular" }, "actions": [ { "sequence": 2, "team": "Home", "type": "Kickoff", "players": [ { "playerType": "Kicker", "id": "22" } ], "yards": 5, "activeUnits": { "home": "Offensive", "away": "Defensive" } } ], "penalties": [ { "team": "Home", "playerId": "23", "type": "IntentionalGrounding", "yards": 10, "activeUnits": { "home": "Offensive", "away": "Defensive" }, "utcTimestamp": "2021-06-02T20:31:36.956Z" } ], "startedAtGameTime": "string", "endedAtGameTime": "string", "startedAtUtc": "2021-06-02T20:31:36.956Z", "endedAtUtc": "2021-06-02T20:31:36.956Z", "description": "string" } ], "conversionPlays": [ { "teamInPossession": "Home", "type": "TwoPoints", "isVoid": false, "isConfirmed": true, "isFinished": true, "period": { "number": 2, "type": "Regular" }, "actions": [ { "sequence": 1, "team": "Home", "type": "Kickoff", "players": [ { "playerType": "Kicker", "id": "22" } ], "yards": 0, "activeUnits": { "home": "Offensive", "away": "Defensive" } } ], "penalties": [ { "team": "Home", "playerId": "11", "type": "IllegalContact", "yards": 5, "activeUnits": { "home": "Defensive", "away": "Offensive" }, "utcTimestamp": "2021-06-02T20:31:36.956Z" } ], "startedAtGameTime": "00:06:23", "endedAtGameTime": "00:05:00", "startedAtUtc": "2021-06-02T20:31:36.956Z", "endedAtUtc": "2021-06-02T20:31:36.956Z", "description": "string" } ], "score": [ { "period": { "number": 2, "type": "Regular" }, "type": "Touchdown", "team": "Home", "points": 6, "isConfirmed": true, "utcTimestamp": "2021-06-02T20:31:36.956Z" } ], "isFinished": true } ], "timeouts": [ { "team": "Away", "gameTime": "00:04:23", "period": { "number": 4, "type": "Regular" }, "utcTimestamp": "2021-06-02T20:31:36.956Z", "isConfirmed": true } ], "timeoutsRemaining": { "away": 2, "home": 1 }, "coinToss": { "winnerTeam": "Home", "wasDeferred": true, "awayChoice": "Kick", "homeChoice": "Kick" } } ], "challenges": [ { "team": "Home", "gameTime": "00:05:10", "period": { "number": 3, "type": "Regular" }, "utcTimestamp": "2021-06-02T20:31:36.956Z", "result": "Lost" } ], "gameTime": { "clock": "00:02:12", "lastUpdatedUtc": "2021-06-02T20:31:36.956Z", "isRunning": true }, "matchStatus": "InProgress", "period": { "number": 5, "type": "Overtime" }, "PeriodWithStatus": { "status": "Finished", "number": 5, "type": "Overtime" }, "score": { "home": 13, "away": 20, "isConfirmed": true }, "homeTeam": { "offensive": [ { "id": "22", "name": "Mac Smith", "position": "Cornerback", "side": "Left" } ], "defensive": [ { "id": "23", "name": "Tommy Johnson", "position": "Returner", "side": "Right" } ], "special": [ { "id": "34", "name": "Tom James", "position": "Punter", "side": "Middle" ] }, "awayTeam": { "offensive": [ { "id": "33", "name": "John Smith", "position": "Cornerback", "side": "Left" } ], "defensive": [ { "id": "11", "name": "Peter Johnson", "position": "Returner", "side": "Right" } ], "special": [ { "id": "10", "name": "Mark James", "position": "Punter", "side": "Middle" } ] }, "comments": [ { "value": "Tv timeout", "utcTimestamp": "2021-06-02T20:31:36.956Z" } ], "currentPossession": { "team": "Home", "lastUpdatedUtc": "2021-06-02T20:31:36.956Z" }, "yardsToEndzone": { "yards": 40, "team": "Home", "lastUpdatedUtc": "2021-06-02T20:31:36.956Z", "isConfirmed": true }, "risks": { "touchdown": "NonActive", "onsideKick": "NonActive", "fieldGoal": "Active", "fourthDown": "NonActive", "safety": "NonActive", "challenge": "NonActive", "penalty": "NonActive", "videoReview": "NonActive", "turnover": "NonActive" }, "source": "NFL", "fixtureId": "123456", "messageTimestampUtc": "2021-06-02T20:31:36.956Z", "isReliable": true, "isCoverageCancelled": false, "reliabilityReasons": { "Heartbeat": "Heartbeat Lost", "FeedReliability": "Feed is reliable", "Coverage": "Coverage Unknown" } }

American Football Match State

View file
nameMatchStateV1.json

Section Explanations

1. firstHalf

The firstHalf section contains information about the coin toss results, all drives of the half, timeouts taken by the teams during this half and remaining timeouts for each team.

Code Block
languagejson
{
  "drives": [{}],
  "timeouts": [{}],
  "timeoutsRemaining": {},
  "coinToss": {}
}

Use case:

1.1 drives

The drives array contains drive objects that contain information about team who was in possession of that drive, indication was it a kickoff drive or not, list of all plays and conversion plays happened during the drive as well as basic information about the scores and indication if it is a finished drive or not.

Code Block
languagejson
{
  "teamInPossession": "Home",
  "isKickOff": true,
  "plays": [{}],
  "conversionPlays": [{}],
  "score": [{}],
  "isFinished": true
}

1.1.1 plays

The plays array contains play objects that contain general information about the play as well as list of all play actions and list of penalties associated with the play.

Code Block
languagejson
{
  "sequence": 2,
  "downNumber": 1,
  "yardsToGo": 10,
  "scrimmageLocation": {},
  "snap": {},
  "isVoid": false,
  "isConfirmed": true,
  "isFinished": false,
  "period": {},
  "actions": [{}],
  "penalties": [{}],
  "startedAtGameTime": "00:12:43",
  "endedAtGameTime": "00:12:11",
  "startedAtUtc": "2021-06-02T20:31:36.955Z",
  "endedAtUtc": "2021-06-02T20:31:36.955Z",
  "description": "(12:43) K.Cousins pass deep left to A.Thielen to HST 49 for 18 yards (E.Murray)."
}

1.1.2 conversionPlays

The conversionPlays array contains conversionPlay objects that contain similar information to regular play object, but is used either for one point or two point conversions.

Code Block
{
  "teamInPossession": "Home",
  "type": "TwoPoints",
  "isVoid": false,
  "isConfirmed": true,
  "isFinished": true,
  "period": {},
  "actions": [{}],
  "penalties": [{}],
  "startedAtGameTime": "00:07:06",
  "endedAtGameTime": "00:06:55",
  "startedAtUtc": "2021-06-02T20:31:36.955Z",
  "endedAtUtc": "2021-06-02T20:31:36.955Z",
  "description": "(12:43) K.Cousins pass deep left to A.Thielen to HST 49 for 18 yards (E.Murray)."
}

1.1.3 score

The score array contains score object that contains information about how the score was gained, which team scored, how many points and period when it happened.

Code Block
{
  "period": {},
  "type": "Touchdown",
  "team": "Home",
  "points": 6,
  "isConfirmed": true,
  "utcTimestamp": "2021-06-02T20:31:36.955Z"
}

1.1.4 scrimmageLocation

The scrimmageLocation section contains basic information about the line of scrimmage.

Code Block
{
  "scrimmageYard": 30,
  "sideOfPitch", "Home"
}

1.1.5 snap

The snap section contains basic information about the snap action - time when it happened and whether it’s confirmed.

Code Block
{
  "isConfirmed": true,
  "timestampUtc": "2021-06-02T20:31:36.955Z":36.955Z"
}

1.1.6 period

The period section contains basic information about the period number and if it’s a regular period or an overtime.

Code Block
{
  "number": 2,
  "type": Regular
}

1.1.6

period

periodWithStatus

The period section contains basic information about the period number and if it’s a regular period or an overtime .and its status

Code Block
 "periodWithStatus": 
 {
  "status": "NotStarted/InProgress/Finished",
  "number": 21,
  "type": "Regular"
  }

1.1.7 actions

The actions array contains action objects that contain information about specific action of the play - which team made the action, what kind of action was it, players involved.

Code Block
{
  "sequence": 1,
  "team": "Home",
  "type": "Kickoff",
  "players": [{}],
  "yards": 30,
  "activeUnits": {}
}

1.1.8 penalties

The penalties array contains penalty objects that contain information about the given penalty - which team got the penalty, which player, what kind of penalty and penalty yards.

Code Block
{
  "team": "Home",
  "playerId": "10",
  "type": "OffensiveHolding",
  "yards": 10,
  "activeUnits": {},
  "utcTimestamp": "2021-06-02T20:31:36.955Z"
}

1.1.9 players

The players array contains player object that contains basic information about the player.

Code Block
{
  "playerType": "Receiver",
  id: "10"
}

1.1.10 activeUnits

The activeUnits section contains information about what kind of players were involved on the field - defense, offense or special team.

Code Block
{
  "home": "Offensive",
  "away": "Defensive"
}

1.2 timeouts

The timeouts array contains timeout objects that contain general information about each timeout taken during the half of the match.

Code Block
languagejson
			{
				"team": "Home",
				"gameTime": "00:12:10",
				"period": {},
				"utcTimestamp": "2021-06-02T20:31:36.955Z",
				"isConfirmed": true
			}

1.3 timeoutsRemaining

The timeoutsRemaining section contains basic information - how many timeouts are remaining for each team.

Code Block
languagejson
			{
				"away": 2,
				"home": 1
			}

1.4 coinToss

The coinToss section contains information about the outcome of coin toss in the beginning of each half.

Code Block
languagejson
{
  "winnerTeam": "Home",
  "wasDeferred": true,
  "awayChoice": "Kick",
  "homeChoice": "Kick"
}

2. secondHalf

The secondHalf section is identical to the firstHalf section structure described above.

3. overtimePeriods

The overtimePeriods array contains overtimePeriod objects that contain information about each overtime. It has identical structure to halfs with one exception - in addition it has “period” property.

Code Block
languagejson
{
  "period": 5,
  "drives": [{}],
  "timeouts": [{}],
  "timeoutsRemaining": {},
  "coinToss": {}
}

4. challenges

The challenges array contains challenge objects that contain general information about challenge - which team challenged, when and what was the result.

Code Block
{
  "team": "Away",
  "gameTime": "00:11:04,
  "period": {},
  "utcTimestamp": "2021-06-02T20:31:36.956Z",
  "result": "Lost"
}

5. gameTime

The gameTime section contains information about the game clock - what’s the clock value, when was it last updated and is it running at the moment.

Code Block
{
  "clock": "00:04:11",
  "lastUpdatedUtc": "2021-06-02T20:31:36.956Z",
  "isRunning": true
}

6. matchStatus

The matchStatus property reflects the current match status.

Code Block
"matchStatus": "InProgress"

6.1 periodWithStatus

The periodWithStatus property describes the current period and its status.

Code Block
{
    "status": "Finished",
    "number": 5,
    "type": "Overtime"
}

7. score

The score section contains information about the latest score of the match.

Code Block
{
  "home": 13,
  "away": 20,
  "isConfirmed": true
}

8. homeTeam/awayTeam

The homeTeam and awayTeam sections contain list of players who are playing as part of offensive, defensive or special teams in the match.

Code Block
{
  "offensive": [{}],
  "defensive": [{}],
  "special": [{}]
}

8.1 offensive/defensive/special

The offensive/defensive/special array contain lineupPlayer object that contains information about the players (lineup) - player id, name, position he is playing and side.

Code Block
{
  "id": "10",
  "name": "John Smith",
  "position": "WideReceiver",
  "side": "Left"
}

comments

The comments section contains comment objects that contain the text of comment and time when it was entered.

Code Block
{
  "value": "Tv timeout",
  "utcTimestamp": "2021-06-02T20:31:36.956Z"
}

currentPossession

The currentPossession section contains information about the team which is in possession and time when it was last updated.

Code Block
{
  "value": "Home",
  "utcTimestamp": "2021-06-02T20:31:36.956Z"
}

yardsToEndzone

The yardsToEndzone section contains information about how many yards are from team’s endzone and when this information was last updated.

Code Block
{
  "yards": 45,
  "team": "Away",
  "lastUpdatedUtc": "2021-06-02T20:31:36.956Z",
  "isConfirmed": true
}

risks

The risks section contains a list of risks that are important to consider (significant events) for betting purposes.

Code Block
languagejson
{
  "touchdown": "NonActive ",
  "onsideKick": "NonActive ",
  "fieldGoal": "Active",
  "fourthDown": "NonActive ",
  "safety": "NonActive ",
  "challenge": "NonActive ",
  "penalty": "NonActive ",
  "videoReview": "NonActive",
  "turnover": "NonActive",
  "turnoverother": "NonActive"
}

nextPlay

Describes precise enough details of what would be the characteristics of the next play, before it is actually created

Code Block
languagejson
"nextPlay": {
    "type": Snap,
    "scrimmageLocation": {
		"scrimmageYard": 21,
		"sideOfPitch": "Home"
	}
}

source

The source property describes the source that is providing the feed for Match State. For NFL the following options will be available - NFLGeniusPremium, NFLReplayGeniusPremiumReplay, NFLTest.

Code Block
"source": "NFLGeniusPremium"

messageTimestampUtc

The messageTimestampUtc property indicates the exact time of this match state message.

Code Block
"messageTimestampUtc": "2021-06-02T20:31:36.956Z"

isReliable

The isReliable property is used to note whether the given match state is reliable or not. This property is a result of the reliabilityReasons statuses.

Code Block
"isReliable": true

isCoverageCancelled

The isCoverageCancelled property is used to note whether the coverage of this match has been cancelled or not.

Code Block
"isCoverageCancelled": true

reliabilityReasons

The reliabilityReasons section contains a list of items considered in order to make an automatic decision whether the match state is reliable or not.

Code Block
languagejson
{
  "Heartbeat": "Heartbeat Lost",
  "FeedReliability": "Feed is reliable",
  "Coverage": "Coverage Unknown"
}

Schema definitions

Swagger integration
operationsSorteralpha
tagsSorteralpha
{
  "openapi": "3.0.1",
  "info": {
    "title": "AmericanFootball.MatchState",
    "version": "1.0"
  },
  "components": {
    "schemas": {
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.TeamSide": {
        "enum": [
          "None",
          "Home",
          "Away"
        ],
        "type": "string"
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.ScrimmageLocation": {
        "type": "object",
        "properties": {
          "scrimmageYard": {
            "type": "integer",
            "format": "int32"
          },
          "sideOfPitch": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.TeamSide"
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Snap": {
        "type": "object",
        "properties": {
          "isConfirmed": {
            "type": "boolean"
          },
          "timestampUtc": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.PeriodType": {
        "enum": [
          "Regular",
          "Overtime"
        ],
        "type": "string"
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Period": {
        "type": "object",
        "properties": {
          "number": {
            "type": "integer",
            "format": "int32"
          },
          "type": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.PeriodType"
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.ActionType": {
        "enum": [
          "Kickoff",
          "Touchback",
          "FairCatch",
          "Run",
          "Tackle",
          "Sack",
          "OutOfBounds",
          "PassAttempt",
          "CompletePass",
          "IncompletePass",
          "Interception",
          "Punt",
          "Fumble",
          "Return",
          "Safety",
          "Touchdown",
          "FieldGoalAttempt",
          "FieldGoalMade",
          "FieldGoalMissed",
          "ConversionAttempt",
          "ConversionMade",
          "ConversionMissed",
          "OnePointSafety"
        ],
        "type": "string"
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.PlayerType": {
        "enum": [
          "Unknown",
          "Tackled",
          "Tackler",
          "Scorer",
          "Assist",
          "Receiver",
          "Passer",
          "OutOfBounds",
          "Fumbled",
          "Fumbler",
          "Recoverer",
          "Kicker",
          "Runner",
          "Returner"
        ],
        "type": "string"
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Player": {
        "type": "object",
        "properties": {
          "playerType": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.PlayerType"
          },
          "id": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Unit": {
        "enum": [
          "Unknown",
          "Defensive",
          "Offensive",
          "Special"
        ],
        "type": "string"
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.ActiveUnits": {
        "type": "object",
        "properties": {
          "home": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Unit"
          },
          "away": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Unit"
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.PlayAction": {
        "type": "object",
        "properties": {
          "sequence": {
            "type": "integer",
            "format": "int32"
          },
          "team": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.TeamSide"
          },
          "type": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.ActionType"
          },
          "players": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Player"
            },
            "nullable": true
          },
          "yards": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "activeUnits": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.ActiveUnits"
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.PenaltyType": {
        "enum": [
          "Unknown",
          "OffensiveHolding",
          "FalseStart",
          "DefensivePassInterference",
          "OffensivePassInterference",
          "DefensiveHolding",
          "UnnecessaryRoughness",
          "DefensiveOffside",
          "DelayOfGame",
          "IllegalBlockAboveTheWaist",
          "NeutralZoneInfraction",
          "FaceMask",
          "IllegalUseOfHands",
          "RoughingThePasser",
          "UnsportsmanlikeConduct",
          "IllegalFormation",
          "Encroachment",
          "IllegalContact",
          "Defensive12OnField",
          "IllegalShift",
          "IntentionalGrounding",
          "Taunting",
          "OffsideOnFreeKick",
          "IneligibleDownfieldPass",
          "HorseCollarTackle",
          "Leverage",
          "RoughingTheKicker",
          "IllegalMotion",
          "ChopBlock",
          "IllegalTouchKick",
          "RunningIntoTheKicker",
          "Disqualification",
          "InterferenceWithOpportunityToCatch",
          "Offensive12OnField",
          "PlayerOutOfBoundsOnPunt",
          "IllegalSubstitution",
          "OffensiveOffside",
          "IllegalTouchPass",
          "FairCatchInterference",
          "Clipping",
          "IllegalForwardPass",
          "IllegalBlindsideBlock",
          "Tripping",
          "Leaping",
          "IneligibleDownfieldKick",
          "InvalidFairCatchSignal",
          "IllegalCrackback",
          "LowBlock",
          "DelayOfKickoff",
          "DefensiveDelayOfGame",
          "IllegalBat",
          "IllegallyKickingBall",
          "KickoffOutOfBounds"
        ],
        "type": "string"
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Penalty": {
        "type": "object",
        "properties": {
          "team": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.TeamSide"
          },
          "playerId": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.PenaltyType"
          },
          "yards": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "activeUnits": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.ActiveUnits"
          },
          "utcTimestamp": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Play": {
        "type": "object",
        "properties": {
          "sequence": {
            "type": "integer",
            "format": "int32"
          },
          "downNumber": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "yardsToGo": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "scrimmageLocation": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.ScrimmageLocation"
          },
          "snap": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Snap"
          },
          "isVoid": {
            "type": "boolean"
          },
          "isConfirmed": {
            "type": "boolean"
          },
          "isFinished": {
            "type": "boolean"
          },
          "period": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Period"
          },
          "actions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.PlayAction"
            },
            "nullable": true
          },
          "penalties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Penalty"
            },
            "nullable": true
          },
          "startedAtGameTime": {
            "type": "string",
            "format": "date-span",
            "nullable": true
          },
          "endedAtGameTime": {
            "type": "string",
            "format": "date-span",
            "nullable": true
          },
          "startedAtUtc": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "endedAtUtc": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.ConversionType": {
        "enum": [
          "Unknown",
          "OnePoint",
          "TwoPoints"
        ],
        "type": "string"
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.ConversionPlay": {
        "type": "object",
        "properties": {
          "teamInPossession": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.TeamSide"
          },
          "type": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.ConversionType"
          },
          "isVoid": {
            "type": "boolean"
          },
          "isConfirmed": {
            "type": "boolean"
          },
          "isFinished": {
            "type": "boolean"
          },
          "period": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Period"
          },
          "actions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.PlayAction"
            },
            "nullable": true
          },
          "penalties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Penalty"
            },
            "nullable": true
          },
          "startedAtGameTime": {
            "type": "string",
            "format": "date-span",
            "nullable": true
          },
          "endedAtGameTime": {
            "type": "string",
            "format": "date-span",
            "nullable": true
          },
          "startedAtUtc": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "endedAtUtc": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.ScoreType": {
        "enum": [
          "Touchdown",
          "OnePointConversion",
          "TwoPointConversion",
          "FieldGoal",
          "Safety",
          "OnePointSafety"
        ],
        "type": "string"
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.ScoreInfo": {
        "type": "object",
        "properties": {
          "period": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Period"
          },
          "type": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.ScoreType"
          },
          "team": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.TeamSide"
          },
          "points": {
            "type": "integer",
            "format": "int32"
          },
          "isConfirmed": {
            "type": "boolean"
          },
          "utcTimestamp": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Drive": {
        "type": "object",
        "properties": {
          "teamInPossession": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.TeamSide"
          },
          "isKickOff": {
            "type": "boolean",
            "nullable": true
          },
          "plays": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Play"
            },
            "nullable": true
          },
          "conversionPlays": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.ConversionPlay"
            },
            "nullable": true
          },
          "score": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.ScoreInfo"
            },
            "nullable": true
          },
          "isFinished": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.TimeOut": {
        "type": "object",
        "properties": {
          "team": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.TeamSide"
          },
          "gameTime": {
            "type": "string",
            "format": "date-span"
          },
          "period": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Period"
          },
          "utcTimestamp": {
            "type": "string",
            "format": "date-time"
          },
          "isConfirmed": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.TimeoutsRemaining": {
        "type": "object",
        "properties": {
          "away": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "home": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.CoinTossChoice": {
        "enum": [
          "Kick",
          "Receive",
          "EndZone",
          "NorthEndZone",
          "EastEndZone",
          "SouthEndZone",
          "WestEndZone"
        ],
        "type": "string"
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.CoinToss": {
        "type": "object",
        "properties": {
          "winnerTeam": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.TeamSide"
          },
          "wasDeferred": {
            "type": "boolean",
            "nullable": true
          },
          "awayChoice": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.CoinTossChoice"
          },
          "homeChoice": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.CoinTossChoice"
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Half": {
        "type": "object",
        "properties": {
          "drives": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Drive"
            },
            "nullable": true
          },
          "timeouts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.TimeOut"
            },
            "nullable": true
          },
          "timeoutsRemaining": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.TimeoutsRemaining"
          },
          "coinToss": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.CoinToss"
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Overtime": {
        "type": "object",
        "properties": {
          "period": {
            "type": "integer",
            "format": "int32"
          },
          "drives": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Drive"
            },
            "nullable": true
          },
          "timeouts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.TimeOut"
            },
            "nullable": true
          },
          "timeoutsRemaining": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.TimeoutsRemaining"
          },
          "coinToss": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.CoinToss"
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.ChallengeResult": {
        "enum": [
          "Unknown",
          "Won",
          "Lost"
        ],
        "type": "string"
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Challenge": {
        "type": "object",
        "properties": {
          "team": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.TeamSide"
          },
          "gameTime": {
            "type": "string",
            "format": "date-span"
          },
          "period": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Period"
          },
          "utcTimestamp": {
            "type": "string",
            "format": "date-time"
          },
          "result": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.ChallengeResult"
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.GameTime": {
        "type": "object",
        "properties": {
          "clock": {
            "type": "string",
            "format": "date-span"
          },
          "lastUpdatedUtc": {
            "type": "string",
            "format": "date-time"
          },
          "isRunning": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.MatchStatus": {
        "enum": [
          "Unknown",
          "NotStarted",
          "Warmup",
          "InProgress",
          "Postponed",
          "Finished",
          "Interrupted",
          "CoverageStopped",
          "Abandoned",
          "Cancelled",
          "Delayed"
        ],
        "type": "string"
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Score": {
        "type": "object",
        "properties": {
          "home": {
            "type": "integer",
            "format": "int32"
          },
          "away": {
            "type": "integer",
            "format": "int32"
          },
          "isConfirmed": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.PlayerPosition": {
        "enum": [
          "Unknown",
          "Kicker",
          "Punter",
          "Returner",
          "RunningBack",
          "Fullback",
          "WideReceiver",
          "TightEnd",
          "Tackle",
          "Guard",
          "Quarterback",
          "Center",
          "End",
          "Linebacker",
          "Cornerback",
          "Safety",
          "Holder"
        ],
        "type": "string"
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.PositionSide": {
        "enum": [
          "Unknown",
          "Right",
          "Middle",
          "Left"
        ],
        "type": "string"
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.LineupPlayer": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "position": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.PlayerPosition"
          },
          "side": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.PositionSide"
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Team": {
        "type": "object",
        "properties": {
          "offensive": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.LineupPlayer"
            },
            "nullable": true
          },
          "defensive": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.LineupPlayer"
            },
            "nullable": true
          },
          "special": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.LineupPlayer"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Comment": {
        "type": "object",
        "properties": {
          "value": {
            "type": "string",
            "nullable": true
          },
          "utcTimestamp": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.CurrentPossession": {
        "type": "object",
        "properties": {
          "team": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.TeamSide"
          },
          "lastUpdatedUtc": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.YardsToEndzone": {
        "type": "object",
        "properties": {
          "yards": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "team": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.TeamSide"
          },
          "lastUpdatedUtc": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "isConfirmed": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.RiskStatus": {
        "enum": [
          "Unknown",
          "Active",
          "NonActive"
        ],
        "type": "string"
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Risks": {
        "type": "object",
        "properties": {
          "touchdown": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.RiskStatus"
          },
          "onsideKick": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.RiskStatus"
          },
          "fieldGoal": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.RiskStatus"
          },
          "fourthDown": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.RiskStatus"
          },
          "safety": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.RiskStatus"
          },
          "challenge": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.RiskStatus"
          },
          "penalty": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.RiskStatus"
          },
          "videoReview": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.RiskStatus"
          },
          "turnover": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.RiskStatus"
          }
        },
        "additionalProperties": false
      },
      "GeniusSports.Sports.AmericanFootball.Contracts.MatchState.AmericanFootballMatchState": {
        "type": "object",
        "properties": {
          "firstHalf": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Half"
          },
          "secondHalf": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Half"
          },
          "overtimePeriods": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Overtime"
            },
            "nullable": true
          },
          "challenges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Challenge"
            },
            "nullable": true
          },
          "gameTime": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.GameTime"
          },
          "matchStatus": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.MatchStatus"
          },
          "period": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Period"
          },
          "score": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Score"
          },
          "homeTeam": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Team"
          },
          "awayTeam": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Team"
          },
          "comments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Comment"
            },
            "nullable": true
          },
          "currentPossession": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.CurrentPossession"
          },
          "yardsToEndzone": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.YardsToEndzone"
          },
          "risks": {
            "$ref": "#/components/schemas/GeniusSports.Sports.AmericanFootball.Contracts.MatchState.Risks"
          },
          "source": {
            "type": "string",
            "nullable": true
          },
          "fixtureId": {
            "type": "string",
            "nullable": true
          },
          "messageTimestampUtc": {
            "type": "string",
            "format": "date-time"
          },
          "isReliable": {
            "type": "boolean"
          },
          "isCoverageCancelled": {
            "type": "boolean"
          },
          "reliabilityReasons": {
            "type": "object",
            "properties": {
              "Heartbeat": {
                "type": "string"
              },
              "FeedReliability": {
                "type": "string"
              },
              "Coverage": {
                "type": "string"
              }
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Microsoft.AspNetCore.Mvc.ProblemDetails": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "nullable": true
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "detail": {
            "type": "string",
            "nullable": true
          },
          "instance": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": { }
      }
    }
  }
}