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.

AuthenticationPermalink for this section

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

Query ParametersPermalink for this section

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
datestringFilter by date in YYYY-MM-DD format
qstringSearch query matching team names or event names
limitinteger50Results per page (max 200)
offsetinteger0Pagination offset (max 5000)

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

Response HeadersPermalink for this section

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 ObjectPermalink for this section

FieldTypeDescription
idstringCanonical event identifier — the same for every sportsbook covering this event. Use as your primary key for cross-book matching. See Event Matching.
uuidstringStable canonical event UUID (feed-stable hash; useful for cross-feed joins).
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
market_countintegerNumber of distinct markets available 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

Live scores/period/clock are not on event rows. Fetch live game state from the Game State endpoint (or the gamestate stream channel), joined by id.

Example RequestsPermalink for this section

List upcoming NBA and NFL eventsPermalink for this section

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 onlyPermalink for this section

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

Search for a teamPermalink for this section

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

Filter by date and sportsbookPermalink for this section

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

ResponsePermalink for this section

Success (200)Permalink for this section

{ "data": [ { "id": "nba_celtics_lakers_2026-02-08_b3", "uuid": "d4d5935357a21a1f", "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, "market_count": 14, "markets": ["moneyline", "point_spread", "total_points"], "books": ["betmgm", "caesars", "draftkings", "fanduel"] }, { "id": "nba_heat_warriors_2026-02-08_b3", "uuid": "a1b2c3d4e5f60718", "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, "market_count": 9, "markets": ["moneyline", "point_spread", "total_points"], "books": ["betmgm", "draftkings", "fanduel"] } ], "pagination": { "limit": 50, "offset": 0, "count": 2, "total": 43, "has_more": true, "next_offset": 50 }, "updated_at": "2026-02-08T12:00:00Z" }

Error ResponsesPermalink for this section

401 Unauthorized

No key supplied returns missing_api_key; a bad key returns invalid_api_key.

{ "error": { "code": "missing_api_key", "message": "API key required. Pass via X-API-Key header, api_key query parameter, or Bearer token.", "docs": "https://sharpapi.io/docs/authentication" } }

400 Bad Request

Returned only for malformed numeric parameters (non-numeric limit or offset):

{ "error": { "code": "invalid_filter", "details": { "fields": { "limit": ["abc"] } }, "message": "invalid filter values: limit=[abc]" } }

An invalid date value (or any filter that matches nothing) is not rejected — it returns 200 with an empty result set. Note that an empty result serializes data as null, not [], with count: 0 and total: 0 in pagination.

429 Rate Limited

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

Migration from Previous EndpointsPermalink for this section

Several legacy event sub-paths from earlier API versions are kept as deprecation signposts — hitting them returns 410 Gone with a machine-readable hint pointing at the correct endpoint.

Deprecated PathUse Instead
GET /events/search?q=celticsGET /events?q=celtics
GET /events/listGET /events
GET /events/allGET /events
GET /events/findGET /events

410 Response ShapePermalink for this section

{ "error": { "code": "unknown_endpoint", "message": "There is no /api/v1/events/search endpoint. Use GET /api/v1/events — results can be filtered with ?sport=, ?league=, and ?book= query parameters.", "correct_endpoint": "/api/v1/events", "docs": "https://docs.sharpapi.io/api-reference" } }

Pre-v1 responses 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 versionsPermalink for this section

  • Field names are now snake_case (e.g., home_team instead of homeTeam)
  • Response uses the flat {data, pagination, updated_at} envelope instead of a 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 MatchingPermalink for this section

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