Skip to Content
API ReferenceOverview

API Reference Overview

Complete reference for the SharpAPI v1 REST API. All endpoints return JSON and follow consistent conventions for authentication, filtering, pagination, and error handling.

Base URL

https://api.sharpapi.io/api/v1

Always use api.sharpapi.io as the base URL, not sharpapi.io.

Request Format

  • All requests use HTTPS
  • Authentication via X-API-Key header, Authorization: Bearer header, or api_key query param
  • Request bodies (where applicable) use JSON with Content-Type: application/json
  • All field names are snake_case

Endpoint Summary

SharpAPI exposes 27 routes across 5 namespaces plus reference and health endpoints.

Odds

MethodPathAuthMin Tier
GET/api/v1/oddsYesFree
GET/api/v1/odds/deltaYesFree
GET/api/v1/odds/bestYesFree
GET/api/v1/odds/comparisonYesFree
POST/api/v1/odds/batchYesFree

Events

MethodPathAuthMin Tier
GET/api/v1/eventsYesFree
GET/api/v1/events/:eventIdYesFree
GET/api/v1/events/:eventId/oddsYesFree
GET/api/v1/events/:eventId/marketsYesFree

Opportunities

MethodPathAuthMin Tier
GET/api/v1/opportunities/evYesPro
GET/api/v1/opportunities/arbitrageYesHobby
GET/api/v1/opportunities/middlesYesPro

Streaming

MethodPathAuthMin Tier
GET/api/v1/streamYesAdd-on

Account

MethodPathAuthMin Tier
GET/api/v1/accountYesFree
GET/api/v1/account/usageYesFree
GET/api/v1/account/keysYesFree
POST/api/v1/account/keysYesFree
DELETE/api/v1/account/keys/:keyIdYesFree
POST/api/v1/account/keys/:keyId/rotateYesFree

Reference Data (Public)

MethodPathAuthMin Tier
GET/api/v1/sportsNo-
GET/api/v1/sports/:sportIdNo-
GET/api/v1/leaguesNo-
GET/api/v1/sportsbooksNo-
GET/api/v1/sportsbooks/:bookIdNo-
GET/api/v1/marketsNo-
GET/api/v1/teamsNo-

Health

MethodPathAuthMin Tier
GET/api/v1/healthNo-

Response Format

Success Envelope

All successful responses wrap data in a consistent envelope:

{ "success": true, "data": [ { "id": "draftkings_33483153_moneyline_PHO", "sportsbook": "draftkings", "sportsbook_name": "DraftKings", "sport": "basketball", "home_team": "PHI 76ers", "away_team": "PHO Suns", "market_type": "moneyline", "selection": "PHO Suns", "odds_american": -150, "odds_decimal": 1.667, "probability": 0.60, "is_live": false } ], "pagination": { "limit": 50, "offset": 0, "has_more": true, "next_offset": 50 }, "meta": { "count": 1, "total": 3095, "pagination": { "limit": 50, "offset": 0, "has_more": true, "next_offset": 50 }, "updated_at": "2026-01-26T02:10:37.846Z", "filters": { "sportsbook": "draftkings", "league": "nba" } } }
FieldDescription
successtrue for all successful responses
dataArray of results (or single object for detail endpoints)
pagination.limitMaximum items per page (default: 50, max: 200)
pagination.offsetCurrent offset into results
pagination.has_moreWhether more results exist beyond this page
pagination.next_offsetOffset value to use for the next page
meta.countNumber of items returned in this response
meta.totalTotal matching items across all pages
meta.paginationSame as top-level pagination (included for backward compatibility)
meta.updated_atISO 8601 timestamp of when the data was last refreshed
meta.filtersEcho of the filters applied to this request

Single Resource Response

{ "success": true, "data": { "id": "evt_abc123", "sport": "nba", "home_team": "PHI 76ers", "away_team": "PHO Suns", "start_time": "2026-01-26T19:00:00Z" }, "meta": { "updated_at": "2026-01-26T02:10:37.846Z" } }

Error Envelope

All errors follow a consistent format:

{ "error": { "code": "rate_limited", "message": "Rate limit exceeded. Upgrade your plan or wait 45 seconds.", "docs": "https://sharpapi.io/docs/authentication#rate-limits" } }
FieldDescription
error.codeMachine-readable error code
error.messageHuman-readable description
error.docsLink to relevant documentation

Standard Response Headers

Every API response includes these headers:

HeaderExampleDescription
X-RateLimit-Limit300Maximum requests per minute for your tier
X-RateLimit-Remaining299Requests remaining in the current window
X-RateLimit-Reset1705804800Unix timestamp when the rate limit resets
X-Data-Delay0Data delay in seconds (60 for Free, 0 for paid tiers)
X-Request-Idreq_a1b2c3d4Unique request identifier for debugging and support

Include the X-Request-Id value when contacting support about a specific request.

Tier Comparison

FeatureFreeHobbyProSharpEnterprise
Sportsbooks2 (DK, FD)515All 16+All 16+
Data Delay60s0s0s0s0s
Requests/min121203001,000Custom
PinnacleNoNoYesYesYes
EV / Arb / MiddlesNoNoYesYesYes
StreamingNoAdd-onAdd-onAdd-onIncluded
Batch max events10105050100

Streaming requires the WebSocket add-on ($99/mo) on paid tiers. Enterprise includes streaming at no extra cost.

Filtering

All list endpoints support filtering via query parameters. Filters use singular parameter names and accept comma-separated values for multi-select.

Filter Parameters

ParameterTypeExampleDescription
sportsbookstringdraftkings,fanduelFilter by one or more sportsbooks
sportstringbasketball,footballFilter by sport
leaguestringnba,nflFilter by league
marketstringmoneyline,spreadFilter by market type
eventstringevt_abc123Filter by event ID
livebooleantrueOnly live/in-progress events
sortstring-odds_americanSort field with optional - prefix for descending
fieldsstringid,sportsbook,odds_americanComma-separated fields to include in response
min_oddsnumber-110Minimum American odds filter
max_oddsnumber200Maximum American odds filter
group_bystringeventGroup results by field
limitnumber25Results per page (default: 50, max: 200)
offsetnumber50Pagination offset

Examples

# Multiple sportsbooks (comma-separated) curl "https://api.sharpapi.io/api/v1/odds?sportsbook=draftkings,fanduel" \ -H "X-API-Key: YOUR_KEY" # Combine filters curl "https://api.sharpapi.io/api/v1/odds?league=nba,nhl&sportsbook=pinnacle&live=true" \ -H "X-API-Key: YOUR_KEY" # Paginate through results curl "https://api.sharpapi.io/api/v1/odds?limit=25&offset=50" \ -H "X-API-Key: YOUR_KEY"

Parameter names are always singular (sportsbook, not sportsbooks). Use commas to pass multiple values: sportsbook=draftkings,fanduel.

Odds Formats

All odds are returned as flat fields on each odds object:

{ "odds_american": -110, "odds_decimal": 1.909, "probability": 0.5238 }
FieldExampleDescription
odds_american-110, +150Standard US format
odds_decimal1.909, 2.50Multiplier format
probability0.5238Implied probability (0 to 1)

Error Codes

CodeHTTP StatusDescription
unauthorized401Missing or invalid API key
forbidden403Feature requires higher tier
rate_limited429Too many requests
tier_restricted403Endpoint not available on your tier
invalid_request400Malformed request parameters
not_found404Resource not found
upstream_error502Temporary data fetch issue
internal_error500Server error
Last updated on