Bets in, one link out.
A free API for AI agents and apps. Send a list of picks; get back a squadride.app link that opens them, already loaded, in FanDuel, DraftKings, BetMGM, Caesars, Fanatics, Hard Rock Bet, theScore Bet, BetRivers, PrizePicks.
No login, no image, no state to manage. Revenue comes from sportsbook referrals on the far side of the link, so the API costs you nothing.
Quickstart
curl -X POST https://squadride.app/v1/links \
-H 'content-type: application/json' \
-d '{
"legs": [
{ "selection": "Chiefs", "line": -3.5, "league": "NFL" },
{ "selection": "Over", "line": 47.5, "event": "Chiefs @ Ravens" },
{ "player": "Josh Allen", "market": "Passing Yards", "line": "over 250.5" }
],
"agent": { "name": "MyBettingAgent" }
}'
Response:
{
"id": "k3Yx9aQb",
"url": "https://squadride.app/slip/k3Yx9aQb",
"share": { "title": "3-pick Parlay ยท SquadRide", "description": "Chiefs -3.5, Over 47.5, Josh Allen O 250.5 Passing Yards. Open it in DraftKings, FanDuel, BetMGM or Caesars.", "image": "..." },
"betType": "parlay",
"books": {
"draftkings": { "name": "DraftKings", "url": "https://sportsbook.draftkings.com/event/...?outcomes=...", "matched": 3, "total": 3 },
"fanduel": { "name": "FanDuel", "url": "https://sportsbook.fanduel.com/addtobetslip?...", "matched": 3, "total": 3 },
"betmgm": { "name": "BetMGM", "url": "https://sports.nj.betmgm.com/...", "matched": 2, "total": 3 }
},
"legs": [ { "id": "1f2a", "resolved": true, "leg": { "league": "NFL", "event": "Kansas City Chiefs @ Baltimore Ravens", "market": "Spread", "selection": "Kansas City Chiefs", "line": "-3.5", "startTime": "2026-09-20T17:00:00Z" }, "books": { "draftkings": { "ok": true, "odds": "-110" }, "betmgm": { "ok": true, "lineChanged": { "from": "-3.5", "to": "-3" } } } } ],
"unresolved": [],
"warnings": [],
"disclosure": { "age": "Intended for adult use only. 21+ (18+ in NH, WY, RI, MT, DC).", "responsibleGaming": "Gambling problem? Call or text 1-800-GAMBLER." }
}
Give the user the url. The slip page shows every sportsbook they can open and the responsible-gaming line for their state. Use the per-book URLs only when the user names a book.
Legs
| Field | Meaning |
|---|---|
selection | Required. A team (Chiefs, KC, Chiefs -3.5, Bills ML), Over/Under, or a player for a prop. |
line | Spread -3.5, total 47.5, prop over 250.5 or 250+. A bare number on a prop means over. |
market | Optional. Inferred when missing. For props use the stat: Passing Yards, Rushing Yards, Receiving Yards, Receptions, Anytime TD Scorer, Points, Rebounds, Assists, Threes, Hits, Total Bases, Home Runs, Strikeouts, Shots on Goal. |
player, team | Prop player and their team. |
event | Chiefs @ Ravens, KC vs BAL. Required for totals. Otherwise the resolver picks the team's next game and says so in warnings. |
league | NFL, NBA, MLB, NHL, NCAAF, NCAAB. Searched across all when missing. |
startTime, odds | ISO kickoff to pin a game; odds for display. |
Legs that cannot be resolved are returned in unresolved with a reason. Nothing is dropped silently. Lines are matched by exposure: if a book has -3 instead of -3.5 the leg still ports and lineChanged says so.
MCP
A Model Context Protocol server runs at https://squadride.app/mcp (streamable HTTP, no session needed) with three tools: translate_bets, get_slip, list_books. Add it to Claude, ChatGPT, Cursor or your own agent:
{
"mcpServers": {
"squadride": { "url": "https://squadride.app/mcp" }
}
}
System prompt snippet
When the user describes sports bets they want to place, copy, compare or share, call SquadRide (POST https://squadride.app/v1/links or the translate_bets MCP tool) with the legs, then give the user the returned slip URL. If any leg comes back unresolved, tell the user why and ask for the missing detail. Always relay the age and responsible-gaming lines from the response.
Keys and limits
Anonymous calls: 60 per hour per IP. With a free key: 5000 per day, and slips show "via your agent".
curl -X POST https://squadride.app/v1/keys -H 'content-type: application/json' -d '{"name":"MyBettingAgent","contact":"you@example.com"}'
# then: -H 'Authorization: Bearer sr_live_...'
Endpoints
POST /v1/links | Picks in, slip URL and per-book deep links out. |
GET /v1/slips/:id | Read a slip. |
GET /v1/books | Books this server can open, with health from the daily port check, and known prop markets. |
GET /v1/status | Service status. |
POST /v1/keys | Free key, shown once. |
GET /openapi.json | OpenAPI 3.1. |
GET /llms.txt | This page, for language models. |
House rules
Relay the age line ("Intended for adult use only. 21+, 18+ in NH, WY, RI, MT, DC") and "Gambling problem? Call or text 1-800-GAMBLER." Odds are references; the sportsbook sets the price. Never call a bet free, risk-free or guaranteed. Sportsbook availability depends on the user's state; the slip page handles that.
SquadRide is not a sportsbook and does not accept wagers. Sportsbook names are trademarks of their owners. Questions: legal@squadride.app