Reference

Every read.

Each entry is generated from the same document the API is tested against, and each example is an answer a real game really produced.

Before you start

Every address below hangs off https://api.travelball.gg/v1, and every request carries your key in the Authorization header. See Your key.

A field marked optional may be missing. A field you do not recognise is a field added since you last looked, and reading past it is always safe.

getTeam

Read one team.

GET /teams/{teamId}

The team's name, where it plays and which season it belongs to. No players and no games.

getTeam parameters
NameWhereWhat it is
teamIdin the addressThe team's public id, as `team_…`.
getTeam answer
FieldTypeWhat it is
idstringThe team's public id, as `team_…`. Use it in the other team addresses.
namestringThe team's full name, as the coach typed it.
abbrevstringA short label for a scoreboard, normally three letters.
logoUrlobjectA link to the team's logo: a square PNG, 512 pixels on each side, with a see-through background. Null when the team has no logo. The link can change, so read it again rather than keeping it.
citystringThe city the team plays out of.
statestringThe two-letter state code.
ageGroupstringThe age group, written as a number and the letter U, from `6U` to `18U`.
divisionone of "A", "AA", "AAA", "Majors"The competitive level inside the age group, weakest first.
seasonstringThe season this team belongs to, such as `Spring 2026`.
sportone of "baseball", "fastpitch"Which game the team plays.
versionVersion
generatedAtGeneratedAt
{
  "abbrev": "NTX",
  "ageGroup": "12U",
  "city": "Fort Worth",
  "division": "AA",
  "id": "team_1",
  "logoUrl": null,
  "name": "NTX Drillers",
  "season": "Spring 2026",
  "sport": "baseball",
  "state": "TX",
  "version": "v1",
  "generatedAt": 0
}

getRoster

Read a team's players.

GET /teams/{teamId}/roster

The players on this team, with jersey numbers and the positions they play. These are children: a key that does not belong to the account that created the roster reads first name and last initial.

getRoster parameters
NameWhereWhat it is
teamIdin the addressThe team's public id, as `team_…`.
getRoster answer
FieldTypeWhat it is
idstringThe team's public id.
playersarray of RosterPlayerThe players on the team, in the order the team keeps them.
idstringThe player's public id, as `plyr_…`. It is the same id used in plays and box scores.
namestringThe player's name. A key that does not belong to the account that created this roster reads a first name and a last initial. A player entered by jersey number alone reads as `#14`.
numberstring · optionalThe jersey number, as text so that `07` stays `07`. Absent when the team never gave one.
positionsarray of PositionThe positions this player is listed at, most usual first.
versionVersion
generatedAtGeneratedAt
{
  "id": "team_1",
  "players": [
    {
      "id": "plyr_1",
      "name": "Colt Ramirez",
      "number": "21",
      "positions": [
        "P"
      ]
    },
    {
      "id": "plyr_2",
      "name": "Nolan Sebesta",
      "number": "30",
      "positions": [
        "1B"
      ]
    },
    {
      "id": "plyr_3",
      "name": "Jake Martinez",
      "number": "8",
      "positions": [
        "CF"
      ]
    },
    {
      "id": "plyr_4",
      "name": "Ty Vasquez",
      "number": "14",
      "positions": [
        "SS"
      ]
    },
    {
      "id": "plyr_5",
      "name": "Cash Delgado",
      "number": "22",
      "positions": [
        "2B"
      ]
    },
    {
      "id": "plyr_6",
      "name": "Reid Fisher",
      "number": "17",
      "positions": [
        "3B"
      ]
    },
    {
      "id": "plyr_7",
      "name": "Owen Park",
      "number": "9",
      "positions": [
        "RF"
      ]
    }
  ],
  "version": "v1",
  "generatedAt": 0
}

listGames

List a team's games, newest first.

GET /teams/{teamId}/games

One page of games. Each game carries its line score, so a schedule page with scores on it needs one request. Follow `nextCursor` for the next page; a `nextCursor` of null means this was the last page.

listGames parameters
NameWhereWhat it is
teamIdin the addressThe team's public id, as `team_…`.
statusa query valueKeep only games in this state. Anything else is ignored and every game is returned. Optional.
cursora query valueThe `nextCursor` from the previous page. Leave it off for the first page. Optional.
limita query valueHow many games to return, from 1 to 50. A larger number is trimmed to 50 rather than refused. Leave it off for 50. Optional.
listGames answer
FieldTypeWhat it is
gamesarray of GameSummaryThe games on this page, newest first. A game with no start time sorts last.
idstringThe game's public id, as `game_…`.
statusGameStatus
endReasonEndReason · optional
scheduledAtinteger · optionalWhen the game is due to start, in milliseconds since 1 January 1970. Absent when no time was set.
homeTeamRef
awayTeamRef
lineScoreLineScore
broadcastBroadcast
versionVersion
nextCursorobjectPass this back as `cursor` for the next page. Null when this was the last page.
versionVersion
generatedAtGeneratedAt
{
  "games": [
    {
      "away": {
        "abbrev": "NTX",
        "id": "team_1",
        "name": "NTX Drillers"
      },
      "broadcast": null,
      "home": {
        "abbrev": "DAL",
        "id": "team_2",
        "name": "Dallas Tigers"
      },
      "id": "game_1",
      "lineScore": {
        "away": [
          1
        ],
        "home": [
          1
        ],
        "totals": {
          "awayErrors": 0,
          "awayHits": 2,
          "awayRuns": 1,
          "homeErrors": 1,
          "homeHits": 2,
          "homeRuns": 1
        }
      },
      "scheduledAt": 1750000000000,
      "status": "live",
      "version": "v1"
    }
  ],
  "nextCursor": "10013;games",
  "version": "v1",
  "generatedAt": 0
}

