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.
The team's name, where it plays and which season it belongs to. No players and no games.
| Name | Where | What it is |
|---|---|---|
teamId | in the address | The team's public id, as `team_…`. |
| Field | Type | What it is |
|---|---|---|
id | string | The team's public id, as `team_…`. Use it in the other team addresses. |
name | string | The team's full name, as the coach typed it. |
abbrev | string | A short label for a scoreboard, normally three letters. |
logoUrl | object | A 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. |
city | string | The city the team plays out of. |
state | string | The two-letter state code. |
ageGroup | string | The age group, written as a number and the letter U, from `6U` to `18U`. |
division | one of "A", "AA", "AAA", "Majors" | The competitive level inside the age group, weakest first. |
season | string | The season this team belongs to, such as `Spring 2026`. |
sport | one of "baseball", "fastpitch" | Which game the team plays. |
version | Version | |
generatedAt | GeneratedAt |
{
"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.
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.
| Name | Where | What it is |
|---|---|---|
teamId | in the address | The team's public id, as `team_…`. |
| Field | Type | What it is |
|---|---|---|
id | string | The team's public id. |
players | array of RosterPlayer | The players on the team, in the order the team keeps them. |
id | string | The player's public id, as `plyr_…`. It is the same id used in plays and box scores. |
name | string | The 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`. |
number | string · optional | The jersey number, as text so that `07` stays `07`. Absent when the team never gave one. |
positions | array of Position | The positions this player is listed at, most usual first. |
version | Version | |
generatedAt | GeneratedAt |
{
"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.
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.
| Name | Where | What it is |
|---|---|---|
teamId | in the address | The team's public id, as `team_…`. |
status | a query value | Keep only games in this state. Anything else is ignored and every game is returned. Optional. |
cursor | a query value | The `nextCursor` from the previous page. Leave it off for the first page. Optional. |
limit | a query value | How many games to return, from 1 to 50. A larger number is trimmed to 50 rather than refused. Leave it off for 50. Optional. |
| Field | Type | What it is |
|---|---|---|
games | array of GameSummary | The games on this page, newest first. A game with no start time sorts last. |
id | string | The game's public id, as `game_…`. |
status | GameStatus | |
endReason | EndReason · optional | |
scheduledAt | integer · optional | When the game is due to start, in milliseconds since 1 January 1970. Absent when no time was set. |
home | TeamRef | |
away | TeamRef | |
lineScore | LineScore | |
broadcast | Broadcast | |
version | Version | |
nextCursor | object | Pass this back as `cursor` for the next page. Null when this was the last page. |
version | Version | |
generatedAt | GeneratedAt |
{
"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.
Both teams, the line score, the league rules this game was played under, and the YouTube video if there is one.
| Name | Where | What it is |
|---|---|---|
gameId | in the address | The game's public id, as `game_…`. |
| Field | Type | What it is |
|---|---|---|
id | string | The game's public id, as `game_…`. |
status | GameStatus | |
endReason | EndReason · optional | |
scheduledAt | integer · optional | When the game is due to start, in milliseconds since 1 January 1970. Absent when no time was set. |
home | TeamRef | |
id | string | That team's public id. |
name | string | That team's name, frozen onto the game when it was created. A later rename does not rewrite it. |
abbrev | string | A short label for a scoreboard. |
away | TeamRef | |
id | string | That team's public id. |
name | string | That team's name, frozen onto the game when it was created. A later rename does not rewrite it. |
abbrev | string | A short label for a scoreboard. |
lineScore | LineScore | |
away | array of integer | Runs the visiting team scored, one number per inning it batted, first inning first. |
home | array of integer | Runs 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. |
totals | LineScoreTotals | |
broadcast | Broadcast | |
youtubeVideoId | string | The YouTube video id, for building your own player. |
watchUrl | string | The address a viewer can open to watch. |
ruleset | AdvisoryRuleset | |
regulationInnings | one of "6", "7", "9" | How many innings a full game is. |
timeLimit | TimeLimit | |
runRules | array of RunRule | The mercy rules, if the league has any. |
maxRunsPerHalfInning | object | The most runs one side may score in a half inning. Null when the league set none. |
finalInningOpen | boolean | True when the run cap is lifted for the last inning. |
scoringMode | one 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. |
partialFrom | object | The 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. |
version | Version | |
generatedAt | GeneratedAt |
{
"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.
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.
| Name | Where | What it is |
|---|---|---|
gameId | in the address | The game's public id, as `game_…`. |
| Field | Type | What it is |
|---|---|---|
id | string | The game's public id. |
inning | integer | Which inning is being played, counting from 1. |
half | HalfInning | |
outs | integer | Outs in this half inning, from 0 to 2. |
balls | integer | Balls on the batter. |
strikes | integer | Strikes on the batter. |
bases | Bases | |
first | boolean | True when a runner is on first. |
second | boolean | True when a runner is on second. |
third | boolean | True when a runner is on third. |
awayScore | integer | Runs scored by the visiting team so far. |
homeScore | integer | Runs scored by the home team so far. |
batter | PlayerRef | |
id | string | The player's public id, the same one the roster uses. |
name | string | The 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. |
dueUp | array of PlayerRef | The next two batters, in order. Empty when the batting order is not settled. |
id | string | The player's public id, the same one the roster uses. |
name | string | The 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. |
updatedAt | integer | When the scorer last recorded anything in this game, in milliseconds since 1 January 1970. Zero before the first entry. |
version | Version | |
generatedAt | GeneratedAt |
{
"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.
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.
| Name | Where | What it is |
|---|---|---|
gameId | in the address | The game's public id, as `game_…`. |
| Field | Type | What it is |
|---|---|---|
id | string | The game's public id. |
plays | array of Play | Every completed turn at bat, first to last, with corrections applied. |
inning | integer | The inning this play happened in. |
half | HalfInning | |
batter | PlayerRef | |
outcome | PlateAppearanceOutcome | |
movements | array of Movement | Every runner who moved on this play, the batter included. |
rbi | integer | Runs batted in on this play alone. |
outs | integer | Outs recorded on this play alone. |
battedBall | BattedBall | |
version | Version | |
generatedAt | GeneratedAt |
{
"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.
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.
| Name | Where | What it is |
|---|---|---|
gameId | in the address | The game's public id, as `game_…`. |
| Field | Type | What it is |
|---|---|---|
id | string | The game's public id. |
batting | BattingSides | |
home | array of BattingRow | The home team's batting lines. |
away | array of BattingRow | The visiting team's batting lines. |
pitching | PitchingSides | |
home | array of PitchingRow | The home team's pitching lines. |
away | array of PitchingRow | The visiting team's pitching lines. |
version | Version | |
generatedAt | GeneratedAt |
{
"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.
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.
| Name | Where | What it is |
|---|---|---|
gameId | in the address | The game's public id, as `game_…`. |
| Field | Type | What it is |
|---|---|---|
events | array of LoggedEvent | Every entry, in the order it was recorded, including the ones a correction replaced and the ones a rewind took back. |
sequence | integer | This entry's number in the game, counting up and never reused. Other entries point at it by this number. |
event | GameEvent (one of several shapes) | |
recordedAt | integer | When the scorer recorded it, in milliseconds since 1 January 1970. |
scorer | integer | Which 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. |
supersedes | integer · optional | The `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. |
version | Version | |
generatedAt | GeneratedAt |
{
"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.
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.
| Name | Where | What it is |
|---|---|---|
teamId | in the address | The team's public id, as `team_…`. |
| Field | Type | What it is |
|---|---|---|
id | string | The team's public id. |
teamName | string | The team's name. |
season | string | The season this team plays, as the team wrote it — `Spring 2026`. |
record | SeasonRecord | |
wins | integer | Games won. Only games that are final are counted. |
losses | integer | Games lost. |
ties | integer | Games that finished level. |
countingGames | integer | Games in these totals: every game that has been played and that the team has not switched off. |
excludedGames | integer | Games played that the team switched off, so they are in no total here. A game still on the schedule is not one of these. |
batting | array of SeasonBattingRow | Every player who has had a turn at bat, in the team's own roster order. |
playerPublicId | string | The player's public id, as `plyr_…`. |
name | string | The player's name, shortened unless the key owns the roster. |
number | string · optional | The jersey number, as text. Absent when the team never gave one. |
gp | integer | Games in which this player had a turn at bat. |
line | BattingLine | |
rates | BattingRates | |
pitching | array of SeasonPitchingRow | Every player who has pitched, in the team's own roster order. |
playerPublicId | string | The player's public id, as `plyr_…`. |
name | string | The player's name, shortened unless the key owns the roster. |
number | string · optional | The jersey number, as text. Absent when the team never gave one. |
gp | integer | Games in which this player pitched. |
ip | string | Innings pitched, written the way a scoreboard writes them: `2.1` is two innings and one out. |
line | PitchingLine | |
rates | PitchingRates | |
regulationInnings | integer | How 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. |
games | array of SeasonGame | The games in these totals, newest first. |
gamePublicId | string | The game's public id, as `game_…`. Read the game itself at `/v1/games/{gameId}`. |
opponentName | string | Who the team played, frozen onto the game when it was created. |
opponentAgeGroup | object | The opponent's age group when the opponent is a listed team. Null when the opponent was typed in by hand. |
scheduledAt | object | When the game was scheduled, in milliseconds since 1 January 1970. Null when no date was ever set. |
version | Version | |
generatedAt | GeneratedAt |
{
"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.
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.
| Name | Where | What it is |
|---|---|---|
playerId | in the address | The player's public id, as `plyr_…`. |
| Field | Type | What it is |
|---|---|---|
id | string | The player's public id. |
player | RosterPlayer | |
id | string | The player's public id, as `plyr_…`. It is the same id used in plays and box scores. |
name | string | The 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`. |
number | string · optional | The jersey number, as text so that `07` stays `07`. Absent when the team never gave one. |
positions | array of Position | The positions this player is listed at, most usual first. |
current | PlayerSeason | |
teamPublicId | string | The team's public id for this season. |
teamName | string | That team's name. |
season | string | That season, as the team wrote it — `Spring 2026`. |
canOpenGames | boolean | Whether 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. |
gp | integer | Games in this block's totals. |
batting | BattingLine | |
battingRates | BattingRates | |
pitching | PitchingLineWithInnings or null | This player's pitching across the block. Null when this player never pitched. |
pitchingRates | PitchingRates or null | Rates for the pitching line beside it. Null when this player never pitched. |
log | array of PlayerGame | Every game this player appeared in, newest first, whether or not it counts. |
previous | array of PlayerSeason | Previous 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. |
teamPublicId | string | The team's public id for this season. |
teamName | string | That team's name. |
season | string | That season, as the team wrote it — `Spring 2026`. |
canOpenGames | boolean | Whether 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. |
gp | integer | Games in this block's totals. |
batting | BattingLine | |
battingRates | BattingRates | |
pitching | PitchingLineWithInnings or null | This player's pitching across the block. Null when this player never pitched. |
pitchingRates | PitchingRates or null | Rates for the pitching line beside it. Null when this player never pitched. |
log | array of PlayerGame | Every game this player appeared in, newest first, whether or not it counts. |
career | PlayerCareer | |
gp | integer | Games in this total. |
batting | BattingLine | |
battingRates | BattingRates | |
pitching | PitchingLineWithInnings or null | Pitching across the career. Null when this player never pitched. |
pitchingRates | PitchingRates or null | Rates for the pitching line beside it. Null when this player never pitched. |
version | Version | |
generatedAt | GeneratedAt |
{
"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
}