Skip to main content
GET
/
standings
League Standings
curl --request GET \
  --url https://v1.basketball.sportsapipro.com/standings \
  --header 'x-api-key: <api-key>'
{
  "standings": [
    {
      "competitor": {
        "id": 123,
        "name": "<string>",
        "score": 123,
        "imageUrl": "<string>"
      },
      "position": 123,
      "wins": 123,
      "losses": 123,
      "winPercentage": 123,
      "gamesBack": 123,
      "streak": "<string>",
      "conference": "<string>",
      "division": "<string>"
    }
  ]
}

Endpoint

GET https://v1.football.sportsapipro.com/standings

Description

Returns the current standings/league table for a competition including team positions, statistics, recent form, next matches, and qualification zones. TTL: 300 seconds (5 minutes)
Common Use Case: The standings endpoint is the recommended way to get all team IDs (competitor IDs) for a competition. Use these IDs with /games/fixtures and /games/results to fetch team-specific match data.

Parameters

ParameterTypeRequiredDescription
competitionsnumberYes*Competition identifier (e.g., 7 for English Premier League)
competitornumberYes*Competitor/team identifier (alternative to competitions)
livebooleanNoFilter for live standings updates
isPreviewbooleanNoInclude preview data
stageNumnumberNoStage number to retrieve standings for
seasonNumnumberNoSeason number to retrieve standings for
typenumberNoFilter type: 1=Overall, 2=Home, 3=Away
withSeasonsFilterbooleanNoInclude seasons filter data
lastUpdateIdnumberNoFor incremental updates (-1 for latest)
timezoneNamestringNoTimezone for date/time values (auto-resolved, or specify e.g., America/New_York)
All startTime fields in match data use ISO 8601 format with a dynamic timezone offset based on the resolved or specified timezone.
*Either competitions or competitor is required.

Common Competition IDs

CompetitionID
English Premier League7
La Liga13
Bundesliga8
Serie A12
Ligue 135
UEFA Champions League572
UEFA Europa League573
UEFA Conference League7685

Request Examples

Get EPL Standings (Premier League)

curl -X GET "https://v1.football.sportsapipro.com/standings?competitions=7" \
  -H "x-api-key: YOUR_API_KEY"

Get Standings with Season/Stage Filter

curl -X GET "https://v1.football.sportsapipro.com/standings?competitions=7685&stageNum=5&seasonNum=6" \
  -H "x-api-key: YOUR_API_KEY"

Response

