Overview

The Season Group Rank API returns the current competitive progression of an entire season. It combines calculated league-stage tables with knockout-stage matches, winners, aggregate scores, and qualified teams in one response. League stages return groups and ordered rankings. Each ranking includes the team’s position, qualification status, points, match record, goals scored, goals conceded, and goal difference. The API calculates the order and the qualified value using the rule selected in the request, so clients should display these results directly instead of reimplementing tournament tiebreakers. Knockout stages return their configured number of legs, matches, scores, penalty-shootout results, match winners, aggregate tie scores, and the team that qualified from each tie. The response can therefore drive standings pages, tournament brackets, broadcast graphics, and live qualification views from the same endpoint. The hierarchy is polymorphic:
  • A LEAGUE_STAGE contains groups, and each group contains rankings.
  • A KNOCKOUT_STAGE contains matches and qualifiers.

Typical Use Cases

  • Display live group tables during a competition.
  • Show which teams are currently qualified from each group.
  • Build a full season progression view covering groups and knockout rounds.
  • Populate knockout brackets with scores, penalties, winners, and qualifiers.
  • Feed broadcast graphics with calculated standings and advancement status.
  • Synchronize competition progression without reproducing ranking rules client-side.

Parameters

module
string
required
The API module. This value is fixed and must always be api.
api
string
required
The endpoint name. This value is fixed and must always be SeasonGroupRank.
version
string
required
The API version. Use V2.
season_id
integer
required
The unique KoraStats season identifier. In this example, 1356 identifies AFCON Women — Morocco 2025.
group_id
integer
An optional group identifier retained for request compatibility. The current season-wide response includes all stages and all league groups, even when this parameter is supplied. Filter the returned groups array by its id if only one group is required by the client.
rule
string
required
The ranking and qualification ruleset to apply. Use wafcon_2026 for the WAFCON 2026 rules. The applied value is echoed in object.rule, this is supplied per season based on the competition calculation.
lang
string
required
The response language code. Use en for English.
response
string
required
The response format. Use json.
key
string
required
Your KoraStats API key. Keep this value secure and do not expose it in public or client-side code.

Endpoint

GET https://premium.korastats.pro/api.php
https://premium.korastats.pro/api.php?module=api&api=SeasonGroupRank&version=V2&season_id=1356&group_id=3102&lang=en&response=json&rule=wafcon_2026&key=YOUR_API_KEY

Code Examples

curl --get "https://premium.korastats.pro/api.php" \
  --data-urlencode "module=api" \
  --data-urlencode "api=SeasonGroupRank" \
  --data-urlencode "version=V2" \
  --data-urlencode "season_id=1356" \
  --data-urlencode "group_id=3102" \
  --data-urlencode "lang=en" \
  --data-urlencode "response=json" \
  --data-urlencode "rule=wafcon_2026" \
  --data-urlencode "key=YOUR_API_KEY"

Response Example

