League OS
Integrate standings, schedules, rosters, teams, and tournaments into your own apps and sites. All endpoints require an API key issued from your league admin panel.
Include your API key in the X-API-Keyrequest header. API keys are managed in your league admin panel under Settings > API Docs.
curl -H "X-API-Key: pgc_your_key_here" \ "https://your-domain.com/api/v1/standings?leagueSlug=your-league"
/api/v1/standingsLeague standings grouped by division with full stat columns.
leagueSlugrequiredYour league slugseasonIdoptionalSeason UUID (defaults to current)curl -H "X-API-Key: pgc_your_key_here" \ "https://your-domain.com/api/v1/standings?leagueSlug=your-league"
/api/v1/scheduleGame schedule with teams, venues, scores, and status.
leagueSlugrequiredYour league slugseasonIdoptionalSeason UUID (defaults to current)divisionIdoptionalFilter by division UUIDcurl -H "X-API-Key: pgc_your_key_here" \ "https://your-domain.com/api/v1/schedule?leagueSlug=your-league"
/api/v1/rosterTeam roster with eligible, registered players.
leagueSlugrequiredYour league slugteamIdrequiredTeam UUIDcurl -H "X-API-Key: pgc_your_key_here" \ "https://your-domain.com/api/v1/roster?leagueSlug=your-league"
/api/v1/teamsAll active teams with division, tier, logo, colors, and player count.
leagueSlugrequiredYour league slugseasonIdoptionalSeason UUID (defaults to current)curl -H "X-API-Key: pgc_your_key_here" \ "https://your-domain.com/api/v1/teams?leagueSlug=your-league"
/api/v1/tournamentsTournament brackets, teams, and game results.
leagueSlugrequiredYour league slugcurl -H "X-API-Key: pgc_your_key_here" \ "https://your-domain.com/api/v1/tournaments?leagueSlug=your-league"
Subscribe to real-time events via webhooks. When an event occurs, League OS sends an HTTPS POST to your registered URL with a signed JSON payload. Requires API key authentication.
game.createdNew game scheduledgame.updatedScore update or status changegame.completedFinal score recordedroster.updatedPlayer added or removed from rosterstandings.updatedStandings recalculatedregistration.submittedNew registration submittedregistration.approvedRegistration approvedteam.updatedTeam info changedschedule.publishedSchedule made public/api/v1/webhooksList your webhook subscriptions/api/v1/webhooksCreate a webhook subscription/api/v1/webhooks/:idSubscription details and recent deliveries/api/v1/webhooks/:idUpdate subscription (URL, events, active state)/api/v1/webhooks/:idRemove a subscription/api/v1/webhooks/:id/testSend a test event to verify your endpointcurl -X POST "https://your-domain.com/api/v1/webhooks" \
-H "X-API-Key: pgc_your_key_here" \
-H "Content-Type: application/json" \
-d '{"url": "https://your-site.com/webhook", "events": ["game.completed", "standings.updated"]}'{
"event": "game.completed",
"timestamp": "2026-03-28T12:00:00.000Z",
"league_id": "uuid",
"data": {
"game_id": "uuid",
"home_score": 4,
"away_score": 2,
"overtime": false
}
}Every delivery includes an X-LeagueOS-Signature header containing an HMAC-SHA256 hex digest of the request body, signed with the secret returned at subscription creation. Verify this signature to confirm the payload is authentic.
const crypto = require('crypto');
const signature = crypto
.createHmac('sha256', webhookSecret)
.update(requestBody)
.digest('hex');
const isValid = signature === request.headers['x-leagueos-signature'];X-LeagueOS-EventThe event type (e.g., game.completed)X-LeagueOS-SignatureHMAC-SHA256 hex digest for verificationX-LeagueOS-DeliveryUnique delivery UUID for deduplicationContent-Typeapplication/jsonSubscriptions are automatically deactivated after 10 consecutive delivery failures. Use the PATCH endpoint to reactivate.
All endpoints are rate-limited per API key. Exceeded limits return HTTP 429. Contact your league administrator to request a higher limit.
League OS API v1. API keys are issued per league from the admin portal.