Deep Links
Generate sportsbook deep links from odds IDs or opportunity hash IDs. Deep links take users directly to the relevant event page on a sportsbook’s website, enabling one-click bet placement from your application.
Endpoints
| Method | Path | Description |
|---|---|---|
POST | /api/v1/deeplinks/batch | Get deep links for up to 500 IDs |
GET | /api/v1/deeplink/{id} | Redirect to a sportsbook (public, no auth) |
Authentication
Requires API key for POST /deeplinks/batch. Available to Hobby tier and above.
The redirect endpoint (GET /deeplink/{id}) is public and does not require authentication — the opaque ID prevents enumeration.
The id parameter accepts both odds IDs (from /odds, /odds/best) and opportunity hash IDs (from +EV, Arbitrage, Middles, and Low Hold endpoints). Either ID type resolves to the most specific link that sportsbook supports — specificity is a property of the book, not of the ID type. Read X-Deep-Link-Type on the redirect to see what you got, and see Supported Sportsbooks for which books preselect the bet.
Batch Deep Links
POST /api/v1/deeplinks/batchReturns deep link redirect paths for multiple IDs in a single request. Accepts both odds IDs and opportunity hash IDs. Each ID in the request appears in the response — resolved IDs return a redirect path, unresolvable IDs return null.
Request Body
{
"ids": ["17336125542407", "77b0749a1faae425", "abc1234567890def"],
"state": "nj"
}| Field | Type | Default | Description |
|---|---|---|---|
ids | string[] | required | Array of odds IDs or opportunity hash IDs (1–500 items) |
state | string | pa | US state code for state-specific sportsbook URLs (e.g., nj, ny, il) |
Example Requests
cURL
curl -X POST "https://api.sharpapi.io/api/v1/deeplinks/batch" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ids": ["17336125542407", "77b0749a1faae425"], "state": "nj"}'Response
Success (200)
The batch endpoint returns redirect paths, not direct sportsbook URLs. Prepend your base URL or use the path with the redirect endpoint to reach the sportsbook.
{
"data": {
"17336125542407": "/api/v1/deeplink/17336125542407",
"77b0749a1faae425": "/api/v1/deeplink/77b0749a1faae425",
"abc1234567890def": null
},
"updated_at": "2026-02-11T12:00:15.000Z"
}| Value | Meaning |
|---|---|
"/api/v1/deeplink/{id}" | Deeplink available — follow the redirect path to reach the sportsbook |
null | No deeplink available for this ID (unsupported sportsbook, expired odds, or invalid ID) |
To get the final sportsbook URL, either follow the redirect (GET https://api.sharpapi.io/api/v1/deeplink/{id}) or use the path directly in <a href> links — the browser will follow the 302 redirect automatically.
Error Responses
400 Missing IDs
{
"error": {
"code": "validation_error",
"message": "ids array required"
}
}400 Batch size exceeded
{
"error": {
"code": "validation_error",
"message": "Maximum 500 IDs per batch"
}
}Deep Link Redirect
GET /api/v1/deeplink/{id}Redirects the user directly to the sportsbook page for a given odds ID or opportunity hash ID. This is a public endpoint — no API key required.
Use this endpoint in <a href> links to send users directly to a sportsbook. The response is a 302 Found redirect, not JSON.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
id | string | Required. Either a numeric odds ID (e.g., 135102220304350) or an opportunity hash ID (16-char hex, e.g., 77b0749a1faae425) |
Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
state | string | pa | US state code for state-specific URLs |
book | string | — | Sportsbook filter (for multi-book opportunities like middles/arbitrage) |
fallback | string | — | URL to redirect to if the ID is not found |
Example
<!-- In your application HTML -->
<a href="https://api.sharpapi.io/api/v1/deeplink/77b0749a1faae425?state=nj&book=draftkings">
Bet on DraftKings
</a>Response
Success (302 Found)
HTTP/1.1 302 Found
Location: https://sportsbook.draftkings.com/event/12345?outcomes=abc123
Cache-Control: private, max-age=60
X-Deep-Link-Type: outcomeThe X-Deep-Link-Type header indicates the link specificity:
| Value | Description |
|---|---|
outcome | Direct link to a specific bet selection (with selection ID) |
event | Link to the event page (no specific selection) |
homepage | Fallback to the sportsbook homepage |
Error Responses
404 Not found
{
"error": {
"code": "not_found",
"message": "Deep link ID not found"
}
}If the fallback query parameter is provided and the ID is not found, the endpoint redirects to the fallback URL instead of returning a 404 JSON response.
Deep Link Schema
Batch Response
| Field | Type | Description |
|---|---|---|
data | object | Map of ID to redirect path (string) or null if unavailable |
updated_at | string | ISO 8601 timestamp of the odds data |
Supported Sportsbooks
Deep link support is per sportsbook, and so is link specificity. Whether a link
opens the event page or opens the bet slip with your selection already on it is
decided by what that sportsbook’s own site accepts — not by which ID type you sent.
The X-Deep-Link-Type header on the redirect tells you which one you got, per link.
Measured against production on 2026-08-25, across every sportsbook the API was serving at the time — 26 of 35 resolve a deep link, and 12 of those preselect the bet:
| Sportsbook | Deep link | Preselects your selection | State-specific |
|---|---|---|---|
| BallyBet | Yes | Yes | No |
| BetMGM | Yes | Yes | Yes |
| betPARX | Yes | Yes | No |
| BetRivers | Yes | Yes | Yes |
| Betway | Yes | Yes | No |
| Bovada | Yes | Yes | No |
| bwin | Yes | Yes | No |
| Caesars | Yes | Yes | Yes |
| DraftKings | Yes | Yes | No |
| FanDuel | Yes | Yes | No |
| Hard Rock | Yes | Yes | No |
| Unibet | Yes | Yes | No |
| 1xBet | Yes | No | No |
| Betano | Yes | No | No |
| BetOnline | Yes | No | No |
| Kalshi | Yes | No | No |
| Ladbrokes | Yes | No | No |
| Novig | Yes | No | No |
| Pinnacle | Yes | No | No |
| Polymarket | Yes | No | No |
| ProphetX | Yes | No | No |
| Sportzino | Yes | No | No |
| Stake | Yes | No | No |
| Rebet † | App link | No | No |
| SBOBET ‡ | Partial | No | No |
| SX Bet ‡ | Partial | No | No |
| Betfair | No | — | — |
| Circa | No | — | — |
| Fanatics | No | — | — |
| Fliff | No | — | — |
| Goldrush | No | — | — |
| SABA | No | — | — |
| SkyBet | No | — | — |
| theScore Bet | No | — | — |
| Underdog | No | — | — |
† Rebet resolves to a mobile app link (com.rebet.app://…). On desktop the redirect
endpoint uses your fallback URL instead, and reports X-Deep-Link-Type: homepage.
‡ SBOBET and SX Bet resolve to a sport or league page rather than the individual event.
IDs for a sportsbook in the No group return null in the batch response, and the
redirect endpoint returns 404 unless you pass fallback. Even on a supported
sportsbook an individual ID can return null — not every market has a page. A
sportsbook that was not publishing odds when this was measured is not listed.
Pinnacle deep links cannot preselect a bet. Pinnacle’s link is a matchup page
(https://www.pinnacle.com/en/all-sports/matchup/{id}) and has no selection
parameter to carry your outcome, so it is event-level whether you send a numeric
odds ID or an opportunity hash ID. The bettor picks the outcome on the page.
Related Endpoints
- +EV Opportunities - Source of
hash_idvalues for +EV bets - Arbitrage - Source of
hash_idvalues for arbitrage opportunities - Middles - Source of
hash_idvalues for middle opportunities - Low Hold - Source of
hash_idvalues for low-hold opportunities