{
  "lastUpdateId": 5494811901,
  "requestedUpdateId": -1,
  "ttl": 300,
  "standings": [
    {
      "competitionId": 7685,
      "seasonNum": 6,
      "stageNum": 5,
      "isCurrentStage": true,
      "displayName": "UEFA Conference League",
      "currentGroupCategory": 0,
      "headers": [
        {
          "key": "gamePlayed",
          "name": "P",
          "isMajor": true
        },
        {
          "key": "goals",
          "name": "F:A",
          "isMajor": true
        },
        {
          "key": "ratio",
          "name": "+/-",
          "isMajor": true
        },
        {
          "key": "points",
          "name": "PTS",
          "isMajor": true
        },
        {
          "key": "gamesWon",
          "name": "W",
          "isMajor": false
        },
        {
          "key": "gamesEven",
          "name": "D",
          "isMajor": false
        },
        {
          "key": "gamesLost",
          "name": "L",
          "isMajor": false
        },
        {
          "key": "recentForm",
          "name": "Form",
          "isMajor": false
        },
        {
          "key": "nextMatch",
          "name": "Next",
          "isMajor": false
        }
      ],
      "rows": [
        {
          "competitor": {
            "id": 479,
            "countryId": 5,
            "sportId": 1,
            "name": "Strasbourg",
            "symbolicName": "STR",
            "nameForURL": "strasbourg",
            "type": 1,
            "popularityRank": 1572,
            "imageVersion": 1,
            "color": "#0034A5",
            "awayColor": "#FFFFFF",
            "mainCompetitionId": 35,
            "hasSquad": true,
            "hasTransfers": false
          },
          "gamePlayed": 5,
          "gamesWon": 4,
          "gamesLost": 0,
          "gamesEven": 1,
          "for": 8,
          "against": 4,
          "ratio": 4.0,
          "points": 13.0,
          "strike": 3,
          "gamesOT": 0,
          "gamesWonOnOT": 0,
          "gamesWonOnPen": 0,
          "gamesLossOnOT": 0,
          "gamesLossOnPen": 0,
          "pct": ".800",
          "position": 1,
          "trend": 0,
          "recentForm": [1, 1, 1, 2, 1],
          "detailedRecentForm": [
            {
              "id": 4538934,
              "sportId": 1,
              "competitionId": 7685,
              "startTime": "2025-12-11T20:00:00+00:00",
              "statusGroup": 4,
              "statusText": "Ended",
              "homeCompetitor": {
                "id": 761,
                "name": "Aberdeen",
                "score": 0.0,
                "isWinner": false
              },
              "awayCompetitor": {
                "id": 479,
                "name": "Strasbourg",
                "score": 1.0,
                "isWinner": true
              },
              "outcome": 1,
              "winner": 2,
              "scores": [0.0, 1.0]
            }
          ],
          "nextMatch": {
            "id": 4538911,
            "sportId": 1,
            "competitionId": 7685,
            "startTime": "2025-12-18T20:00:00+00:00",
            "statusGroup": 2,
            "statusText": "Scheduled",
            "homeCompetitor": {
              "id": 479,
              "name": "Strasbourg",
              "symbolicName": "STR"
            },
            "awayCompetitor": {
              "id": 2089,
              "name": "Breidablik"
            },
            "showCountdown": true
          },
          "destinationNum": 1,
          "destinationGuaranteed": true,
          "hasPointsDeduction": false,
          "ppg": 0.0,
          "oppg": 0.0
        }
      ],
      "destinations": [
        {
          "num": 1,
          "name": "Round of 16",
          "guaranteedText": "Round of 16",
          "color": "#2BE0D4",
          "type": 0
        },
        {
          "num": 2,
          "name": "Playoffs",
          "guaranteedText": "Playoffs",
          "color": "#AB2CF5",
          "type": 7
        }
      ],
      "filterTypes": [
        {
          "type": 1,
          "name": "Overall"
        },
        {
          "type": 2,
          "name": "Home"
        },
        {
          "type": 3,
          "name": "Away"
        }
      ]
    }
  ],
  "sports": [
    {
      "id": 1,
      "name": "Football",
      "nameForURL": "football",
      "drawSupport": true,
      "imageVersion": 1
    }
  ],
  "countries": [
    {
      "id": 19,
      "name": "Europe",
      "nameForURL": "europe",
      "sportTypes": [1, 2, 4, 5, 6, 7, 8, 9],
      "imageVersion": 1,
      "isInternational": true
    }
  ],
  "competitions": [
    {
      "id": 7685,
      "countryId": 19,
      "sportId": 1,
      "name": "UEFA Conference League",
      "shortName": "Conference League",
      "hasStandings": true,
      "hasBrackets": true,
      "nameForURL": "uefa-conference-league",
      "popularityRank": 7655344,
      "imageVersion": 6,
      "currentStageType": 1,
      "color": "#1D1D1D",
      "currentPhaseNum": 2,
      "currentPhaseName": "Main",
      "seasons": [
        {
          "num": 6,
          "name": "2025/2026",
          "hasStandings": true,
          "stages": [
            {
              "num": 5,
              "name": "League Phase",
              "hasStandings": true,
              "stageType": 1
            }
          ],
          "phases": [
            {
              "num": 2,
              "name": "Main",
              "isCurrentPhase": true
            }
          ]
        }
      ],
      "currentSeasonNum": 6,
      "currentStageNum": 5,
      "isInternational": true
    }
  ],
  "bookmakers": [
    {
      "id": 14,
      "name": "Bet365",
      "link": "https://extra.bet365.com/features/en/sports-live-streaming?affiliate=365_275195",
      "nameForURL": "bet365",
      "color": "#007B5B",
      "imageVersion": 3
    }
  ]
}

Standing Row Fields

FieldTypeDescription
competitorobjectTeam information with id, name, colors, etc.
positionnumberCurrent league position
gamePlayednumberTotal matches played
gamesWonnumberMatches won
gamesEvennumberMatches drawn
gamesLostnumberMatches lost
fornumberGoals scored
againstnumberGoals conceded
rationumberGoal difference
pointsnumberTotal points
strikenumberCurrent winning/losing streak
pctstringWin percentage
trendnumberPosition trend (0=same, positive=up, negative=down)
recentFormarrayLast 5 results (1=win, 2=draw, 0=loss)
detailedRecentFormarrayDetailed recent match objects
nextMatchobjectNext scheduled match details
destinationNumnumberQualification zone number
destinationGuaranteedbooleanWhether qualification is guaranteed
hasPointsDeductionbooleanWhether team has points deduction
ppgnumberPoints per game
oppgnumberOpponent points per game

Headers Object

FieldTypeDescription
keystringColumn identifier (gamePlayed, goals, ratio, points, etc.)
namestringDisplay name (P, F:A, +/-, PTS, W, D, L, Form, Next)
isMajorbooleanWhether column is a major/primary column

Destinations (Qualification Zones)