{
  "result": true,
  "title": "Success",
  "message": "5 stages retrieved.",
  "object": {
    "_type": "SEASON_GROUP_RANK",
    "id": 1356,
    "tournament": "AFCON Women",
    "season": "Morocco 2025",
    "rule": "wafcon_2026",
    "stages": [
      {
        "id": 2243,
        "stage": "Group Stage",
        "nature": "LEAGUE",
        "_type": "LEAGUE_STAGE",
        "groups": [
          {
            "_type": "GROUP_RANK",
            "id": 3102,
            "group": "Group A",
            "rankings": [
              {
                "team": {
                  "id": 2145,
                  "name": "Morocco"
                },
                "rank": 1,
                "qualified": true,
                "points": 7,
                "played": 3,
                "won": 2,
                "draw": 1,
                "lost": 0,
                "goalscored": 7,
                "goalconceded": 4,
                "goaldifference": 3
              },
              {
                "team": {
                  "id": 2122,
                  "name": "Zambia"
                },
                "rank": 2,
                "qualified": true,
                "points": 7,
                "played": 3,
                "won": 2,
                "draw": 1,
                "lost": 0,
                "goalscored": 6,
                "goalconceded": 4,
                "goaldifference": 2
              },
              {
                "team": {
                  "id": 23247,
                  "name": "Senegal"
                },
                "rank": 3,
                "qualified": false,
                "points": 3,
                "played": 3,
                "won": 1,
                "draw": 0,
                "lost": 2,
                "goalscored": 6,
                "goalconceded": 4,
                "goaldifference": 2
              },
              {
                "team": {
                  "id": 23258,
                  "name": "DR Congo"
                },
                "rank": 4,
                "qualified": false,
                "points": 0,
                "played": 3,
                "won": 0,
                "draw": 0,
                "lost": 3,
                "goalscored": 2,
                "goalconceded": 9,
                "goaldifference": -7
              }
            ]
          },
          {
            "_type": "GROUP_RANK",
            "id": 3103,
            "group": "Group B",
            "rankings": [
              {
                "team": {
                  "id": 2118,
                  "name": "Nigeria"
                },
                "rank": 1,
                "qualified": true,
                "points": 7,
                "played": 3,
                "won": 2,
                "draw": 1,
                "lost": 0,
                "goalscored": 4,
                "goalconceded": 0,
                "goaldifference": 4
              },
              {
                "team": {
                  "id": 23251,
                  "name": "Algeria"
                },
                "rank": 2,
                "qualified": true,
                "points": 5,
                "played": 3,
                "won": 1,
                "draw": 2,
                "lost": 0,
                "goalscored": 1,
                "goalconceded": 0,
                "goaldifference": 1
              },
              {
                "team": {
                  "id": 23255,
                  "name": "Botswana"
                },
                "rank": 3,
                "qualified": false,
                "points": 3,
                "played": 3,
                "won": 1,
                "draw": 0,
                "lost": 2,
                "goalscored": 2,
                "goalconceded": 3,
                "goaldifference": -1
              },
              {
                "team": {
                  "id": 23250,
                  "name": "Tunisia"
                },
                "rank": 4,
                "qualified": false,
                "points": 1,
                "played": 3,
                "won": 0,
                "draw": 1,
                "lost": 2,
                "goalscored": 1,
                "goalconceded": 5,
                "goaldifference": -4
              }
            ]
          },
          {
            "_type": "GROUP_RANK",
            "id": 3104,
            "group": "Group C",
            "rankings": [
              {
                "team": {
                  "id": 2140,
                  "name": "South Africa"
                },
                "rank": 1,
                "qualified": true,
                "points": 7,
                "played": 3,
                "won": 2,
                "draw": 1,
                "lost": 0,
                "goalscored": 7,
                "goalconceded": 1,
                "goaldifference": 6
              },
              {
                "team": {
                  "id": 23252,
                  "name": "Ghana"
                },
                "rank": 2,
                "qualified": true,
                "points": 4,
                "played": 3,
                "won": 1,
                "draw": 1,
                "lost": 1,
                "goalscored": 5,
                "goalconceded": 4,
                "goaldifference": 1
              },
              {
                "team": {
                  "id": 23254,
                  "name": "Mali"
                },
                "rank": 3,
                "qualified": false,
                "points": 4,
                "played": 3,
                "won": 1,
                "draw": 1,
                "lost": 1,
                "goalscored": 2,
                "goalconceded": 5,
                "goaldifference": -3
              },
              {
                "team": {
                  "id": 23253,
                  "name": "Tanzania"
                },
                "rank": 4,
                "qualified": false,
                "points": 1,
                "played": 3,
                "won": 0,
                "draw": 1,
                "lost": 2,
                "goalscored": 2,
                "goalconceded": 6,
                "goaldifference": -4
              }
            ]
          }
        ]
      },
      {
        "id": 2313,
        "stage": "Quarter-finals",
        "nature": "KNOCKOUT",
        "_type": "KNOCKOUT_STAGE",
        "legs": 1,
        "matches": [
          {
            "id": 78196,
            "round": 1,
            "datetime": "2025-07-18 19:00:00",
            "homeTeam": {
              "id": 2118,
              "name": "Nigeria"
            },
            "awayTeam": {
              "id": 2122,
              "name": "Zambia"
            },
            "score": {
              "home": 5,
              "away": 0
            },
            "penaltyShootout": null,
            "winner": {
              "id": 2118,
              "name": "Nigeria"
            }
          },
          {
            "id": 78197,
            "round": 1,
            "datetime": "2025-07-18 22:00:00",
            "homeTeam": {
              "id": 2145,
              "name": "Morocco"
            },
            "awayTeam": {
              "id": 23254,
              "name": "Mali"
            },
            "score": {
              "home": 3,
              "away": 1
            },
            "penaltyShootout": null,
            "winner": {
              "id": 2145,
              "name": "Morocco"
            }
          },
          {
            "id": 78198,
            "round": 1,
            "datetime": "2025-07-19 19:00:00",
            "homeTeam": {
              "id": 23251,
              "name": "Algeria"
            },
            "awayTeam": {
              "id": 23252,
              "name": "Ghana"
            },
            "score": {
              "home": 0,
              "away": 0
            },
            "penaltyShootout": {
              "home": 2,
              "away": 4
            },
            "winner": {
              "id": 23252,
              "name": "Ghana"
            }
          },
          {
            "id": 78199,
            "round": 1,
            "datetime": "2025-07-19 22:00:00",
            "homeTeam": {
              "id": 2140,
              "name": "South Africa"
            },
            "awayTeam": {
              "id": 23247,
              "name": "Senegal"
            },
            "score": {
              "home": 0,
              "away": 0
            },
            "penaltyShootout": {
              "home": 4,
              "away": 1
            },
            "winner": {
              "id": 2140,
              "name": "South Africa"
            }
          }
        ],
        "qualifiers": [
          {
            "aggregate": [
              {
                "team": {
                  "id": 2118,
                  "name": "Nigeria"
                },
                "score": 5
              },
              {
                "team": {
                  "id": 2122,
                  "name": "Zambia"
                },
                "score": 0
              }
            ],
            "qualifiedTeam": {
              "id": 2118,
              "name": "Nigeria"
            }
          },
          {
            "aggregate": [
              {
                "team": {
                  "id": 2145,
                  "name": "Morocco"
                },
                "score": 3
              },
              {
                "team": {
                  "id": 23254,
                  "name": "Mali"
                },
                "score": 1
              }
            ],
            "qualifiedTeam": {
              "id": 2145,
              "name": "Morocco"
            }
          },
          {
            "aggregate": [
              {
                "team": {
                  "id": 23251,
                  "name": "Algeria"
                },
                "score": 0
              },
              {
                "team": {
                  "id": 23252,
                  "name": "Ghana"
                },
                "score": 0
              }
            ],
            "qualifiedTeam": {
              "id": 23252,
              "name": "Ghana"
            }
          },
          {
            "aggregate": [
              {
                "team": {
                  "id": 2140,
                  "name": "South Africa"
                },
                "score": 0
              },
              {
                "team": {
                  "id": 23247,
                  "name": "Senegal"
                },
                "score": 0
              }
            ],
            "qualifiedTeam": {
              "id": 2140,
              "name": "South Africa"
            }
          }
        ]
      },
      {
        "id": 2333,
        "stage": "Semi Final",
        "nature": "KNOCKOUT",
        "_type": "KNOCKOUT_STAGE",
        "legs": 1,
        "matches": [
          {
            "id": 79278,
            "round": 1,
            "datetime": "2025-07-22 19:00:00",
            "homeTeam": {
              "id": 2145,
              "name": "Morocco"
            },
            "awayTeam": {
              "id": 23252,
              "name": "Ghana"
            },
            "score": {
              "home": 1,
              "away": 1
            },
            "penaltyShootout": {
              "home": 4,
              "away": 2
            },
            "winner": {
              "id": 2145,
              "name": "Morocco"
            }
          },
          {
            "id": 79280,
            "round": 1,
            "datetime": "2025-07-22 19:00:00",
            "homeTeam": {
              "id": 2118,
              "name": "Nigeria"
            },
            "awayTeam": {
              "id": 2140,
              "name": "South Africa"
            },
            "score": {
              "home": 2,
              "away": 1
            },
            "penaltyShootout": null,
            "winner": {
              "id": 2118,
              "name": "Nigeria"
            }
          }
        ],
        "qualifiers": [
          {
            "aggregate": [
              {
                "team": {
                  "id": 2145,
                  "name": "Morocco"
                },
                "score": 1
              },
              {
                "team": {
                  "id": 23252,
                  "name": "Ghana"
                },
                "score": 1
              }
            ],
            "qualifiedTeam": {
              "id": 2145,
              "name": "Morocco"
            }
          },
          {
            "aggregate": [
              {
                "team": {
                  "id": 2118,
                  "name": "Nigeria"
                },
                "score": 2
              },
              {
                "team": {
                  "id": 2140,
                  "name": "South Africa"
                },
                "score": 1
              }
            ],
            "qualifiedTeam": {
              "id": 2118,
              "name": "Nigeria"
            }
          }
        ]
      },
      {
        "id": 2348,
        "stage": "3rd Place",
        "nature": "KNOCKOUT",
        "_type": "KNOCKOUT_STAGE",
        "legs": 1,
        "matches": [
          {
            "id": 79355,
            "round": 1,
            "datetime": "2025-07-25 22:00:00",
            "homeTeam": {
              "id": 23252,
              "name": "Ghana"
            },
            "awayTeam": {
              "id": 2140,
              "name": "South Africa"
            },
            "score": {
              "home": 1,
              "away": 1
            },
            "penaltyShootout": {
              "home": 4,
              "away": 3
            },
            "winner": {
              "id": 23252,
              "name": "Ghana"
            }
          }
        ],
        "qualifiers": [
          {
            "aggregate": [
              {
                "team": {
                  "id": 23252,
                  "name": "Ghana"
                },
                "score": 1
              },
              {
                "team": {
                  "id": 2140,
                  "name": "South Africa"
                },
                "score": 1
              }
            ],
            "qualifiedTeam": {
              "id": 23252,
              "name": "Ghana"
            }
          }
        ]
      },
      {
        "id": 2349,
        "stage": "Final",
        "nature": "KNOCKOUT",
        "_type": "KNOCKOUT_STAGE",
        "legs": 1,
        "matches": [
          {
            "id": 79356,
            "round": 1,
            "datetime": "2025-07-26 23:00:00",
            "homeTeam": {
              "id": 2145,
              "name": "Morocco"
            },
            "awayTeam": {
              "id": 2118,
              "name": "Nigeria"
            },
            "score": {
              "home": 2,
              "away": 3
            },
            "penaltyShootout": null,
            "winner": {
              "id": 2118,
              "name": "Nigeria"
            }
          }
        ],
        "qualifiers": [
          {
            "aggregate": [
              {
                "team": {
                  "id": 2145,
                  "name": "Morocco"
                },
                "score": 2
              },
              {
                "team": {
                  "id": 2118,
                  "name": "Nigeria"
                },
                "score": 3
              }
            ],
            "qualifiedTeam": {
              "id": 2118,
              "name": "Nigeria"
            }
          }
        ]
      }
    ]
  }
}
///