getGame

Read one game.

GET /games/{gameId}

Both teams, the line score, the league rules this game was played under, and the YouTube video if there is one.

getGame parameters
NameWhereWhat it is
gameIdin the addressThe game's public id, as `game_…`.
getGame answer
FieldTypeWhat it is
idstringThe game's public id, as `game_…`.
statusGameStatus
endReasonEndReason · optional
scheduledAtinteger · optionalWhen the game is due to start, in milliseconds since 1 January 1970. Absent when no time was set.
homeTeamRef
idstringThat team's public id.
namestringThat team's name, frozen onto the game when it was created. A later rename does not rewrite it.
abbrevstringA short label for a scoreboard.
awayTeamRef
idstringThat team's public id.
namestringThat team's name, frozen onto the game when it was created. A later rename does not rewrite it.
abbrevstringA short label for a scoreboard.
lineScoreLineScore
awayarray of integerRuns the visiting team scored, one number per inning it batted, first inning first.
homearray of integerRuns the home team scored, one number per inning it batted. It can be one shorter than the visiting list when the home team did not need to bat.
totalsLineScoreTotals
broadcastBroadcast
youtubeVideoIdstringThe YouTube video id, for building your own player.
watchUrlstringThe address a viewer can open to watch.
rulesetAdvisoryRuleset
regulationInningsone of "6", "7", "9"How many innings a full game is.
timeLimitTimeLimit
runRulesarray of RunRuleThe mercy rules, if the league has any.
maxRunsPerHalfInningobjectThe most runs one side may score in a half inning. Null when the league set none.
finalInningOpenbooleanTrue when the run cap is lifted for the last inning.
scoringModeone of "full", "scoreboard"How this game was scored. `full` records every pitch and has a box score. `scoreboard` records runs, outs and innings only, for a volunteer holding a camera as well as a phone, and has no box score at all.
partialFromobjectThe point at which this game stopped being scored in full, as an entry number in the raw record. Null when the book is complete. Batting and pitching lines simply stop there, so show a note rather than a total if this is set.
versionVersion
generatedAtGeneratedAt
{
  "away": {
    "abbrev": "NTX",
    "id": "team_1",
    "name": "NTX Drillers"
  },
  "broadcast": null,
  "home": {
    "abbrev": "DAL",
    "id": "team_2",
    "name": "Dallas Tigers"
  },
  "id": "game_1",
  "lineScore": {
    "away": [
      1
    ],
    "home": [
      1
    ],
    "totals": {
      "awayErrors": 0,
      "awayHits": 2,
      "awayRuns": 1,
      "homeErrors": 1,
      "homeHits": 2,
      "homeRuns": 1
    }
  },
  "partialFrom": null,
  "ruleset": {
    "finalInningOpen": true,
    "maxRunsPerHalfInning": 5,
    "regulationInnings": 6,
    "runRules": [
      {
        "afterInning": 3,
        "differential": 15
      },
      {
        "afterInning": 4,
        "differential": 10
      }
    ],
    "timeLimit": {
      "minutes": 105,
      "noNewInningAfterMinutes": 105
    }
  },
  "scheduledAt": 1750000000000,
  "scoringMode": "full",
  "status": "live",
  "version": "v1",
  "generatedAt": 0
}

getGameState

Read the live scoreboard for one game.

GET /games/{gameId}/state

The small answer a live scoreboard redraws: the score, the inning, the count, who is on base and who is at bat. Built for polling, so it is never cached. Ten seconds between requests is enough.

