Standings

GET https://handball.highlightly.net/standings Handball API
GET https://sports.highlightly.net/handball/standings All Sports API

Retrieve standings for a specific league.

Refresh interval
Up to an hour after a match for the associated league and season is finished
Pagination
Not paginated

Standings settle up to an hour after the last relevant match finishes, so a table read immediately at full time may not yet reflect that result. Pair this with matches if you need the score before the table catches up.

Groups

Standings come back as groups, each with a name such as Regular Season and its own ordered table.

groups is a list, and each group carries its own standings with a position for every team, so render each group as its own table.

Alongside groups, the response carries the league the table belongs to, including its season, so a rendered table needs nothing read back from leagues.

What each row carries

A row leads with position and the team, then the record behind it in gamesPlayed, wins, draws and loses.

League standings rendered in a client application

Parameters

Parameter Type Description
leagueIdrequired number No description in the spec.e.g. 171835
seasonrequired number No description in the spec.e.g. 2024

Request

curl --request GET \
  --url 'https://handball.highlightly.net/standings?leagueId=171835&season=2024' \
  --header 'x-rapidapi-key: YOUR_API_KEY'
const params = new URLSearchParams({
  leagueId: '171835',
  season: '2024'
})
const response = await fetch(`https://handball.highlightly.net/standings?${params}`, {
  headers: {
    'x-rapidapi-key': process.env.HIGHLIGHTLY_API_KEY
  }
})

if (!response.ok) {
  throw new Error(`Highlightly responded ${response.status}`)
}

const data = await response.json()
import os
import requests

response = requests.get(
    'https://handball.highlightly.net/standings',
    params={
        'leagueId': '171835',
        'season': '2024',
    },
    headers={
        'x-rapidapi-key': os.environ['HIGHLIGHTLY_API_KEY'],
    },
    timeout=10,
)

response.raise_for_status()
data = response.json()

Response

groupsHandballStandingsGroupsResponse[]required13 fields
namestringrequired
standingsHandballStandings[]required11 fields
teamHandballStandingsTeamrequired3 fields
idnumberrequired
logostring
namestringrequired
positionnumberrequired
winsnumberrequired
drawsnumberrequired
gamesPlayednumberrequired
losesnumberrequired
scoredGoalsnumberrequired
receivedGoalsnumberrequired
leagueHandballStandingsLeagueResponserequired4 fields
idnumberrequired
logostring
namestringrequired
seasonnumberrequired

Example response

200 application/json
{
  "groups": [
    {
      "name": "Regular Season",
      "standings": [
        {
          "team": {
            "id": 2266146,
            "logo": "https://example.com/logos/team/2266146.png",
            "name": "France"
          },
          "position": 1,
          "wins": 3,
          "draws": 1,
          "gamesPlayed": 4,
          "loses": 0,
          "scoredGoals": 111,
          "receivedGoals": 109
        }
      ]
    }
  ],
  "league": {
    "id": 171835,
    "logo": "https://example.com/logos/league/171835.png",
    "name": "Golden League - France",
    "season": 2024
  }
}

Values are the examples declared in the OpenAPI spec, not a captured live response.

Errors

Status Description
400 Bad request descriptive error.
500 Internal server error.