Where we don't have a validated model, the API returns null. Not a heuristic.
MCP-ready, SDK-first, 7 walk-forward validated ML models across NFL, NBA, MLB, and NHL. API key in 60 seconds.
14-day Developer Sandbox: 200 req/day, core data endpoints, no credit card required
Already have an account? Go to Dashboard →
# Works with your free Sandbox key, upgrade to Pro Insights for /v1/feed (full intelligence dossier) curl https://api.playcallerapp.com/intelligence/news?player=AJ_Brown&limit=1 -H "X-PlayCaller-Key: pc_sbx_your_key"
Every other sports data API sells you numbers. Sportradar at $1,400/month. SportsData.io at $5,000/month. Raw stats, scores, box scores. You build the intelligence yourself.
PlayCaller ships the intelligence pre-assembled.
The GET /v1/feed endpoint returns a complete player intelligence dossier in a single API call: a calibrated confidence score (logistic regression, 20,585 observations, 5 NFL seasons, AUC-ROC 0.697), a validated heat signal identifying players whose opportunity metrics are converging before the market prices it in (AUC-ROC 0.623, 25.6pp quartile lift), a signal breakdown showing what drove each score, and a plain-English synthesis sentence validated against the source data.
The same endpoint covers every sport with its own validated model, not borrowed NFL numbers. NBA confidence: AUC-ROC 0.855, 84.23x decile lift. NBA heat: AUC-ROC 0.740, 40.5pp quartile lift. MLB pitcher trend: AUC-ROC 0.647. MLB batter confidence: AUC-ROC 0.625, 26.98pp quartile lift. NHL confidence: AUC-ROC 0.669, 36.96pp quartile lift. 7 validated models total. Fields with no model stay null rather than fabricated.
No heuristics. No black boxes. Every claim traces to a measured model.
{ "player": "Justin Jefferson", "team": "MIN", "position": "WR", "confidence_score": 71, // AUC-validated logistic regression, 0-75 display range "heat_signal": "Surging", // AUC 0.623, 25.6pp quartile lift "signals": { "snap_pct": 0.94, "target_share": 0.31, "fp_trend_3g": +18.2 }, "synthesis": "Jefferson commanding 31% target share with snap rate at season high. Opportunity metrics converging, elevated this week.", "injury_status": "active", "null_fields": [] // empty = all models cover this player/sport }
Every field backed by a validated model. Fields without a model return null, never fabricated.
Unlock /v1/feed →
No credit card. 14-day Developer Sandbox starts immediately.
Activation link in inbox. Key generated instantly in pc_sbx_xxxx format.
One GET request, one header. Live sports intelligence in milliseconds.
# Fetch live injury signals (NFL, MLB, NBA) curl https://api.playcallerapp.com/intelligence/news \ -H "X-PlayCaller-Key: pc_sbx_your_key_here" \ -G -d "severity=high&limit=5"
# pip install requests import requests API_KEY = "pc_sbx_your_key_here" resp = requests.get( "https://api.playcallerapp.com/intelligence/news", headers={"X-PlayCaller-Key": API_KEY}, params={"severity": "high", "limit": 5} ) data = resp.json() print(data["data"][0]["title"])
// Node.js (fetch built-in ≥v18) or modern browser const API_KEY = "pc_sbx_your_key_here"; const res = await fetch( "https://api.playcallerapp.com/intelligence/news?severity=high&limit=5", { headers: { "X-PlayCaller-Key": API_KEY } } ); const { data } = await res.json(); console.log(data[0].title);
# Install the official SDK npm install @playcaller/sdk // Full IDE autocomplete + typed responses import { PlaycallerApiClient } from "@playcaller/sdk"; const client = new PlaycallerApiClient({ apiKey: "pc_sbx_your_key_here" }); // Typed injury signals, autocomplete works in VS Code / Cursor const injuries = await client.intelligence.getIntelligenceInjuries({ sport: "nfl", severity: "high" }); // Browse by sport namespace const players = await client.nfl.listNflPlayers({ team: "KC", position: "WR" }); const games = await client.mlb.listMlbGames({ date: "today" }); const leaders = await client.mlb.getMlbScoringLeaders({ position: "SP" });
{ "success": true, "count": 5, "data": [{ "player_name": "Ja'Marr Chase", "team": "CIN", "signal_type": "injury_update", "severity": "high", "title": "Chase limited in practice, questionable for Sunday", "snap_delta": -0.38, "beneficiaries": ["Tee Higgins", "Tyler Boyd"], "source": "ESPN beat · verified" }] }
14-day Developer Sandbox, 200 req/day, core data endpoints, no credit card
Pick any live endpoint, paste your API key, and fire a real request straight from this page. No curl, no Postman. The endpoint list below is read directly from our live OpenAPI spec, so it can't go stale.
Nine sports, 84 endpoints total. Live Now badges confirm production status.
Deep-dives on every sport's endpoints, model outputs, and common integration patterns.
| Sportradar | SportsData.io | API-Sports | PlayCaller | |
|---|---|---|---|---|
| Entry price | $1,400+/mo | $99-149/mo | $10/mo | $0 (Sandbox) / $99/mo |
| Self-serve | No | Limited | Yes | Yes |
| No sales call | No | No | Yes | Yes |
| Intelligence layer | No | No | No | Yes |
| Validated ML models | No | No | No | 7 (NFL, NBA, MLB, NHL) |
| MCP server | No | No | No | Yes |
| TypeScript + Python SDKs | No | No | No | Yes |
| Semantic player similarity | No | No | No | Yes (pgvector) |
| SSE real-time stream | No | No | No | Yes |
| HMAC-signed webhooks | No | No | No | Yes |
| Free trial | No | Scrambled data | 100 req/day forever | 200 req/day, 14 days, no card |
PlayCaller implements Anthropic's Model Context Protocol over HTTP. Connect Cursor, Claude Desktop, Perplexity, or any MCP-compatible AI to live sports intelligence with a single endpoint.
Package: @playcaller/playcaller-mcp (published to npm)
Add this to your .cursor/mcp.json:
Start with a free 14-day Developer Sandbox: 200 req/day, core data endpoints, no credit card required. Upgrade to a paid tier when you're ready to scale.