Response Fields

Response Envelope

FieldTypeDescription
resultbooleanIndicates whether the request completed successfully.
titlestringShort response status title.
messagestringHuman-readable summary, including the number of stages returned.
objectobjectSeason ranking and progression payload.

Season Ranking Object

FieldTypeDescription
object._typestringObject discriminator. The value is SEASON_GROUP_RANK.
object.idintegerUnique season identifier.
object.tournamentstringTournament name.
object.seasonstringSeason name.
object.rulestringRanking and qualification ruleset applied by the API.
object.stagesarray(object)Ordered list of league and knockout stages.

Common Stage Fields

FieldTypeDescription
object.stages[].idintegerUnique stage identifier.
object.stages[].stagestringStage display name.
object.stages[].naturestringCompetition behavior. Values in this response are LEAGUE and KNOCKOUT.
object.stages[]._typestringStage discriminator. Use this field to select the correct schema: LEAGUE_STAGE or KNOCKOUT_STAGE.

League Stage and Group Fields

These fields are present when _type is LEAGUE_STAGE.
FieldTypeDescription
object.stages[].groupsarray(object)Groups belonging to the league stage.
groups[]._typestringObject discriminator. The value is GROUP_RANK.
groups[].idintegerUnique group identifier.
groups[].groupstringGroup display name.
groups[].rankingsarray(object)Ordered ranking rows. The array order and each row’s rank are calculated using the requested ruleset.

