Skip to Content

Events

Unified endpoint for listing and searching events with filtering, pagination, and search.

GET /api/v1/events

This endpoint replaces the previous /schedule, /events/live, and /events/search endpoints. All functionality from those endpoints is now available here through query parameters. See Migration Notes below.

Authentication

Requires API key via X-API-Key header, Authorization: Bearer header, or api_key query param. Available to all tiers.

Query Parameters

ParameterTypeDefaultDescription
sportstringallFilter by sport. Comma-separated for multiple (e.g., basketball,football)
leaguestringallFilter by league. Comma-separated for multiple (e.g., nba,nfl)
sportsbookstringallFilter by sportsbook (e.g., draftkings,pinnacle)
livebooleantrue = live only, false = prematch only, omit = both
has_scorebooleantrue = only events with live game state/scores
datestringFilter by date in YYYY-MM-DD format
teamstringFilter by team name (partial match, case-insensitive, supports aliases like lakers)
qstringSearch query matching team names or event names
limitinteger50Results per page (max 500)
offsetinteger0Pagination offset (max 5000)

Query parameters use singular form and comma-separated values for multiples: sport=basketball,football, not sports=basketball&sports=football.

Response Headers

All responses include standard rate limit and metadata headers:

HeaderDescription
X-RateLimit-LimitMaximum requests per minute for your tier
X-RateLimit-RemainingRequests remaining in current window
X-RateLimit-ResetUnix timestamp when the rate limit window resets
X-Data-DelayData delay for your tier (e.g., 0s, 60s)
X-Request-IdUnique request identifier for debugging

Event Object

FieldTypeDescription
idstringCanonical event identifier — the same for every sportsbook covering this event. Use as your primary key for cross-book matching. See Event Matching.
external_idsobjectMap of sportsbook ID to that book’s native event ID (e.g., {"draftkings": "33483153"}). Use these for deep linking back to sportsbook pages.
sportstringSport identifier (e.g., basketball, football)
leaguestringLeague slug (e.g., nba, nfl)
home_teamstringHome team name
away_teamstringAway team name
start_timestringISO 8601 event start time
statusstringEvent status: upcoming or live
is_livebooleanWhether the event is currently live
book_countintegerNumber of sportsbooks with odds for this event
marketsstring[]Sorted array of available market types (e.g., ["moneyline", "point_spread", "total_points"])
booksstring[]Sorted array of sportsbook IDs with odds for this event
game_stateobject | undefinedLive game state (only present for live events with scores)

Game State Object

Included when the event is live and has score data:

FieldTypeDescription
home_scorenumberHome team score
away_scorenumber | nullAway team score
periodstring | nullCurrent period (e.g., Q3, 2nd, 3rd Period)
clockstring | nullTime remaining (e.g., 5:42)
score_typestringScore type (e.g., game_points, match)
possessionstring | nullTeam with possession (home or away)
is_timeoutboolean | nullWhether a timeout is in progress
power_playstring | nullPower play info (home or away, hockey)
last_playstring | nullDescription of last play

Example Requests

List upcoming NBA and NFL events

curl -X GET "https://api.sharpapi.io/api/v1/events?sport=basketball,football&league=nba,nfl&limit=20" \ -H "X-API-Key: YOUR_API_KEY"

Get live events only

curl -X GET "https://api.sharpapi.io/api/v1/events?live=true" \ -H "X-API-Key: YOUR_API_KEY"

Search for a team

curl -X GET "https://api.sharpapi.io/api/v1/events?q=celtics" \ -H "X-API-Key: YOUR_API_KEY"

Filter by date and sportsbook

curl -X GET "https://api.sharpapi.io/api/v1/events?date=2026-02-08&sportsbook=draftkings,fanduel" \ -H "X-API-Key: YOUR_API_KEY"

Response

Success (200)

{ "data": [ { "id": "evt_nba_bos_lal_20260208", "external_ids": { "draftkings": "33483200", "fanduel": "nba-bos-lal-20260208" }, "sport": "basketball", "league": "nba", "home_team": "Boston Celtics", "away_team": "Los Angeles Lakers", "start_time": "2026-02-08T19:30:00Z", "status": "upcoming", "is_live": false, "book_count": 6, "markets": ["moneyline", "point_spread", "total_points"], "books": ["betmgm", "caesars", "draftkings", "fanduel"] }, { "id": "evt_nba_gsw_mia_20260208", "external_ids": { "draftkings": "33483205" }, "sport": "basketball", "league": "nba", "home_team": "Golden State Warriors", "away_team": "Miami Heat", "start_time": "2026-02-08T22:00:00Z", "status": "upcoming", "is_live": false, "book_count": 5, "markets": ["moneyline", "point_spread", "total_points"], "books": ["betmgm", "draftkings", "fanduel"] } ], "meta": { "count": 2, "total": 43, "pagination": { "limit": 50, "offset": 0, "has_more": true, "next_offset": 50 }, "updated_at": "2026-02-08T12:00:00Z", "filters": { "sport": ["basketball"], "league": ["nba"] } } }

Error Responses

401 Unauthorized

{ "error": { "code": "unauthorized", "message": "Missing or invalid API key", "docs": "https://sharpapi.io/docs/authentication" } }

400 Bad Request

{ "error": { "code": "invalid_request", "message": "Invalid date format. Use YYYY-MM-DD.", "docs": "https://sharpapi.io/docs/api-reference/events" } }

429 Rate Limited

{ "error": { "code": "rate_limited", "message": "Rate limit exceeded. Upgrade your tier for higher limits.", "docs": "https://sharpapi.io/docs/pricing" } }

Migration from Previous Endpoints

This endpoint consolidates four previous endpoints into one:

Old EndpointNew Equivalent
GET /scheduleGET /events
GET /schedule/liveGET /events?live=true
GET /events/liveGET /events?live=true
GET /events/search?q=celticsGET /events?q=celtics

The previous endpoints used camelCase field names (homeTeam, awayTeam, isLive, bookCount). The v1 API uses snake_case exclusively (home_team, away_team, is_live, book_count). Update your client code accordingly.

Key changes from previous versions

  • Field names are now snake_case (e.g., home_team instead of homeTeam)
  • Response uses the standard data/meta envelope instead of top-level events array
  • Query parameters use singular form (sport instead of sports)
  • Base URL is https://api.sharpapi.io (not https://sharpapi.io)
  • Pagination now includes has_more and next_offset fields

Cross-Book Event Matching

The id field is a canonical event identifier — the same real-world event gets the same id regardless of which sportsbook it comes from. Use it as your primary key when building cross-book comparison tools. The external_ids field maps each sportsbook to its native event ID for deep linking.

See Event Matching for full details on how canonical IDs work.

Last updated on