API reference
Events
Events are the games and bouts ParlayLedger tracks. Every odds and stats endpoint takes an eventId, and these endpoints are how you find it.
Every request needs your API key in the X-API-Key header and counts as one call against your monthly quota. See Authentication and Quotas and limits.
| Endpoint | What it returns |
|---|---|
| GET /events | List events |
| GET /events/:eventId | Get an event |
| GET /events/resolve/by-ref | Resolve a provider id |
| GET /events/status | Season status |
List events
https://api.parlayledger.com/eventsEvery ParlayLedger event for a league on a calendar day. Use it to get the eventId the odds and stats endpoints take.
- Auth X-API-Key header
- Quota 1 call per request
Query parameters
leagueKeystringrequiredLeague key, for example NFL, NCAAF, NBA, WNBA, NCAAB, WNCAAB, NHL, MLB, MLS, EPL or MMA.
datestring (YYYY-MM-DD)requiredCalendar day in UTC. Returns events whose startTime falls between 00:00:00 and 23:59:59 UTC that day, earliest first.
Request
curl "https://api.parlayledger.com/events?leagueKey=NBA&date=2026-10-21" \
-H "X-API-Key: $PARLAYLEDGER_API_KEY"Response 200 application/json
[
{
"id": "3f6c2a9e-8d1b-4e7a-9c55-1b2d4e6f8a10",
"sportKey": "basketball",
"leagueKey": "NBA",
"season": "2026",
"startTime": "2026-10-21T23:30:00.000Z",
"status": "scheduled",
"homeTeamId": "c1a9f6e2-4b7d-4e30-9a85-2f6d1b3c7e94",
"awayTeamId": "9e4b2d7a-6c1f-4a58-b3e0-7d2a5c9f1b68",
"homeTeamName": "Boston Celtics",
"awayTeamName": "New York Knicks",
"displayName": null,
"stage": null,
"week": null,
"venueName": "TD Garden",
"venueCity": "Boston",
"meta": null,
"createdAt": "2026-10-14T06:00:12.381Z",
"updatedAt": "2026-10-21T06:00:09.114Z"
}
]Errors
- 400leagueKey is required
- 400date is required (YYYY-MM-DD)
- 401Valid X-API-Key required
- 429Monthly API quota exceeded
Get an event
https://api.parlayledger.com/events/:eventIdOne event by its ParlayLedger id, with its current status.
- Auth X-API-Key header
- Quota 1 call per request
status is one of scheduled, live, final, cancelled or postponed.
Path parameters
eventIdstring (UUID)requiredParlayLedger event id, from GET /events or GET /stats/events.
Request
curl "https://api.parlayledger.com/events/3f6c2a9e-8d1b-4e7a-9c55-1b2d4e6f8a10" \
-H "X-API-Key: $PARLAYLEDGER_API_KEY"Response 200 application/json
{
"id": "3f6c2a9e-8d1b-4e7a-9c55-1b2d4e6f8a10",
"sportKey": "basketball",
"leagueKey": "NBA",
"season": "2026",
"startTime": "2026-10-21T23:30:00.000Z",
"status": "scheduled",
"homeTeamId": "c1a9f6e2-4b7d-4e30-9a85-2f6d1b3c7e94",
"awayTeamId": "9e4b2d7a-6c1f-4a58-b3e0-7d2a5c9f1b68",
"homeTeamName": "Boston Celtics",
"awayTeamName": "New York Knicks",
"displayName": null,
"stage": null,
"week": null,
"venueName": "TD Garden",
"venueCity": "Boston",
"meta": null,
"createdAt": "2026-10-14T06:00:12.381Z",
"updatedAt": "2026-10-21T06:00:09.114Z"
}Errors
- 404Event not found: <eventId>
- 401Valid X-API-Key required
- 429Monthly API quota exceeded
Resolve a provider id
https://api.parlayledger.com/events/resolve/by-refMap an upstream provider's event id to the ParlayLedger eventId. eventId is null when there is no match.
- Auth X-API-Key header
- Quota 1 call per request
Query parameters
providerstringrequiredUpstream source name, for example collegebasketballdata_ncaab or api_sports_nba.
externalIdstringrequiredThe event's id at that provider.
Request
curl "https://api.parlayledger.com/events/resolve/by-ref?provider=collegebasketballdata_ncaab&externalId=12345" \
-H "X-API-Key: $PARLAYLEDGER_API_KEY"Response 200 application/json
{
"provider": "collegebasketballdata_ncaab",
"externalId": "12345",
"eventId": "3f6c2a9e-8d1b-4e7a-9c55-1b2d4e6f8a10"
}Errors
- 400provider is required
- 400externalId is required
- 401Valid X-API-Key required
- 429Monthly API quota exceeded
Season status
https://api.parlayledger.com/events/statusWhere each league is in its season: idle, upcoming or ongoing, with the season start and end dates, refreshed once a day. The body is null until the first refresh has run.
- Auth X-API-Key header
- Quota 1 call per request
Event-based leagues such as MMA have no season window, so they always read ongoing with null dates.
Request
curl "https://api.parlayledger.com/events/status" \
-H "X-API-Key: $PARLAYLEDGER_API_KEY"Response 200 application/json
{
"NFL": {
"status": "ongoing",
"startDate": "2026-09-10T00:00:00.000Z",
"endDate": "2027-02-14T00:00:00.000Z"
},
"NBA": {
"status": "ongoing",
"startDate": "2026-10-20T00:00:00.000Z",
"endDate": "2027-06-20T00:00:00.000Z"
},
"WNBA": {
"status": "idle",
"startDate": "2026-05-08T00:00:00.000Z",
"endDate": "2026-10-12T00:00:00.000Z"
},
"MMA": {
"status": "ongoing",
"startDate": null,
"endDate": null
}
}Errors
- 401Valid X-API-Key required
- 429Monthly API quota exceeded