Ranking Row

FieldTypeDescription
rankings[].teamobjectRanked team summary.
rankings[].team.idintegerUnique team identifier.
rankings[].team.namestringTeam name.
rankings[].rankintegerCurrent position within the group, starting from 1.
rankings[].qualifiedbooleanWhether the team currently qualifies under the selected ruleset.
rankings[].pointsintegerCurrent points total.
rankings[].playedintegerMatches played.
rankings[].wonintegerMatches won.
rankings[].drawintegerMatches drawn.
rankings[].lostintegerMatches lost.
rankings[].goalscoredintegerGoals scored.
rankings[].goalconcededintegerGoals conceded.
rankings[].goaldifferenceintegerGoals scored minus goals conceded.

Knockout Stage Fields

These fields are present when _type is KNOCKOUT_STAGE.
FieldTypeDescription
object.stages[].legsintegerNumber of legs configured for each knockout tie in the stage.
object.stages[].matchesarray(object)Matches belonging to the knockout stage.
object.stages[].qualifiersarray(object)Tie-level aggregate results and qualified teams.

Knockout Match

FieldTypeDescription
matches[].idintegerUnique match identifier.
matches[].roundintegerLeg or round number within the tie.
matches[].datetimestring | nullScheduled date and time in YYYY-MM-DD HH:mm:ss format.
matches[].homeTeamobjectHome-team summary.
matches[].awayTeamobjectAway-team summary.
matches[].homeTeam.idintegerUnique home-team identifier.
matches[].homeTeam.namestringHome-team name.
matches[].awayTeam.idintegerUnique away-team identifier.
matches[].awayTeam.namestringAway-team name.
matches[].scoreobjectCurrent or final match score, excluding the penalty shootout.
matches[].score.homeinteger | nullHome-team score.
matches[].score.awayinteger | nullAway-team score.
matches[].penaltyShootoutobject | nullPenalty-shootout score. Returns null when no shootout took place or no result is available.
matches[].penaltyShootout.homeintegerHome-team penalties scored.
matches[].penaltyShootout.awayintegerAway-team penalties scored.
matches[].winnerobject | nullMatch winner after accounting for a penalty shootout when applicable. May be null before a winner is known.
matches[].winner.idintegerUnique winning-team identifier.
matches[].winner.namestringWinning-team name.