getGameState parameters
NameWhereWhat it is
gameIdin the addressThe game's public id, as `game_…`.
getGameState answer
FieldTypeWhat it is
idstringThe game's public id.
inningintegerWhich inning is being played, counting from 1.
halfHalfInning
outsintegerOuts in this half inning, from 0 to 2.
ballsintegerBalls on the batter.
strikesintegerStrikes on the batter.
basesBases
firstbooleanTrue when a runner is on first.
secondbooleanTrue when a runner is on second.
thirdbooleanTrue when a runner is on third.
awayScoreintegerRuns scored by the visiting team so far.
homeScoreintegerRuns scored by the home team so far.
batterPlayerRef
idstringThe player's public id, the same one the roster uses.
namestringThe player's name, shortened to a first name and a last initial unless the key belongs to the account that created the roster. Empty when the player is not in this game's lineup.
dueUparray of PlayerRefThe next two batters, in order. Empty when the batting order is not settled.
idstringThe player's public id, the same one the roster uses.
namestringThe player's name, shortened to a first name and a last initial unless the key belongs to the account that created the roster. Empty when the player is not in this game's lineup.
updatedAtintegerWhen the scorer last recorded anything in this game, in milliseconds since 1 January 1970. Zero before the first entry.
versionVersion
generatedAtGeneratedAt
{
  "awayScore": 1,
  "balls": 0,
  "bases": {
    "first": true,
    "second": false,
    "third": false
  },
  "batter": {
    "id": "plyr_1",
    "name": "Wyatt Brooks"
  },
  "dueUp": [
    {
      "id": "plyr_2",
      "name": "Beau Collins"
    },
    {
      "id": "plyr_1",
      "name": "Wyatt Brooks"
    }
  ],
  "half": "bottom",
  "homeScore": 1,
  "id": "game_1",
  "inning": 1,
  "outs": 0,
  "strikes": 0,
  "updatedAt": 0,
  "version": "v1",
  "generatedAt": 0
}

getPlays

Read the play-by-play for one game.

GET /games/{gameId}/plays

Every completed turn at bat, in order. Corrections are already applied and plays the scorer took back are already gone, so this is the finished story of the game.

getPlays parameters
NameWhereWhat it is
gameIdin the addressThe game's public id, as `game_…`.
getPlays answer
FieldTypeWhat it is
idstringThe game's public id.
playsarray of PlayEvery completed turn at bat, first to last, with corrections applied.
inningintegerThe inning this play happened in.
halfHalfInning
batterPlayerRef
outcomePlateAppearanceOutcome
movementsarray of MovementEvery runner who moved on this play, the batter included.
rbiintegerRuns batted in on this play alone.
outsintegerOuts recorded on this play alone.
battedBallBattedBall
versionVersion
generatedAtGeneratedAt
{
  "id": "game_1",
  "plays": [
    {
      "battedBall": null,
      "batter": {
        "id": "plyr_1",
        "name": "Nolan Sebesta"
      },
      "half": "top",
      "inning": 1,
      "movements": [
        {
          "cause": "batted_ball",
          "from": "batter",
          "runner": "plyr_1",
          "to": 1
        }
      ],
      "outcome": "single",
      "outs": 0,
      "rbi": 0
    },
    {
      "battedBall": null,
      "batter": {
        "id": "plyr_2",
        "name": "Jake Martinez"
      },
      "half": "top",
      "inning": 1,
      "movements": [
        {
          "cause": "error",
          "from": 1,
          "runner": "plyr_1",
          "to": 2
        },
        {
          "cause": "error",
          "from": "batter",
          "runner": "plyr_2",
          "to": 1
        }
      ],
      "outcome": "reached_on_error",
      "outs": 0,
      "rbi": 0
    },
    {
      "battedBall": null,
      "batter": {
        "id": "plyr_3",
        "name": "Ty Vasquez"
      },
      "half": "top",
      "inning": 1,
      "movements": [
        {
          "cause": "batted_ball",
          "from": 2,
          "runner": "plyr_1",
          "to": "home"
        },
        {
          "cause": "batted_ball",
          "from": 1,
          "runner": "plyr_2",
          "to": 3
        },
        {
          "cause": "batted_ball",
          "from": "batter",
          "runner": "plyr_3",
          "to": 2
        }
      ],
      "outcome": "double",
      "outs": 0,
      "rbi": 1
    },
    {
      "battedBall": null,
      "batter": {
        "id": "plyr_4",
        "name": "Cash Delgado"
      },
      "half": "top",
      "inning": 1,
      "movements": [
        {
          "cause": "batted_ball",
          "from": "batter",
          "runner": "plyr_4",
          "to": "out"
        }
      ],
      "outcome": "strikeout",
      "outs": 1,
      "rbi": 0
    },
    {
      "battedBall": "fly",
      "batter": {
        "id": "plyr_5",
        "name": "Reid Fisher"
      },
      "half": "top",
      "inning": 1,
      "movements": [
        {
          "cause": "batted_ball",
          "from": "batter",
          "runner": "plyr_5",
          "to": "out"
        }
      ],
      "outcome": "fly_out",
      "outs": 1,
      "rbi": 0
    },
    {
      "battedBall": "ground",
      "batter": {
        "id": "plyr_6",
        "name": "Owen Park"
      },
      "half": "top",
      "inning": 1,
      "movements": [
        {
          "cause": "batted_ball",
          "from": "batter",
          "runner": "plyr_6",
          "to": "out"
        }
      ],
      "outcome": "ground_out",
      "outs": 1,
      "rbi": 0
    },
    {
      "battedBall": null,
      "batter": {
        "id": "plyr_7",
        "name": "Wyatt Brooks"
      },
      "half": "bottom",
      "inning": 1,
      "movements": [
        {
          "cause": "batted_ball",
          "from": "batter",
          "runner": "plyr_7",
          "to": "home"
        }
      ],
      "outcome": "home_run",
      "outs": 0,
      "rbi": 1
    },
    {
      "battedBall": null,
      "batter": {
        "id": "plyr_8",
        "name": "Beau Collins"
      },
      "half": "bottom",
      "inning": 1,
      "movements": [
        {
          "cause": "batted_ball",
          "from": "batter",
          "runner": "plyr_8",
          "to": 1
        }
      ],
      "outcome": "single",
      "outs": 0,
      "rbi": 0
    }
  ],
  "version": "v1",
  "generatedAt": 0
}

