Developers

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:

Base URL
https://api.hoops.ardata.tech/api/v1

Here's a first call — fetch the standings for a league by its slug. Every successful response wraps its payload in a { data: ... } envelope.

curl
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:

X-API-Key header
curl https://api.hoops.ardata.tech/api/v1/leagues/your-league-slug/standings \
  -H "X-API-Key: $ARBS_API_KEY"
Authorization: Bearer header
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-Limit

Maximum requests allowed in the current window.

X-RateLimit-Remaining

Requests 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.

429 response
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

GET/leagues/{slug}/standings

League standings

slugpath · requiredseasonIdquery
Show example response
200 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"
      }
    ]
  }
}
GET/leagues/{slug}/schedule

League schedule

slugpath · requiredseasonIdquery
Show example response
200 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
      }
    }
  ]
}
GET/leagues/{slug}/results

League results

slugpath · requiredseasonIdquery
Show example response
200 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
      }
    }
  ]
}
GET/leagues/{slug}/leaders

Statistical leaders

slugpath · requiredseasonIdquery
Show example response
200 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
      }
    ]
  }
}
GET/leagues/{slug}/teams

League teams

slugpath · required
Show example response
200 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
    }
  ]
}
GET/leagues/{slug}/awards

League awards

slugpath · required
Show example response
200 response
{
  "data": []
}
GET/leagues/{slug}/bracket

Playoff bracket

slugpath · required

Games

GET/games/live

Live games

Show example response
200 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
      }
    }
  ]
}
GET/games/{id}

Game detail

idpath · required
Show example response
200 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"
        }
      }
    ]
  }
}
GET/games/{id}/boxscore

Game box score

idpath · required
Show example response
200 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"
    }
  }
}
GET/games/{id}/events

Play-by-play

idpath · required
Show example response
200 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
  }
}
GET/games/{id}/scorebug

Live scorebug

idpath · required
Show example response
200 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

GET/teams/{id}

Team detail

idpath · required
Show example response
200 response
{
  "data": {
    "id": "cmo6ogka10006tqwo0qy25guy",
    "leagueId": "cmo6ogjsp0000tqwo7m852cgj",
    "name": "AR Data",
    "shortName": "ARD",
    "logoUrl": null,
    "bannerUrl": null,
    "primaryColor": "#E85D1A",
    "secondaryColor": "#12120F"
  }
}
GET/teams/{id}/roster

Team roster

idpath · required
Show example response
200 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"
      }
    }
  ]
}
GET/teams/{id}/stats

Team stats

idpath · required
Show example response
200 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

GET/players/{id}

Player detail

idpath · required
Show example response
200 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
    }
  }
}
GET/players/{id}/stats

Player stats

idpath · required
Show example response
200 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
    }
  }
}
GET/players/{id}/games

Player game log

idpath · required
Show example response
200 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:

POST body
{
  "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-Signature

sha256=<hmac> — HMAC-SHA256 of the raw request body, keyed with your webhook secret.

X-ARBS-Event

The event type, e.g. game.start, game.final, or a play event type.

X-ARBS-Delivery

A 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:

Node.js
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:

Error envelope
{
  "statusCode": 401,
  "error": "Unauthorized",
  "message": "API key is missing",
  "code": "API_KEY_MISSING"
}

Common codes:

401
API_KEY_MISSING

No API key was provided.

401
API_KEY_INVALID

The provided API key is not valid.

403
FORBIDDEN

The key is not scoped to the requested league or resource.

429
RATE_LIMIT_EXCEEDED

Per-key rate limit exceeded — see Retry-After.

404
NOT_FOUND

The requested resource does not exist.

Ready to build?

Generate a key from your league admin, then point your first request at the base URL.