{"id":"3a6f7bd8-4d31-42fa-b839-249e9c4b825b","entityType":"agent","slug":"clawhub-crawlora-org-sports-scores-research","name":"sports-scores-research","canonicalUrl":"https://www.xpersona.co/agent/clawhub-crawlora-org-sports-scores-research","canonicalPath":"/agent/clawhub-crawlora-org-sports-scores-research","generatedAt":"2026-10-11T05:45:05.169Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T03:08:50.189Z","emptyReason":null},"description":"Pulls sports scores, standings, rosters, player/team stats, public sports news, editorial, wiki/video content, and betting odds through the Crawlora API — ESPN, SofaScore, MLB, Strava, DraftKings Sportsbook, Cricinfo, and Sportskeeda. Use for scores/stats or explicitly requested public sports-media research; Strava routes and clubs can reveal location-sensitive patterns.","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.2K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17d53nb8nd03gyyfdy32rgde58e574f:sports-scores-research","sourceUrl":"https://clawhub.ai/crawlora-org/sports-scores-research","homepage":"https://clawhub.ai/crawlora-org/skills/sports-scores-research","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/crawlora-org/sports-scores-research","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/crawlora-org/skills/sports-scores-research","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"sports-scores-research technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T03:08:50.189Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T03:08:50.189Z","emptyReason":null},"stars":null,"forks":null,"downloads":1177,"packageName":null,"latestVersion":"1.0.21","tractionLabel":"1.2K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T03:08:50.117Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T03:08:50.189Z","lastCrawledAt":"2026-10-11T03:08:50.117Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T03:08:50.117Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.21","createdAt":"2026-10-06T02:29:44.680Z","changelog":"Sync skill instructions, references, and helper from GitHub 733b6716a4b74b99991a9802ead5fe2cee6d608b","fileCount":5,"zipByteSize":35271},{"version":"1.0.20","createdAt":"2026-10-06T02:00:44.632Z","changelog":"Sync skill instructions, references, and helper from GitHub a91c30113b1827d719267576bbd2936c99a28029","fileCount":5,"zipByteSize":34602},{"version":"1.0.19","createdAt":"2026-10-05T01:24:26.587Z","changelog":"Sync skill instructions, references, and helper from GitHub 83bb98ef1362f25cecb5ddd4bc1ea0e564555d97","fileCount":5,"zipByteSize":34500},{"version":"1.0.18","createdAt":"2026-09-29T02:24:45.235Z","changelog":"Sync skill instructions, references, and helper from GitHub 4157a1bf7e8583ee9e9d7a264c65c00aee1a1783","fileCount":5,"zipByteSize":16333},{"version":"1.0.17","createdAt":"2026-09-17T10:20:28.736Z","changelog":"Security hardening: generated helpers now enforce exact routes, methods, and credential-safe curl behavior.","fileCount":5,"zipByteSize":14599},{"version":"1.0.16","createdAt":"2026-09-14T02:10:51.748Z","changelog":"Sync skill instructions, references, and helper from GitHub 902f58316c643ffbcabc57fc6f15f59d27ec063d","fileCount":5,"zipByteSize":15065},{"version":"1.0.15","createdAt":"2026-09-10T12:36:16.758Z","changelog":"Validate API keys before curl config","fileCount":5,"zipByteSize":14662},{"version":"1.0.14","createdAt":"2026-09-10T12:17:25.332Z","changelog":"Keep API keys out of process arguments","fileCount":5,"zipByteSize":14493}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17d53nb8nd03gyyfdy32rgde58e574f:sports-scores-research","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s17d53nb8nd03gyyfdy32rgde58e574f:sports-scores-research` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/crawlora-org/sports-scores-research before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-sports-scores-research/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-sports-scores-research/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-sports-scores-research/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-sports-scores-research/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-sports-scores-research/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-sports-scores-research/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T05:45:05.165Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-sports-scores-research/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-sports-scores-research/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-sports-scores-research/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-sports-scores-research/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T03:08:50.189Z","emptyReason":null},"readme":"Skill: sports-scores-research\n\nOwner: crawlora-org\n\nSummary: Pulls sports scores, standings, rosters, player/team stats, public sports news, editorial, wiki/video content, and betting odds through the Crawlora API — ESPN, SofaScore, MLB, Strava, DraftKings Sportsbook, Cricinfo, and Sportskeeda. Use for scores/stats or explicitly requested public sports-media research; Strava routes and clubs can reveal location-sensitive patterns.\n\nTags: latest:1.0.21\n\nVersion history:\n\nv1.0.21 | 2026-10-06T02:29:44.680Z | user\n\nSync skill instructions, references, and helper from GitHub 733b6716a4b74b99991a9802ead5fe2cee6d608b\n\nv1.0.20 | 2026-10-06T02:00:44.632Z | user\n\nSync skill instructions, references, and helper from GitHub a91c30113b1827d719267576bbd2936c99a28029\n\nv1.0.19 | 2026-10-05T01:24:26.587Z | user\n\nSync skill instructions, references, and helper from GitHub 83bb98ef1362f25cecb5ddd4bc1ea0e564555d97\n\nv1.0.18 | 2026-09-29T02:24:45.235Z | user\n\nSync skill instructions, references, and helper from GitHub 4157a1bf7e8583ee9e9d7a264c65c00aee1a1783\n\nv1.0.17 | 2026-09-17T10:20:28.736Z | user\n\nSecurity hardening: generated helpers now enforce exact routes, methods, and credential-safe curl behavior.\n\nv1.0.16 | 2026-09-14T02:10:51.748Z | user\n\nSync skill instructions, references, and helper from GitHub 902f58316c643ffbcabc57fc6f15f59d27ec063d\n\nv1.0.15 | 2026-09-10T12:36:16.758Z | user\n\nValidate API keys before curl config\n\nv1.0.14 | 2026-09-10T12:17:25.332Z | user\n\nKeep API keys out of process arguments\n\nv1.0.13 | 2026-09-10T12:10:15.184Z | user\n\nReject curl local-file query syntax\n\nv1.0.12 | 2026-09-10T11:55:25.179Z | user\n\nStream helper request bodies through curl stdin\n\nv1.0.11 | 2026-09-10T11:43:51.287Z | user\n\nScope helper routes and remove secret-shaped key examples\n\nv1.0.10 | 2026-09-10T07:08:36.069Z | user\n\nMigrate publisher from tonywangcn to crawlora-org for brand consistency with the plugins\n\nv1.0.9 | 2026-09-08T04:36:18.137Z | user\n\nRefresh stale REST examples, endpoint references, and Bash helper from crawlora-skills 1.17.1.\n\nv1.0.8 | 2026-09-07T13:18:46.263Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.7 | 2026-09-07T08:06:51.759Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.6 | 2026-09-07T06:29:27.317Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.5 | 2026-08-24T07:05:05.162Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.4 | 2026-08-24T06:20:00.147Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.3 | 2026-08-24T05:02:52.366Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.2 | 2026-08-14T18:21:02.501Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.1 | 2026-08-10T18:33:50.835Z | user\n\nSet categories\n\nv1.0.0 | 2026-08-10T18:05:29.512Z | auto\n\nInitial release — unified sports data and endurance events research via the Crawlora API.\n\n- Pulls live scores, standings, rosters, and player/team stats from ESPN (most sports), SofaScore (global soccer and others), MLB, and Strava (routes, clubs, challenges).\n- Returns clean, normalized JSON for all supported endpoints.\n- Full endpoint reference included; easy examples for command-line or curl usage.\n- Free API key & 2,000 credits/month; only public data, no scraping required.\n- Comprehensive coverage: major US and global sports, league standings, stats, live updates, route/club search for endurance sports.\n- Security best practices: API key via environment variable only.\n\nArchive index:\n\nArchive v1.0.21: 5 files, 35271 bytes\n\nFiles: reference/endpoints.md (125687b), scripts/crawlora.sh (11992b), skill-card.md (1973b), SKILL.md (9493b), _meta.json (142b)\n\nFile v1.0.21:SKILL.md\n\n---\nname: sports-scores-research\ndescription: Pulls sports scores, standings, rosters, player/team stats, public sports news, editorial, wiki/video content, and betting odds through the Crawlora API — ESPN, SofaScore, MLB, Strava, DraftKings Sportsbook, Cricinfo, and Sportskeeda. Use for scores/stats or explicitly requested public sports-media research; Strava routes and clubs can reveal location-sensitive patterns.\nallowed-tools: Bash(scripts/crawlora.sh:*)\n---\n\n# Sports & athletics research\n\nPull live scoreboards, standings, rosters, player/team stats, sportsbook\nodds, and endurance-sport routes/clubs across five sports-data sources as\nnormalized JSON from the Crawlora API — no scraping scoreboard widgets or\nstat pages.\n\n## Tool scope and data flow\n\nThe optional shell helper is the only command this skill asks to run. It makes\nGET requests only to the documented, allowlisted Crawlora routes. When invoked,\nit reads `CRAWLORA_API_KEY` and sends it as an `x-api-key` header over HTTPS to\n`api.crawlora.net`; it does not send the key to ESPN, SofaScore, Strava, or\nother sports sources. It briefly writes a mode-600 curl config under `TMPDIR`\nand removes it when the command exits. It does not inspect other environment\nvariables, enumerate files, install software, or run with elevated privileges.\nQueries, public event/player/team identifiers, and requested routes are sent to\nCrawlora; avoid confidential research targets.\n\nIn addition to score/stat endpoints, this skill includes public sports editorial,\narticles, wikis, quizzes, and video surfaces from Cricinfo and Sportskeeda.\nUse those sources only when relevant to the user's request. Strava route and\nclub lookups can expose location-sensitive training patterns; do not use them\nto infer someone's home, routine, or sensitive location history.\n\n## When to use this skill\n\n- \"What's the score / status of <game> right now?\"\n- \"Show me <team>'s roster / season stats / standing.\"\n- \"What's <player>'s stats this season?\"\n- \"Give me the boxscore / play-by-play for <game>.\"\n- \"Head-to-head history between <team A> and <team B>.\"\n- For a detailed post-match football performance brief, use football-match-performance-analysis when installed; this skill remains the general scores/stats entry point.\n- League news, rankings/polls, or betting-odds snapshots (where exposed).\n- \"What are the odds / spread / total for <game>?\" or \"what are the futures\n  odds to win <league>?\" (DraftKings Sportsbook).\n- \"Find running/biking/hiking routes in <region>\" or \"look up this Strava club.\"\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\n1. **ESPN (most sports/leagues)** — `/espn/scoreboard` for today's/a date's\n   games (sport+league params); `/espn/teams` / `/espn/team` for team lists\n   and detail; `/espn/team-roster` for rosters; `/espn/standings`;\n   `/espn/athlete` for a player; `/espn/game-summary` for one game's\n   matchup/odds/boxscore; `/espn/news` and `/espn/rankings` (e.g. AP Top 25)\n   round it out.\n2. **SofaScore (global soccer-first, many sports)** — `/sofascore/search` to\n   resolve a team/player/event id; `/sofascore/live-events` for what's live\n   right now; `/sofascore/event` (+ `/event-statistics`, `/event-lineups`,\n   `/event-incidents`, `/event-odds`, `/event-h2h`) for one match in depth;\n   `/sofascore/standings`, `/sofascore/team`, `/sofascore/team-events`,\n   `/sofascore/team-players`, `/sofascore/player`.\n3. **MLB** — `/mlb/schedule` for games/scores by date; `/mlb/game` (+\n   `/mlb/game-boxscore`, `/mlb/game-play-by-play`) for one game's detail;\n   `/mlb/standings`, `/mlb/teams`, `/mlb/team-roster`, `/mlb/team-stats`;\n   `/mlb/player` + `/mlb/player-stats`; `/mlb/transactions` for\n   signings/trades/IL moves; `/mlb/league-stats` for ranked league leaders.\n4. **Strava** — `/strava/routes` (requires `sport` — one of `hiking`,\n   `road-biking`, `mountain-biking`, `trail-running`, `gravel-biking` —\n   plus `country`+`region` slugs) to browse routes; `/strava/routes/detail`\n   (`path`) for one route; `/strava/clubs/{id}` for a club; `/strava/challenges`\n   for current public challenges.\n5. **DraftKings Sportsbook** — `/draftkings/sportsbook/leagues` to list\n   sports/leagues (get a `league_id`), then `/draftkings/sportsbook/odds`\n   (`league_id`) for every upcoming event's moneyline/spread/total.\n   `/draftkings/sportsbook/live` for live events; `/draftkings/sportsbook/event`\n   (+ `/event-markets` with `subcategory_id`) for one event's full market\n   detail; `/draftkings/sportsbook/futures` (`league_id`+`subcategory_id`)\n   for futures markets. `/draftkings/sportsbook/teams` and `/team` cover\n   team lookups.\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Calling the API\n\n```sh\n# ESPN scoreboard + team:\nscripts/crawlora.sh /espn/scoreboard sport=basketball league=nba | jq '.'\nscripts/crawlora.sh /espn/team-roster sport=basketball league=nba team=lal | jq '.'\n\n# SofaScore live + match detail:\nscripts/crawlora.sh /sofascore/live-events sport=football | jq '.'\nscripts/crawlora.sh /sofascore/event id=<event-id> | jq '.'\n\n# MLB:\nscripts/crawlora.sh /mlb/schedule date=2026-08-10 | jq '.'\nscripts/crawlora.sh /mlb/player-stats id=<mlb-id> group=hitting | jq '.'\n\n# Strava:\nscripts/crawlora.sh /strava/challenges | jq '.'\nscripts/crawlora.sh /strava/routes sport=hiking country=<country-slug> region=<region-slug> | jq '.'\n\n# DraftKings Sportsbook odds:\nscripts/crawlora.sh /draftkings/sportsbook/leagues | jq '.'\nscripts/crawlora.sh /draftkings/sportsbook/odds league_id=<league-id> | jq '.'\n```\n\nUse `scripts/crawlora.sh` for all requests; it keeps the API key out of command-line arguments.\n\n\n## Endpoint reference\n\nSee [`reference/endpoints.md`](reference/endpoints.md) for every ESPN,\nSofaScore, MLB, Strava, and DraftKings Sportsbook endpoint this skill uses.\n\n## Examples\n\n- **Live game tracker:** `/espn/scoreboard` or `/sofascore/live-events`\n  polled on an interval to report score changes as they happen.\n- **Pre-game brief:** `/sofascore/event-h2h` (history) +\n  `/draftkings/sportsbook/odds` or `/sofascore/event-odds` (market\n  expectation) + both teams' `/sofascore/team-events` (recent form).\n- **Post-match performance brief:** use\n  `football-match-performance-analysis` when installed for a sourced narrative\n  across SofaScore statistics, incidents, and lineups.\n- **Season stat leaders:** `/mlb/league-stats` or `/espn/rankings` for\n  top performers, then `/mlb/player-stats` / `/espn/athlete` for the detail.\n- **Roster/transaction watch:** `/mlb/team-roster` + `/mlb/transactions` to\n  track who's been added or dropped this week.\n- **Title-odds tracking:** `/draftkings/sportsbook/futures` for a league's\n  championship/award odds, compared against `/espn/rankings` for the\n  editorial consensus.\n\n## Notes & limits\n\n- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.\n  Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- **Public data only** — public scoreboard/stats pages; odds are informational,\n  not a betting service.\n- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.\n- **ESPN and SofaScore cover many sports/leagues** via `sport`/`league`\n  params — check `reference/endpoints.md` for the accepted values before\n  assuming a league is supported.\n- Live-score endpoints reflect the source's own update cadence — poll rather\n  than assume sub-second freshness.\n- **Strava's `country`/`region` are platform-specific slugs**, not free-text\n  names — the exact slug format isn't in the tool schema; verify a working\n  value at [crawlora.net/docs](https://crawlora.net/docs?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills)\n  or the [playground](https://crawlora.net/playground?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills)\n  if `/strava/routes` 404s — `/strava/challenges` needs no params and is a\n  safe starting point.\n\n## Cricinfo and Sportskeeda editorial and sports data\n\nCricinfo supplies public cricket scorecards, commentary, profiles, records, and\narticles; use its discovery endpoints to identify available tournaments and\nseries. These are editorial/provider snapshots, not an official league record.\n\nSportskeeda adds news/articles, author and topic coverage, supported football\nand other sports-data surfaces, plus community and media pages. Inspect the endpoint reference for each route's\nspecific league, section, and identifier requirements; discover options with\n`sportskeeda_football_options` before selecting a football view. Editorial depth\ncharts and news reports are not official roster announcements or live score feeds.\nDo not carry ESPN/SofaScore IDs into Sportskeeda.\n\n```sh\nscripts/crawlora.sh /sportskeeda/football-options\n```\n\nFor FotMob player/football analysis use `fotmob-research`; for Flashscore or\nLiveScore match lookups use `multi-sport-match-research` when installed. The\nbundled helper here retains only the providers in its own endpoint reference.\n\nFile v1.0.21:_meta.json\n\n{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"sports-scores-research\",\n  \"version\": \"1.0.21\",\n  \"publishedAt\": 1791253784680\n}\n\nFile v1.0.21:reference/endpoints.md\n\n# sports-scores-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**176 endpoints across 7 platform group(s).**\n\n## ESPN (9)\n\n### `espn_athlete`\n\n- **HTTP:** `GET /espn/athlete`\n- **What:** ESPN athlete. Returns one athlete's bio/overview (name, position, jersey, physicals, current team) from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.\n- **Params:** `athlete` (string, **required**) — Numeric ESPN athlete (player) id; `league` (string, **required**) — League key (must be valid for the sport); `sport` (string, **required**) — Sport key\n\n### `espn_game_summary`\n\n- **HTTP:** `GET /espn/game-summary`\n- **What:** ESPN game summary. Returns one game's matchup, betting odds, and boxscore stat totals from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport. Get an `event` id from the scoreboard endpoint.\n- **Params:** `event` (string, **required**) — Numeric ESPN event (game) id; `league` (string, **required**) — League key (must be valid for the sport); `sport` (string, **required**) — Sport key\n\n### `espn_news`\n\n- **HTTP:** `GET /espn/news`\n- **What:** ESPN league news. Returns recent news articles (headline, description, link) for a league from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.\n- **Params:** `league` (string, **required**) — League key (must be valid for the sport); `sport` (string, **required**) — Sport key\n\n### `espn_rankings`\n\n- **HTTP:** `GET /espn/rankings`\n- **What:** ESPN poll rankings. Returns poll rankings (e.g. AP Top 25) for a college league from ESPN's credential-free public JSON. Rankings are only published for college leagues: the `sport` enum accepts `football` and `basketball`, and the `league` enum accepts `college-football`, `mens-college-basketball`, and `womens-college-basketball`.\n- **Params:** `league` (string, **required**) — College league key; `sport` (string, **required**) — Sport key\n\n### `espn_scoreboard`\n\n- **HTTP:** `GET /espn/scoreboard`\n- **What:** ESPN scoreboard. Returns games (scores, schedule, status, and odds when available) for a sport and league from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport. The `seasontype` enum accepts `1` (preseason), `2` (regular season), `3` (postseason), and `4` (offseason).\n- **Params:** `dates` (string, optional) — Date or range as YYYYMMDD, YYYYMMDD-YYYYMMDD, or YYYY; defaults to the current scoreboard; `league` (string, **required**) — League key (must be valid for the sport); `seasontype` (integer, optional) — Season type; `sport` (string, **required**) — Sport key; `week` (integer, optional) — Week number (football leagues)\n\n### `espn_standings`\n\n- **HTTP:** `GET /espn/standings`\n- **What:** ESPN standings. Returns league standings grouped by conference/division from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport. The `seasontype` enum accepts `1` (preseason), `2` (regular season), and `3` (postseason).\n- **Params:** `league` (string, **required**) — League key (must be valid for the sport); `season` (integer, optional) — Four-digit season year; defaults to the current season; `seasontype` (integer, optional) — Season type; `sport` (string, **required**) — Sport key\n\n### `espn_team`\n\n- **HTTP:** `GET /espn/team`\n- **What:** ESPN team detail. Returns one team's detail (identity, colors, record, standing summary) from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.\n- **Params:** `league` (string, **required**) — League key (must be valid for the sport); `sport` (string, **required**) — Sport key; `team` (string, **required**) — Team id (numeric) or abbreviation\n\n### `espn_team_roster`\n\n- **HTTP:** `GET /espn/team-roster`\n- **What:** ESPN team roster. Returns a team's roster (players with position, jersey, age, and experience) plus head coach from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.\n- **Params:** `league` (string, **required**) — League key (must be valid for the sport); `sport` (string, **required**) — Sport key; `team` (string, **required**) — Team id (numeric) or abbreviation\n\n### `espn_teams`\n\n- **HTTP:** `GET /espn/teams`\n- **What:** ESPN team list. Returns the full team list for a sport and league from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.\n- **Params:** `league` (string, **required**) — League key (must be valid for the sport); `sport` (string, **required**) — Sport key\n\n## SofaScore (15)\n\n### `sofascore_event`\n\n- **HTTP:** `GET /sofascore/event`\n- **What:** SofaScore event detail. Returns one match's detail (teams, score, status, venue, referee) from SofaScore's credential-free public JSON.\n- **Params:** `id` (string, **required**) — Numeric SofaScore event (match) id\n\n### `sofascore_event_h2h`\n\n- **HTTP:** `GET /sofascore/event-h2h`\n- **What:** SofaScore event head-to-head. Returns the historical head-to-head win/draw record between a match's two teams (and managers, when available) from SofaScore's credential-free public JSON.\n- **Params:** `id` (string, **required**) — Numeric SofaScore event (match) id\n\n### `sofascore_event_incidents`\n\n- **HTTP:** `GET /sofascore/event-incidents`\n- **What:** SofaScore event incidents. Returns one match's goal, card, substitution, and period timeline from SofaScore's credential-free public JSON. An empty `incidents` list is a valid response before kickoff.\n- **Params:** `id` (string, **required**) — Numeric SofaScore event (match) id\n\n### `sofascore_event_lineups`\n\n- **HTTP:** `GET /sofascore/event-lineups`\n- **What:** SofaScore event lineups. Returns one match's starting XI and substitutes per side, with formation, from SofaScore's credential-free public JSON. Returns 404 when SofaScore has no lineups for the match.\n- **Params:** `id` (string, **required**) — Numeric SofaScore event (match) id\n\n### `sofascore_event_odds`\n\n- **HTTP:** `GET /sofascore/event-odds`\n- **What:** SofaScore event odds. Returns one match's betting markets and choices from SofaScore's credential-free public JSON. Returns 404 when SofaScore has no odds for the match.\n- **Params:** `id` (string, **required**) — Numeric SofaScore event (match) id\n\n### `sofascore_event_statistics`\n\n- **HTTP:** `GET /sofascore/event-statistics`\n- **What:** SofaScore event statistics. Returns one match's statistics (possession, shots, passes, and more, grouped and split by period) from SofaScore's credential-free public JSON. Returns 404 when SofaScore has no tracked statistics for the match.\n- **Params:** `id` (string, **required**) — Numeric SofaScore event (match) id\n\n### `sofascore_live_events`\n\n- **HTTP:** `GET /sofascore/live-events`\n- **What:** SofaScore live events. Returns currently live events for a sport from SofaScore's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, and `tennis`. An empty `events` list is a valid response when nothing is live right now.\n- **Params:** `sport` (string, **required**) — Sport key\n\n### `sofascore_player`\n\n- **HTTP:** `GET /sofascore/player`\n- **What:** SofaScore player detail. Returns one player's bio (position, height, market value, current team) from SofaScore's credential-free public JSON.\n- **Params:** `id` (string, **required**) — Numeric SofaScore player id\n\n### `sofascore_round_events`\n\n- **HTTP:** `GET /sofascore/round-events`\n- **What:** SofaScore round fixtures. Returns fixtures for one round of a competition season from SofaScore's credential-free public JSON. Get `id` from search and `season` from tournament-seasons.\n- **Params:** `id` (string, **required**) — Numeric SofaScore unique-tournament (competition) id; `round` (integer, **required**) — Round number; `season` (string, **required**) — Numeric SofaScore season id\n\n### `sofascore_search`\n\n- **HTTP:** `GET /sofascore/search`\n- **What:** SofaScore universal search. Searches SofaScore's credential-free public JSON for teams, players, and competitions matching a free-text query. An empty `results` list is a valid response when nothing matches.\n- **Params:** `q` (string, **required**) — Free-text search query\n\n### `sofascore_standings`\n\n- **HTTP:** `GET /sofascore/standings`\n- **What:** SofaScore standings. Returns a league table for a competition season from SofaScore's credential-free public JSON. The `type` enum accepts `total`, `home`, and `away`. Get `id` from search and `season` from tournament-seasons.\n- **Params:** `id` (string, **required**) — Numeric SofaScore unique-tournament (competition) id; `season` (string, **required**) — Numeric SofaScore season id; `type` (string, **required**) — Standings variant\n\n### `sofascore_team`\n\n- **HTTP:** `GET /sofascore/team`\n- **What:** SofaScore team detail. Returns one team's detail (identity, manager, venue, primary competition) from SofaScore's credential-free public JSON.\n- **Params:** `id` (string, **required**) — Numeric SofaScore team id\n\n### `sofascore_team_events`\n\n- **HTTP:** `GET /sofascore/team-events`\n- **What:** SofaScore team fixtures. Returns a page of a team's upcoming or recent fixtures from SofaScore's credential-free public JSON. The `direction` enum accepts `next` and `last`. An empty `events` list is a valid response when there is no fixture on that page.\n- **Params:** `direction` (string, **required**) — Fixture direction; `id` (string, **required**) — Numeric SofaScore team id; `page` (integer, optional) — Zero-based page number\n\n### `sofascore_team_players`\n\n- **HTTP:** `GET /sofascore/team-players`\n- **What:** SofaScore team players. Returns a team's full squad from SofaScore's credential-free public JSON.\n- **Params:** `id` (string, **required**) — Numeric SofaScore team id\n\n### `sofascore_tournament_seasons`\n\n- **HTTP:** `GET /sofascore/tournament-seasons`\n- **What:** SofaScore competition seasons. Returns the season list for a competition from SofaScore's credential-free public JSON. Use a returned season id with the standings and round-events endpoints.\n- **Params:** `id` (string, **required**) — Numeric SofaScore unique-tournament (competition) id\n\n## MLB (66)\n\n### `mlb_discovery`\n\n- **HTTP:** `GET /mlb/discovery`\n- **What:** Discover MLB sections and Stats API values. Returns MLB.com's live navigation tree, including hidden nodes labeled with visibility, and the MLB-only value sets for leagues, divisions, game types, roster types, standings types, stat groups, supported stat types, leader categories, MLB Pipeline prospect filters, league-stats hitter positions and player pools, and observed Baseball Savant leaderboard categories and filters including Top Performers, ABS Challenges, Expected Statistics, Outs Above Average, Arm Strength, Arm Value, Home Runs, Percentile Rankings, Pitch Movement, Rolling Windows, Pitcher Arm Angle, Year-to-Year Changes, Catcher Blocking, Catcher Framing, Catcher Throwing, First Base Receiving, and Fielding Run Value. Use these values to discover sections and supported filters before calling MLB endpoints.\n- **Params:** _none_\n\n### `mlb_editorial_feed`\n\n- **HTTP:** `GET /mlb/editorial-feed`\n- **What:** Get an MLB.com editorial feed. Returns a paginated first-party MLB.com news, video, or selection feed. Slugs are dynamic and not a complete closed topic catalog; discover current topic suggestions with mlb-search and sections with mlb-discovery. Feed items retain upstream Article, ShortContent, VSMContent, or Video fields.\n- **Params:** `language` (string, optional) — Feed locale; `limit` (integer, optional) — Items per page (1-100); `skip` (integer, optional) — Number of items to skip (0-100000); `slug` (string, **required**) — MLB feed or selection slug, such as mlb-news-list or sel-vvc-mlb-stories\n\n### `mlb_game`\n\n- **HTTP:** `GET /mlb/game`\n- **What:** Get an MLB game feed. Returns a compact MLB game feed with status, teams, score, innings, probable pitchers, decisions, and team box-score totals.\n- **Params:** `id` (string, **required**) — Numeric MLB game id\n\n### `mlb_game_boxscore`\n\n- **HTTP:** `GET /mlb/game-boxscore`\n- **What:** Get an MLB player boxscore. Returns both teams' player batting, pitching, and fielding lines for a game.\n- **Params:** `id` (string, **required**) — Numeric MLB game id\n\n### `mlb_game_play_by_play`\n\n- **HTTP:** `GET /mlb/game-play-by-play`\n- **What:** Get MLB game play-by-play. Returns every at-bat and pitch/event record for an MLB game.\n- **Params:** `id` (string, **required**) — Numeric MLB game id\n\n### `mlb_league_leaders`\n\n- **HTTP:** `GET /mlb/league-leaders`\n- **What:** Get MLB league leaders. Returns ranked MLB leader entries for one or more validated categories. Use mlb-discovery for all accepted categories, groups, and game type codes.\n- **Params:** `categories` (string, **required**) — Comma-separated MLB leader category names; values are listed in mlb-discovery; `game_type` (string, optional) — MLB game type; `group` (string, optional) — Stat group; `league_id` (string, optional) — MLB league id; `limit` (integer, optional) — Leaders per category (1-100); `season` (integer, optional) — Four-digit season; defaults to current year\n\n### `mlb_league_stats`\n\n- **HTTP:** `GET /mlb/league-stats`\n- **What:** Get ranked MLB league statistics. Returns ranked MLB season stat splits across both leagues. The group enum accepts every value returned by mlb_discovery.\n- **Params:** `end_date` (string, optional) — End date for byDateRange stat types; requires start_date; `game_type` (string, optional) — MLB game type; `group` (string, **required**) — Stat group; `league_id` (string, optional) — MLB league id; `limit` (integer, optional) — Results to return (1-100); `offset` (integer, optional) — Zero-based result offset (0-10000); `opponent_player_id` (string, optional) — Required by vsPlayer stat types; `opponent_team_id` (string, optional) — Required by vsTeam stat types; `player_pool` (string, optional) — Qualified-player pool; `position` (string, optional) — Hitter position; use only with group=hitting; `season` (integer, optional) — Four-digit season; defaults to current year; `start_date` (string, optional) — Start date for byDateRange stat types; requires end_date; `stat_type` (string, optional) — Stats API stat type; defaults to season; `team_id` (string, optional) — Optional MLB team id; discover current team ids with mlb_teams\n\n### `mlb_player`\n\n- **HTTP:** `GET /mlb/player`\n- **What:** Get an MLB player. Returns an MLB player's identity, biographical information, position, handedness, active status, and current team.\n- **Params:** `id` (string, **required**) — Numeric MLB player id\n\n### `mlb_player_stats`\n\n- **HTTP:** `GET /mlb/player-stats`\n- **What:** Get MLB player season statistics. Returns one player's MLB season statistics. The group enum accepts every value returned by mlb_discovery.\n- **Params:** `end_date` (string, optional) — End date for byDateRange stat types; requires start_date; `game_type` (string, optional) — MLB game type; `group` (string, **required**) — Stat group; `id` (string, **required**) — Numeric MLB player id; `opponent_player_id` (string, optional) — Required by vsPlayer stat types; `opponent_team_id` (string, optional) — Required by vsTeam stat types; `season` (integer, optional) — Four-digit season; defaults to current year; `start_date` (string, optional) — Start date for byDateRange stat types; requires end_date; `stat_type` (string, optional) — Stats API stat type; defaults to season\n\n### `mlb_prospect_rankings`\n\n- **HTTP:** `GET /mlb/prospect-rankings`\n- **What:** Get MLB Pipeline curated prospect rankings. Returns MLB Pipeline's curated Top 100, Top 30 by Team, Top 10 by Position, Draft Top 200, or International Top 50 ranking. The anonymous first-party page embeds full ranked data. Search, sort, team filtering on Top 100, and pagination are applied to the extracted rows. Use mlb_discovery for the exact view, year, team, position, and sort values.\n- **Params:** `limit` (integer, optional) — Rows per page (1-250); `offset` (integer, optional) — Zero-based row offset; `position` (string, optional) — Required for view=position; `q` (string, optional) — Case-insensitive player-name substring; `sort` (string, optional) — Local sort field; `sort_dir` (string, optional) — Local sort direction; `team_filter` (string, optional) — Optional organization filter for view=top100; use a team slug from mlb_discovery.; `team_slug` (string, optional) — Required for view=team; one of the MLB Pipeline team ranking slugs. See mlb_discovery.; `view` (string, optional) — Ranking view; `year` (integer, optional) — Ranking year\n\n### `mlb_prospect_stats`\n\n- **HTTP:** `GET /mlb/prospect-stats`\n- **What:** Get MLB Pipeline prospect statistics and rankings. Returns MLB Pipeline prospect stats from the anonymous first-party prospect tables. Supports the Top 100, all-prospect, or one-team list; batter/pitcher views; validated date periods and minimum thresholds; and local name/position filters. Use mlb_discovery for date periods, minimum thresholds, and positions. Team ids come from mlb_teams.\n- **Params:** `date_range` (string, optional) — Prospect table period; `limit` (integer, optional) — Rows to return (1-100); `list_type` (string, optional) — Prospect pool; `min_pa` (integer, optional) — Minimum PA threshold; `offset` (integer, optional) — Zero-based row offset; `player_type` (string, optional) — Player table; `position` (string, optional) — Position filter; `q` (string, optional) — Case-insensitive player-name substring; `team_id` (string, optional) — Optional MLB team id; selects that team's prospect list and overrides list_type\n\n### `mlb_schedule`\n\n- **HTTP:** `GET /mlb/schedule`\n- **What:** Get the MLB schedule and scores. Returns MLB games, teams, scores, status, probable pitchers, venue, and series information for one date or date range, optionally filtered to a team.\n- **Params:** `date` (string, optional) — Single date in YYYY-MM-DD format; `end_date` (string, optional) — Range end in YYYY-MM-DD format; `game_type` (string, optional) — Game type; `start_date` (string, optional) — Range start in YYYY-MM-DD format; `team_id` (string, optional) — Numeric MLB team id\n\n### `mlb_search`\n\n- **HTTP:** `GET /mlb/search`\n- **What:** Search MLB players, teams, and content topics. Returns the same anonymous MLB typeahead categories used by MLB.com: player suggestions, team suggestions, content topics, and search terms. Queries need at least three characters.\n- **Params:** `q` (string, **required**) — Search text; 3-100 characters\n\n### `mlb_standings`\n\n- **HTTP:** `GET /mlb/standings`\n- **What:** Get MLB standings. Returns American League and National League standings, including source-provided expected, home/away, last-ten, ranking, and elimination fields when available, using any supported standings type returned by mlb_discovery.\n- **Params:** `date` (string, optional) — Snapshot date in YYYY-MM-DD format; returns standings as of that date; `season` (integer, optional) — Four-digit season; defaults to current year; `type` (string, optional) — Standings type\n\n### `mlb_statcast`\n\n- **HTTP:** `GET /mlb/statcast-leaders`\n- **What:** Get Baseball Savant Statcast leaderboard data. Returns the standard anonymous Baseball Savant Statcast leaderboard for batters, pitchers, teams, or pitcher teams. Supports the page's season, team, batter position, minimum batted-ball event, and sortable metric filters, plus local pagination. Use mlb_discovery for exact filter sets. Other Baseball Savant leaderboard pages are listed there but are not represented by this route.\n- **Params:** `limit` (integer, optional) — Rows per page (1-500); `min_bbe` (string, optional) — Minimum batted-ball event threshold; `offset` (integer, optional) — Zero-based row offset; `position` (string, optional) — Batter position; `sort` (string, optional) — Sort field; `sort_dir` (string, optional) — Sort direction; `team_id` (string, optional) — Optional MLB team id from mlb_teams; `type` (string, optional) — Leaderboard row type; `year` (integer, optional) — Season; current season back 11 seasons\n\n### `mlb_statcast_abs_challenges`\n\n- **HTTP:** `GET /mlb/statcast-abs-challenges`\n- **What:** Get Baseball Savant ABS challenge rankings. Returns Baseball Savant's ABS challenge table with repeated season, game type, split, challenging-team, opponent-team, pitch-type, and shadow-zone filters, plus challenger type, level, thresholds, leverage, pitch location, breakeven, and split-year controls. Filter values are live-verified and listed by /mlb/discovery. The entire filtered table is returned; UI-only drawer details and client-side sorting are not separate source filters.\n- **Params:** `ball_strike` (string, optional) — Pitch location; empty selects All; `breakeven` (string, optional) — Challenge breakeven band; empty selects All; `challenge_team_ids` (array, optional) — Challenging MLB team ids; `challenge_type` (string, optional) — Challenge board group; `data_count` (string, optional) — Challenge count or run value; `data_mode` (string, optional) — Challenges made or against; `game_types` (array, optional) — Game type codes; `level` (string, optional) — Competition level; `leverage` (string, optional) — Leverage bucket; empty selects All; `min_challenges` (string, optional) — Minimum challenges made; `min_opponent_challenges` (string, optional) — Minimum challenges against; `opponent_team_ids` (array, optional) — Opponent MLB team ids; `pitch_types` (array, optional) — Pitch type codes; `seasons` (array, optional) — Season values; `shadow_zones` (array, optional) — Shadow zone codes; `split_year` (string, optional) — Separate year groups; `splits` (array, optional) — Split dimensions\n\n### `mlb_statcast_active_spin`\n\n- **HTTP:** `GET /mlb/statcast-active-spin`\n- **What:** Get Baseball Savant Active Spin rows. Returns pitcher Active Spin table rows for the selected season/calculation method, minimum pitch count, and throwing hand. Table sorting and pagination are applied locally. The player search only highlights pitchers in the first-party SVG visualization; the SVG chart and CSV download remain outside this JSON table contract.\n- **Params:** `hand` (string, optional) — Pitcher throwing hand; omit for both; `limit` (integer, optional) — Rows per page (1-500); `min` (string, optional) — Minimum total pitches; `offset` (integer, optional) — Zero-based row offset; `sort` (string, optional) — Local table sort field; `sort_dir` (string, optional) — Sort direction; `year` (string, optional) — Season and calculation method\n\n### `mlb_statcast_arm_angle`\n\n- **HTTP:** `GET /mlb/statcast-arm-angle`\n- **What:** Get Baseball Savant Pitcher Arm Angle rows. Returns Pitcher Arm Angle table rows and the matching MLB-average reference. Supports season, team, game type, pitch type, hand, batter side, pitch-count thresholds, date range, and up to four group-by selectors. Table sorting and pagination run locally. Visualization-only controls, animation, and CSV output are separate formats.\n- **Params:** `bat_side` (string, optional) — Batter side; omit for both.; `date_end` (string, optional) — Inclusive end date, YYYY-MM-DD.; `date_start` (string, optional) — Inclusive start date, YYYY-MM-DD.; `game_types` (array, optional) — Game type codes; defaults to R.; `group_by` (array, optional) — Up to four grouping fields.; `limit` (integer, optional) — Rows per page (1-500).; `min` (string, optional) — Minimum total pitches; defaults to q.; `min_group_pitches` (string, optional) — Minimum pitches per group; defaults to 1.; `offset` (integer, optional) — Zero-based row offset (0-5000).; `pitch_hand` (string, optional) — Pitcher throwing hand; omit for both.; `pitch_types` (array, optional) — Pitch type codes; defaults to FF.; `seasons` (array, optional) — Seasons; at most three may be combined. Defaults to 2026.; `sort` (string, optional) — Local table sort field; defaults to arm_angle.; `sort_dir` (string, optional) — Local sort direction; defaults to asc.; `teams` (array, optional) — MLB team ids; omit for all teams.\n\n### `mlb_statcast_arm_strength`\n\n- **HTTP:** `GET /mlb/statcast-arm-strength`\n- **What:** Get Baseball Savant Arm Strength leaderboard data. Returns the player or team Arm Strength leaderboard with verified year, team, position metric, minimum throws, local sort, and pagination filters. The player detail route returns individual throw records.\n- **Params:** `limit` (integer, optional) — Rows per page (1-500); `min_throws` (string, optional) — Minimum throws; `offset` (integer, optional) — Zero-based row offset; `position` (string, optional) — Position metric; `sort` (string, optional) — Local sort field; `sort_dir` (string, optional) — Sort direction; `team_id` (string, optional) — MLB team id; `type` (string, optional) — Leaderboard row type; `year` (string, optional) — Season or all years\n\n### `mlb_statcast_arm_strength_player`\n\n- **HTTP:** `GET /mlb/statcast-arm-strength-player`\n- **What:** Get Baseball Savant player throw details. Returns the player's individual Arm Strength throw records for a verified season or all years.\n- **Params:** `player_id` (string, **required**) — Positive MLB player id; `year` (string, optional) — Season or all years\n\n### `mlb_statcast_arm_value`\n\n- **HTTP:** `GET /mlb/statcast-arm-value`\n- **What:** Get Baseball Savant Extra Bases Run Value leaderboard data. Returns the Arm Value section's complete embedded table, including its Run, Fld, Pit, team, and league views, filters, local sorting, and pagination. Expanded player rows are available from mlb-statcast-arm-value-details. The JSON rows contain the same selected records as the upstream CSV export.\n- **Params:** `end_year` (integer, optional) — End season, 2016 through current season; must be >= start_year; `game_type` (string, optional) — Game type; `key_base_out` (string, optional) — Baserunner situation; `limit` (integer, optional) — Rows per page (1-500); `minimum_opps` (string, optional) — Minimum opportunities; `offset` (integer, optional) — Zero-based row offset; `q` (string, optional) — Case- and accent-insensitive local substring on the displayed row name; up to 100 characters; `sort` (string, optional) — Local table sort field; `sort_dir` (string, optional) — Local sort direction; `split` (string, optional) — Return one row per season; `start_year` (integer, optional) — Start season, 2016 through current season; `team_id` (string, optional) — MLB team id from mlb_discovery, split for All Teams Split by Team, or empty for All Teams; `type` (string, optional) — Leaderboard view; `with_team_only` (string, optional) — Team-roster membership for a selected team\n\n### `mlb_statcast_arm_value_details`\n\n- **HTTP:** `GET /mlb/statcast-arm-value-details`\n- **What:** Get expanded Baseball Savant Arm Value player plays. Returns the game-level play details displayed when expanding a Run, Fld, or Pit player row in the Arm Value leaderboard. Pass the leaderboard filters used to produce the selected row.\n- **Params:** `end_year` (integer, optional) — End season, 2016 through current season; must be >= start_year; `entity_id` (string, **required**) — Positive player id from an Arm Value player row; `game_type` (string, optional) — Game type; `key_base_out` (string, optional) — Baserunner situation; `minimum_opps` (string, optional) — Minimum opportunities; `split` (string, optional) — Split leaderboard records by season; `start_year` (integer, optional) — Start season, 2016 through current season; `team_id` (string, optional) — MLB team id from mlb_discovery, split, or empty; `type` (string, optional) — Player view; `with_team_only` (string, optional) — Team-roster membership for a selected team\n\n### `mlb_statcast_baserunning`\n\n- **HTTP:** `GET /mlb/statcast-baserunning`\n- **What:** Get Baseball Savant baserunning leaderboard tables. Returns Baseball Savant Baserunning Run Value, Basestealing, or Extra Bases Taken tables. All filter value sets were read from the live first-party controls; rows are embedded in the page response and searched, sorted, and paged locally. Use mlb_discovery.statcast_baserunning_filters for board-specific groups, thresholds, and sort fields. CSV and visual expansion modes are excluded; this returns the underlying JSON table rows.\n- **Params:** `board` (string, **required**) — Baseball Savant table; `game_type` (string, optional) — Game scope; `key_base_out` (string, optional) — Extra Bases Taken situation; `limit` (integer, optional) — Rows per page, 1-500; `n` (string, optional) — Board-specific row threshold; `offset` (integer, optional) — Zero-based row offset; `pitch_hand` (string, optional) — Basestealing pitcher hand; `prior_pk` (string, optional) — Basestealing prior pickoffs; `runner_moved` (string, optional) — Basestealing runner outcome; `search` (string, optional) — Case-insensitive substring in the displayed player or team name; `season_end` (integer, optional) — Inclusive last season; `season_start` (integer, optional) — Inclusive first season; `sort` (string, optional) — Local sort field; accepted values depend on board; `sort_dir` (string, optional) — Local sort direction; `split` (string, optional) — Return separate year rows; `target_base` (string, optional) — Basestealing target base; `team` (string, optional) — MLB team id or split-team rows; `type` (string, optional) — Board group; accepted values depend on board; `with_team_only` (boolean, optional) — Restrict to selected team's active player rows; requires a specific team id\n\n### `mlb_statcast_bat_tracking`\n\n- **HTTP:** `GET /mlb/statcast-bat-tracking`\n- **What:** Get Baseball Savant bat-tracking rows. Returns batter, batting-team, pitcher, pitching-team, or league bat-tracking rows with the live page's season, game type, swing threshold, date, side, contact, attack zone, team, pitch, count, and grouping filters. Use mlb_discovery for the same complete value sets. Multi-value filters are passed as repeated query parameters.\n- **Params:** `attack_zone` (string, optional) — Attack zone; `bat_side` (string, optional) — Batter side; `contact_type` (string, optional) — Contact type; `counts` (array, optional) — One or more ball-strike counts; `date_end` (string, optional) — Optional date range end in YYYY-MM-DD; `date_start` (string, optional) — Optional date range start in YYYY-MM-DD; `game_type` (string, optional) — Game type; `group_by` (array, optional) — Up to four grouping columns; `is_hard_hit` (string, optional) — Hard-hit filter; `limit` (integer, optional) — Rows per page (1-500); `min_group_swings` (string, optional) — Minimum swings per grouped row; `min_swings` (string, optional) — Minimum swing qualifier; `offset` (integer, optional) — Zero-based row offset; `pitch_hand` (string, optional) — Pitcher hand; `pitch_types` (array, optional) — One or more pitch types; `season_end` (string, optional) — Last season; must be >= season_start; `season_start` (string, optional) — First season; `sort` (string, optional) — Local row sort field; `sort_dir` (string, optional) — Sort direction; `teams` (array, optional) — One or more MLB team ids; `type` (string, optional) — Table row type\n\n### `mlb_statcast_batted_ball`\n\n- **HTTP:** `GET /mlb/statcast-batted-ball`\n- **What:** Get Baseball Savant Batted Ball Profile rows. Returns the Batted Ball Profile table for batters, batting teams, pitchers, pitching teams, or league totals. Supports first-party season, game type, split, team, date, side, hand, pitch type, event threshold, and split-group threshold filters. The All-Star A game type is accepted by the live page query although its checkbox is hidden. Sorting and pagination are local. The league-average reference row is returned separately when requested; CSV and visualization controls are outside this JSON contract.\n- **Params:** `bat_side` (string, optional) — Batter side; `date_end` (string, optional) — YYYY-MM-DD date range end (2015-04-05 through today); `date_start` (string, optional) — YYYY-MM-DD date range start (2015-04-05 through today); `game_types` (array, optional) — One or more game type codes; `include_league_average` (boolean, optional) — Include the first-party league-average reference row; `limit` (integer, optional) — Rows per page (1-500); `min` (string, optional) — Minimum batted-ball events; `min_split` (string, optional) — Minimum rows per split group; `offset` (integer, optional) — Zero-based row offset; `pitch_hand` (string, optional) — Pitcher throwing hand; `pitch_types` (array, optional) — One or more pitch type codes; `seasons` (array, optional) — One or more seasons; `sort` (string, optional) — Local table sort field; `sort_dir` (string, optional) — Sort direction; `split_year` (string, optional) — Split seasons into separate rows; `splits` (array, optional) — One or more split dimensions; `teams` (array, optional) — One or more MLB team ids; `type` (string, optional) — Row type\n\n### `mlb_statcast_birthday_index`\n\n- **HTTP:** `GET /mlb/statcast-birthday-index`\n- **What:** Get Baseball Savant Sarah Langs Birthday Index rows. Returns today's birthday tables for batters and pitchers plus the selected upcoming-birthday table. Type and minimum-games are first-party filters; date must fall inside the live page's season date range. The active-player toggle, sorting, and pagination are applied locally. The MLB Terms of Use notes a private, non-commercial-use boundary and restrictions on redistribution; this endpoint exposes statistical rows only and excludes media, graphics, and CSV.\n- **Params:** `date` (string, optional) — Optional birthday date in M-D form; accepted dates are bounded by the current live page season window; `limit` (integer, optional) — Rows per page (1-500); `min_games` (string, optional) — Minimum games played on the birthday; `offset` (integer, optional) — Zero-based row offset (0-5000); `show_inactives` (boolean, optional) — Include inactive and deceased players in upcoming rows; `sort` (string, optional) — Local sort column. Some values are type- or date-specific and invalid combinations are rejected.; `sort_dir` (string, optional) — Local sort direction; omitted values use the selected column's live first-party initial direction; `type` (string, optional) — Upcoming table\n\n### `mlb_statcast_catcher_blocking`\n\n- **HTTP:** `GET /mlb/statcast-catcher-blocking`\n- **What:** Get Baseball Savant Catcher Blocking leaderboard rows. Returns catcher, pitcher, catching-team, or league Catcher Blocking rows. Filters cover game type, season range, minimum opportunities, team/stint, and local table sorting. Use mlb_discovery for the exact filter sets. Row detail events are available from mlb-statcast-catcher-blocking-details; chart playback and CSV export controls are not data rows.\n- **Params:** `end_year` (integer, optional) — Last season, start_year through current season; `game_type` (string, optional) — Game type; `limit` (integer, optional) — Rows per page (1-500); `min` (string, optional) — Minimum opportunities; applies to Cat and Pit; `offset` (integer, optional) — Zero-based row offset; `sort` (string, optional) — Local sort field from mlb_discovery; `sort_dir` (string, optional) — Local sort direction; `split` (string, optional) — Split rows by season; `start_year` (integer, optional) — First season, 2018 through current season; `team` (string, optional) — Optional team filter: split or an MLB team id from mlb_discovery; `type` (string, optional) — Leaderboard group; `with_team_only` (boolean, optional) — For a specific Cat or Pit team, include only rows for that team; defaults true\n\n### `mlb_statcast_catcher_blocking_details`\n\n- **HTTP:** `GET /mlb/statcast-catcher-blocking-details`\n- **What:** Get Baseball Savant Catcher Blocking play details. Expands a Catcher Blocking Cat, Pit, or Pitching Team table row into paginated play-location events. entity_id must come from the matching leaderboard rows and other filters must match that row query. League rows have no detail feed.\n- **Params:** `end_year` (integer, optional) — Last season, start_year through current season; `entity_id` (string, **required**) — Entity id from a Cat, Pit, or Pitching Team leaderboard row; `game_type` (string, optional) — Game type; `limit` (integer, optional) — Rows per page (1-500); `offset` (integer, optional) — Zero-based row offset; `split` (string, optional) — Split details by season; `start_year` (integer, optional) — First season, 2018 through current season; `team` (string, optional) — Optional team id or split selector from mlb_discovery; `type` (string, optional) — Row group; `with_team_only` (boolean, optional) — For a specific Cat or Pit team, include only rows for that team; defaults true\n\n### `mlb_statcast_catcher_framing`\n\n- **HTTP:** `GET /mlb/statcast-catcher-framing`\n- **What:** Get Baseball Savant Catcher Framing leaderboard rows. Returns the Catcher Framing table for catcher, catching-team, batter, batting-team, pitcher, or league groups. Supports observed game, season, one-team, pitch/result minimum, date, bat-side, pitch-hand, pitch-type, ball/strike, and call-model filters, plus local sort and pagination. Use mlb_discovery for exact enum values; chart-only groupings and player comparison controls are excluded.\n- **Params:** `ball_strike` (string, optional) — Pitch location relative to strike zone; `bat_side` (string, optional) — Batter side; `call` (string, optional) — Framing model; `date_end` (string, optional) — Inclusive end date; `date_start` (string, optional) — Inclusive start date; `game_type` (string, optional) — Game type; `limit` (integer, optional) — Rows per page (1-500); `min_pitches` (string, optional) — Minimum pitches; `min_results` (integer, optional) — Minimum results; `offset` (integer, optional) — Zero-based row offset; `pitch_hand` (string, optional) — Pitcher hand; `pitch_type` (string, optional) — Single pitch type; `season_end` (integer, optional) — Last season; `season_start` (integer, optional) — First season; `sort` (string, optional) — Local sort field; `sort_dir` (string, optional) — Local sort direction; `team` (string, optional) — Optional single MLB team id; `type` (string, optional) — Table group\n\n### `mlb_statcast_catcher_framing_details`\n\n- **HTTP:** `GET /mlb/statcast-catcher-framing-details`\n- **What:** Get Baseball Savant Catcher Framing pitch-event details. Returns paginated pitch events for a Catcher Framing entity_id. Repeat the leaderboard filters used to obtain the entity; league aggregate rows have no detail feed. The upstream detail response may be large, so use limit and offset.\n- **Params:** `ball_strike` (string, optional) — Pitch location relative to strike zone; `bat_side` (string, optional) — Batter side; `call` (string, optional) — Framing model; `date_end` (string, optional) — Inclusive end date; `date_start` (string, optional) — Inclusive start date; `entity_id` (string, **required**) — Entity id from a Catcher Framing leaderboard row; `game_type` (string, optional) — Game type; `limit` (integer, optional) — Rows per page (1-500); `min_pitches` (string, optional) — Minimum pitches; `min_results` (integer, optional) — Minimum results; `offset` (integer, optional) — Zero-based row offset; `pitch_hand` (string, optional) — Pitcher hand; `pitch_type` (string, optional) — Single pitch type; `season_end` (integer, optional) — Last season; `season_start` (integer, optional) — First season; `team` (string, optional) — Optional single MLB team id; `type` (string, optional) — Table group; league details are unavailable\n\n### `mlb_statcast_catcher_pop_time`\n\n- **HTTP:** `GET /mlb/statcast-catcher-pop-time`\n- **What:** Get Baseball Savant Catcher Pop Time leaderboard. Returns catchers ranked by pop-time metrics, filtered by season, team, and minimum steal attempts to second or third. Sort and pagination are applied locally.\n- **Params:** `limit` (integer, optional) — Rows to return (1-500); `min2b` (string, optional) — Minimum attempts to second base; `min3b` (string, optional) — Minimum attempts to third base; `offset` (integer, optional) — Zero-based offset; `sort` (string, optional) — Sort field from mlb_discovery; `sort_dir` (string, optional) — Sort direction; `team_id` (string, optional) — MLB team id; `year` (string, optional) — Season from 2015 through 2026\n\n### `mlb_statcast_catcher_stance`\n\n- **HTTP:** `GET /mlb/statcast-catcher-stance`\n- **What:** Get Baseball Savant Catcher Stance rows. Returns the public Catcher Stance table for catchers, catching teams, batters, batting teams, pitchers, or league totals. Supports the live year, game, date, threshold, team, pitch type, batter/pitcher hand, knee posture, grouping, sorting, and pagination controls. Grouping accepts up to four values. Use mlb_discovery for exact value sets. Chart series and page-local search/column toggles are not included.\n- **Params:** `bat_side` (string, optional) — Batter side; omit for all; `date_end` (string, optional) — End date YYYY-MM-DD; `date_start` (string, optional) — Start date YYYY-MM-DD; `game_type` (string, optional) — Game type; `group_by` (array, optional) — Up to four grouping dimensions; none disables grouping; `knee_code` (string, optional) — Knee posture; `limit` (integer, optional) — Rows per page (1-500); `min_pitches` (string, optional) — Minimum pitches; `min_results` (string, optional) — Minimum results; `offset` (integer, optional) — Zero-based row offset; `pitch_hand` (string, optional) — Pitcher hand; omit for all; `pitch_types` (array, optional) — One or more pitch types; `season_end` (string, optional) — Last season; must be >= season_start; `season_start` (string, optional) — First season; `sort` (string, optional) — Local row sort field; `sort_dir` (string, optional) — Sort direction; `teams` (array, optional) — One or more MLB team ids; `type` (string, optional) — Table entity type\n\n### `mlb_statcast_catcher_throwing`\n\n- **HTTP:** `GET /mlb/statcast-catcher-throwing`\n- **What:** Get Baseball Savant Catcher Throwing leaderboard rows. Returns catcher, catching-team, or league caught-stealing and throw-quality rows with the public season, game, attempt-threshold, target-base, split-years, team, and roster-membership filters. Table sorting and pagination are applied locally. Catcher rows can be expanded with mlb-statcast-catcher-throwing-details. CSV, charts, and page-local display controls are excluded.\n- **Params:** `game_type` (string, optional) — Game type; `limit` (integer, optional) — Rows per page (1-500); `minimum` (string, optional) — Minimum steal attempts; `offset` (integer, optional) — Zero-based row offset; `season_end` (string, optional) — Last season; must be >= season_start; `season_start` (string, optional) — First season; `sort` (string, optional) — Local sort field; `sort_dir` (string, optional) — Local sort direction; `split` (string, optional) — Split results by season; `target_base` (string, optional) — Throw target; `team` (string, optional) — Empty for all teams, split for team stints, or an MLB team id; `type` (string, optional) — Table group; `with_team_only` (boolean, optional) — For a selected team, include only catchers on that team\n\n### `mlb_statcast_catcher_throwing_details`\n\n- **HTTP:** `GET /mlb/statcast-catcher-throwing-details`\n- **What:** Get Catcher Throwing attempt details. Returns per-attempt play records expanded from a Catcher Throwing catcher row. Supply the entity_id from a Cat row and the row's year/team when it represents a season or team stint. Details are ungrouped source attempts, paginated locally.\n- **Params:** `entity_id` (integer, **required**) — Positive catcher id from a Cat row; `game_type` (string, optional) — Game type; `limit` (integer, optional) — Rows per page (1-500); `minimum` (string, optional) — Minimum steal attempts; `offset` (integer, optional) — Zero-based row offset; `split` (string, optional) — Split rows by season; `target_base` (string, optional) — Throw target; `team` (string, optional) — Empty, split, or team id from the corresponding leaderboard row; `with_team_only` (boolean, optional) — Team roster membership filter; `year` (integer, optional) — Season\n\n### `mlb_statcast_expected`\n\n- **HTTP:** `GET /mlb/statcast-expected`\n- **What:** Get Baseball Savant Expected Statistics. Returns the separate Expected Statistics leaderboard with batter, pitcher, and team views; season, team, batter-position, BIP/PA qualifier and threshold filters; local metric sorting; and pagination. League-average values are returned separately.\n- **Params:** `filter_type` (string, optional) — Minimum qualifier type; `limit` (integer, optional) — Rows per page (1-500); `minimum` (string, optional) — Minimum BIP/PA threshold; `offset` (integer, optional) — Zero-based row offset; `position` (string, optional) — Batter position; only supported for type=batter; `sort` (string, optional) — Sort field; `sort_dir` (string, optional) — Sort direction; `team_id` (string, optional) — Optional MLB team id from mlb_teams; `type` (string, optional) — Leaderboard view; `year` (integer, optional) — Season from 2015 through the current season\n\n### `mlb_statcast_fielding_run_value`\n\n- **HTTP:** `GET /mlb/statcast-fielding-run-value`\n- **What:** Get Baseball Savant Fielding Run Value rows. Returns fielding run value for fielder, fielding-team, batter, batting-team, or pitcher views. Dates and grouping dimensions follow the first-party leaderboard. Minimum 0.1 is available only for fielder and fielding-team views; the batting/pitching views omit it. Sorting and pagination are applied locally. CSV and player-page visualizations are outside this table contract.\n- **Params:** `date_end` (string, optional) — End date, YYYY-MM-DD, from 2018-03-29 through today; `date_start` (string, optional) — Start date, YYYY-MM-DD, from 2018-03-29 through today; `game_type` (string, optional) — Game type; `group_by` (array, optional) — Repeated split dimensions; `limit` (integer, optional) — Rows per page (1-500); `minimum` (string, optional) — Total minimum; 0.1 only for fielder and fielding-team; `minimum_split` (string, optional) — Minimum within each split; 0.1 only for fielder and fielding-team; `offset` (integer, optional) — Zero-based row offset (0-5000); `position` (string, optional) — Position / position group; `season_end` (string, optional) — Last season; must be >= season_start; `season_start` (string, optional) — First season; `sort` (string, optional) — Local sort field; `sort_dir` (string, optional) — Local sort direction; `team_id` (array, optional) — Repeated MLB team ids; `type` (string, optional) — Table type\n\n### `mlb_statcast_first_base_receiving`\n\n- **HTTP:** `GET /mlb/statcast-first-base-receiving`\n- **What:** Get Baseball Savant First Base Receiving leaderboards. Returns first baseman, throwing fielder, fielding team, batting team, or league receiving rows. Includes season/game selections, threshold and group filters, team/date/hand/height/outcome filters, and validated page-local split filters and sorting. Per-play source records are available through mlb-statcast-first-base-receiving-details. 3D trajectory visualizations are not included.\n- **Params:** `bin_time_X10[]` (array, optional) — Time bins; `dateEnd` (string, optiona\n\nFile v1.0.21:skill-card.md\n\n## Description:\n\nRetrieves sports scores, standings, rosters, player and team statistics, public sports media, and betting odds through the Crawlora API, with optional public Strava route and club lookups.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[crawlora-org](https://clawhub.ai/user/crawlora-org)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nSports researchers, developers, and other users can look up public game scores, statistics, rosters, sports news, and odds, or research public routes and clubs when relevant to a request.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Crawlora receives the API key and sports research queries.\n\nMitigation: Use the skill only when comfortable sharing these with Crawlora; avoid confidential research targets and keep the key out of source files and URLs.\n\nRisk: Public Strava routes or clubs may reveal location-sensitive patterns.\n\nMitigation: Limit lookups to the user's relevant request and do not infer a person's home, routine, or sensitive location history.\n\n## Reference(s):\n\n- [ClawHub skill release](https://clawhub.ai/crawlora-org/skills/sports-scores-research)\n- [Crawlora API documentation](https://crawlora.net/docs)\n- [Bundled endpoint reference](artifact/reference/endpoints.md)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, JSON, Shell commands]\n\n**Output Format:** [Plain text or Markdown summaries; optional JSON API responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Live information depends on upstream update cadence; API requests require a Crawlora key.]\n\n## Skill Version(s):\n\n1.0.21 (source: server-resolved ClawHub release)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.20: 5 files, 34602 bytes\n\nFiles: reference/endpoints.md (125687b), scripts/crawlora.sh (11992b), skill-card.md (1796b), SKILL.md (8223b), _meta.json (142b)\n\nFile v1.0.20:SKILL.md\n\n---\nname: sports-scores-research\ndescription: Pulls live scores, standings, rosters, player/team stats, and betting odds via the Crawlora API — ESPN (most sports/leagues), SofaScore (global soccer + more), MLB's own stats API, Strava (routes, clubs, challenges), and DraftKings Sportsbook (moneyline/spread/total odds, futures, live events) — returning clean JSON. Use when the user wants a live scoreboard, a team or player's stats, league standings, a game's boxscore/play-by-play, head-to-head history, sportsbook odds, or an endurance-sport route/club.\n---\n\n# Sports & athletics research\n\nPull live scoreboards, standings, rosters, player/team stats, sportsbook\nodds, and endurance-sport routes/clubs across five sports-data sources as\nnormalized JSON from the Crawlora API — no scraping scoreboard widgets or\nstat pages.\n\n## When to use this skill\n\n- \"What's the score / status of <game> right now?\"\n- \"Show me <team>'s roster / season stats / standing.\"\n- \"What's <player>'s stats this season?\"\n- \"Give me the boxscore / play-by-play for <game>.\"\n- \"Head-to-head history between <team A> and <team B>.\"\n- For a detailed post-match football performance brief, use football-match-performance-analysis when installed; this skill remains the general scores/stats entry point.\n- League news, rankings/polls, or betting-odds snapshots (where exposed).\n- \"What are the odds / spread / total for <game>?\" or \"what are the futures\n  odds to win <league>?\" (DraftKings Sportsbook).\n- \"Find running/biking/hiking routes in <region>\" or \"look up this Strava club.\"\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\n1. **ESPN (most sports/leagues)** — `/espn/scoreboard` for today's/a date's\n   games (sport+league params); `/espn/teams` / `/espn/team` for team lists\n   and detail; `/espn/team-roster` for rosters; `/espn/standings`;\n   `/espn/athlete` for a player; `/espn/game-summary` for one game's\n   matchup/odds/boxscore; `/espn/news` and `/espn/rankings` (e.g. AP Top 25)\n   round it out.\n2. **SofaScore (global soccer-first, many sports)** — `/sofascore/search` to\n   resolve a team/player/event id; `/sofascore/live-events` for what's live\n   right now; `/sofascore/event` (+ `/event-statistics`, `/event-lineups`,\n   `/event-incidents`, `/event-odds`, `/event-h2h`) for one match in depth;\n   `/sofascore/standings`, `/sofascore/team`, `/sofascore/team-events`,\n   `/sofascore/team-players`, `/sofascore/player`.\n3. **MLB** — `/mlb/schedule` for games/scores by date; `/mlb/game` (+\n   `/mlb/game-boxscore`, `/mlb/game-play-by-play`) for one game's detail;\n   `/mlb/standings`, `/mlb/teams`, `/mlb/team-roster`, `/mlb/team-stats`;\n   `/mlb/player` + `/mlb/player-stats`; `/mlb/transactions` for\n   signings/trades/IL moves; `/mlb/league-stats` for ranked league leaders.\n4. **Strava** — `/strava/routes` (requires `sport` — one of `hiking`,\n   `road-biking`, `mountain-biking`, `trail-running`, `gravel-biking` —\n   plus `country`+`region` slugs) to browse routes; `/strava/routes/detail`\n   (`path`) for one route; `/strava/clubs/{id}` for a club; `/strava/challenges`\n   for current public challenges.\n5. **DraftKings Sportsbook** — `/draftkings/sportsbook/leagues` to list\n   sports/leagues (get a `league_id`), then `/draftkings/sportsbook/odds`\n   (`league_id`) for every upcoming event's moneyline/spread/total.\n   `/draftkings/sportsbook/live` for live events; `/draftkings/sportsbook/event`\n   (+ `/event-markets` with `subcategory_id`) for one event's full market\n   detail; `/draftkings/sportsbook/futures` (`league_id`+`subcategory_id`)\n   for futures markets. `/draftkings/sportsbook/teams` and `/team` cover\n   team lookups.\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Calling the API\n\n```sh\n# ESPN scoreboard + team:\nscripts/crawlora.sh /espn/scoreboard sport=basketball league=nba | jq '.'\nscripts/crawlora.sh /espn/team-roster sport=basketball league=nba team=lal | jq '.'\n\n# SofaScore live + match detail:\nscripts/crawlora.sh /sofascore/live-events sport=football | jq '.'\nscripts/crawlora.sh /sofascore/event id=<event-id> | jq '.'\n\n# MLB:\nscripts/crawlora.sh /mlb/schedule date=2026-08-10 | jq '.'\nscripts/crawlora.sh /mlb/player-stats id=<mlb-id> group=hitting | jq '.'\n\n# Strava:\nscripts/crawlora.sh /strava/challenges | jq '.'\nscripts/crawlora.sh /strava/routes sport=hiking country=<country-slug> region=<region-slug> | jq '.'\n\n# DraftKings Sportsbook odds:\nscripts/crawlora.sh /draftkings/sportsbook/leagues | jq '.'\nscripts/crawlora.sh /draftkings/sportsbook/odds league_id=<league-id> | jq '.'\n```\n\nUse `scripts/crawlora.sh` for all requests; it keeps the API key out of command-line arguments.\n\n\n## Endpoint reference\n\nSee [`reference/endpoints.md`](reference/endpoints.md) for every ESPN,\nSofaScore, MLB, Strava, and DraftKings Sportsbook endpoint this skill uses.\n\n## Examples\n\n- **Live game tracker:** `/espn/scoreboard` or `/sofascore/live-events`\n  polled on an interval to report score changes as they happen.\n- **Pre-game brief:** `/sofascore/event-h2h` (history) +\n  `/draftkings/sportsbook/odds` or `/sofascore/event-odds` (market\n  expectation) + both teams' `/sofascore/team-events` (recent form).\n- **Post-match performance brief:** use\n  `football-match-performance-analysis` when installed for a sourced narrative\n  across SofaScore statistics, incidents, and lineups.\n- **Season stat leaders:** `/mlb/league-stats` or `/espn/rankings` for\n  top performers, then `/mlb/player-stats` / `/espn/athlete` for the detail.\n- **Roster/transaction watch:** `/mlb/team-roster` + `/mlb/transactions` to\n  track who's been added or dropped this week.\n- **Title-odds tracking:** `/draftkings/sportsbook/futures` for a league's\n  championship/award odds, compared against `/espn/rankings` for the\n  editorial consensus.\n\n## Notes & limits\n\n- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.\n  Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- **Public data only** — public scoreboard/stats pages; odds are informational,\n  not a betting service.\n- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.\n- **ESPN and SofaScore cover many sports/leagues** via `sport`/`league`\n  params — check `reference/endpoints.md` for the accepted values before\n  assuming a league is supported.\n- Live-score endpoints reflect the source's own update cadence — poll rather\n  than assume sub-second freshness.\n- **Strava's `country`/`region` are platform-specific slugs**, not free-text\n  names — the exact slug format isn't in the tool schema; verify a working\n  value at [crawlora.net/docs](https://crawlora.net/docs?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills)\n  or the [playground](https://crawlora.net/playground?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills)\n  if `/strava/routes` 404s — `/strava/challenges` needs no params and is a\n  safe starting point.\n\n## Sportskeeda editorial and sports data\n\nSportskeeda adds news/articles, author and topic coverage, supported football\nand other sports-data surfaces. Inspect the endpoint reference for each route's\nspecific league, section, and identifier requirements; discover options with\n`sportskeeda_football_options` before selecting a football view. Editorial depth\ncharts and news reports are not official roster announcements or live score feeds.\nDo not carry ESPN/SofaScore IDs into Sportskeeda.\n\n```sh\nscripts/crawlora.sh /sportskeeda/football-options\n```\n\nFor FotMob player/football analysis use `fotmob-research`; for Flashscore or\nLiveScore match lookups use `multi-sport-match-research` when installed. The\nbundled helper here retains only the providers in its own endpoint reference.\n\nFile v1.0.20:_meta.json\n\n{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"sports-scores-research\",\n  \"version\": \"1.0.20\",\n  \"publishedAt\": 1791252044632\n}\n\nFile v1.0.20:reference/endpoints.md\n\n# sports-scores-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**176 endpoints across 7 platform group(s).**\n\n## ESPN (9)\n\n### `espn_athlete`\n\n- **HTTP:** `GET /espn/athlete`\n- **What:** ESPN athlete. Returns one athlete's bio/overview (name, position, jersey, physicals, current team) from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.\n- **Params:** `athlete` (string, **required**) — Numeric ESPN athlete (player) id; `league` (string, **required**) — League key (must be valid for the sport); `sport` (string, **required**) — Sport key\n\n### `espn_game_summary`\n\n- **HTTP:** `GET /espn/game-summary`\n- **What:** ESPN game summary. Returns one game's matchup, betting odds, and boxscore stat totals from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport. Get an `event` id from the scoreboard endpoint.\n- **Params:** `event` (string, **required**) — Numeric ESPN event (game) id; `league` (string, **required**) — League key (must be valid for the sport); `sport` (string, **required**) — Sport key\n\n### `espn_news`\n\n- **HTTP:** `GET /espn/news`\n- **What:** ESPN league news. Returns recent news articles (headline, description, link) for a league from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.\n- **Params:** `league` (string, **required**) — League key (must be valid for the sport); `sport` (string, **required**) — Sport key\n\n### `espn_rankings`\n\n- **HTTP:** `GET /espn/rankings`\n- **What:** ESPN poll rankings. Returns poll rankings (e.g. AP Top 25) for a college league from ESPN's credential-free public JSON. Rankings are only published for college leagues: the `sport` enum accepts `football` and `basketball`, and the `league` enum accepts `college-football`, `mens-college-basketball`, and `womens-college-basketball`.\n- **Params:** `league` (string, **required**) — College league key; `sport` (string, **required**) — Sport key\n\n### `espn_scoreboard`\n\n- **HTTP:** `GET /espn/scoreboard`\n- **What:** ESPN scoreboard. Returns games (scores, schedule, status, and odds when available) for a sport and league from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport. The `seasontype` enum accepts `1` (preseason), `2` (regular season), `3` (postseason), and `4` (offseason).\n- **Params:** `dates` (string, optional) — Date or range as YYYYMMDD, YYYYMMDD-YYYYMMDD, or YYYY; defaults to the current scoreboard; `league` (string, **required**) — League key (must be valid for the sport); `seasontype` (integer, optional) — Season type; `sport` (string, **required**) — Sport key; `week` (integer, optional) — Week number (football leagues)\n\n### `espn_standings`\n\n- **HTTP:** `GET /espn/standings`\n- **What:** ESPN standings. Returns league standings grouped by conference/division from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport. The `seasontype` enum accepts `1` (preseason), `2` (regular season), and `3` (postseason).\n- **Params:** `league` (string, **required**) — League key (must be valid for the sport); `season` (integer, optional) — Four-digit season year; defaults to the current season; `seasontype` (integer, optional) — Season type; `sport` (string, **required**) — Sport key\n\n### `espn_team`\n\n- **HTTP:** `GET /espn/team`\n- **What:** ESPN team detail. Returns one team's detail (identity, colors, record, standing summary) from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.\n- **Params:** `league` (string, **required**) — League key (must be valid for the sport); `sport` (string, **required**) — Sport key; `team` (string, **required**) — Team id (numeric) or abbreviation\n\n### `espn_team_roster`\n\n- **HTTP:** `GET /espn/team-roster`\n- **What:** ESPN team roster. Returns a team's roster (players with position, jersey, age, and experience) plus head coach from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.\n- **Params:** `league` (string, **required**) — League key (must be valid for the sport); `sport` (string, **required**) — Sport key; `team` (string, **required**) — Team id (numeric) or abbreviation\n\n### `espn_teams`\n\n- **HTTP:** `GET /espn/teams`\n- **What:** ESPN team list. Returns the full team list for a sport and league from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.\n- **Params:** `league` (string, **required**) — League key (must be valid for the sport); `sport` (string, **required**) — Sport key\n\n## SofaScore (15)\n\n### `sofascore_event`\n\n- **HTTP:** `GET /sofascore/event`\n- **What:** SofaScore event detail. Returns one match's detail (teams, score, status, venue, referee) from SofaScore's credential-free public JSON.\n- **Params:** `id` (string, **required**) — Numeric SofaScore event (match) id\n\n### `sofascore_event_h2h`\n\n- **HTTP:** `GET /sofascore/event-h2h`\n- **What:** SofaScore event head-to-head. Returns the historical head-to-head win/draw record between a match's two teams (and managers, when available) from SofaScore's credential-free public JSON.\n- **Params:** `id` (string, **required**) — Numeric SofaScore event (match) id\n\n### `sofascore_event_incidents`\n\n- **HTTP:** `GET /sofascore/event-incidents`\n- **What:** SofaScore event incidents. Returns one match's goal, card, substitution, and period timeline from SofaScore's credential-free public JSON. An empty `incidents` list is a valid response before kickoff.\n- **Params:** `id` (string, **required**) — Numeric SofaScore event (match) id\n\n### `sofascore_event_lineups`\n\n- **HTTP:** `GET /sofascore/event-lineups`\n- **What:** SofaScore event lineups. Returns one match's starting XI and substitutes per side, with formation, from SofaScore's credential-free public JSON. Returns 404 when SofaScore has no lineups for the match.\n- **Params:** `id` (string, **required**) — Numeric SofaScore event (match) id\n\n### `sofascore_event_odds`\n\n- **HTTP:** `GET /sofascore/event-odds`\n- **What:** SofaScore event odds. Returns one match's betting markets and choices from SofaScore's credential-free public JSON. Returns 404 when SofaScore has no odds for the match.\n- **Params:** `id` (string, **required**) — Numeric SofaScore event (match) id\n\n### `sofascore_event_statistics`\n\n- **HTTP:** `GET /sofascore/event-statistics`\n- **What:** SofaScore event statistics. Returns one match's statistics (possession, shots, passes, and more, grouped and split by period) from SofaScore's credential-free public JSON. Returns 404 when SofaScore has no tracked statistics for the match.\n- **Params:** `id` (string, **required**) — Numeric SofaScore event (match) id\n\n### `sofascore_live_events`\n\n- **HTTP:** `GET /sofascore/live-events`\n- **What:** SofaScore live events. Returns currently live events for a sport from SofaScore's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, and `tennis`. An empty `events` list is a valid response when nothing is live right now.\n- **Params:** `sport` (string, **required**) — Sport key\n\n### `sofascore_player`\n\n- **HTTP:** `GET /sofascore/player`\n- **What:** SofaScore player detail. Returns one player's bio (position, height, market value, current team) from SofaScore's credential-free public JSON.\n- **Params:** `id` (string, **required**) — Numeric SofaScore player id\n\n### `sofascore_round_events`\n\n- **HTTP:** `GET /sofascore/round-events`\n- **What:** SofaScore round fixtures. Returns fixtures for one round of a competition season from SofaScore's credential-free public JSON. Get `id` from search and `season` from tournament-seasons.\n- **Params:** `id` (string, **required**) — Numeric SofaScore unique-tournament (competition) id; `round` (integer, **required**) — Round number; `season` (string, **required**) — Numeric SofaScore season id\n\n### `sofascore_search`\n\n- **HTTP:** `GET /sofascore/search`\n- **What:** SofaScore universal search. Searches SofaScore's credential-free public JSON for teams, players, and competitions matching a free-text query. An empty `results` list is a valid response when nothing matches.\n- **Params:** `q` (string, **required**) — Free-text search query\n\n### `sofascore_standings`\n\n- **HTTP:** `GET /sofascore/standings`\n- **What:** SofaScore standings. Returns a league table for a competition season from SofaScore's credential-free public JSON. The `type` enum accepts `total`, `home`, and `away`. Get `id` from search and `season` from tournament-seasons.\n- **Params:** `id` (string, **required**) — Numeric SofaScore unique-tournament (competition) id; `season` (string, **required**) — Numeric SofaScore season id; `type` (string, **required**) — Standings variant\n\n### `sofascore_team`\n\n- **HTTP:** `GET /sofascore/team`\n- **What:** SofaScore team detail. Returns one team's detail (identity, manager, venue, primary competition) from SofaScore's credential-free public JSON.\n- **Params:** `id` (string, **required**) — Numeric SofaScore team id\n\n### `sofascore_team_events`\n\n- **HTTP:** `GET /sofascore/team-events`\n- **What:** SofaScore team fixtures. Returns a page of a team's upcoming or recent fixtures from SofaScore's credential-free public JSON. The `direction` enum accepts `next` and `last`. An empty `events` list is a valid response when there is no fixture on that page.\n- **Params:** `direction` (string, **required**) — Fixture direction; `id` (string, **required**) — Numeric SofaScore team id; `page` (integer, optional) — Zero-based page number\n\n### `sofascore_team_players`\n\n- **HTTP:** `GET /sofascore/team-players`\n- **What:** SofaScore team players. Returns a team's full squad from SofaScore's credential-free public JSON.\n- **Params:** `id` (string, **required**) — Numeric SofaScore team id\n\n### `sofascore_tournament_seasons`\n\n- **HTTP:** `GET /sofascore/tournament-seasons`\n- **What:** SofaScore competition seasons. Returns the season list for a competition from SofaScore's credential-free public JSON. Use a returned season id with the standings and round-events endpoints.\n- **Params:** `id` (string, **required**) — Numeric SofaScore unique-tournament (competition) id\n\n## MLB (66)\n\n### `mlb_discovery`\n\n- **HTTP:** `GET /mlb/discovery`\n- **What:** Discover MLB sections and Stats API values. Returns MLB.com's live navigation tree, including hidden nodes labeled with visibility, and the MLB-only value sets for leagues, divisions, game types, roster types, standings types, stat groups, supported stat types, leader categories, MLB Pipeline prospect filters, league-stats hitter positions and player pools, and observed Baseball Savant leaderboard categories and filters including Top Performers, ABS Challenges, Expected Statistics, Outs Above Average, Arm Strength, Arm Value, Home Runs, Percentile Rankings, Pitch Movement, Rolling Windows, Pitcher Arm Angle, Year-to-Year Changes, Catcher Blocking, Catcher Framing, Catcher Throwing, First Base Receiving, and Fielding Run Value. Use these values to discover sections and supported filters before calling MLB endpoints.\n- **Params:** _none_\n\n### `mlb_editorial_feed`\n\n- **HTTP:** `GET /mlb/editorial-feed`\n- **What:** Get an MLB.com editorial feed. Returns a paginated first-party MLB.com news, video, or selection feed. Slugs are dynamic and not a complete closed topic catalog; discover current topic suggestions with mlb-search and sections with mlb-discovery. Feed items retain upstream Article, ShortContent, VSMContent, or Video fields.\n- **Params:** `language` (string, optional) — Feed locale; `limit` (integer, optional) — Items per page (1-100); `skip` (integer, optional) — Number of items to skip (0-100000); `slug` (string, **required**) — MLB feed or selection slug, such as mlb-news-list or sel-vvc-mlb-stories\n\n### `mlb_game`\n\n- **HTTP:** `GET /mlb/game`\n- **What:** Get an MLB game feed. Returns a compact MLB game feed with status, teams, score, innings, probable pitchers, decisions, and team box-score totals.\n- **Params:** `id` (string, **required**) — Numeric MLB game id\n\n### `mlb_game_boxscore`\n\n- **HTTP:** `GET /mlb/game-boxscore`\n- **What:** Get an MLB player boxscore. Returns both teams' player batting, pitching, and fielding lines for a game.\n- **Params:** `id` (string, **required**) — Numeric MLB game id\n\n### `mlb_game_play_by_play`\n\n- **HTTP:** `GET /mlb/game-play-by-play`\n- **What:** Get MLB game play-by-play. Returns every at-bat and pitch/event record for an MLB game.\n- **Params:** `id` (string, **required**) — Numeric MLB game id\n\n### `mlb_league_leaders`\n\n- **HTTP:** `GET /mlb/league-leaders`\n- **What:** Get MLB league leaders. Returns ranked MLB leader entries for one or more validated categories. Use mlb-discovery for all accepted categories, groups, and game type codes.\n- **Params:** `categories` (string, **required**) — Comma-separated MLB leader category names; values are listed in mlb-discovery; `game_type` (string, optional) — MLB game type; `group` (string, optional) — Stat group; `league_id` (string, optional) — MLB league id; `limit` (integer, optional) — Leaders per category (1-100); `season` (integer, optional) — Four-digit season; defaults to current year\n\n### `mlb_league_stats`\n\n- **HTTP:** `GET /mlb/league-stats`\n- **What:** Get ranked MLB league statistics. Returns ranked MLB season stat splits across both leagues. The group enum accepts every value returned by mlb_discovery.\n- **Params:** `end_date` (string, optional) — End date for byDateRange stat types; requires start_date; `game_type` (string, optional) — MLB game type; `group` (string, **required**) — Stat group; `league_id` (string, optional) — MLB league id; `limit` (integer, optional) — Results to return (1-100); `offset` (integer, optional) — Zero-based result offset (0-10000); `opponent_player_id` (string, optional) — Required by vsPlayer stat types; `opponent_team_id` (string, optional) — Required by vsTeam stat types; `player_pool` (string, optional) — Qualified-player pool; `position` (string, optional) — Hitter position; use only with group=hitting; `season` (integer, optional) — Four-digit season; defaults to current year; `start_date` (string, optional) — Start date for byDateRange stat types; requires end_date; `stat_type` (string, optional) — Stats API stat type; defaults to season; `team_id` (string, optional) — Optional MLB team id; discover current team ids with mlb_teams\n\n### `mlb_player`\n\n- **HTTP:** `GET /mlb/player`\n- **What:** Get an MLB player. Returns an MLB player's identity, biographical information, position, handedness, active status, and current team.\n- **Params:** `id` (string, **required**) — Numeric MLB player id\n\n### `mlb_player_stats`\n\n- **HTTP:** `GET /mlb/player-stats`\n- **What:** Get MLB player season statistics. Returns one player's MLB season statistics. The group enum accepts every value returned by mlb_discovery.\n- **Params:** `end_date` (string, optional) — End date for byDateRange stat types; requires start_date; `game_type` (string, optional) — MLB game type; `group` (string, **required**) — Stat group; `id` (string, **required**) — Numeric MLB player id; `opponent_player_id` (string, optional) — Required by vsPlayer stat types; `opponent_team_id` (string, optional) — Required by vsTeam stat types; `season` (integer, optional) — Four-digit season; defaults to current year; `start_date` (string, optional) — Start date for byDateRange stat types; requires end_date; `stat_type` (string, optional) — Stats API stat type; defaults to season\n\n### `mlb_prospect_rankings`\n\n- **HTTP:** `GET /mlb/prospect-rankings`\n- **What:** Get MLB Pipeline curated prospect rankings. Returns MLB Pipeline's curated Top 100, Top 30 by Team, Top 10 by Position, Draft Top 200, or International Top 50 ranking. The anonymous first-party page embeds full ranked data. Search, sort, team filtering on Top 100, and pagination are applied to the extracted rows. Use mlb_discovery for the exact view, year, team, position, and sort values.\n- **Params:** `limit` (integer, optional) — Rows per page (1-250); `offset` (integer, optional) — Zero-based row offset; `position` (string, optional) — Required for view=position; `q` (string, optional) — Case-insensitive player-name substring; `sort` (string, optional) — Local sort field; `sort_dir` (string, optional) — Local sort direction; `team_filter` (string, optional) — Optional organization filter for view=top100; use a team slug from mlb_discovery.; `team_slug` (string, optional) — Required for view=team; one of the MLB Pipeline team ranking slugs. See mlb_discovery.; `view` (string, optional) — Ranking view; `year` (integer, optional) — Ranking year\n\n### `mlb_prospect_stats`\n\n- **HTTP:** `GET /mlb/prospect-stats`\n- **What:** Get MLB Pipeline prospect statistics and rankings. Returns MLB Pipeline prospect stats from the anonymous first-party prospect tables. Supports the Top 100, all-prospect, or one-team list; batter/pitcher views; validated date periods and minimum thresholds; and local name/position filters. Use mlb_discovery for date periods, minimum thresholds, and positions. Team ids come from mlb_teams.\n- **Params:** `date_range` (string, optional) — Prospect table period; `limit` (integer, optional) — Rows to return (1-100); `list_type` (string, optional) — Prospect pool; `min_pa` (integer, optional) — Minimum PA threshold; `offset` (integer, optional) — Zero-based row offset; `player_type` (string, optional) — Player table; `position` (string, optional) — Position filter; `q` (string, optional) — Case-insensitive player-name substring; `team_id` (string, optional) — Optional MLB team id; selects that team's prospect list and overrides list_type\n\n### `mlb_schedule`\n\n- **HTTP:** `GET /mlb/schedule`\n- **What:** Get the MLB schedule and scores. Returns MLB games, teams, scores, status, probable pitchers, venue, and series information for one date or date range, optionally filtered to a team.\n- **Params:** `date` (string, optional) — Single date in YYYY-MM-DD format; `end_date` (string, optional) — Range end in YYYY-MM-DD format; `game_type` (string, optional) — Game type; `start_date` (string, optional) — Range start in YYYY-MM-DD format; `team_id` (string, optional) — Numeric MLB team id\n\n### `mlb_search`\n\n- **HTTP:** `GET /mlb/search`\n- **What:** Search MLB players, teams, and content topics. Returns the same anonymous MLB typeahead categories used by MLB.com: player suggestions, team suggestions, content topics, and search terms. Queries need at least three characters.\n- **Params:** `q` (string, **required**) — Search text; 3-100 characters\n\n### `mlb_standings`\n\n- **HTTP:** `GET /mlb/standings`\n- **What:** Get MLB standings. Returns American League and National League standings, including source-provided expected, home/away, last-ten, ranking, and elimination fields when available, using any supported standings type returned by mlb_discovery.\n- **Params:** `date` (string, optional) — Snapshot date in YYYY-MM-DD format; returns standings as of that date; `season` (integer, optional) — Four-digit season; defaults to current year; `type` (string, optional) — Standings type\n\n### `mlb_statcast`\n\n- **HTTP:** `GET /mlb/statcast-leaders`\n- **What:** Get Baseball Savant Statcast leaderboard data. Returns the standard anonymous Baseball Savant Statcast leaderboard for batters, pitchers, teams, or pitcher teams. Supports the page's season, team, batter position, minimum batted-ball event, and sortable metric filters, plus local pagination. Use mlb_discovery for exact filter sets. Other Baseball Savant leaderboard pages are listed there but are not represented by this route.\n- **Params:** `limit` (integer, optional) — Rows per page (1-500); `min_bbe` (string, optional) — Minimum batted-ball event threshold; `offset` (integer, optional) — Zero-based row offset; `position` (string, optional) — Batter position; `sort` (string, optional) — Sort field; `sort_dir` (string, optional) — Sort direction; `team_id` (string, optional) — Optional MLB team id from mlb_teams; `type` (string, optional) — Leaderboard row type; `year` (integer, optional) — Season; current season back 11 seasons\n\n### `mlb_statcast_abs_challenges`\n\n- **HTTP:** `GET /mlb/statcast-abs-challenges`\n- **What:** Get Baseball Savant ABS challenge rankings. Returns Baseball Savant's ABS challenge table with repeated season, game type, split, challenging-team, opponent-team, pitch-type, and shadow-zone filters, plus challenger type, level, thresholds, leverage, pitch location, breakeven, and split-year controls. Filter values are live-verified and listed by /mlb/discovery. The entire filtered table is returned; UI-only drawer details and client-side sorting are not separate source filters.\n- **Params:** `ball_strike` (string, optional) — Pitch location; empty selects All; `breakeven` (string, optional) — Challenge breakeven band; empty selects All; `challenge_team_ids` (array, optional) — Challenging MLB team ids; `challenge_type` (string, optional) — Challenge board group; `data_count` (string, optional) — Challenge count or run value; `data_mode` (string, optional) — Challenges made or against; `game_types` (array, optional) — Game type codes; `level` (string, optional) — Competition level; `leverage` (string, optional) — Leverage bucket; empty selects All; `min_challenges` (string, optional) — Minimum challenges made; `min_opponent_challenges` (string, optional) — Minimum challenges against; `opponent_team_ids` (array, optional) — Opponent MLB team ids; `pitch_types` (array, optional) — Pitch type codes; `seasons` (array, optional) — Season values; `shadow_zones` (array, optional) — Shadow zone codes; `split_year` (string, optional) — Separate year groups; `splits` (array, optional) — Split dimensions\n\n### `mlb_statcast_active_spin`\n\n- **HTTP:** `GET /mlb/statcast-active-spin`\n- **What:** Get Baseball Savant Active Spin rows. Returns pitcher Active Spin table rows for the selected season/calculation method, minimum pitch count, and throwing hand. Table sorting and pagination are applied locally. The player search only highlights pitchers in the first-party SVG visualization; the SVG chart and CSV download remain outside this JSON table contract.\n- **Params:** `hand` (string, optional) — Pitcher throwing hand; omit for both; `limit` (integer, optional) — Rows per page (1-500); `min` (string, optional) — Minimum total pitches; `offset` (integer, optional) — Zero-based row offset; `sort` (string, optional) — Local table sort field; `sort_dir` (string, optional) — Sort direction; `year` (string, optional) — Season and calculation method\n\n### `mlb_statcast_arm_angle`\n\n- **HTTP:** `GET /mlb/statcast-arm-angle`\n- **What:** Get Baseball Savant Pitcher Arm Angle rows. Returns Pitcher Arm Angle table rows and the matching MLB-average reference. Supports season, team, game type, pitch type, hand, batter side, pitch-count thresholds, date range, and up to four group-by selectors. Table sorting and pagination run locally. Visualization-only controls, animation, and CSV output are separate formats.\n- **Params:** `bat_side` (string, optional) — Batter side; omit for both.; `date_end` (string, optional) — Inclusive end date, YYYY-MM-DD.; `date_start` (string, optional) — Inclusive start date, YYYY-MM-DD.; `game_types` (array, optional) — Game type codes; defaults to R.; `group_by` (array, optional) — Up to four grouping fields.; `limit` (integer, optional) — Rows per page (1-500).; `min` (string, optional) — Minimum total pitches; defaults to q.; `min_group_pitches` (string, optional) — Minimum pitches per group; defaults to 1.; `offset` (integer, optional) — Zero-based row offset (0-5000).; `pitch_hand` (string, optional) — Pitcher throwing hand; omit for both.; `pitch_types` (array, optional) — Pitch type codes; defaults to FF.; `seasons` (array, optional) — Seasons; at most three may be combined. Defaults to 2026.; `sort` (string, optional) — Local table sort field; defaults to arm_angle.; `sort_dir` (string, optional) — Local sort direction; defaults to asc.; `teams` (array, optional) — MLB team ids; omit for all teams.\n\n### `mlb_statcast_arm_strength`\n\n- **HTTP:** `GET /mlb/statcast-arm-strength`\n- **What:** Get Baseball Savant Arm Strength leaderboard data. Returns the player or team Arm Strength leaderboard with verified year, team, position metric, minimum throws, local sort, and pagination filters. The player detail route returns individual throw records.\n- **Params:** `limit` (integer, optional) — Rows per page (1-500); `min_throws` (string, optional) — Minimum throws; `offset` (integer, optional) — Zero-based row offset; `position` (string, optional) — Position metric; `sort` (string, optional) — Local sort field; `sort_dir` (string, optional) — Sort direction; `team_id` (string, optional) — MLB team id; `type` (string, optional) — Leaderboard row type; `year` (string, optional) — Season or all years\n\n### `mlb_statcast_arm_strength_player`\n\n- **HTTP:** `GET /mlb/statcast-arm-strength-player`\n- **What:** Get Baseball Savant player throw details. Returns the player's individual Arm Strength throw records for a verified season or all years.\n- **Params:** `player_id` (string, **required**) — Positive MLB player id; `year` (string, optional) — Season or all years\n\n### `mlb_statcast_arm_value`\n\n- **HTTP:** `GET /mlb/statcast-arm-value`\n- **What:** Get Baseball Savant Extra Bases Run Value leaderboard data. Returns the Arm Value section's complete embedded table, including its Run, Fld, Pit, team, and league views, filters, local sorting, and pagination. Expanded player rows are available from mlb-statcast-arm-value-details. The JSON rows contain the same selected records as the upstream CSV export.\n- **Params:** `end_year` (integer, optional) — End season, 2016 through current season; must be >= start_year; `game_type` (string, optional) — Game type; `key_base_out` (string, optional) — Baserunner situation; `limit` (integer, optional) — Rows per page (1-500); `minimum_opps` (string, optional) — Minimum opportunities; `offset` (integer, optional) — Zero-based row offset; `q` (string, optional) — Case- and accent-insensitive local substring on the displayed row name; up to 100 characters; `sort` (string, optional) — Local table sort field; `sort_dir` (string, optional) — Local sort direction; `split` (string, optional) — Return one row per season; `start_year` (integer, optional) — Start season, 2016 through current season; `team_id` (string, optional) — MLB team id from mlb_discovery, split for All Teams Split by Team, or empty for All Teams; `type` (string, optional) — Leaderboard view; `with_team_only` (string, optional) — Team-roster membership for a selected team\n\n### `mlb_statcast_arm_value_details`\n\n- **HTTP:** `GET /mlb/statcast-arm-value-details`\n- **What:** Get expanded Baseball Savant Arm Value player plays. Returns the game-level play details displayed when expanding a Run, Fld, or Pit player row in the Arm Value leaderboard. Pass the leaderboard filters used to produce the selected row.\n- **Params:** `end_year` (integer, optional) — End season, 2016 through current season; must be >= start_year; `entity_id` (string, **required**) — Positive player id from an Arm Value player row; `game_type` (string, optional) — Game type; `key_base_out` (string, optional) — Baserunner situation; `minimum_opps` (string, optional) — Minimum opportunities; `split` (string, optional) — Split leaderboard records by season; `start_year` (integer, optional) — Start season, 2016 through current season; `team_id` (string, optional) — MLB team id from mlb_discovery, split, or empty; `type` (string, optional) — Player view; `with_team_only` (string, optional) — Team-roster membership for a selected team\n\n### `mlb_statcast_baserunning`\n\n- **HTTP:** `GET /mlb/statcast-baserunning`\n- **What:** Get Baseball Savant baserunning leaderboard tables. Returns Baseball Savant Baserunning Run Value, Basestealing, or Extra Bases Taken tables. All filter value sets were read from the live first-party controls; rows are embedded in the page response and searched, sorted, and paged locally. Use mlb_discovery.statcast_baserunning_filters for board-specific groups, thresholds, and sort fields. CSV and visual expansion modes are excluded; this returns the underlying JSON table rows.\n- **Params:** `board` (string, **required**) — Baseball Savant table; `game_type` (string, optional) — Game scope; `key_base_out` (string, optional) — Extra Bases Taken situation; `limit` (integer, optional) — Rows per page, 1-500; `n` (string, optional) — Board-specific row threshold; `offset` (integer, optional) — Zero-based row offset; `pitch_hand` (string, optional) — Basestealing pitcher hand; `prior_pk` (string, optional) — Basestealing prior pickoffs; `runner_moved` (string, optional) — Basestealing runner outcome; `search` (string, optional) — Case-insensitive substring in the displayed player or team name; `season_end` (integer, optional) — Inclusive last season; `season_start` (integer, optional) — Inclusive first season; `sort` (string, optional) — Local sort field; accepted values depend on board; `sort_dir` (string, optional) — Local sort direction; `split` (string, optional) — Return separate year rows; `target_base` (string, optional) — Basestealing target base; `team` (string, optional) — MLB team id or split-team rows; `type` (string, optional) — Board group; accepted values depend on board; `with_team_only` (boolean, optional) — Restrict to selected team's active player rows; requires a specific team id\n\n### `mlb_statcast_bat_tracking`\n\n- **HTTP:** `GET /mlb/statcast-bat-tracking`\n- **What:** Get Baseball Savant bat-tracking rows. Returns batter, batting-team, pitcher, pitching-team, or league bat-tracking rows with the live page's season, game type, swing threshold, date, side, contact, attack zone, team, pitch, count, and grouping filters. Use mlb_discovery for the same complete value sets. Multi-value filters are passed as repeated query parameters.\n- **Params:** `attack_zone` (string, optional) — Attack zone; `bat_side` (string, optional) — Batter side; `contact_type` (string, optional) — Contact type; `counts` (array, optional) — One or more ball-strike counts; `date_end` (string, optional) — Optional date range end in YYYY-MM-DD; `date_start` (string, optional) — Optional date range start in YYYY-MM-DD; `game_type` (string, optional) — Game type; `group_by` (array, optional) — Up to four grouping columns; `is_hard_hit` (string, optional) — Hard-hit filter; `limit` (integer, optional) — Rows per page (1-500); `min_group_swings` (string, optional) — Minimum swings per grouped row; `min_swings` (string, optional) — Minimum swing qualifier; `offset` (integer, optional) — Zero-based row offset; `pitch_hand` (string, optional) — Pitcher hand; `pitch_types` (array, optional) — One or more pitch types; `season_end` (string, optional) — Last season; must be >= season_start; `season_start` (string, optional) — First season; `sort` (string, optional) — Local row sort field; `sort_dir` (string, optional) — Sort direction; `teams` (array, optional) — One or more MLB team ids; `type` (string, optional) — Table row type\n\n### `mlb_statcast_batted_ball`\n\n- **HTTP:** `GET /mlb/statcast-batted-ball`\n- **What:** Get Baseball Savant Batted Ball Profile rows. Returns the Batted Ball Profile table for batters, batting teams, pitchers, pitching teams, or league totals. Supports first-party season, game type, split, team, date, side, hand, pitch type, event threshold, and split-group threshold filters. The All-Star A game type is accepted by the live page query although its checkbox is hidden. Sorting and pagination are local. The league-average reference row is returned separately when requested; CSV and visualization controls are outside this JSON contract.\n- **Params:** `bat_side` (string, optional) — Batter side; `date_end` (string, optional) — YYYY-MM-DD date range end (2015-04-05 through today); `date_start` (string, optional) — YYYY-MM-DD date range start (2015-04-05 through today); `game_types` (array, optional) — One or more game type codes; `include_league_average` (boolean, optional) — Include the first-party league-average reference row; `limit` (integer, optional) — Rows per page (1-500); `min` (string, optional) — Minimum batted-ball events; `min_split` (string, optional) — Minimum rows per split group; `offset` (integer, optional) — Zero-based row offset; `pitch_hand` (string, optional) — Pitcher throwing hand; `pitch_types` (array, optional) — One or more pitch type codes; `seasons` (array, optional) — One or more seasons; `sort` (string, optional) — Local table sort field; `sort_dir` (string, optional) — Sort direction; `split_year` (string, optional) — Split seasons into separate rows; `splits` (array, optional) — One or more split dimensions; `teams` (array, optional) — One or more MLB team ids; `type` (string, optional) — Row type\n\n### `mlb_statcast_birthday_index`\n\n- **HTTP:** `GET /mlb/statcast-birthday-index`\n- **What:** Get Baseball Savant Sarah Langs Birthday Index rows. Returns today's birthday tables for batters and pitchers plus the selected upcoming-birthday table. Type and minimum-games are first-party filters; date must fall inside the live page's season date range. The active-player toggle, sorting, and pagination are applied locally. The MLB Terms of Use notes a private, non-commercial-use boundary and restrictions on redistribution; this endpoint exposes statistical rows only and excludes media, graphics, and CSV.\n- **Params:** `date` (string, optional) — Optional birthday date in M-D form; accepted dates are bounded by the current live page season window; `limit` (integer, optional) — Rows per page (1-500); `min_games` (string, optional) — Minimum games played on the birthday; `offset` (integer, optional) — Zero-based row offset (0-5000); `show_inactives` (boolean, optional) — Include inactive and deceased players in upcoming rows; `sort` (string, optional) — Local sort column. Some values are type- or date-specific and invalid combinations are rejected.; `sort_dir` (string, optional) — Local sort direction; omitted values use the selected column's live first-party initial direction; `type` (string, optional) — Upcoming table\n\n### `mlb_statcast_catcher_blocking`\n\n- **HTTP:** `GET /mlb/statcast-catcher-blocking`\n- **What:** Get Baseball Savant Catcher Blocking leaderboard rows. Returns catcher, pitcher, catching-team, or league Catcher Blocking rows. Filters cover game type, season range, minimum opportunities, team/stint, and local table sorting. Use mlb_discovery for the exact filter sets. Row detail events are available from mlb-statcast-catcher-blocking-details; chart playback and CSV export controls are not data rows.\n- **Params:** `end_year` (integer, optional) — Last season, start_year through current season; `game_type` (string, optional) — Game type; `limit` (integer, optional) — Rows per page (1-500); `min` (string, optional) — Minimum opportunities; applies to Cat and Pit; `offset` (integer, optional) — Zero-based row offset; `sort` (string, optional) — Local sort field from mlb_discovery; `sort_dir` (string, optional) — Local sort direction; `split` (string, optional) — Split rows by season; `start_year` (integer, optional) — First season, 2018 through current season; `team` (string, optional) — Optional team filter: split or an MLB team id from mlb_discovery; `type` (string, optional) — Leaderboard group; `with_team_only` (boolean, optional) — For a specific Cat or Pit team, include only rows for that team; defaults true\n\n### `mlb_statcast_catcher_blocking_details`\n\n- **HTTP:** `GET /mlb/statcast-catcher-blocking-details`\n- **What:** Get Baseball Savant Catcher Blocking play details. Expands a Catcher Blocking Cat, Pit, or Pitching Team table row into paginated play-location events. entity_id must come from the matching leaderboard rows and other filters must match that row query. League rows have no detail feed.\n- **Params:** `end_year` (integer, optional) — Last season, start_year through current season; `entity_id` (string, **required**) — Entity id from a Cat, Pit, or Pitching Team leaderboard row; `game_type` (string, optional) — Game type; `limit` (integer, optional) — Rows per page (1-500); `offset` (integer, optional) — Zero-based row offset; `split` (string, optional) — Split details by season; `start_year` (integer, optional) — First season, 2018 through current season; `team` (string, optional) — Optional team id or split selector from mlb_discovery; `type` (string, optional) — Row group; `with_team_only` (boolean, optional) — For a specific Cat or Pit team, include only rows for that team; defaults true\n\n### `mlb_statcast_catcher_framing`\n\n- **HTTP:** `GET /mlb/statcast-catcher-framing`\n- **What:** Get Baseball Savant Catcher Framing leaderboard rows. Returns the Catcher Framing table for catcher, catching-team, batter, batting-team, pitcher, or league groups. Supports observed game, season, one-team, pitch/result minimum, date, bat-side, pitch-hand, pitch-type, ball/strike, and call-model filters, plus local sort and pagination. Use mlb_discovery for exact enum values; chart-only groupings and player comparison controls are excluded.\n- **Params:** `ball_strike` (string, optional) — Pitch location relative to strike zone; `bat_side` (string, optional) — Batter side; `call` (string, optional) — Framing model; `date_end` (string, optional) — Inclusive end date; `date_start` (string, optional) — Inclusive start date; `game_type` (string, optional) — Game type; `limit` (integer, optional) — Rows per page (1-500); `min_pitches` (string, optional) — Minimum pitches; `min_results` (integer, optional) — Minimum results; `offset` (integer, optional) — Zero-based row offset; `pitch_hand` (string, optional) — Pitcher hand; `pitch_type` (string, optional) — Single pitch type; `season_end` (integer, optional) — Last season; `season_start` (integer, optional) — First season; `sort` (string, optional) — Local sort field; `sort_dir` (string, optional) — Local sort direction; `team` (string, optional) — Optional single MLB team id; `type` (string, optional) — Table group\n\n### `mlb_statcast_catcher_framing_details`\n\n- **HTTP:** `GET /mlb/statcast-catcher-framing-details`\n- **What:** Get Baseball Savant Catcher Framing pitch-event details. Returns paginated pitch events for a Catcher Framing entity_id. Repeat the leaderboard filters used to obtain the entity; league aggregate rows have no detail feed. The upstream detail response may be large, so use limit and offset.\n- **Params:** `ball_strike` (string, optional) — Pitch location relative to strike zone; `bat_side` (string, optional) — Batter side; `call` (string, optional) — Framing model; `date_end` (string, optional) — Inclusive end date; `date_start` (string, optional) — Inclusive start date; `entity_id` (string, **required**) — Entity id from a Catcher Framing leaderboard row; `game_type` (string, optional) — Game type; `limit` (integer, optional) — Rows per page (1-500); `min_pitches` (string, optional) — Minimum pitches; `min_results` (integer, optional) — Minimum results; `offset` (integer, optional) — Zero-based row offset; `pitch_hand` (string, optional) — Pitcher hand; `pitch_type` (string, optional) — Single pitch type; `season_end` (integer, optional) — Last season; `season_start` (integer, optional) — First season; `team` (string, optional) — Optional single MLB team id; `type` (string, optional) — Table group; league details are unavailable\n\n### `mlb_statcast_catcher_pop_time`\n\n- **HTTP:** `GET /mlb/statcast-catcher-pop-time`\n- **What:** Get Baseball Savant Catcher Pop Time leaderboard. Returns catchers ranked by pop-time metrics, filtered by season, team, and minimum steal attempts to second or third. Sort and pagination are applied locally.\n- **Params:** `limit` (integer, optional) — Rows to return (1-500); `min2b` (string, optional) — Minimum attempts to second base; `min3b` (string, optional) — Minimum attempts to third base; `offset` (integer, optional) — Zero-based offset; `sort` (string, optional) — Sort field from mlb_discovery; `sort_dir` (string, optional) — Sort direction; `team_id` (string, optional) — MLB team id; `year` (string, optional) — Season from 2015 through 2026\n\n### `mlb_statcast_catcher_stance`\n\n- **HTTP:** `GET /mlb/statcast-catcher-stance`\n- **What:** Get Baseball Savant Catcher Stance rows. Returns the public Catcher Stance table for catchers, catching teams, batters, batting teams, pitchers, or league totals. Supports the live year, game, date, threshold, team, pitch type, batter/pitcher hand, knee posture, grouping, sorting, and pagination controls. Grouping accepts up to four values. Use mlb_discovery for exact value sets. Chart series and page-local search/column toggles are not included.\n- **Params:** `bat_side` (string, optional) — Batter side; omit for all; `date_end` (string, optional) — End date YYYY-MM-DD; `date_start` (string, optional) — Start date YYYY-MM-DD; `game_type` (string, optional) — Game type; `group_by` (array, optional) — Up to four grouping dimensions; none disables grouping; `knee_code` (string, optional) — Knee posture; `limit` (integer, optional) — Rows per page (1-500); `min_pitches` (string, optional) — Minimum pitches; `min_results` (string, optional) — Minimum results; `offset` (integer, optional) — Zero-based row offset; `pitch_hand` (string, optional) — Pitcher hand; omit for all; `pitch_types` (array, optional) — One or more pitch types; `season_end` (string, optional) — Last season; must be >= season_start; `season_start` (string, optional) — First season; `sort` (string, optional) — Local row sort field; `sort_dir` (string, optional) — Sort direction; `teams` (array, optional) — One or more MLB team ids; `type` (string, optional) — Table entity type\n\n### `mlb_statcast_catcher_throwing`\n\n- **HTTP:** `GET /mlb/statcast-catcher-throwing`\n- **What:** Get Baseball Savant Catcher Throwing leaderboard rows. Returns catcher, catching-team, or league caught-stealing and throw-quality rows with the public season, game, attempt-threshold, target-base, split-years, team, and roster-membership filters. Table sorting and pagination are applied locally. Catcher rows can be expanded with mlb-statcast-catcher-throwing-details. CSV, charts, and page-local display controls are excluded.\n- **Params:** `game_type` (string, optional) — Game type; `limit` (integer, optional) — Rows per page (1-500); `minimum` (string, optional) — Minimum steal attempts; `offset` (integer, optional) — Zero-based row offset; `season_end` (string, optional) — Last season; must be >= season_start; `season_start` (string, optional) — First season; `sort` (string, optional) — Local sort field; `sort_dir` (string, optional) — Local sort direction; `split` (string, optional) — Split results by season; `target_base` (string, optional) — Throw target; `team` (string, optional) — Empty for all teams, split for team stints, or an MLB team id; `type` (string, optional) — Table group; `with_team_only` (boolean, optional) — For a selected team, include only catchers on that team\n\n### `mlb_statcast_catcher_throwing_details`\n\n- **HTTP:** `GET /mlb/statcast-catcher-throwing-details`\n- **What:** Get Catcher Throwing attempt details. Returns per-attempt play records expanded from a Catcher Throwing catcher row. Supply the entity_id from a Cat row and the row's year/team when it represents a season or team stint. Details are ungrouped source attempts, paginated locally.\n- **Params:** `entity_id` (integer, **required**) — Positive catcher id from a Cat row; `game_type` (string, optional) — Game type; `limit` (integer, optional) — Rows per page (1-500); `minimum` (string, optional) — Minimum steal attempts; `offset` (integer, optional) — Zero-based row offset; `split` (string, optional) — Split rows by season; `target_base` (string, optional) — Throw target; `team` (string, optional) — Empty, split, or team id from the corresponding leaderboard row; `with_team_only` (boolean, optional) — Team roster membership filter; `year` (integer, optional) — Season\n\n### `mlb_statcast_expected`\n\n- **HTTP:** `GET /mlb/statcast-expected`\n- **What:** Get Baseball Savant Expected Statistics. Returns the separate Expected Statistics leaderboard with batter, pitcher, and team views; season, team, batter-position, BIP/PA qualifier and threshold filters; local metric sorting; and pagination. League-average values are returned separately.\n- **Params:** `filter_type` (string, optional) — Minimum qualifier type; `limit` (integer, optional) — Rows per page (1-500); `minimum` (string, optional) — Minimum BIP/PA threshold; `offset` (integer, optional) — Zero-based row offset; `position` (string, optional) — Batter position; only supported for type=batter; `sort` (string, optional) — Sort field; `sort_dir` (string, optional) — Sort direction; `team_id` (string, optional) — Optional MLB team id from mlb_teams; `type` (string, optional) — Leaderboard view; `year` (integer, optional) — Season from 2015 through the current season\n\n### `mlb_statcast_fielding_run_value`\n\n- **HTTP:** `GET /mlb/statcast-fielding-run-value`\n- **What:** Get Baseball Savant Fielding Run Value rows. Returns fielding run value for fielder, fielding-team, batter, batting-team, or pitcher views. Dates and grouping dimensions follow the first-party leaderboard. Minimum 0.1 is available only for fielder and fielding-team views; the batting/pitching views omit it. Sorting and pagination are applied locally. CSV and player-page visualizations are outside this table contract.\n- **Params:** `date_end` (string, optional) — End date, YYYY-MM-DD, from 2018-03-29 through today; `date_start` (string, optional) — Start date, YYYY-MM-DD, from 2018-03-29 through today; `game_type` (string, optional) — Game type; `group_by` (array, optional) — Repeated split dimensions; `limit` (integer, optional) — Rows per page (1-500); `minimum` (string, optional) — Total minimum; 0.1 only for fielder and fielding-team; `minimum_split` (string, optional) — Minimum within each split; 0.1 only for fielder and fielding-team; `offset` (integer, optional) — Zero-based row offset (0-5000); `position` (string, optional) — Position / position group; `season_end` (string, optional) — Last season; must be >= season_start; `season_start` (string, optional) — First season; `sort` (string, optional) — Local sort field; `sort_dir` (string, optional) — Local sort direction; `team_id` (array, optional) — Repeated MLB team ids; `type` (string, optional) — Table type\n\n### `mlb_statcast_first_base_receiving`\n\n- **HTTP:** `GET /mlb/statcast-first-base-receiving`\n- **What:** Get Baseball Savant First Base Receiving leaderboards. Returns first baseman, throwing fielder, fielding team, batting team, or league receiving rows. Includes season/game selections, threshold and group filters, team/date/hand/height/outcome filters, and validated page-local split filters and sorting. Per-play source records are available through mlb-statcast-first-base-receiving-details. 3D trajectory visualizations are not included.\n- **Params:** `bin_time_X10[]` (array, optional) — Time bins; `dateEnd` (string, optiona\n\nFile v1.0.20:skill-card.md\n\n## Description:\n\nHelps agents retrieve live scores, standings, team and player statistics, match details, betting odds, and endurance-sport information through Crawlora.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[crawlora-org](https://clawhub.ai/user/crawlora-org)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nFans, analysts, and developers use this skill to look up public sports scores, statistics, match history, odds, and routes or clubs for research and reporting.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The available endpoints cover more sports-media providers and content than the main description highlights.\n\nMitigation: Review the endpoint reference before installing and use only the sources needed for the task.\n\nRisk: Sensitive location, club, or person-specific searches may expose query details to Crawlora.\n\nMitigation: Avoid these lookups unless the user is comfortable with that data flow; keep the API key private.\n\n## Reference(s):\n\n- [ClawHub skill release](https://clawhub.ai/crawlora-org/skills/sports-scores-research)\n- [Endpoint reference](reference/endpoints.md)\n- [Crawlora documentation](https://crawlora.net/docs)\n\n## Skill Output:\n\n**Output Type(s):** [Text, JSON, Guidance]\n\n**Output Format:** [Markdown summaries or structured JSON data]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Live results depend on each source's update cadence.]\n\n## Skill Version(s):\n\n1.0.20 (source: ClawHub release)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.19: 5 files, 34500 bytes\n\nFiles: reference/endpoints.md (125687b), scripts/crawlora.sh (11992b), skill-card.md (1850b), SKILL.md (7880b), _meta.json (142b)\n\nFile v1.0.19:SKILL.md\n\n---\nname: sports-scores-research\ndescription: Pulls live scores, standings, rosters, player/team stats, and betting odds via the Crawlora API — ESPN (most sports/leagues), SofaScore (global soccer + more), MLB's own stats API, Strava (routes, clubs, challenges), and DraftKings Sportsbook (moneyline/spread/total odds, futures, live events) — returning clean JSON. Use when the user wants a live scoreboard, a team or player's stats, league standings, a game's boxscore/play-by-play, head-to-head history, sportsbook odds, or an endurance-sport route/club.\n---\n\n# Sports & athletics research\n\nPull live scoreboards, standings, rosters, player/team stats, sportsbook\nodds, and endurance-sport routes/clubs across five sports-data sources as\nnormalized JSON from the Crawlora API — no scraping scoreboard widgets or\nstat pages.\n\n## When to use this skill\n\n- \"What's the score / status of <game> right now?\"\n- \"Show me <team>'s roster / season stats / standing.\"\n- \"What's <player>'s stats this season?\"\n- \"Give me the boxscore / play-by-play for <game>.\"\n- \"Head-to-head history between <team A> and <team B>.\"\n- League news, rankings/polls, or betting-odds snapshots (where exposed).\n- \"What are the odds / spread / total for <game>?\" or \"what are the futures\n  odds to win <league>?\" (DraftKings Sportsbook).\n- \"Find running/biking/hiking routes in <region>\" or \"look up this Strava club.\"\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\n1. **ESPN (most sports/leagues)** — `/espn/scoreboard` for today's/a date's\n   games (sport+league params); `/espn/teams` / `/espn/team` for team lists\n   and detail; `/espn/team-roster` for rosters; `/espn/standings`;\n   `/espn/athlete` for a player; `/espn/game-summary` for one game's\n   matchup/odds/boxscore; `/espn/news` and `/espn/rankings` (e.g. AP Top 25)\n   round it out.\n2. **SofaScore (global soccer-first, many sports)** — `/sofascore/search` to\n   resolve a team/player/event id; `/sofascore/live-events` for what's live\n   right now; `/sofascore/event` (+ `/event-statistics`, `/event-lineups`,\n   `/event-incidents`, `/event-odds`, `/event-h2h`) for one match in depth;\n   `/sofascore/standings`, `/sofascore/team`, `/sofascore/team-events`,\n   `/sofascore/team-players`, `/sofascore/player`.\n3. **MLB** — `/mlb/schedule` for games/scores by date; `/mlb/game` (+\n   `/mlb/game-boxscore`, `/mlb/game-play-by-play`) for one game's detail;\n   `/mlb/standings`, `/mlb/teams`, `/mlb/team-roster`, `/mlb/team-stats`;\n   `/mlb/player` + `/mlb/player-stats`; `/mlb/transactions` for\n   signings/trades/IL moves; `/mlb/league-stats` for ranked league leaders.\n4. **Strava** — `/strava/routes` (requires `sport` — one of `hiking`,\n   `road-biking`, `mountain-biking`, `trail-running`, `gravel-biking` —\n   plus `country`+`region` slugs) to browse routes; `/strava/routes/detail`\n   (`path`) for one route; `/strava/clubs/{id}` for a club; `/strava/challenges`\n   for current public challenges.\n5. **DraftKings Sportsbook** — `/draftkings/sportsbook/leagues` to list\n   sports/leagues (get a `league_id`), then `/draftkings/sportsbook/odds`\n   (`league_id`) for every upcoming event's moneyline/spread/total.\n   `/draftkings/sportsbook/live` for live events; `/draftkings/sportsbook/event`\n   (+ `/event-markets` with `subcategory_id`) for one event's full market\n   detail; `/draftkings/sportsbook/futures` (`league_id`+`subcategory_id`)\n   for futures markets. `/draftkings/sportsbook/teams` and `/team` cover\n   team lookups.\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Calling the API\n\n```sh\n# ESPN scoreboard + team:\nscripts/crawlora.sh /espn/scoreboard sport=basketball league=nba | jq '.'\nscripts/crawlora.sh /espn/team-roster sport=basketball league=nba team=lal | jq '.'\n\n# SofaScore live + match detail:\nscripts/crawlora.sh /sofascore/live-events sport=football | jq '.'\nscripts/crawlora.sh /sofascore/event id=<event-id> | jq '.'\n\n# MLB:\nscripts/crawlora.sh /mlb/schedule date=2026-08-10 | jq '.'\nscripts/crawlora.sh /mlb/player-stats id=<mlb-id> group=hitting | jq '.'\n\n# Strava:\nscripts/crawlora.sh /strava/challenges | jq '.'\nscripts/crawlora.sh /strava/routes sport=hiking country=<country-slug> region=<region-slug> | jq '.'\n\n# DraftKings Sportsbook odds:\nscripts/crawlora.sh /draftkings/sportsbook/leagues | jq '.'\nscripts/crawlora.sh /draftkings/sportsbook/odds league_id=<league-id> | jq '.'\n```\n\nUse `scripts/crawlora.sh` for all requests; it keeps the API key out of command-line arguments.\n\n\n## Endpoint reference\n\nSee [`reference/endpoints.md`](reference/endpoints.md) for every ESPN,\nSofaScore, MLB, Strava, and DraftKings Sportsbook endpoint this skill uses.\n\n## Examples\n\n- **Live game tracker:** `/espn/scoreboard` or `/sofascore/live-events`\n  polled on an interval to report score changes as they happen.\n- **Pre-game brief:** `/sofascore/event-h2h` (history) +\n  `/draftkings/sportsbook/odds` or `/sofascore/event-odds` (market\n  expectation) + both teams' `/sofascore/team-events` (recent form).\n- **Season stat leaders:** `/mlb/league-stats` or `/espn/rankings` for\n  top performers, then `/mlb/player-stats` / `/espn/athlete` for the detail.\n- **Roster/transaction watch:** `/mlb/team-roster` + `/mlb/transactions` to\n  track who's been added or dropped this week.\n- **Title-odds tracking:** `/draftkings/sportsbook/futures` for a league's\n  championship/award odds, compared against `/espn/rankings` for the\n  editorial consensus.\n\n## Notes & limits\n\n- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.\n  Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- **Public data only** — public scoreboard/stats pages; odds are informational,\n  not a betting service.\n- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.\n- **ESPN and SofaScore cover many sports/leagues** via `sport`/`league`\n  params — check `reference/endpoints.md` for the accepted values before\n  assuming a league is supported.\n- Live-score endpoints reflect the source's own update cadence — poll rather\n  than assume sub-second freshness.\n- **Strava's `country`/`region` are platform-specific slugs**, not free-text\n  names — the exact slug format isn't in the tool schema; verify a working\n  value at [crawlora.net/docs](https://crawlora.net/docs?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills)\n  or the [playground](https://crawlora.net/playground?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills)\n  if `/strava/routes` 404s — `/strava/challenges` needs no params and is a\n  safe starting point.\n\n## Sportskeeda editorial and sports data\n\nSportskeeda adds news/articles, author and topic coverage, supported football\nand other sports-data surfaces. Inspect the endpoint reference for each route's\nspecific league, section, and identifier requirements; discover options with\n`sportskeeda_football_options` before selecting a football view. Editorial depth\ncharts and news reports are not official roster announcements or live score feeds.\nDo not carry ESPN/SofaScore IDs into Sportskeeda.\n\n```sh\nscripts/crawlora.sh /sportskeeda/football-options\n```\n\nFor FotMob player/football analysis use `fotmob-research`; for Flashscore or\nLiveScore match lookups use `multi-sport-match-research` when installed. The\nbundled helper here retains only the providers in its own endpoint reference.\n\nFile v1.0.19:_meta.json\n\n{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"sports-scores-research\",\n  \"version\": \"1.0.19\",\n  \"publishedAt\": 1791163466587\n}\n\nFile v1.0.19:reference/endpoints.md\n\n# sports-scores-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**176 endpoints across 7 platform group(s).**\n\n## ESPN (9)\n\n### `espn_athlete`\n\n- **HTTP:** `GET /espn/athlete`\n- **What:** ESPN athlete. Returns one athlete's bio/overview (name, position, jersey, physicals, current team) from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.\n- **Params:** `athlete` (string, **required**) — Numeric ESPN athlete (player) id; `league` (string, **required**) — League key (must be valid for the sport); `sport` (string, **required**) — Sport key\n\n### `espn_game_summary`\n\n- **HTTP:** `GET /espn/game-summary`\n- **What:** ESPN game summary. Returns one game's matchup, betting odds, and boxscore stat totals from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport. Get an `event` id from the scoreboard endpoint.\n- **Params:** `event` (string, **required**) — Numeric ESPN event (game) id; `league` (string, **required**) — League key (must be valid for the sport); `sport` (string, **required**) — Sport key\n\n### `espn_news`\n\n- **HTTP:** `GET /espn/news`\n- **What:** ESPN league news. Returns recent news articles (headline, description, link) for a league from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.\n- **Params:** `league` (string, **required**) — League key (must be valid for the sport); `sport` (string, **required**) — Sport key\n\n### `espn_rankings`\n\n- **HTTP:** `GET /espn/rankings`\n- **What:** ESPN poll rankings. Returns poll rankings (e.g. AP Top 25) for a college league from ESPN's credential-free public JSON. Rankings are only published for college leagues: the `sport` enum accepts `football` and `basketball`, and the `league` enum accepts `college-football`, `mens-college-basketball`, and `womens-college-basketball`.\n- **Params:** `league` (string, **required**) — College league key; `sport` (string, **required**) — Sport key\n\n### `espn_scoreboard`\n\n- **HTTP:** `GET /espn/scoreboard`\n- **What:** ESPN scoreboard. Returns games (scores, schedule, status, and odds when available) for a sport and league from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport. The `seasontype` enum accepts `1` (preseason), `2` (regular season), `3` (postseason), and `4` (offseason).\n- **Params:** `dates` (string, optional) — Date or range as YYYYMMDD, YYYYMMDD-YYYYMMDD, or YYYY; defaults to the current scoreboard; `league` (string, **required**) — League key (must be valid for the sport); `seasontype` (integer, optional) — Season type; `sport` (string, **required**) — Sport key; `week` (integer, optional) — Week number (football leagues)\n\n### `espn_standings`\n\n- **HTTP:** `GET /espn/standings`\n- **What:** ESPN standings. Returns league standings grouped by conference/division from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport. The `seasontype` enum accepts `1` (preseason), `2` (regular season), and `3` (postseason).\n- **Params:** `league` (string, **required**) — League key (must be valid for the sport); `season` (integer, optional) — Four-digit season year; defaults to the current season; `seasontype` (integer, optional) — Season type; `sport` (string, **required**) — Sport key\n\n### `espn_team`\n\n- **HTTP:** `GET /espn/team`\n- **What:** ESPN team detail. Returns one team's detail (identity, colors, record, standing summary) from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.\n- **Params:** `league` (string, **required**) — League key (must be valid for the sport); `sport` (string, **required**) — Sport key; `team` (string, **required**) — Team id (numeric) or abbreviation\n\n### `espn_team_roster`\n\n- **HTTP:** `GET /espn/team-roster`\n- **What:** ESPN team roster. Returns a team's roster (players with position, jersey, age, and experience) plus head coach from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.\n- **Params:** `league` (string, **required**) — League key (must be valid for the sport); `sport` (string, **required**) — Sport key; `team` (string, **required**) — Team id (numeric) or abbreviation\n\n### `espn_teams`\n\n- **HTTP:** `GET /espn/teams`\n- **What:** ESPN team list. Returns the full team list for a sport and league from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.\n- **Params:** `league` (string, **required**) — League key (must be valid for the sport); `sport` (string, **required**) — Sport key\n\n## SofaScore (15)\n\n### `sofascore_event`\n\n- **HTTP:** `GET /sofascore/event`\n- **What:** SofaScore event detail. Returns one match's detail (teams, score, status, venue, referee) from SofaScore's credential-free public JSON.\n- **Params:** `id` (string, **required**) — Numeric SofaScore event (match) id\n\n### `sofascore_event_h2h`\n\n- **HTTP:** `GET /sofascore/event-h2h`\n- **What:** SofaScore event head-to-head. Returns the historical head-to-head win/draw record between a match's two teams (and managers, when available) from SofaScore's credential-free public JSON.\n- **Params:** `id` (string, **required**) — Numeric SofaScore event (match) id\n\n### `sofascore_event_incidents`\n\n- **HTTP:** `GET /sofascore/event-incidents`\n- **What:** SofaScore event incidents. Returns one match's goal, card, substitution, and period timeline from SofaScore's credential-free public JSON. An empty `incidents` list is a valid response before kickoff.\n- **Params:** `id` (string, **required**) — Numeric SofaScore event (match) id\n\n### `sofascore_event_lineups`\n\n- **HTTP:** `GET /sofascore/event-lineups`\n- **What:** SofaScore event lineups. Returns one match's starting XI and substitutes per side, with formation, from SofaScore's credential-free public JSON. Returns 404 when SofaScore has no lineups for the match.\n- **Params:** `id` (string, **required**) — Numeric SofaScore event (match) id\n\n### `sofascore_event_odds`\n\n- **HTTP:** `GET /sofascore/event-odds`\n- **What:** SofaScore event odds. Returns one match's betting markets and choices from SofaScore's credential-free public JSON. Returns 404 when SofaScore has no odds for the match.\n- **Params:** `id` (string, **required**) — Numeric SofaScore event (match) id\n\n### `sofascore_event_statistics`\n\n- **HTTP:** `GET /sofascore/event-statistics`\n- **What:** SofaScore event statistics. Returns one match's statistics (possession, shots, passes, and more, grouped and split by period) from SofaScore's credential-free public JSON. Returns 404 when SofaScore has no tracked statistics for the match.\n- **Params:** `id` (string, **required**) — Numeric SofaScore event (match) id\n\n### `sofascore_live_events`\n\n- **HTTP:** `GET /sofascore/live-events`\n- **What:** SofaScore live events. Returns currently live events for a sport from SofaScore's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, and `tennis`. An empty `events` list is a valid response when nothing is live right now.\n- **Params:** `sport` (string, **required**) — Sport key\n\n### `sofascore_player`\n\n- **HTTP:** `GET /sofascore/player`\n- **What:** SofaScore player detail. Returns one player's bio (position, height, market value, current team) from SofaScore's credential-free public JSON.\n- **Params:** `id` (string, **required**) — Numeric SofaScore player id\n\n### `sofascore_round_events`\n\n- **HTTP:** `GET /sofascore/round-events`\n- **What:** SofaScore round fixtures. Returns fixtures for one round of a competition season from SofaScore's credential-free publi\n\nArchive v1.0.18: 5 files, 16333 bytes\n\nFiles: reference/endpoints.md (43902b), scripts/crawlora.sh (7013b), skill-card.md (2151b), SKILL.md (7094b), _meta.json (142b)\n\nArchive v1.0.17: 5 files, 14599 bytes\n\nFiles: reference/endpoints.md (35314b), scripts/crawlora.sh (6663b), skill-card.md (2635b), SKILL.md (7094b), _meta.json (142b)\n\nArchive v1.0.16: 5 files, 15065 bytes\n\nFiles: reference/endpoints.md (35314b), scripts/crawlora.sh (7576b), skill-card.md (2718b), SKILL.md (7094b), _meta.json (142b)\n\nArchive v1.0.15: 5 files, 14662 bytes\n\nFiles: reference/endpoints.md (35314b), scripts/crawlora.sh (5694b), skill-card.md (2385b), SKILL.md (7094b), _meta.json (142b)\n\nArchive v1.0.14: 5 files, 14493 bytes\n\nFiles: reference/endpoints.md (35314b), scripts/crawlora.sh (5437b), skill-card.md (2234b), SKILL.md (7094b), _meta.json (142b)\n\nArchive v1.0.13: 5 files, 14472 bytes\n\nFiles: reference/endpoints.md (35314b), scripts/crawlora.sh (5112b), skill-card.md (2528b), SKILL.md (7137b), _meta.json (142b)\n\nArchive v1.0.12: 5 files, 14366 bytes\n\nFiles: reference/endpoints.md (35314b), scripts/crawlora.sh (4812b), skill-card.md (2590b), SKILL.md (7137b), _meta.json (142b)","readmeExcerpt":"Skill: sports-scores-research Owner: crawlora-org Summary: Pulls sports scores, standings, rosters, player/team stats, public sports news, editorial, wiki/video content, and betting odds through the Crawlora API — ESPN, SofaScore, MLB, Strava, DraftKings Sportsbook, Cricinfo, and Sportskeeda. Use for scores/stats or explicitly requested public sports-media research; Strava routes and clubs can reveal location-sensiti","codeSnippets":[],"executableExamples":[{"language":"sh","snippet":"# ESPN scoreboard + team:\nscripts/crawlora.sh /espn/scoreboard sport=basketball league=nba | jq '.'\nscripts/crawlora.sh /espn/team-roster sport=basketball league=nba team=lal | jq '.'\n\n# SofaScore live + match detail:\nscripts/crawlora.sh /sofascore/live-events sport=football | jq '.'\nscripts/crawlora.sh /sofascore/event id=<event-id> | jq '.'\n\n# MLB:\nscripts/crawlora.sh /mlb/schedule date=2026-08-10 | jq '.'\nscripts/crawlora.sh /mlb/player-stats id=<mlb-id> group=hitting | jq '.'\n\n# Strava:\nscripts/crawlora.sh /strava/challenges | jq '.'\nscripts/crawlora.sh /strava/routes sport=hiking country=<country-slug> region=<region-slug> | jq '.'\n\n# DraftKings Sportsbook odds:\nscripts/crawlora.sh /draftkings/sportsbook/leagues | jq '.'\nscripts/crawlora.sh /draftkings/sportsbook/odds league_id=<league-id> | jq '.'"},{"language":"sh","snippet":"scripts/crawlora.sh /sportskeeda/football-options"},{"language":"sh","snippet":"# ESPN scoreboard + team:\nscripts/crawlora.sh /espn/scoreboard sport=basketball league=nba | jq '.'\nscripts/crawlora.sh /espn/team-roster sport=basketball league=nba team=lal | jq '.'\n\n# SofaScore live + match detail:\nscripts/crawlora.sh /sofascore/live-events sport=football | jq '.'\nscripts/crawlora.sh /sofascore/event id=<event-id> | jq '.'\n\n# MLB:\nscripts/crawlora.sh /mlb/schedule date=2026-08-10 | jq '.'\nscripts/crawlora.sh /mlb/player-stats id=<mlb-id> group=hitting | jq '.'\n\n# Strava:\nscripts/crawlora.sh /strava/challenges | jq '.'\nscripts/crawlora.sh /strava/routes sport=hiking country=<country-slug> region=<region-slug> | jq '.'\n\n# DraftKings Sportsbook odds:\nscripts/crawlora.sh /draftkings/sportsbook/leagues | jq '.'\nscripts/crawlora.sh /draftkings/sportsbook/odds league_id=<league-id> | jq '.'"},{"language":"sh","snippet":"scripts/crawlora.sh /sportskeeda/football-options"},{"language":"sh","snippet":"# ESPN scoreboard + team:\nscripts/crawlora.sh /espn/scoreboard sport=basketball league=nba | jq '.'\nscripts/crawlora.sh /espn/team-roster sport=basketball league=nba team=lal | jq '.'\n\n# SofaScore live + match detail:\nscripts/crawlora.sh /sofascore/live-events sport=football | jq '.'\nscripts/crawlora.sh /sofascore/event id=<event-id> | jq '.'\n\n# MLB:\nscripts/crawlora.sh /mlb/schedule date=2026-08-10 | jq '.'\nscripts/crawlora.sh /mlb/player-stats id=<mlb-id> group=hitting | jq '.'\n\n# Strava:\nscripts/crawlora.sh /strava/challenges | jq '.'\nscripts/crawlora.sh /strava/routes sport=hiking country=<country-slug> region=<region-slug> | jq '.'\n\n# DraftKings Sportsbook odds:\nscripts/crawlora.sh /draftkings/sportsbook/leagues | jq '.'\nscripts/crawlora.sh /draftkings/sportsbook/odds league_id=<league-id> | jq '.'"},{"language":"sh","snippet":"scripts/crawlora.sh /sportskeeda/football-options"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: sports-scores-research\ndescription: Pulls sports scores, standings, rosters, player/team stats, public sports news, editorial, wiki/video content, and betting odds through the Crawlora API — ESPN, SofaScore, MLB, Strava, DraftKings Sportsbook, Cricinfo, and Sportskeeda. Use for scores/stats or explicitly requested public sports-media research; Strava routes and clubs can reveal location-sensitive patterns.\nallowed-tools: Bash(scripts/crawlora.sh:*)\n---\n\n# Sports & athletics research\n\nPull live scoreboards, standings, rosters, player/team stats, sportsbook\nodds, and endurance-sport routes/clubs across five sports-data sources as\nnormalized JSON from the Crawlora API — no scraping scoreboard widgets or\nstat pages.\n\n## Tool scope and data flow\n\nThe optional shell helper is the only command this skill asks to run. It makes\nGET requests only to the documented, allowlisted Crawlora routes. When invoked,\nit reads `CRAWLORA_API_KEY` and sends it as an `x-api-key` header over HTTPS to\n`api.crawlora.net`; it does not send the key to ESPN, SofaScore, Strava, or\nother sports sources. It briefly writes a mode-600 curl config under `TMPDIR`\nand removes it when the command exits. It does not inspect other environment\nvariables, enumerate files, install software, or run with elevated privileges.\nQueries, public event/player/team identifiers, and requested routes are sent to\nCrawlora; avoid confidential research targets.\n\nIn addition to score/stat endpoints, this skill includes public sports editorial,\narticles, wikis, quizzes, and video surfaces from Cricinfo and Sportskeeda.\nUse those sources only when relevant to the user's request. Strava route and\nclub lookups can expose location-sensitive training patterns; do not use them\nto infer someone's home, routine, or sensitive location history.\n\n## When to use this skill\n\n- \"What's the score / status of <game> right now?\"\n- \"Show me <team>'s roster / season stats / standing.\"\n- \"What's <player>'s stats this season?\"\n- \"Give me the boxscore / play-by-play for <game>.\"\n- \"Head-to-head history between <team A> and <team B>.\"\n- For a detailed post-match football performance brief, use football-match-performance-analysis when installed; this skill remains the general scores/stats entry point.\n- League news, rankings/polls, or betting-odds snapshots (where exposed).\n- \"What are the odds / spread / total for <game>?\" or \"what are the futures\n  odds to win <league>?\" (DraftKings Sportsbook).\n- \"Find running/biking/hiking routes in <region>\" or \"look up this Strava club.\"\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\n1. **ESPN (most spor"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"sports-scores-research\",\n  \"version\": \"1.0.21\",\n  \"publishedAt\": 1791253784680\n}"},{"path":"reference/endpoints.md","content":"# sports-scores-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**176 endpoints across 7 platform group(s).**\n\n## ESPN (9)\n\n### `espn_athlete`\n\n- **HTTP:** `GET /espn/athlete`\n- **What:** ESPN athlete. Returns one athlete's bio/overview (name, position, jersey, physicals, current team) from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.\n- **Params:** `athlete` (string, **required**) — Numeric ESPN athlete (player) id; `league` (string, **required**) — League key (must be valid for the sport); `sport` (string, **required**) — Sport key\n\n### `espn_game_summary`\n\n- **HTTP:** `GET /espn/game-summary`\n- **What:** ESPN game summary. Returns one game's matchup, betting odds, and boxscore stat totals from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport. Get an `event` id from the scoreboard endpoint.\n- **Params:** `event` (string, **required**) — Numeric ESPN event (game) id; `league` (string, **required**) — League key (must be valid for the sport); `sport` (string, **required**) — Sport key\n\n### `espn_news`\n\n- **HTTP:** `GET /espn/news`\n- **What:** ESPN league news. Returns recent news articles (headline, description, link) for a league from ESPN's credential-free public JSON. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.\n- **Params:** `league` (string, **required**) — League key (must be valid for the sport); `sport` (string, **required**) — Sport key\n\n### `espn_rankings`\n\n- **HTTP:** `GET /espn/rankings`\n- **What:** ESPN poll rankings. Returns poll rankings (e.g. AP Top 25) for a college league from ESPN's credential-free public JSON. Rankings are only published for college leagues: the `sport` enum ac"},{"path":"skill-card.md","content":"## Description:\n\nRetrieves sports scores, standings, rosters, player and team statistics, public sports media, and betting odds through the Crawlora API, with optional public Strava route and club lookups.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[crawlora-org](https://clawhub.ai/user/crawlora-org)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nSports researchers, developers, and other users can look up public game scores, statistics, rosters, sports news, and odds, or research public routes and clubs when relevant to a request.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Crawlora receives the API key and sports research queries.\n\nMitigation: Use the skill only when comfortable sharing these with Crawlora; avoid confidential research targets and keep the key out of source files and URLs.\n\nRisk: Public Strava routes or clubs may reveal location-sensitive patterns.\n\nMitigation: Limit lookups to the user's relevant request and do not infer a person's home, routine, or sensitive location history.\n\n## Reference(s):\n\n- [ClawHub skill release](https://clawhub.ai/crawlora-org/skills/sports-scores-research)\n- [Crawlora API documentation](https://crawlora.net/docs)\n- [Bundled endpoint reference](artifact/reference/endpoints.md)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, JSON, Shell commands]\n\n**Output Format:** [Plain text or Markdown summaries; optional JSON API responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Live information depends on upstream update cadence; API requests require a Crawlora key.]\n\n## Skill Version(s):\n\n1.0.21 (source: server-resolved ClawHub release)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1603,"uniquenessScore":40,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T03:08:50.189Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T03:08:50.189Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T05:45:05.169Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}