Skip to content

Fouls

The fouls section in the markings response contains foul event data from the game.

Sample Response

json
{
  "markings": {
    "fouls": [
      {
        "attacking_positive_x": false,
        "event_pbp_descriptor": "shooting",
        "event_pbp_foul_personal_total": 1,
        "event_pbp_foul_technical_total": 0,
        "event_pbp_id": 9,
        "event_pbp_qualifiers": "[\"2freethrow\"]",
        "event_pbp_subtype": "personal",
        "foul_he_frame": 1970,
        "foul_id_ctg": "foul_667403419384a15148c093ad99575474",
        "foul_type": "shooting",
        "foul_wall_clock": "2025-12-23T01:11:07.288+00:00",
        "fouled_player_id_nba": 1630180,
        "fouled_player_loc_x": -649.3,
        "fouled_player_loc_y": 84.01,
        "fouled_player_region": null,
        "game_clock": 688,
        "game_clock_running": true,
        "game_id_nba": "0022500404",
        "is_charge": false,
        "is_shooting_foul": true,
        "is_take_foul": false,
        "loc_x": -385.68,
        "loc_y": 186.18,
        "pbp_event_id": 9,
        "period": 1,
        "player_id_nba": 1629023,
        "possession_team_id_nba": 1610612740,
        "region": "right wing two",
        "shot_clock": 6,
        "shot_clock_running": true
      }
    ]
  }
}

Fields

Identifiers

game_id_nba

Type: string

NBA game ID


foul_id_ctg

Type: string

CTG-generated foul ID


player_id_nba

Type: integer | null

NBA player ID of the player who committed the foul. null for team-assigned fouls where the official play-by-play does not assign the foul to an individual player.


fouled_player_id_nba

Type: integer | null

NBA player ID of the fouled player. null when the official play-by-play does not identify a fouled player.


possession_team_id_nba

Type: integer

NBA team ID of the team with possession


Timing

period

Type: integer

Period when the foul occurred


game_clock

Type: float

Game clock (seconds remaining) at the foul


shot_clock

Type: float

Shot clock at the foul. null if the shot clock is off


foul_he_frame

Type: integer

Hawk-Eye frame of the foul. null if there is no corresponding Hawk-Eye frame in the Hawk-Eye event data


foul_wall_clock

Type: string

UTC timestamp corresponding to foul_he_frame. null if there is no corresponding Hawk-Eye frame.


game_clock_running deprecated

Type: boolean

true if game clock was running

Deprecated

This field is unreliable and not particularly useful for analyzing foul events. This field will be removed in a future version.


shot_clock_running deprecated

Type: boolean

true if shot clock was running

Deprecated

This field is unreliable and not particularly useful for analyzing foul events. This field will be removed in a future version.


Play-by-Play Data

pbp_event_id

Type: integer

Play-by-play event ID (i.e. NGSS event ID) for the foul


event_pbp_id deprecated

Type: integer

Play-by-play event ID (i.e. NGSS event ID) for the foul

Deprecated

Use pbp_event_id instead. This field will be removed in a future version.


event_pbp_subtype

Type: string

The sub_type field from the official play-by-play feed. null if not provided


event_pbp_descriptor

Type: string

The descriptor field from the official play-by-play feed. null if not provided


event_pbp_qualifiers

Type: string

The qualifiers field from the official play-by-play feed. null if not provided


Foul Classification

foul_type

Type: string

Normalized foul type based on official play-by-play data. Expected values are shooting, offensive, flagrant, technical, bonus, clear_path, away_from_play, loose_ball, and other.


is_shooting_foul

Type: boolean

true if the official play-by-play identifies the foul as a shooting foul.


is_take_foul

Type: boolean

true if the official play-by-play identifies the foul as a take foul or transition take foul.


is_charge

Type: boolean

true if the official play-by-play identifies the foul as a charge.


event_pbp_foul_personal_total deprecated

Type: integer

Player's personal foul total for the game. null if not provided

Deprecated

This data is already available in the official NBA play-by-play feed. This field will be removed in a future version.


event_pbp_foul_technical_total deprecated

Type: integer

Player's technical foul total. null if not provided

Deprecated

This data is already available in the official NBA play-by-play feed. This field will be removed in a future version.


Court Context

loc_x

Type: float

X coordinate of the fouling player's location in inches. null if location is unavailable.


loc_y

Type: float

Y coordinate of the fouling player's location in inches. null if location is unavailable.


region

Type: string

Court region of the fouling player's location. If the foul-frame location is out of bounds or does not map to a court region, this uses the most recent in-bounds location in the 45 frames before the foul. null if location is unavailable.


fouled_player_loc_x

Type: float

X coordinate of the fouled player's location in inches. null if the fouled player or location is unavailable.


fouled_player_loc_y

Type: float

Y coordinate of the fouled player's location in inches. null if the fouled player or location is unavailable.


fouled_player_region

Type: string

Court region of the fouled player's location. If the foul-frame location is out of bounds or does not map to a court region, this uses the most recent in-bounds location in the 45 frames before the foul. null if the fouled player or location is unavailable.


attacking_positive_x deprecated

Type: boolean

true if offensive team is attacking the positive X basket. null if unknown

Deprecated

This information is not relevant to analyzing foul events. This field will be removed in a future version.