Sportsort NFL GraphQL API Docs

Cached NFL stats for fantasy and prop research. One endpoint, flexible queries.

Getting Started

This API provides cached NFL data (players, games, stats) for fantasy analytics and prop research. Data updates daily and is not real-time.

Endpoint
https://api.sportsort.co/api/nfl
Auth
Bearer token required
API Token (stored locally)

Used by the Run buttons below. Stored in your browser only.

Prop Evaluation

Evaluate over/under hit rates with multiple split windows in a single query.

Paste your API token above to run this example.

Evaluate prop (multi-split)

query EvaluateProp($playerName: String!) {
  evaluateProp(
    input: {
      playerName: $playerName
      sport: NFL
      stat: RUSHING_YARDS
      threshold: 70.5
      direction: OVER
      splits: [{ games: 5 }, { games: 10 }, { games: 15 }]
    }
  ) {
    playerName
    stat
    threshold
    direction
    splits {
      label
      hitRate
      sampleSize
    }
  }
}

Example Queries

QB prop research

player(name: "Jalen Hurts") {
  averages(season: 2025) {
    passingYards
    passingTDs
    rushingYards
    rushingTDs
  }
}

WR reliability

player(name: "Amon-Ra St. Brown") {
  averages(season: 2025) {
    targets
    receptions
    receivingYards
    consistency(scoring: HALF_PPR, minPoints: 12)
  }
}

Head-to-head comparison

a: player(name: "Tyreek Hill") {
  averages(season: 2025) { receivingYards }
}

b: player(name: "CeeDee Lamb") {
  averages(season: 2025) { receivingYards }
}

Games by week

query WeekGames($season: Int!, $week: Int!) {
  games(season: $season, week: $week) {
    id
    date
    status
    homeTeam { abbreviation }
    awayTeam { abbreviation }
    scores { home away }
  }
}

Game leaders

query GameLeaders($gameId: ID!, $season: Int!) {
  gameLeaders(gameId: $gameId, season: $season) {
    passingYards { player { name } value }
    rushingYards { player { name } value }
    receivingYards { player { name } value }
    touchdowns { player { name } value }
  }
}

Authentication

Send your API key in the Authorization header using Bearer format.

Authorization: Bearer YOUR_API_KEY

Missing or invalid keys return an authentication error.

Apollo Sandbox

Use Apollo Sandbox to explore the schema and run queries.

https://api.sportsort.co/api/nfl

Set headers:

{
  "Authorization": "Bearer YOUR_API_KEY"
}

Core Queries

These are the main entry points for data.

  • player(name: String!)
  • players(season, filters, team, position)
  • games(season, week, team, status)
  • teamSchedule(team, season)
  • gameLeaders(gameId, season, seasonType, topN)

Player shape

player(name: "Jalen Hurts") {
  id
  name
  position
  team { name abbreviation }
  stats(season: 2025) { gamesPlayed }
  averages(season: 2025) { passingYards rushingYards fantasyPoints(scoring: HALF_PPR) }
}

Player Filters

Filter players by usage, production, and fantasy output.

query TopUsage($season: Int!) {
  players(
    season: $season
    filters: {
      avgPassAttemptsGte: 32
      avgPassingYardsGte: 240
      avgFantasyPointsGte: 18
      avgFantasyPointsScoring: HALF_PPR
    }
  ) {
    name
    position
    team { abbreviation }
    averages(season: $season) {
      passAttempts
      passingYards
      fantasyPoints(scoring: HALF_PPR)
    }
  }
}

For week-range analysis, use weekRange with from and to.

Fantasy Analytics

Use built-in fantasy scoring modes and derived analytics.

Fantasy Points
averages(season: 2025) {
  fantasyPoints(scoring: FULL_PPR)
}
Consistency
averages(season: 2025) {
  consistency(scoring: HALF_PPR, minPoints: 12)
}
Boom/Bust
averages(season: 2025) {
  boomBust(scoring: HALF_PPR, boomThreshold: 20, bustThreshold: 6) {
    boomRate
    bustRate
  }
}
Week Range
averages(season: 2025) {
  consistency(
    scoring: HALF_PPR
    minPoints: 12
    weekRange: { from: 10, to: 18 }
  )
}

Schema Overview

Here are the core entry points and types you will use most.

Top-level queries

type Query {
  player(name: String!): Player
  players(season: Int, filters: PlayerFilterInput, team: String, position: Position): [Player!]!
  games(season: Int, week: Int, team: String, status: String): [Game!]!
  teamSchedule(team: String!, season: Int): [Game!]!
  gameLeaders(gameId: ID!, season: Int!, seasonType: SeasonType = REGULAR, topN: Int = 3): GameLeaders
}

Key types

type Player {
  id: ID!
  name: String!
  team: Team!
  position: Position!
  stats(season: Int!, seasonType: SeasonType = REGULAR): PlayerStats
  averages(season: Int!): PlayerAverages!
}

Player filters

input PlayerFilterInput {
  avgReceptionsGte: Float
  avgTargetsGte: Float
  avgReceivingYardsGte: Float
  avgRushAttemptsGte: Float
  avgRushingYardsGte: Float
  avgPassAttemptsGte: Float
  avgPassingYardsGte: Float
  avgPassingTDsGte: Float
  avgTotalYardsGte: Float
  avgFantasyPointsGte: Float
  avgFantasyPointsScoring: FantasyScoring
  weekRange: WeekRangeInput
}

Full schema: schema.graphql

Errors

Common error causes:

  • Missing Authorization header.
  • Invalid API key.
  • Missing required arguments like season on players.

FAQ

Is this real-time? No. Data is cached and updated daily.

Does it include betting odds? No. This API focuses on stats and fantasy analytics.

Do you support other sports? Not on this endpoint. This is NFL-only.

Can I use Sheets or Python? Yes. Any client that can POST to the endpoint works.