getBoxscore

Read the box score for one game.

GET /games/{gameId}/boxscore

A batting line and a pitching line for every player who took part, for each side, in the order they batted and pitched. A game scored on the scoreboard only has no lines at all, and both lists come back empty rather than missing.

getBoxscore parameters
NameWhereWhat it is
gameIdin the addressThe game's public id, as `game_…`.
getBoxscore answer
FieldTypeWhat it is
idstringThe game's public id.
battingBattingSides
homearray of BattingRowThe home team's batting lines.
awayarray of BattingRowThe visiting team's batting lines.
pitchingPitchingSides
homearray of PitchingRowThe home team's pitching lines.
awayarray of PitchingRowThe visiting team's pitching lines.
versionVersion
generatedAtGeneratedAt
{
  "batting": {
    "away": [
      {
        "ab": 1,
        "bb": 0,
        "bunts": 0,
        "ci": 0,
        "cs": 0,
        "doubles": 0,
        "fc": 0,
        "flyBalls": 0,
        "gidp": 0,
        "groundBalls": 0,
        "h": 1,
        "hardGroundBalls": 0,
        "hbp": 0,
        "hr": 0,
        "id": "plyr_1",
        "k": 0,
        "kLooking": 0,
        "lineDrives": 0,
        "lob": 0,
        "name": "Nolan Sebesta",
        "pa": 1,
        "pickedOff": 0,
        "pitchesSeen": 0,
        "popUps": 0,
        "r": 1,
        "rbi": 0,
        "roe": 0,
        "sac": 0,
        "sb": 0,
        "sf": 0,
        "triples": 0
      },
      {
        "ab": 1,
        "bb": 0,
        "bunts": 0,
        "ci": 0,
        "cs": 0,
        "doubles": 0,
        "fc": 0,
        "flyBalls": 0,
        "gidp": 0,
        "groundBalls": 0,
        "h": 0,
        "hardGroundBalls": 0,
        "hbp": 0,
        "hr": 0,
        "id": "plyr_2",
        "k": 0,
        "kLooking": 0,
        "lineDrives": 0,
        "lob": 1,
        "name": "Jake Martinez",
        "pa": 1,
        "pickedOff": 0,
        "pitchesSeen": 0,
        "popUps": 0,
        "r": 0,
        "rbi": 0,
        "roe": 1,
        "sac": 0,
        "sb": 0,
        "sf": 0,
        "triples": 0
      },
      {
        "ab": 1,
        "bb": 0,
        "bunts": 0,
        "ci": 0,
        "cs": 0,
        "doubles": 1,
        "fc": 0,
        "flyBalls": 0,
        "gidp": 0,
        "groundBalls": 0,
        "h": 1,
        "hardGroundBalls": 0,
        "hbp": 0,
        "hr": 0,
        "id": "plyr_3",
        "k": 0,
        "kLooking": 0,
        "lineDrives": 0,
        "lob": 1,
        "name": "Ty Vasquez",
        "pa": 1,
        "pickedOff": 0,
        "pitchesSeen": 0,
        "popUps": 0,
        "r": 0,
        "rbi": 1,
        "roe": 0,
        "sac": 0,
        "sb": 0,
        "sf": 0,
        "triples": 0
      },
      {
        "ab": 1,
        "bb": 0,
        "bunts": 0,
        "ci": 0,
        "cs": 0,
        "doubles": 0,
        "fc": 0,
        "flyBalls": 0,
        "gidp": 0,
        "groundBalls": 0,
        "h": 0,
        "hardGroundBalls": 0,
        "hbp": 0,
        "hr": 0,
        "id": "plyr_4",
        "k": 1,
        "kLooking": 0,
        "lineDrives": 0,
        "lob": 2,
        "name": "Cash Delgado",
        "pa": 1,
        "pickedOff": 0,
        "pitchesSeen": 0,
        "popUps": 0,
        "r": 0,
        "rbi": 0,
        "roe": 0,
        "sac": 0,
        "sb": 0,
        "sf": 0,
        "triples": 0
      },
      {
        "ab": 1,
        "bb": 0,
        "bunts": 0,
        "ci": 0,
        "cs": 0,
        "doubles": 0,
        "fc": 0,
        "flyBalls": 1,
        "gidp": 0,
        "groundBalls": 0,
        "h": 0,
        "hardGroundBalls": 0,
        "hbp": 0,
        "hr": 0,
        "id": "plyr_5",
        "k": 0,
        "kLooking": 0,
        "lineDrives": 0,
        "lob": 2,
        "name": "Reid Fisher",
        "pa": 1,
        "pickedOff": 0,
        "pitchesSeen": 0,
        "popUps": 0,
        "r": 0,
        "rbi": 0,
        "roe": 0,
        "sac": 0,
        "sb": 0,
        "sf": 0,
        "triples": 0
      },
      {
        "ab": 1,
        "bb": 0,
        "bunts": 0,
        "ci": 0,
        "cs": 0,
        "doubles": 0,
        "fc": 0,
        "flyBalls": 0,
        "gidp": 0,
        "groundBalls": 1,
        "h": 0,
        "hardGroundBalls": 0,
        "hbp": 0,
        "hr": 0,
        "id": "plyr_6",
        "k": 0,
        "kLooking": 0,
        "lineDrives": 0,
        "lob": 2,
        "name": "Owen Park",
        "pa": 1,
        "pickedOff": 0,
        "pitchesSeen": 0,
        "popUps": 0,
        "r": 0,
        "rbi": 0,
        "roe": 0,
        "sac": 0,
        "sb": 0,
        "sf": 0,
        "triples": 0
      }
    ],
    "home": [
      {
        "ab": 1,
        "bb": 0,
        "bunts": 0,
        "ci": 0,
        "cs": 0,
        "doubles": 0,
        "fc": 0,
        "flyBalls": 0,
        "gidp": 0,
        "groundBalls": 0,
        "h": 1,
        "hardGroundBalls": 0,
        "hbp": 0,
        "hr": 1,
        "id": "plyr_7",
        "k": 0,
        "kLooking": 0,
        "lineDrives": 0,
        "lob": 0,
        "name": "Wyatt Brooks",
        "pa": 1,
        "pickedOff": 0,
        "pitchesSeen": 0,
        "popUps": 0,
        "r": 1,
        "rbi": 1,
        "roe": 0,
        "sac": 0,
        "sb": 0,
        "sf": 0,
        "triples": 0
      },
      {
        "ab": 1,
        "bb": 0,
        "bunts": 0,
        "ci": 0,
        "cs": 0,
        "doubles": 0,
        "fc": 0,
        "flyBalls": 0,
        "gidp": 0,
        "groundBalls": 0,
        "h": 1,
        "hardGroundBalls": 0,
        "hbp": 0,
        "hr": 0,
        "id": "plyr_8",
        "k": 0,
        "kLooking": 0,
        "lineDrives": 0,
        "lob": 0,
        "name": "Beau Collins",
        "pa": 1,
        "pickedOff": 0,
        "pitchesSeen": 0,
        "popUps": 0,
        "r": 0,
        "rbi": 0,
        "roe": 0,
        "sac": 0,
        "sb": 0,
        "sf": 0,
        "triples": 0
      }
    ]
  },
  "id": "game_1",
  "pitching": {
    "away": [
      {
        "abAgainst": 2,
        "airOuts": 0,
        "balks": 0,
        "battersFaced": 2,
        "bb": 0,
        "csAgainst": 0,
        "er": 1,
        "firstPitchStrikes": 0,
        "groundOuts": 0,
        "h": 2,
        "hbp": 0,
        "hrAllowed": 1,
        "id": "plyr_9",
        "illegalPitches": 0,
        "k": 0,
        "kLooking": 0,
        "name": "Colt Ramirez",
        "outsRecorded": 0,
        "pickoffs": 0,
        "pitches": 0,
        "r": 1,
        "sbAllowed": 0,
        "strikes": 0,
        "strikesCalled": 0,
        "strikesSwinging": 0,
        "wp": 0
      }
    ],
    "home": [
      {
        "abAgainst": 6,
        "airOuts": 1,
        "balks": 0,
        "battersFaced": 6,
        "bb": 0,
        "csAgainst": 0,
        "er": 0,
        "firstPitchStrikes": 0,
        "groundOuts": 1,
        "h": 2,
        "hbp": 0,
        "hrAllowed": 0,
        "id": "plyr_10",
        "illegalPitches": 0,
        "k": 1,
        "kLooking": 0,
        "name": "Kade Sebesta",
        "outsRecorded": 3,
        "pickoffs": 0,
        "pitches": 0,
        "r": 1,
        "sbAllowed": 0,
        "strikes": 0,
        "strikesCalled": 0,
        "strikesSwinging": 0,
        "wp": 0
      }
    ]
  },
  "version": "v1",
  "generatedAt": 0
}

