---
title: "Historical performance trends (Pro)"
method: GET
path: "/analytics/trends"
tags: ["Intelligence"]
---

# Historical performance trends (Pro)

`GET /analytics/trends`

## Request

- Base URL: `https://api.playcallerapp.com`
- URL: `https://api.playcallerapp.com/analytics/trends`
- Auth: API key in header `X-PlayCaller-Key`

Game-by-game performance logs for NFL (2024 full season, 4,624 records) and MLB players. Each row represents one game: full stat line plus calculated fantasy points under PPR, half-PPR, or standard scoring.

Use this endpoint to calculate targets-per-route, air yards share, snap consistency, and multi-week usage trends — the signals that separate week-winning waiver adds from noise.

**Tier access:** Pro Insights, Syndicate Alpha

## Query parameters

- `sport` 'nfl' | 'mlb' | 'all'
- `player_name` string
- `team` string
- `position` string
- `season` integer
- `week` integer
- `limit` integer

## Response `200`

Players grouped with their recent game and full game log in the requested window

- object
  - `success` boolean
  - `endpoint` string
  - `sport` string
  - `seasons` integer[]
  - `total_records` integer: Total game rows considered before grouping by player
  - `trends` HistoricalTrend[]
    - `player_name` string
    - `team` string
    - `position` string
    - `sport` string
    - `games_in_sample` integer
    - `avg_fantasy_points` number
    - `recent_game` HistoricalGameRecord
      - `id` integer
      - `season` integer
      - `week` integer, nullable: NFL/NBA only — null for MLB (daily games, no week concept)
      - `game_date` string, date-time, nullable: Real date for MLB (daily_player_stats.stat_date); always null for NFL, which has no per-game date column
      - `sport_key` string
      - `player_name` string
      - `team` string
      - `position` string
      - `opponent` string, nullable
      - `fantasy_points` string: Numeric value returned as a string
      - `passing_yards` integer, nullable
      - `passing_tds` integer, nullable
      - `rushing_yards` integer, nullable
      - `rushing_tds` integer, nullable
      - `receiving_yards` integer, nullable
      - `receiving_tds` integer, nullable
      - `receptions` integer, nullable
      - `snap_pct` integer, nullable
      - `target_share` number, nullable
      - `air_yards` number, nullable
      - `batting_h` integer, nullable: MLB only
      - `batting_r` integer, nullable
      - `batting_hr` integer, nullable
      - `batting_rbi` integer, nullable
      - `batting_sb` integer, nullable
      - `batting_bb` integer, nullable
      - `batting_ab` integer, nullable
      - `pitching_ip` number, nullable
      - `pitching_w` integer, nullable
      - `pitching_k` integer, nullable
      - `pitching_sv` integer, nullable
      - `pitching_hld` integer, nullable
      - `pitching_er` integer, nullable
    - `all_games` HistoricalGameRecord[]
      - `id` integer
      - `season` integer
      - `week` integer, nullable: NFL/NBA only — null for MLB (daily games, no week concept)
      - `game_date` string, date-time, nullable: Real date for MLB (daily_player_stats.stat_date); always null for NFL, which has no per-game date column
      - `sport_key` string
      - `player_name` string
      - `team` string
      - `position` string
      - `opponent` string, nullable
      - `fantasy_points` string: Numeric value returned as a string
      - `passing_yards` integer, nullable
      - `passing_tds` integer, nullable
      - `rushing_yards` integer, nullable
      - `rushing_tds` integer, nullable
      - `receiving_yards` integer, nullable
      - `receiving_tds` integer, nullable
      - `receptions` integer, nullable
      - `snap_pct` integer, nullable
      - `target_share` number, nullable
      - `air_yards` number, nullable
      - `batting_h` integer, nullable: MLB only
      - `batting_r` integer, nullable
      - `batting_hr` integer, nullable
      - `batting_rbi` integer, nullable
      - `batting_sb` integer, nullable
      - `batting_bb` integer, nullable
      - `batting_ab` integer, nullable
      - `pitching_ip` number, nullable
      - `pitching_w` integer, nullable
      - `pitching_k` integer, nullable
      - `pitching_sv` integer, nullable
      - `pitching_hld` integer, nullable
      - `pitching_er` integer, nullable
  - `meta` ResponseMeta
    - `sport` string
    - `league` string: Present on multi-sport (ESPN-backed) endpoints; mirrors sport unless a sport has sub-leagues (e.g. soccer: epl/mls).
    - `tier` string
    - `calls_remaining_this_month` integer
    - `documentation_url` string, uri

## Other responses

- `401`: Missing or invalid API key
- `403`: Pro tier required for this endpoint
- `429`: Rate limit or monthly quota exceeded
- `500`: Internal server error

---

[API](https://skmtc.dev/playcallerapp/apis/playcaller-data-api.md) · [All operations](https://skmtc.dev/playcallerapp/apis/playcaller-data-api/llms.txt) · [OpenAPI document](https://skmtc.dev/playcallerapp/apis/playcaller-data-api/revisions/100c0a3ffbfe?raw)