Qualifier and Aggregate Fields

Each qualifier object represents one knockout tie.
FieldTypeDescription
qualifiers[].aggregatearray(object)Aggregate score entries for the two teams in the tie. Penalty-shootout goals are not added to these scores.
qualifiers[].aggregate[].teamobjectTeam represented by the aggregate entry.
qualifiers[].aggregate[].team.idintegerUnique team identifier.
qualifiers[].aggregate[].team.namestringTeam name.
qualifiers[].aggregate[].scoreinteger | nullTeam’s aggregate score across the configured legs.
qualifiers[].qualifiedTeamobject | nullTeam that advances from the tie after aggregate and penalty-shootout resolution. May be null while the tie is unresolved.
qualifiers[].qualifiedTeam.idintegerUnique qualified-team identifier.
qualifiers[].qualifiedTeam.namestringQualified-team name.
Treat object.stages[]._type as the schema discriminator. A league stage and a knockout stage intentionally expose different child arrays.
The API already applies the requested tournament rules to rank and qualified. Consumers should not independently reorder the returned rankings unless they are intentionally implementing a different ruleset.
Live or future matches may contain null scores, winners, penalty shootouts, aggregate scores, or qualified teams until enough match data exists to resolve them.

Error Responses

Unsuccessful requests use the standard KoraStats error envelope.
{
  "result": false,
  "title": "Bad Request",
  "message": "A required parameter is missing or invalid."
}