getEvents

Read the raw record of one game.

GET /games/{gameId}/events

Everything the scorer recorded, in the order it was recorded, with nothing taken out. This is the audit trail, so it still holds the plays a correction replaced and the plays a rewind took back. To rebuild the game from this list, first drop everything a `rewind.to` entry took back, and then drop every entry that a later entry says it supersedes. Read `/plays` or `/boxscore` instead if you only want the finished picture.

getEvents parameters
NameWhereWhat it is
gameIdin the addressThe game's public id, as `game_…`.
getEvents answer
FieldTypeWhat it is
eventsarray of LoggedEventEvery entry, in the order it was recorded, including the ones a correction replaced and the ones a rewind took back.
sequenceintegerThis entry's number in the game, counting up and never reused. Other entries point at it by this number.
eventGameEvent (one of several shapes)
recordedAtintegerWhen the scorer recorded it, in milliseconds since 1 January 1970.
scorerintegerWhich scorer recorded it, numbered 1, 2, 3 within this game in the order they first appear. It names nobody: we do not publish who kept the book.
supersedesinteger · optionalThe `sequence` of the entry this one replaces, when it is a correction. The replaced entry stays in the list; drop it yourself when you rebuild the game.
versionVersion
generatedAtGeneratedAt
{
  "events": [
    {
      "event": {
        "awayLineup": [],
        "homeLineup": [],
        "startedAt": 0,
        "type": "game.started"
      },
      "recordedAt": 0,
      "scorer": 1,
      "sequence": 0
    },
    {
      "event": {
        "half": "top",
        "inning": 1,
        "type": "half_inning.started"
      },
      "recordedAt": 0,
      "scorer": 1,
      "sequence": 1
    },
    {
      "event": {
        "pitcher": "p1",
        "side": "home",
        "type": "pitching_change"
      },
      "recordedAt": 0,
      "scorer": 1,
      "sequence": 2
    },
    {
      "event": {
        "batter": "a1",
        "movements": [
          {
            "cause": "batted_ball",
            "from": "batter",
            "runner": "a1",
            "to": 1
          }
        ],
        "outcome": "single",
        "type": "plate_appearance.completed"
      },
      "recordedAt": 0,
      "scorer": 1,
      "sequence": 3
    },
    {
      "event": {
        "batter": "a1",
        "movements": [
          {
            "cause": "batted_ball",
            "from": "batter",
            "runner": "a1",
            "to": 2
          }
        ],
        "outcome": "double",
        "type": "plate_appearance.completed"
      },
      "recordedAt": 0,
      "scorer": 1,
      "sequence": 4,
      "supersedes": 3
    }
  ],
  "version": "v1",
  "generatedAt": 0
}

