Documentation
ParlayLedger API
Sportsbook odds, line history, events, box score stats and selection grading over one REST API and one API key. AI agents can use the same key through the ParlayLedger MCP server.
- Base URL https://api.parlayledger.com
- Format JSON
- Times ISO 8601, UTC
- Odds American
List games by league and date, look up one event, resolve a provider id to a ParlayLedger eventId, and read each league's season status.
Odds APILatest and historical sportsbook odds for an event: per bookmaker and market, best lines, line movement, batch slates and player props.
Stats APITeam and player box score stats for an event, one player at a time or bundled, plus event discovery that skips leagues out of season.
Settlements APIGrade up to 50 selections per request. Supported markets, outcomes, polling and revision handling for the settlement API.
MCP server NewGive Claude, Cursor and other MCP clients two tools: search the RDK network for strategies, and backtest them on ParlayLedger data.
RDK NewPublish picks and strategies from ParlayLedger to the RDK knowledge network, get a record graded from official results, and earn USDC when your work is retrieved.
Quick start
- Get an API keyCreate an account and pick a plan. Your key is on your dashboard. Store it in an environment variable such as
PARLAYLEDGER_API_KEY. - Find an event List a league's games for a day with GET /events. Each event has the
idthe odds and stats endpoints take. - Fetch odds or stats Ask for the event's latest odds, its line movement, or its box score.
# 1. Find an event
curl "https://api.parlayledger.com/events?leagueKey=NBA&date=2026-10-21" \
-H "X-API-Key: $PARLAYLEDGER_API_KEY"
# 2. Latest moneyline odds for it (use an id from step 1)
curl "https://api.parlayledger.com/odds/event/EVENT_ID?markets=h2h" \
-H "X-API-Key: $PARLAYLEDGER_API_KEY"Authentication
Send your API key in the X-API-Key header on every request.
X-API-Key: YOUR_API_KEYKeep your API key on your server
Anyone with the key can spend your quota. Do not put it in browser code, mobile apps or public repositories. Call the API from your backend.
Header, not query string
The API reads the key only from the X-API-Key header. An apiKey query parameter is ignored and the request returns 401. The MCP server also accepts Authorization: Bearer <apiKey>.
Quotas and limits
Usage is a monthly quota per account. Every request that passes authentication counts as one call, including requests that return an error such as 404. Requests rejected with 401 do not count. Each MCP tool call also counts as one call. The count resets at 00:00 UTC on the first day of each month.
| Plan | Calls per month |
|---|---|
| Starter | 500 |
| 20K | 20,000 |
| 100K | 100,000 |
| 5M | 5,000,000 |
| 15M | 15,000,000 |
Quota headers
| Header | Sent on | Meaning |
|---|---|---|
X-Quota-Limit | Authenticated responses | Calls included in your plan each month. |
X-Quota-Used | Authenticated responses, not 429 | Calls counted so far this month, including this one. |
X-Quota-Reset | Authenticated responses | When the count resets: 00:00 UTC on the first day of next month, as ISO 8601. |
Retry-After | 429 only | Seconds until the reset. |
When the quota is used up, data requests return 429 until the reset:
{
"statusCode": 429,
"message": "Monthly API quota exceeded",
"resetMonthly": "2026-11-01T00:00:00.000Z"
}RDK searches and backtests also count toward your plan's monthly RDK limits, separately from API calls. Track your usage on the dashboard.
Errors
Errors use standard HTTP status codes and a JSON body with statusCode, message and error.
{
"statusCode": 400,
"message": "leagueKey is required",
"error": "Bad Request"
}| Status | When |
|---|---|
400 | A required parameter is missing or malformed, for example a date that is not YYYY-MM-DD or an eventId that is not a UUID. |
401 | The X-API-Key header is missing, too short, or not a key ParlayLedger issued. |
404 | The event does not exist. |
429 | This month's quota is used up. Wait for X-Quota-Reset or upgrade your plan. |
503 | Authentication is briefly unavailable. Retry with backoff. |
If errors persist, check the API status page.