FieldTypeDescription
numnumberZone identifier
namestringZone name (e.g., “Round of 16”, “Playoffs”)
guaranteedTextstringText shown when qualification is guaranteed
colorstringZone color for visual display
typenumberZone type identifier

Filter Types

The filterTypes array indicates available standings views:
TypeNameDescription
1OverallCombined home and away standings
2HomeHome matches only
3AwayAway matches only

Competition Seasons & Stages

The competitions array includes detailed season and stage information:
FieldTypeDescription
seasonsarrayAvailable seasons with stages and phases
seasons[].numnumberSeason number
seasons[].namestringSeason display name (e.g., “2025/2026”)
seasons[].stagesarrayCompetition stages within season
seasons[].phasesarrayCompetition phases (Qualifications, Main, etc.)
currentSeasonNumnumberCurrent active season
currentStageNumnumberCurrent active stage

Recent Form Match Object

FieldTypeDescription
idnumberMatch identifier
startTimestringMatch start time (ISO 8601)
statusGroupnumberStatus category (4=ended)
statusTextstringStatus display text
homeCompetitorobjectHome team with score and winner status
awayCompetitorobjectAway team with score and winner status
outcomenumberMatch outcome for the team
winnernumberWinner (1=home, 2=away, 0=draw)
scoresarrayFinal scores [home, away]

Notes

  • The type parameter filters standings by home/away performance
  • Use stageNum and seasonNum to get historical standings
  • The competitor parameter can be used instead of competitions to get standings for a specific team
  • Destinations indicate qualification zones with color coding for visual display
  • The detailedRecentForm includes full match details for recent games

Use Case: Get EPL Team IDs for Fixtures & Results

The standings endpoint is the recommended starting point for getting all team IDs in a competition. These IDs can then be used with /games/fixtures and /games/results to fetch team-specific match data.

Complete Workflow Example

const BASE_URL = "https://v1.football.sportsapipro.com";
const API_KEY = "YOUR_API_KEY";
const EPL_COMPETITION_ID = 7;

// Step 1: Get all EPL teams from standings
async function getEPLTeams() {
  const response = await fetch(
    `${BASE_URL}/standings?competitions=${EPL_COMPETITION_ID}`,
    { headers: { "x-api-key": API_KEY } }
  );
  const data = await response.json();
  
  return data.standings[0].rows.map(row => ({
    id: row.competitor.id,
    name: row.competitor.name,
    nameForURL: row.competitor.nameForURL,
    position: row.position,
    points: row.points,
    played: row.gamePlayed
  }));
}

// Step 2: Get fixtures for a specific team
async function getTeamFixtures(competitorId) {
  const response = await fetch(
    `${BASE_URL}/games/fixtures?competitors=${competitorId}&showOdds=true`,
    { headers: { "x-api-key": API_KEY } }
  );
  return response.json();
}

// Step 3: Get results for a specific team
async function getTeamResults(competitorId) {
  const response = await fetch(
    `${BASE_URL}/games/results?competitors=${competitorId}&showOdds=true`,
    { headers: { "x-api-key": API_KEY } }
  );
  return response.json();
}

// Example: Get all EPL teams and then fetch fixtures for the top team
async function main() {
  const teams = await getEPLTeams();
  console.log("EPL Teams:", teams);
  
  // Get fixtures for the team in 1st place
  const topTeam = teams.find(t => t.position === 1);
  console.log(`\nFetching fixtures for ${topTeam.name}...`);
  
  const fixtures = await getTeamFixtures(topTeam.id);
  console.log(`Found ${fixtures.games?.length || 0} upcoming fixtures`);
  
  // Get results for the same team
  const results = await getTeamResults(topTeam.id);
  console.log(`Found ${results.games?.length || 0} past results`);
}

main();

Sample EPL Team IDs (2025/2026 Season)

Team IDs are stable identifiers. The example below shows common EPL teams - use the standings endpoint for the authoritative current list.
TeamIDnameForURL
Arsenal48arsenal
Chelsea104chelsea
Liverpool25liverpool
Manchester City27manchester-city
Manchester United26manchester-united
Tottenham14tottenham

Building Match URLs

Use the nameForURL field from competitor objects to construct SEO-friendly URLs:
// Build a match page URL
function buildMatchURL(game) {
  const home = game.homeCompetitor.nameForURL;
  const away = game.awayCompetitor.nameForURL;
  const gameId = game.id;
  return `/football/match/${home}-vs-${away}/${gameId}`;
}

// Example output: /football/match/arsenal-vs-chelsea/4538934

Authorizations

x-api-key
string
header
required

Your SportsAPI Pro API key

Query Parameters

competitions
integer
required

Competition ID (e.g., 132 for NBA)

Example:

132

season
string

Season identifier (defaults to current)

Response

200 - application/json

Standings retrieved successfully

standings
object[]