getTeamSeason

Read a team's season totals.

GET /teams/{teamId}/season

The team's record, and every batter and pitcher who has appeared, added up across every game that counts. A game the team switched off is left out of every total and counted once under `record.excludedGames`. These are children: a key that does not belong to the account that created the roster reads first name and last initial.

getTeamSeason parameters
NameWhereWhat it is
teamIdin the addressThe team's public id, as `team_…`.
getTeamSeason answer
FieldTypeWhat it is
idstringThe team's public id.
teamNamestringThe team's name.
seasonstringThe season this team plays, as the team wrote it — `Spring 2026`.
recordSeasonRecord
winsintegerGames won. Only games that are final are counted.
lossesintegerGames lost.
tiesintegerGames that finished level.
countingGamesintegerGames in these totals: every game that has been played and that the team has not switched off.
excludedGamesintegerGames played that the team switched off, so they are in no total here. A game still on the schedule is not one of these.
battingarray of SeasonBattingRowEvery player who has had a turn at bat, in the team's own roster order.
playerPublicIdstringThe player's public id, as `plyr_…`.
namestringThe player's name, shortened unless the key owns the roster.
numberstring · optionalThe jersey number, as text. Absent when the team never gave one.
gpintegerGames in which this player had a turn at bat.
lineBattingLine
ratesBattingRates
pitchingarray of SeasonPitchingRowEvery player who has pitched, in the team's own roster order.
playerPublicIdstringThe player's public id, as `plyr_…`.
namestringThe player's name, shortened unless the key owns the roster.
numberstring · optionalThe jersey number, as text. Absent when the team never gave one.
gpintegerGames in which this player pitched.
ipstringInnings pitched, written the way a scoreboard writes them: `2.1` is two innings and one out.
linePitchingLine
ratesPitchingRates
regulationInningsintegerHow long a regulation game is for this team, taken from the rules of its most recent game that counts. Earned run average is per regulation game, so this is the number it is scaled by.
gamesarray of SeasonGameThe games in these totals, newest first.
gamePublicIdstringThe game's public id, as `game_…`. Read the game itself at `/v1/games/{gameId}`.
opponentNamestringWho the team played, frozen onto the game when it was created.
opponentAgeGroupobjectThe opponent's age group when the opponent is a listed team. Null when the opponent was typed in by hand.
scheduledAtobjectWhen the game was scheduled, in milliseconds since 1 January 1970. Null when no date was ever set.
versionVersion
generatedAtGeneratedAt
{
  "batting": [
    {
      "gp": 1,
      "line": {
        "ab": 1,
        "bb": 0,
        "bunts": 0,
        "ci": 0,
        "cs": 0,
        "doubles": 0,
        "fc": 0,
        "flyBalls": 0,
        "gidp": 0,
        "groundBalls": 0,
        "h": 1,
        "hardGroundBalls": 0,
        "hbp": 0,
        "hr": 1,
        "k": 0,
        "kLooking": 0,
        "lineDrives": 0,
        "lob": 0,
        "pa": 1,
        "pickedOff": 0,
        "pitchesSeen": 0,
        "popUps": 0,
        "r": 1,
        "rbi": 1,
        "roe": 0,
        "sac": 0,
        "sb": 0,
        "sf": 0,
        "triples": 0
      },
      "name": "Wyatt Brooks",
      "number": "5",
      "playerPublicId": "plyr_1",
      "rates": {
        "avg": 1,
        "bbPerK": null,
        "obp": 1,
        "ops": 5,
        "pitchesPerPa": 0,
        "sbPct": null,
        "slg": 4
      }
    },
    {
      "gp": 1,
      "line": {
        "ab": 1,
        "bb": 0,
        "bunts": 0,
        "ci": 0,
        "cs": 0,
        "doubles": 0,
        "fc": 0,
        "flyBalls": 0,
        "gidp": 0,
        "groundBalls": 0,
        "h": 1,
        "hardGroundBalls": 0,
        "hbp": 0,
        "hr": 0,
        "k": 0,
        "kLooking": 0,
        "lineDrives": 0,
        "lob": 0,
        "pa": 1,
        "pickedOff": 0,
        "pitchesSeen": 0,
        "popUps": 0,
        "r": 0,
        "rbi": 0,
        "roe": 0,
        "sac": 0,
        "sb": 0,
        "sf": 0,
        "triples": 0
      },
      "name": "Beau Collins",
      "number": "7",
      "playerPublicId": "plyr_2",
      "rates": {
        "avg": 1,
        "bbPerK": null,
        "obp": 1,
        "ops": 2,
        "pitchesPerPa": 0,
        "sbPct": null,
        "slg": 1
      }
    }
  ],
  "games": [
    {
      "gamePublicId": "game_1",
      "opponentAgeGroup": "12U",
      "opponentName": "NTX Drillers",
      "scheduledAt": 1750000000000
    }
  ],
  "id": "team_1",
  "pitching": [
    {
      "gp": 1,
      "ip": "1.0",
      "line": {
        "abAgainst": 6,
        "airOuts": 1,
        "balks": 0,
        "battersFaced": 6,
        "bb": 0,
        "csAgainst": 0,
        "er": 0,
        "firstPitchStrikes": 0,
        "groundOuts": 1,
        "h": 2,
        "hbp": 0,
        "hrAllowed": 0,
        "illegalPitches": 0,
        "k": 1,
        "kLooking": 0,
        "outsRecorded": 3,
        "pickoffs": 0,
        "pitches": 0,
        "r": 1,
        "sbAllowed": 0,
        "strikes": 0,
        "strikesCalled": 0,
        "strikesSwinging": 0,
        "wp": 0
      },
      "name": "Kade Sebesta",
      "number": "1",
      "playerPublicId": "plyr_3",
      "rates": {
        "baa": 0.3333333333333333,
        "era": 0,
        "fpsPct": 0,
        "kPerBb": null,
        "pitchesPerBatter": 0,
        "pitchesPerInning": 0,
        "strikePct": null,
        "whip": 2
      }
    }
  ],
  "record": {
    "countingGames": 1,
    "excludedGames": 0,
    "losses": 0,
    "ties": 0,
    "wins": 0
  },
  "regulationInnings": 6,
  "season": "Spring 2026",
  "teamName": "Dallas Tigers",
  "version": "v1",
  "generatedAt": 0
}

