Endpoint Reference
All endpoints use the base URL https://api.pickcrunch.com
Team Statistics
/v1/stats/:sport/:stat_typeReturns team statistics for the given sport and stat type. Response shape varies by stat_type.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
sport* | path | - | One of: nfl, nba, mlb, nhl, ncaaf, ncaab |
stat_type* | path | - | One of: ats, totals, trends |
time_filter | query | season | ATS and totals only. Options: season, last10, last5, home, away |
season | query | - | Season year (e.g. 2024). Defaults to the most recent season. |
sub | query | hot-cold | Trends only. Sub-tab: hot-cold, extended, or splits |
scope | query | all | Trends only. Options: all, home, away, favorite, underdog |
ATS Response
Against the spread records, cover rates, and split performance.
Response
json
{
"success": true,
"data": {
"teams": [
{
"team_name": "Kansas City Chiefs",
"team_shortcode": "KC",
"ats_record": { "wins": 10, "losses": 3, "pushes": 1 },
"ats_pct": 0.769,
"favorite_record": { "wins": 8, "losses": 2, "pushes": 0 },
"underdog_record": { "wins": 2, "losses": 1, "pushes": 1 },
"home_ats_record": { "wins": 5, "losses": 2, "pushes": 0 },
"away_ats_record": { "wins": 5, "losses": 1, "pushes": 1 },
"avg_cover_margin": 2.5
}
],
"quick_stats": {
"best_ats_team": { "team_name": "...", "ats_pct": 0.769 },
"worst_ats_team": { "team_name": "...", "ats_pct": 0.231 }
}
}
}Totals Response
Over/under records, scoring averages, and totals performance.
Response
json
{
"success": true,
"data": {
"teams": [
{
"team_name": "Kansas City Chiefs",
"team_shortcode": "KC",
"ou_record": { "overs": 6, "unders": 7, "pushes": 1 },
"over_pct": 0.462,
"avg_total": 46.5,
"avg_score": 47.2,
"home_ou_record": { "overs": 3, "unders": 4, "pushes": 0 },
"away_ou_record": { "overs": 3, "unders": 3, "pushes": 1 }
}
],
"quick_stats": {
"most_overs": { "team_name": "...", "over_pct": 0.692 },
"most_unders": { "team_name": "...", "over_pct": 0.231 }
}
}
}Trends Response (hot-cold)
Recent performance streaks and short-window records. Response shape varies by sub-tab.
Response
json
{
"success": true,
"data": {
"teams": [
{
"team_name": "Kansas City Chiefs",
"team_shortcode": "KC",
"last_3_ats": { "wins": 2, "losses": 1, "pushes": 0 },
"last_3_ats_pct": 0.667,
"last_3_ou": { "overs": 1, "unders": 2, "pushes": 0 },
"last_3_ou_pct": 0.333,
"last_5_ats": { "wins": 4, "losses": 1, "pushes": 0 },
"last_5_ats_pct": 0.8,
"last_5_ou": { "overs": 2, "unders": 3, "pushes": 0 },
"last_5_ou_pct": 0.4,
"ats_streak": { "type": "W", "count": 2 },
"ou_streak": { "type": "Under", "count": 1 }
}
],
"quick_stats": {}
}
}Trends Response (extended)
Last 10 game records (ATS, over/under, and straight-up), monthly ATS breakdown, and best/worst performing months.
Response
json
{
"success": true,
"data": {
"teams": [
{
"team_name": "Kansas City Chiefs",
"team_shortcode": "KC",
"last_10_ats": { "wins": 7, "losses": 2, "pushes": 1 },
"last_10_ats_pct": 0.778,
"last_10_ou": { "overs": 4, "unders": 5, "pushes": 1 },
"last_10_ou_pct": 0.444,
"last_10_su": { "wins": 8, "losses": 2 },
"monthly_ats": {
"month": "Jan 2025",
"wins": 3,
"losses": 1,
"pushes": 0,
"pct": 0.75
},
"best_month": {
"month": "Nov 2024",
"wins": 4,
"losses": 0,
"pushes": 0,
"pct": 1.0
},
"worst_month": {
"month": "Oct 2024",
"wins": 1,
"losses": 3,
"pushes": 0,
"pct": 0.25
}
}
],
"quick_stats": {}
}
}Trends Response (splits)
Season half splits, last 5 home/away and favorite/underdog ATS records, and scoring trends comparing recent performance to season average.
Response
json
{
"success": true,
"data": {
"teams": [
{
"team_name": "Kansas City Chiefs",
"team_shortcode": "KC",
"season_split": {
"first_half": { "wins": 5, "losses": 3, "pushes": 1 },
"second_half": { "wins": 5, "losses": 0, "pushes": 0 }
},
"home_trend_l5": { "wins": 4, "losses": 1, "pushes": 0 },
"away_trend_l5": { "wins": 3, "losses": 2, "pushes": 0 },
"fav_trend_l5": { "wins": 4, "losses": 1, "pushes": 0 },
"dog_trend_l5": { "wins": 1, "losses": 1, "pushes": 0 },
"scoring_trend": {
"last_5_ppg": 28.4,
"season_ppg": 24.1,
"diff": 4.3
}
}
],
"quick_stats": {}
}
}Seasons
/v1/stats/seasons/:sportReturns available seasons for a sport, sorted most recent first. Use this to populate season selectors or determine the latest season.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
sport* | path | - | One of: nfl, nba, mlb, nhl, ncaaf, ncaab |
Response
json
{
"success": true,
"data": {
"seasons": [
{
"value": "2025",
"label": "2025-26",
"startDate": "2025-09-01",
"endDate": "2026-02-09"
},
{
"value": "2024",
"label": "2024-25",
"startDate": "2024-09-01",
"endDate": "2025-02-10"
}
]
}
}Health
/healthReturns service status. Useful for uptime monitoring.
Response
json
{
"status": "ok"
}Error Responses
All errors return a consistent shape with success: false and an error message.
400Invalid query parameter (e.g. bad time_filter or scope)
404Invalid sport or stat_type in the URL path
429Rate limit exceeded (30 requests per minute). Includes X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, and Retry-After headers.
500Internal server error
json
{
"success": false,
"error": "Invalid sport"
}