ARBS Stats API
Read-only, programmatic access to your league's data — games, live scores, box scores, play-by-play, standings, leaders, and player & team stats — plus a live webhook firehose that pushes every game event to your own endpoint as it happens.
Getting started
Your first request
Grab an API key from Admin → your league → API keys. The full key is shown once at creation — copy it somewhere safe, because it can't be retrieved again.
All endpoints live under this base URL:
https://api.hoops.ardata.tech/api/v1Here's a first call — fetch the standings for a league by its slug. Every successful response wraps its payload in a { data: ... } envelope.
curl https://api.hoops.ardata.tech/api/v1/leagues/your-league-slug/standings \
-H "X-API-Key: $ARBS_API_KEY"Authentication
Authenticate every request
Send your key on every request, using either header form:
curl https://api.hoops.ardata.tech/api/v1/leagues/your-league-slug/standings \
-H "X-API-Key: $ARBS_API_KEY"curl https://api.hoops.ardata.tech/api/v1/leagues/your-league-slug/standings \
-H "Authorization: Bearer $ARBS_API_KEY"Keys are scoped to one league. A request for a different league's slug — or for a game, team, or player that belongs to another league — returns 403 FORBIDDEN.
Rate limits
Rate limits
Each API key has its own rate limit. Every response carries your current budget in its headers:
X-RateLimit-LimitMaximum requests allowed in the current window.
X-RateLimit-RemainingRequests still available in this window.
When you exceed the limit, the API responds with 429 and a Retry-After header telling you how many seconds to wait before retrying.
HTTP/1.1 429 Too Many Requests
Retry-After: 30
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 0
{ "statusCode": 429, "error": "Too Many Requests",
"message": "Rate limit exceeded", "code": "RATE_LIMIT_EXCEEDED" }Reference
Endpoint reference
Every endpoint is read-only ( GET ), and every success response is wrapped in a { data: ... } envelope. Paths are relative to the base URL https://api.hoops.ardata.tech/api/v1. For the full machine-readable spec, see openapi.json.
Leagues
/leagues/{slug}/standingsLeague standings
Show example responseHide example response
{
"data": {
"seasonId": "cmo6ogjym0002tqwod1hii108",
"divisionId": null,
"standings": [
{
"id": "cmqo74iub006jbq3akjen8dsq",
"teamId": "cmo6ogka10006tqwo0qy25guy",
"seasonId": "cmo6ogjym0002tqwod1hii108",
"divisionId": "cmqo748ub0001bq3aji7zm0cl",
"gamesPlayed": 30,
"wins": 25,
"losses": 5,
"winPct": 0.833,
"pointsFor": 1040,
"pointsAgainst": 892,
"pointsDiff": 148,
"homeWins": 23,
"homeLosses": 5,
"awayWins": 2,
"awayLosses": 0,
"streak": 1,
"lastTen": "9-1",
"divisionRank": 1,
"conferenceRank": 1,
"team": {
"id": "cmo6ogka10006tqwo0qy25guy",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "AR Data",
"shortName": "ARD",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": "#E85D1A",
"secondaryColor": "#12120F"
},
"quotient": 1.166,
"streakDisplay": "W1",
"lastTenDisplay": "9-1"
},
{
"id": "cmqo74ul200ejbq3a6ld7zo81",
"teamId": "cmo6ogkfr0008tqwo21xm7zjx",
"seasonId": "cmo6ogjym0002tqwod1hii108",
"divisionId": "cmqo74l3v0081bq3a79fyyjxd",
"gamesPlayed": 4,
"wins": 3,
"losses": 1,
"winPct": 0.75,
"pointsFor": 414,
"pointsAgainst": 360,
"pointsDiff": 54,
"homeWins": 1,
"homeLosses": 1,
"awayWins": 2,
"awayLosses": 0,
"streak": 2,
"lastTen": "3-1",
"divisionRank": 1,
"conferenceRank": 2,
"team": {
"id": "cmo6ogkfr0008tqwo21xm7zjx",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "Caiden Tech",
"shortName": "CTK",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": "#2563EB",
"secondaryColor": "#1E3A5F"
},
"quotient": 1.15,
"streakDisplay": "W2",
"lastTenDisplay": "3-1"
}
]
}
}/leagues/{slug}/scheduleLeague schedule
Show example responseHide example response
{
"data": [
{
"id": "cmr3x027401bxq4wo2ntycnlf",
"seasonId": "cmo6ogjym0002tqwod1hii108",
"divisionId": "cmqo748ub0001bq3aji7zm0cl",
"homeTeamId": "cmo6ogka10006tqwo0qy25guy",
"awayTeamId": "cmqo490nd0003m5h5fevtscp2",
"playerOfGameId": null,
"gameNumber": null,
"scheduledAt": "2026-07-10T19:00:00.000Z",
"venue": "Main Gym",
"facebookUrl": null,
"instagramUrl": null,
"youtubeUrl": null,
"periodLengthMinutes": 12,
"timeoutsPerTeam": 4,
"status": "SCHEDULED",
"gameType": "REGULAR",
"homeScore": 0,
"awayScore": 0,
"periodScores": {
"away": [],
"home": []
},
"currentPeriod": null,
"completedAt": null,
"homeTeam": {
"id": "cmo6ogka10006tqwo0qy25guy",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "AR Data",
"shortName": "ARD",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": "#E85D1A",
"secondaryColor": "#12120F"
},
"awayTeam": {
"id": "cmqo490nd0003m5h5fevtscp2",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "Northside Kings",
"shortName": "NOR",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": null,
"secondaryColor": null
}
}
]
}/leagues/{slug}/resultsLeague results
Show example responseHide example response
{
"data": [
{
"id": "cmr3x027401bxq4wo2ntycnlf",
"seasonId": "cmo6ogjym0002tqwod1hii108",
"divisionId": "cmqo748ub0001bq3aji7zm0cl",
"homeTeamId": "cmo6ogka10006tqwo0qy25guy",
"awayTeamId": "cmqo490nd0003m5h5fevtscp2",
"playerOfGameId": null,
"gameNumber": null,
"scheduledAt": "2026-07-02T19:46:01.818Z",
"venue": "Main Gym",
"facebookUrl": null,
"instagramUrl": null,
"youtubeUrl": null,
"periodLengthMinutes": 12,
"timeoutsPerTeam": 4,
"status": "COMPLETED",
"gameType": "REGULAR",
"homeScore": 10,
"awayScore": 7,
"periodScores": {
"away": [
7
],
"home": [
10
]
},
"currentPeriod": null,
"completedAt": "2026-07-02T19:46:04.359Z",
"homeTeam": {
"id": "cmo6ogka10006tqwo0qy25guy",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "AR Data",
"shortName": "ARD",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": "#E85D1A",
"secondaryColor": "#12120F"
},
"awayTeam": {
"id": "cmqo490nd0003m5h5fevtscp2",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "Northside Kings",
"shortName": "NOR",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": null,
"secondaryColor": null
}
},
{
"id": "cmr3wd6gs00unq4woz0ico5zn",
"seasonId": "cmo6ogjym0002tqwod1hii108",
"divisionId": "cmqo748ub0001bq3aji7zm0cl",
"homeTeamId": "cmo6ogka10006tqwo0qy25guy",
"awayTeamId": "cmqo490nd0003m5h5fevtscp2",
"playerOfGameId": "cmo6ogku1000btqwonf0cufzf",
"gameNumber": null,
"scheduledAt": "2026-07-02T19:28:14.219Z",
"venue": "Main Gym",
"facebookUrl": null,
"instagramUrl": null,
"youtubeUrl": null,
"periodLengthMinutes": 12,
"timeoutsPerTeam": 4,
"status": "COMPLETED",
"gameType": "REGULAR",
"homeScore": 73,
"awayScore": 73,
"periodScores": {
"away": [
73
],
"home": [
73
]
},
"currentPeriod": null,
"completedAt": "2026-07-02T19:28:20.781Z",
"homeTeam": {
"id": "cmo6ogka10006tqwo0qy25guy",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "AR Data",
"shortName": "ARD",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": "#E85D1A",
"secondaryColor": "#12120F"
},
"awayTeam": {
"id": "cmqo490nd0003m5h5fevtscp2",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "Northside Kings",
"shortName": "NOR",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": null,
"secondaryColor": null
}
}
]
}/leagues/{slug}/leadersStatistical leaders
Show example responseHide example response
{
"data": {
"seasonId": "cmo6ogjym0002tqwod1hii108",
"points": [
{
"rank": 1,
"player": {
"id": "cmo6oglbb000gtqwoyct8srf6",
"userId": null,
"firstName": "Kyle",
"lastName": "Anderson",
"photoUrl": "https://caiden-basketball-media.fly.storage.tigris.dev/players/cmo6oglbb000gtqwoyct8srf6/profile-1779512262500.jpg",
"heightCm": null,
"weightKg": null,
"approvedAt": "2026-04-20T04:11:08.135Z"
},
"team": {
"id": "cmo6ogkfr0008tqwo21xm7zjx",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "Caiden Tech",
"shortName": "CTK",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": "#2563EB",
"secondaryColor": "#1E3A5F"
},
"value": 29.8,
"total": 119,
"gamesPlayed": 4
},
{
"rank": 2,
"player": {
"id": "cmqo492t2000rm5h5aidr0alb",
"userId": null,
"firstName": "Derek",
"lastName": "Ramos",
"photoUrl": null,
"heightCm": null,
"weightKg": null,
"approvedAt": "2026-06-21T18:24:41.078Z"
},
"team": {
"id": "cmqo490sn0005m5h5auuc5wyh",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "Harbor City Hawks",
"shortName": "HAR",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": null,
"secondaryColor": null
},
"value": 22.3,
"total": 67,
"gamesPlayed": 3
}
],
"all": [
{
"rank": 1,
"player": {
"id": "cmo6oglbb000gtqwoyct8srf6",
"userId": null,
"firstName": "Kyle",
"lastName": "Anderson",
"photoUrl": "https://caiden-basketball-media.fly.storage.tigris.dev/players/cmo6oglbb000gtqwoyct8srf6/profile-1779512262500.jpg",
"heightCm": null,
"weightKg": null,
"approvedAt": "2026-04-20T04:11:08.135Z"
},
"team": {
"id": "cmo6ogkfr0008tqwo21xm7zjx",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "Caiden Tech",
"shortName": "CTK",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": "#2563EB",
"secondaryColor": "#1E3A5F"
},
"gamesPlayed": 4,
"totalPoints": 119,
"totalRebounds": 16,
"totalAssists": 19,
"totalSteals": 1,
"totalBlocks": 0,
"totalFg3Made": 11,
"totalFtMade": 12,
"totalFgMade": 48,
"ppg": 29.8,
"rpg": 4,
"apg": 4.8,
"spg": 0.3,
"bpg": 0
}
]
}
}/leagues/{slug}/teamsLeague teams
Show example responseHide example response
{
"data": [
{
"id": "cmo6ogka10006tqwo0qy25guy",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "AR Data",
"shortName": "ARD",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": "#E85D1A",
"secondaryColor": "#12120F"
},
{
"id": "cmqo490nd0003m5h5fevtscp2",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "Northside Kings",
"shortName": "NOR",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": null,
"secondaryColor": null
}
]
}/leagues/{slug}/awardsLeague awards
Show example responseHide example response
{
"data": []
}/leagues/{slug}/bracketPlayoff bracket
Games
/games/liveLive games
Show example responseHide example response
{
"data": [
{
"id": "cmr3x027401bxq4wo2ntycnlf",
"seasonId": "cmo6ogjym0002tqwod1hii108",
"divisionId": "cmqo748ub0001bq3aji7zm0cl",
"homeTeamId": "cmo6ogka10006tqwo0qy25guy",
"awayTeamId": "cmqo490nd0003m5h5fevtscp2",
"playerOfGameId": null,
"gameNumber": null,
"scheduledAt": "2026-07-02T19:46:01.818Z",
"venue": "Main Gym",
"facebookUrl": null,
"instagramUrl": null,
"youtubeUrl": null,
"periodLengthMinutes": 12,
"timeoutsPerTeam": 4,
"status": "IN_PROGRESS",
"gameType": "REGULAR",
"homeScore": 41,
"awayScore": 38,
"periodScores": {
"away": [
22,
16
],
"home": [
24,
17
]
},
"currentPeriod": 3,
"completedAt": null,
"homeTeam": {
"id": "cmo6ogka10006tqwo0qy25guy",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "AR Data",
"shortName": "ARD",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": "#E85D1A",
"secondaryColor": "#12120F"
},
"awayTeam": {
"id": "cmqo490nd0003m5h5fevtscp2",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "Northside Kings",
"shortName": "NOR",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": null,
"secondaryColor": null
}
}
]
}/games/{id}Game detail
Show example responseHide example response
{
"data": {
"id": "cmr3x027401bxq4wo2ntycnlf",
"seasonId": "cmo6ogjym0002tqwod1hii108",
"divisionId": "cmqo748ub0001bq3aji7zm0cl",
"homeTeamId": "cmo6ogka10006tqwo0qy25guy",
"awayTeamId": "cmqo490nd0003m5h5fevtscp2",
"playerOfGameId": null,
"gameNumber": null,
"scheduledAt": "2026-07-02T19:46:01.818Z",
"venue": "Main Gym",
"facebookUrl": null,
"instagramUrl": null,
"youtubeUrl": null,
"periodLengthMinutes": 12,
"timeoutsPerTeam": 4,
"status": "COMPLETED",
"gameType": "REGULAR",
"homeScore": 10,
"awayScore": 7,
"periodScores": {
"away": [
7
],
"home": [
10
]
},
"currentPeriod": null,
"completedAt": "2026-07-02T19:46:04.359Z",
"homeTeam": {
"id": "cmo6ogka10006tqwo0qy25guy",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "AR Data",
"shortName": "ARD",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": "#E85D1A",
"secondaryColor": "#12120F"
},
"awayTeam": {
"id": "cmqo490nd0003m5h5fevtscp2",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "Northside Kings",
"shortName": "NOR",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": null,
"secondaryColor": null
},
"season": {
"id": "cmo6ogjym0002tqwod1hii108",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "Demo Season",
"startDate": "2026-04-20T00:00:00.000Z",
"endDate": "2026-08-30T00:00:00.000Z",
"status": "ACTIVE",
"registrationOpen": false
},
"division": {
"id": "cmqo748ub0001bq3aji7zm0cl",
"seasonId": "cmo6ogjym0002tqwod1hii108",
"name": "East",
"sortOrder": 0
},
"playerOfGame": null,
"scorers": [
{
"id": "cmr3x02bf01bzq4wogpnvh2vc",
"gameId": "cmr3x027401bxq4wo2ntycnlf",
"userId": "cmqqbotkq0000lgn2v5owphg7",
"role": "PRIMARY",
"teamId": null,
"playerId": null,
"statGroup": "SHOT",
"assignedAt": "2026-07-02T19:46:02.043Z",
"user": {
"id": "cmqqbotkq0000lgn2v5owphg7",
"firstName": "Shot",
"lastName": "Scorer",
"email": "shot.scorer@arbs.gg"
}
}
]
}
}/games/{id}/boxscoreGame box score
Show example responseHide example response
{
"data": {
"game": {
"id": "cmr3x027401bxq4wo2ntycnlf",
"seasonId": "cmo6ogjym0002tqwod1hii108",
"divisionId": "cmqo748ub0001bq3aji7zm0cl",
"homeTeamId": "cmo6ogka10006tqwo0qy25guy",
"awayTeamId": "cmqo490nd0003m5h5fevtscp2",
"playerOfGameId": null,
"gameNumber": null,
"scheduledAt": "2026-07-02T19:46:01.818Z",
"venue": "Main Gym",
"facebookUrl": null,
"instagramUrl": null,
"youtubeUrl": null,
"periodLengthMinutes": 12,
"timeoutsPerTeam": 4,
"status": "COMPLETED",
"gameType": "REGULAR",
"homeScore": 10,
"awayScore": 7,
"periodScores": {
"away": [
7
],
"home": [
10
]
},
"currentPeriod": null,
"completedAt": "2026-07-02T19:46:04.359Z",
"homeTeam": {
"id": "cmo6ogka10006tqwo0qy25guy",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "AR Data",
"shortName": "ARD",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": "#E85D1A",
"secondaryColor": "#12120F"
},
"awayTeam": {
"id": "cmqo490nd0003m5h5fevtscp2",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "Northside Kings",
"shortName": "NOR",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": null,
"secondaryColor": null
}
},
"homeTeam": {
"team": {
"id": "cmo6ogka10006tqwo0qy25guy",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "AR Data",
"shortName": "ARD",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": "#E85D1A",
"secondaryColor": "#12120F"
},
"players": [
{
"id": "cmr3x047901e5q4wow9clsfm8",
"gameId": "cmr3x027401bxq4wo2ntycnlf",
"playerId": "cmo6ogkzq000ctqwow7kno77m",
"teamId": "cmo6ogka10006tqwo0qy25guy",
"isStarter": false,
"minutes": 0,
"points": 2,
"fgMade": 1,
"fgAttempted": 1,
"fg3Made": 0,
"fg3Attempted": 0,
"ftMade": 0,
"ftAttempted": 0,
"offRebounds": 0,
"defRebounds": 0,
"rebounds": 0,
"assists": 0,
"steals": 0,
"blocks": 0,
"turnovers": 0,
"fouls": 0,
"plusMinus": 0,
"player": {
"id": "cmo6ogkzq000ctqwow7kno77m",
"userId": null,
"firstName": "Marcus",
"lastName": "Santos",
"photoUrl": null,
"heightCm": null,
"weightKg": null,
"approvedAt": "2026-04-20T04:11:07.718Z"
}
}
],
"totals": {
"points": 10,
"fgMade": 5,
"fgAttempted": 5,
"fgPct": 0,
"fg3Made": 0,
"fg3Attempted": 0,
"fg3Pct": 0,
"ftMade": 0,
"ftAttempted": 0,
"ftPct": 0,
"rebounds": 0,
"assists": 0,
"steals": 0,
"blocks": 0,
"turnovers": 0,
"fouls": 0
}
},
"awayTeam": {
"team": {
"id": "cmqo490nd0003m5h5fevtscp2",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "Northside Kings",
"shortName": "NOR",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": null,
"secondaryColor": null
},
"players": [
{
"id": "cmr3x047001e3q4wo3nm1vpae",
"gameId": "cmr3x027401bxq4wo2ntycnlf",
"playerId": "cmqo491zi000hm5h53ogcb979",
"teamId": "cmqo490nd0003m5h5fevtscp2",
"isStarter": false,
"minutes": 0,
"points": 7,
"fgMade": 3,
"fgAttempted": 3,
"fg3Made": 1,
"fg3Attempted": 1,
"ftMade": 0,
"ftAttempted": 0,
"offRebounds": 0,
"defRebounds": 12,
"rebounds": 12,
"assists": 10,
"steals": 6,
"blocks": 0,
"turnovers": 0,
"fouls": 0,
"plusMinus": 0,
"player": {
"id": "cmqo491zi000hm5h53ogcb979",
"userId": null,
"firstName": "Victor",
"lastName": "Domingo",
"photoUrl": null,
"heightCm": null,
"weightKg": null,
"approvedAt": "2026-06-21T18:24:40.014Z"
}
}
],
"totals": {
"points": 7,
"fgMade": 3,
"fgAttempted": 3,
"fgPct": 0,
"fg3Made": 1,
"fg3Attempted": 1,
"fg3Pct": 0,
"ftMade": 0,
"ftAttempted": 0,
"ftPct": 0,
"rebounds": 12,
"assists": 10,
"steals": 6,
"blocks": 0,
"turnovers": 0,
"fouls": 0
}
},
"potg": {
"predicted": false,
"home": {
"player": {
"id": "cmo6ogkzq000ctqwow7kno77m",
"firstName": "Marcus",
"lastName": "Santos"
},
"teamId": "cmo6ogka10006tqwo0qy25guy",
"line": {
"points": 2,
"rebounds": 0,
"assists": 0,
"steals": 0,
"blocks": 0
},
"gameScore": 2
},
"away": {
"player": {
"id": "cmqo491zi000hm5h53ogcb979",
"firstName": "Victor",
"lastName": "Domingo"
},
"teamId": "cmqo490nd0003m5h5fevtscp2",
"line": {
"points": 7,
"rebounds": 12,
"assists": 10,
"steals": 6,
"blocks": 0
},
"gameScore": 35
},
"official": {
"player": {
"id": "cmo6ogkzq000ctqwow7kno77m",
"firstName": "Marcus",
"lastName": "Santos"
},
"teamId": "cmo6ogka10006tqwo0qy25guy",
"line": {
"points": 2,
"rebounds": 0,
"assists": 0,
"steals": 0,
"blocks": 0
},
"gameScore": 2,
"source": "computed"
},
"winnerId": "cmo6ogka10006tqwo0qy25guy"
}
}
}/games/{id}/eventsPlay-by-play
Show example responseHide example response
{
"data": {
"events": [
{
"id": "cmr3x02zi01c3q4wou1wlr70h",
"eventType": "FG2_MADE",
"period": 1,
"gameTime": "05:00",
"teamId": "cmo6ogka10006tqwo0qy25guy",
"teamName": "ARD",
"playerId": "cmo6ogku1000btqwonf0cufzf",
"playerName": "Alvin Reyes",
"jerseyNumber": 4,
"clientTimestamp": "2026-07-02T19:46:02.821Z"
},
{
"id": "cmr3x032t01cfq4wop9wo70dz",
"eventType": "FG2_MADE",
"period": 1,
"gameTime": "05:00",
"teamId": "cmqo490nd0003m5h5fevtscp2",
"teamName": "NOR",
"playerId": "cmqo491zi000hm5h53ogcb979",
"playerName": "Victor Domingo",
"jerseyNumber": 4,
"clientTimestamp": "2026-07-02T19:46:02.821Z"
}
],
"manual": false
}
}/games/{id}/scorebugLive scorebug
Show example responseHide example response
{
"data": {
"gameId": "cmr3x027401bxq4wo2ntycnlf",
"status": "IN_PROGRESS",
"period": 2,
"periodLabel": "Q2",
"clock": "07:34",
"clockSeconds": 454,
"clockRunning": true,
"timerStartedAt": "2026-07-12T16:20:00.000Z",
"home": {
"id": "cmo6ogka10006tqwo0qy25guy",
"name": "AR Data",
"shortName": "ARD",
"logoUrl": null,
"primaryColor": "#E85D1A",
"secondaryColor": "#12120F",
"score": 10
},
"away": {
"id": "cmqo490nd0003m5h5fevtscp2",
"name": "Northside Kings",
"shortName": "NOR",
"logoUrl": null,
"primaryColor": null,
"secondaryColor": null,
"score": 7
},
"updatedAt": "2026-07-12T16:21:54.000Z"
}
}Teams
/teams/{id}Team detail
Show example responseHide example response
{
"data": {
"id": "cmo6ogka10006tqwo0qy25guy",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "AR Data",
"shortName": "ARD",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": "#E85D1A",
"secondaryColor": "#12120F"
}
}/teams/{id}/rosterTeam roster
Show example responseHide example response
{
"data": [
{
"id": "cmqo7494s0005bq3aytsvxdav",
"playerId": "cmo6ogku1000btqwonf0cufzf",
"teamId": "cmo6ogka10006tqwo0qy25guy",
"seasonId": "cmo6ogjym0002tqwod1hii108",
"jerseyNumber": 4,
"position": null,
"isStarter": false,
"isActive": true,
"joinedAt": "2026-06-21T19:44:54.844Z",
"leftAt": null,
"player": {
"id": "cmo6ogku1000btqwonf0cufzf",
"userId": null,
"firstName": "Alvin",
"lastName": "Reyes",
"photoUrl": null,
"heightCm": null,
"weightKg": null,
"approvedAt": "2026-04-20T04:11:07.513Z"
}
},
{
"id": "cmqo7499y0007bq3avlii12vq",
"playerId": "cmo6ogkzq000ctqwow7kno77m",
"teamId": "cmo6ogka10006tqwo0qy25guy",
"seasonId": "cmo6ogjym0002tqwod1hii108",
"jerseyNumber": 7,
"position": null,
"isStarter": false,
"isActive": true,
"joinedAt": "2026-06-21T19:44:55.031Z",
"leftAt": null,
"player": {
"id": "cmo6ogkzq000ctqwow7kno77m",
"userId": null,
"firstName": "Marcus",
"lastName": "Santos",
"photoUrl": null,
"heightCm": null,
"weightKg": null,
"approvedAt": "2026-04-20T04:11:07.718Z"
}
}
]
}/teams/{id}/statsTeam stats
Show example responseHide example response
{
"data": {
"teamStats": {
"teamId": "cmo6ogka10006tqwo0qy25guy",
"seasonId": "cmo6ogjym0002tqwod1hii108",
"gamesPlayed": 30,
"standing": {
"id": "cmqo74iub006jbq3akjen8dsq",
"teamId": "cmo6ogka10006tqwo0qy25guy",
"seasonId": "cmo6ogjym0002tqwod1hii108",
"divisionId": "cmqo748ub0001bq3aji7zm0cl",
"gamesPlayed": 30,
"wins": 25,
"losses": 5,
"winPct": "0.833",
"pointsFor": 1040,
"pointsAgainst": 892,
"pointsDiff": 148,
"homeWins": 23,
"homeLosses": 5,
"awayWins": 2,
"awayLosses": 0,
"streak": 1,
"lastTen": "9-1",
"divisionRank": 1,
"conferenceRank": 1
},
"playerStats": [
{
"id": "cmqo74j4r006pbq3a6m8s2kjy",
"playerId": "cmo6ogku1000btqwonf0cufzf",
"seasonId": "cmo6ogjym0002tqwod1hii108",
"teamId": "cmo6ogka10006tqwo0qy25guy",
"gamesPlayed": 29,
"gamesStarted": 4,
"totalMinutes": 0,
"totalPoints": 309,
"totalFgMade": 125,
"totalFgAttempted": 183,
"totalFg3Made": 32,
"totalFg3Attempted": 48,
"totalFtMade": 27,
"totalFtAttempted": 34,
"totalOffReb": 20,
"totalDefReb": 58,
"totalRebounds": 78,
"totalAssists": 57,
"totalSteals": 17,
"totalBlocks": 5,
"totalTurnovers": 24,
"totalFouls": 41,
"ppg": "10.7",
"rpg": "2.7",
"apg": "2",
"spg": "0.6",
"bpg": "0.2",
"mpg": "0",
"topg": "0.8",
"fpg": "1.4",
"fgPct": "0.683",
"fg3Pct": "0.667",
"ftPct": "0.794",
"highPoints": 35,
"highRebounds": 13,
"highAssists": 7,
"highSteals": 4,
"highBlocks": 2,
"doubleDoubles": 2,
"tripleDoubles": 0,
"player": {
"id": "cmo6ogku1000btqwonf0cufzf",
"userId": null,
"firstName": "Alvin",
"lastName": "Reyes",
"photoUrl": null,
"heightCm": null,
"weightKg": null,
"approvedAt": "2026-04-20T04:11:07.513Z"
}
}
]
}
}
}Players
/players/{id}Player detail
Show example responseHide example response
{
"data": {
"player": {
"id": "cmo6ogkzq000ctqwow7kno77m",
"userId": null,
"firstName": "Marcus",
"lastName": "Santos",
"photoUrl": null,
"heightCm": null,
"weightKg": null,
"approvedAt": "2026-04-20T04:11:07.718Z",
"careerStats": {
"id": "cmojjp82g0003mngplbjurjh9",
"playerId": "cmo6ogkzq000ctqwow7kno77m",
"seasonsPlayed": 3,
"gamesPlayed": 30,
"totalMinutes": 0,
"totalPoints": 265,
"totalRebounds": 77,
"totalAssists": 57,
"totalSteals": 15,
"totalBlocks": 1,
"totalTurnovers": 26,
"totalFgMade": 104,
"totalFgAttempted": 168,
"totalFg3Made": 29,
"totalFg3Attempted": 63,
"totalFtMade": 28,
"totalFtAttempted": 42,
"careerPpg": "8.8",
"careerRpg": "2.6",
"careerApg": "1.9",
"careerSpg": "0.5",
"careerBpg": "0",
"careerMpg": "0",
"careerFgPct": "0.619",
"careerFg3Pct": "0.46",
"careerFtPct": "0.667",
"careerHighPoints": 25,
"careerHighRebounds": 8,
"careerHighAssists": 6,
"careerHighSteals": 2,
"careerHighBlocks": 1,
"totalDoubleDoubles": 0,
"totalTripleDoubles": 0
},
"media": [],
"rosterEntries": [
{
"id": "cmqo7499y0007bq3avlii12vq",
"playerId": "cmo6ogkzq000ctqwow7kno77m",
"teamId": "cmo6ogka10006tqwo0qy25guy",
"seasonId": "cmo6ogjym0002tqwod1hii108",
"jerseyNumber": 7,
"position": null,
"isStarter": false,
"isActive": true,
"joinedAt": "2026-06-21T19:44:55.031Z",
"leftAt": null,
"player": {
"id": "cmo6ogkzq000ctqwow7kno77m",
"userId": null,
"firstName": "Marcus",
"lastName": "Santos",
"photoUrl": null,
"heightCm": null,
"weightKg": null,
"approvedAt": "2026-04-20T04:11:07.718Z"
}
}
]
},
"team": {
"id": "cmo6ogka10006tqwo0qy25guy",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "AR Data",
"shortName": "ARD",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": "#E85D1A",
"secondaryColor": "#12120F"
},
"seasonStats": {
"id": "cmqo74ja0006rbq3anpfxfsoo",
"playerId": "cmo6ogkzq000ctqwow7kno77m",
"seasonId": "cmo6ogjym0002tqwod1hii108",
"teamId": "cmo6ogka10006tqwo0qy25guy",
"gamesPlayed": 24,
"gamesStarted": 4,
"totalMinutes": 0,
"totalPoints": 152,
"totalFgMade": 59,
"totalFgAttempted": 97,
"totalFg3Made": 17,
"totalFg3Attempted": 38,
"totalFtMade": 17,
"totalFtAttempted": 26,
"totalOffReb": 13,
"totalDefReb": 31,
"totalRebounds": 44,
"totalAssists": 32,
"totalSteals": 9,
"totalBlocks": 1,
"totalTurnovers": 19,
"totalFouls": 23,
"ppg": "6.3",
"rpg": "1.8",
"apg": "1.3",
"spg": "0.4",
"bpg": "0",
"mpg": "0",
"topg": "0.8",
"fpg": "1",
"fgPct": "0.608",
"fg3Pct": "0.447",
"ftPct": "0.654",
"highPoints": 18,
"highRebounds": 8,
"highAssists": 6,
"highSteals": 2,
"highBlocks": 1,
"doubleDoubles": 0,
"tripleDoubles": 0
},
"careerStats": {
"id": "cmojjp82g0003mngplbjurjh9",
"playerId": "cmo6ogkzq000ctqwow7kno77m",
"seasonsPlayed": 3,
"gamesPlayed": 30,
"totalMinutes": 0,
"totalPoints": 265,
"totalRebounds": 77,
"totalAssists": 57,
"totalSteals": 15,
"totalBlocks": 1,
"totalTurnovers": 26,
"totalFgMade": 104,
"totalFgAttempted": 168,
"totalFg3Made": 29,
"totalFg3Attempted": 63,
"totalFtMade": 28,
"totalFtAttempted": 42,
"careerPpg": "8.8",
"careerRpg": "2.6",
"careerApg": "1.9",
"careerSpg": "0.5",
"careerBpg": "0",
"careerMpg": "0",
"careerFgPct": "0.619",
"careerFg3Pct": "0.46",
"careerFtPct": "0.667",
"careerHighPoints": 25,
"careerHighRebounds": 8,
"careerHighAssists": 6,
"careerHighSteals": 2,
"careerHighBlocks": 1,
"totalDoubleDoubles": 0,
"totalTripleDoubles": 0
}
}
}/players/{id}/statsPlayer stats
Show example responseHide example response
{
"data": {
"seasonStats": [
{
"id": "cmqo74ja0006rbq3anpfxfsoo",
"playerId": "cmo6ogkzq000ctqwow7kno77m",
"seasonId": "cmo6ogjym0002tqwod1hii108",
"teamId": "cmo6ogka10006tqwo0qy25guy",
"gamesPlayed": 24,
"gamesStarted": 4,
"totalMinutes": 0,
"totalPoints": 152,
"totalFgMade": 59,
"totalFgAttempted": 97,
"totalFg3Made": 17,
"totalFg3Attempted": 38,
"totalFtMade": 17,
"totalFtAttempted": 26,
"totalOffReb": 13,
"totalDefReb": 31,
"totalRebounds": 44,
"totalAssists": 32,
"totalSteals": 9,
"totalBlocks": 1,
"totalTurnovers": 19,
"totalFouls": 23,
"ppg": "6.3",
"rpg": "1.8",
"apg": "1.3",
"spg": "0.4",
"bpg": "0",
"mpg": "0",
"topg": "0.8",
"fpg": "1",
"fgPct": "0.608",
"fg3Pct": "0.447",
"ftPct": "0.654",
"highPoints": 18,
"highRebounds": 8,
"highAssists": 6,
"highSteals": 2,
"highBlocks": 1,
"doubleDoubles": 0,
"tripleDoubles": 0,
"season": {
"id": "cmo6ogjym0002tqwod1hii108",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "Demo Season",
"startDate": "2026-04-20T00:00:00.000Z",
"endDate": "2026-08-30T00:00:00.000Z",
"status": "ACTIVE",
"registrationOpen": false
},
"team": {
"id": "cmo6ogka10006tqwo0qy25guy",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "AR Data",
"shortName": "ARD",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": "#E85D1A",
"secondaryColor": "#12120F"
}
}
],
"careerStats": {
"id": "cmojjp82g0003mngplbjurjh9",
"playerId": "cmo6ogkzq000ctqwow7kno77m",
"seasonsPlayed": 3,
"gamesPlayed": 30,
"totalMinutes": 0,
"totalPoints": 265,
"totalRebounds": 77,
"totalAssists": 57,
"totalSteals": 15,
"totalBlocks": 1,
"totalTurnovers": 26,
"totalFgMade": 104,
"totalFgAttempted": 168,
"totalFg3Made": 29,
"totalFg3Attempted": 63,
"totalFtMade": 28,
"totalFtAttempted": 42,
"careerPpg": "8.8",
"careerRpg": "2.6",
"careerApg": "1.9",
"careerSpg": "0.5",
"careerBpg": "0",
"careerMpg": "0",
"careerFgPct": "0.619",
"careerFg3Pct": "0.46",
"careerFtPct": "0.667",
"careerHighPoints": 25,
"careerHighRebounds": 8,
"careerHighAssists": 6,
"careerHighSteals": 2,
"careerHighBlocks": 1,
"totalDoubleDoubles": 0,
"totalTripleDoubles": 0
}
}
}/players/{id}/gamesPlayer game log
Show example responseHide example response
{
"data": [
{
"id": "cmqzgzs7e004d64fg79anzdds",
"gameId": "cmqzgzrbl003364fgnwxtqa7m",
"playerId": "cmo6ogkzq000ctqwow7kno77m",
"teamId": "cmo6ogka10006tqwo0qy25guy",
"isStarter": false,
"minutes": 0,
"points": 2,
"fgMade": 1,
"fgAttempted": 1,
"fg3Made": 0,
"fg3Attempted": 0,
"ftMade": 0,
"ftAttempted": 0,
"offRebounds": 0,
"defRebounds": 0,
"rebounds": 0,
"assists": 0,
"steals": 0,
"blocks": 0,
"turnovers": 0,
"fouls": 0,
"plusMinus": 0,
"game": {
"id": "cmqzgzrbl003364fgnwxtqa7m",
"seasonId": "cmo6ogjym0002tqwod1hii108",
"divisionId": "cmqo748ub0001bq3aji7zm0cl",
"homeTeamId": "cmo6ogka10006tqwo0qy25guy",
"awayTeamId": "cmqo490nd0003m5h5fevtscp2",
"playerOfGameId": null,
"gameNumber": null,
"scheduledAt": "2026-07-05T12:00:00.000Z",
"venue": "Main Gym",
"facebookUrl": null,
"instagramUrl": null,
"youtubeUrl": null,
"periodLengthMinutes": 12,
"timeoutsPerTeam": 4,
"status": "COMPLETED",
"gameType": "REGULAR",
"homeScore": 8,
"awayScore": 3,
"periodScores": {
"away": [
3
],
"home": [
8
]
},
"currentPeriod": null,
"completedAt": "2026-06-29T17:06:50.182Z",
"homeTeam": {
"id": "cmo6ogka10006tqwo0qy25guy",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "AR Data",
"shortName": "ARD",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": "#E85D1A",
"secondaryColor": "#12120F"
},
"awayTeam": {
"id": "cmqo490nd0003m5h5fevtscp2",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "Northside Kings",
"shortName": "NOR",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": null,
"secondaryColor": null
}
},
"team": {
"id": "cmo6ogka10006tqwo0qy25guy",
"leagueId": "cmo6ogjsp0000tqwo7m852cgj",
"name": "AR Data",
"shortName": "ARD",
"logoUrl": null,
"bannerUrl": null,
"primaryColor": "#E85D1A",
"secondaryColor": "#12120F"
}
}
]
}Real-time
Webhooks — the live firehose
Register a webhook URL in Admin → your league → Webhooks (the signing secret is shown once). From then on, every play — delivered as game.event — plus the lifecycle events game.start, game.period_end, and game.final is POSTed to your URL as it happens. Every delivery carries the full box score for the game — the same shape as /games/{id}/boxscore (including the potg block).
Payload
Each delivery is a JSON body of this shape:
{
"type": "game.event",
"deliveredAt": "2026-06-19T02:14:55.120Z",
"league": { "slug": "your-league-slug", "name": "Your League" },
"game": {
"id": "game_abc123",
"status": "IN_PROGRESS",
"period": 4,
"clock": 132,
"homeTeam": { "id": "team_home", "name": "Vipers" },
"awayTeam": { "id": "team_away", "name": "Storm" },
"homeScore": 88,
"awayScore": 81
},
"event": {
"type": "FG3_MADE",
"period": 4,
"gameTime": "02:12",
"teamId": "team_home",
"playerId": "player_xyz"
},
"boxScore": { /* full box score, same shape as GET /games/{id}/boxscore */ }
}clock is seconds remaining in the period. event is the triggering play for game.event, and null for the lifecycle events (game.start / game.period_end / game.final).
Headers
X-ARBS-Signaturesha256=<hmac> — HMAC-SHA256 of the raw request body, keyed with your webhook secret.
X-ARBS-EventThe event type, e.g. game.start, game.final, or a play event type.
X-ARBS-DeliveryA unique ID for this delivery attempt (useful for de-duplication and debugging).
Verifying the signature
Compute the expected signature over the raw request body and compare it against X-ARBS-Signature with a timing-safe comparison:
const crypto = require('crypto');
function verify(rawBody, signatureHeader, secret) {
const expected =
'sha256=' +
crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
// timing-safe compare to the X-ARBS-Signature header
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signatureHeader)
);
}Retries & auto-disable. Failed deliveries (non-2xx or a 5s timeout) are retried up to 5 attempts with exponential backoff. After 10 consecutive failures the webhook is automatically disabled — re-enable it from the Webhooks admin once your endpoint is healthy. Respond 2xx quickly to acknowledge; use X-ARBS-Delivery to de-duplicate retries.
Reference
Errors
Errors come back as a consistent JSON envelope:
{
"statusCode": 401,
"error": "Unauthorized",
"message": "API key is missing",
"code": "API_KEY_MISSING"
}Common codes:
API_KEY_MISSINGNo API key was provided.
API_KEY_INVALIDThe provided API key is not valid.
FORBIDDENThe key is not scoped to the requested league or resource.
RATE_LIMIT_EXCEEDEDPer-key rate limit exceeded — see Retry-After.
NOT_FOUNDThe requested resource does not exist.
Ready to build?
Generate a key from your league admin, then point your first request at the base URL.