getPlayer

Read one player's season and career.

GET /players/{playerId}

This player's season on this team with a game-by-game log, every previous season the same account has linked to the same child, and a career line across them. The player's team must carry an API seat. These are children: a key that does not belong to the account that created the roster reads first name and last initial. Previous seasons appear only for teams that carry an API seat; the career total covers the current season and those seasons, so the numbers always add up to what came back.

getPlayer parameters
NameWhereWhat it is
playerIdin the addressThe player's public id, as `plyr_…`.
getPlayer answer
FieldTypeWhat it is
idstringThe player's public id.
playerRosterPlayer
idstringThe player's public id, as `plyr_…`. It is the same id used in plays and box scores.
namestringThe player's name. A key that does not belong to the account that created this roster reads a first name and a last initial. A player entered by jersey number alone reads as `#14`.
numberstring · optionalThe jersey number, as text so that `07` stays `07`. Absent when the team never gave one.
positionsarray of PositionThe positions this player is listed at, most usual first.
currentPlayerSeason
teamPublicIdstringThe team's public id for this season.
teamNamestringThat team's name.
seasonstringThat season, as the team wrote it — `Spring 2026`.
canOpenGamesbooleanWhether the games in this block can be read with this key. False when that team carries no API seat, in which case `/v1/games/{gameId}` refuses them and a site should print the log row rather than link it.
gpintegerGames in this block's totals.
battingBattingLine
battingRatesBattingRates
pitchingPitchingLineWithInnings or nullThis player's pitching across the block. Null when this player never pitched.
pitchingRatesPitchingRates or nullRates for the pitching line beside it. Null when this player never pitched.
logarray of PlayerGameEvery game this player appeared in, newest first, whether or not it counts.
previousarray of PlayerSeasonPrevious seasons the account has linked to this same child, newest first. A season appears only for a team that carries an API seat, so a child's earlier season on a team with no seat is left out. Empty when none qualifies.
teamPublicIdstringThe team's public id for this season.
teamNamestringThat team's name.
seasonstringThat season, as the team wrote it — `Spring 2026`.
canOpenGamesbooleanWhether the games in this block can be read with this key. False when that team carries no API seat, in which case `/v1/games/{gameId}` refuses them and a site should print the log row rather than link it.
gpintegerGames in this block's totals.
battingBattingLine
battingRatesBattingRates
pitchingPitchingLineWithInnings or nullThis player's pitching across the block. Null when this player never pitched.
pitchingRatesPitchingRates or nullRates for the pitching line beside it. Null when this player never pitched.
logarray of PlayerGameEvery game this player appeared in, newest first, whether or not it counts.
careerPlayerCareer
gpintegerGames in this total.
battingBattingLine
battingRatesBattingRates
pitchingPitchingLineWithInnings or nullPitching across the career. Null when this player never pitched.
pitchingRatesPitchingRates or nullRates for the pitching line beside it. Null when this player never pitched.
versionVersion
generatedAtGeneratedAt
{
  "career": null,
  "current": {
    "batting": {
      "ab": 1,
      "bb": 0,
      "bunts": 0,
      "ci": 0,
      "cs": 0,
      "doubles": 0,
      "fc": 0,
      "flyBalls": 0,
      "gidp": 0,
      "groundBalls": 0,
      "h": 1,
      "hardGroundBalls": 0,
      "hbp": 0,
      "hr": 1,
      "k": 0,
      "kLooking": 0,
      "lineDrives": 0,
      "lob": 0,
      "pa": 1,
      "pickedOff": 0,
      "pitchesSeen": 0,
      "popUps": 0,
      "r": 1,
      "rbi": 1,
      "roe": 0,
      "sac": 0,
      "sb": 0,
      "sf": 0,
      "triples": 0
    },
    "battingRates": {
      "avg": 1,
      "bbPerK": null,
      "obp": 1,
      "ops": 5,
      "pitchesPerPa": 0,
      "sbPct": null,
      "slg": 4
    },
    "canOpenGames": true,
    "gp": 1,
    "log": [
      {
        "batting": {
          "ab": 1,
          "bb": 0,
          "bunts": 0,
          "ci": 0,
          "cs": 0,
          "doubles": 0,
          "fc": 0,
          "flyBalls": 0,
          "gidp": 0,
          "groundBalls": 0,
          "h": 1,
          "hardGroundBalls": 0,
          "hbp": 0,
          "hr": 1,
          "k": 0,
          "kLooking": 0,
          "lineDrives": 0,
          "lob": 0,
          "pa": 1,
          "pickedOff": 0,
          "pitchesSeen": 0,
          "popUps": 0,
          "r": 1,
          "rbi": 1,
          "roe": 0,
          "sac": 0,
          "sb": 0,
          "sf": 0,
          "triples": 0
        },
        "counts": true,
        "gamePublicId": "game_1",
        "opponentName": "NTX Drillers",
        "pitching": null,
        "result": null,
        "scheduledAt": 1750000000000,
        "status": "live"
      }
    ],
    "pitching": null,
    "pitchingRates": null,
    "season": "Spring 2026",
    "teamName": "Dallas Tigers",
    "teamPublicId": "team_1"
  },
  "id": "plyr_1",
  "player": {
    "id": "plyr_1",
    "name": "Wyatt Brooks",
    "number": "5",
    "positions": [
      "1B"
    ]
  },
  "previous": [],
  "version": "v1",
  "generatedAt": 0
}