Highlights

GET https://soccer.highlightly.net/highlights Football API
GET https://sports.highlightly.net/football/highlights All Sports API

Highlights are the core of the Football API. They cover everything from real time clips of a single goal through to full game recaps, press conferences and post match interviews.

Refresh interval
Once a minute
Plan
Might have certain restrictions on Basic/Free
Pagination
limit and offset, up to 40 per page

Verified and unverified clips

Clips are aggregated from many different platforms. Depending on the source and what verification it has been through, each one falls into one of two types.

type What it means
VERIFIED

The clip comes from a reputable source that has been inspected. In most cases the author owns the copyright to the video. Verified highlights are uploaded between 1 and 48 hours after a match finishes. The hosting platform can still impose geo restrictions or block embedding, so check geo restrictions before showing one.

UNVERIFIED

The clip may not have been through verification, or is user uploaded. These cover a wide spectrum, including last minute scores, memorable plays and recaps. They are more real time and can appear while the match is still being played. How long they survive depends on the hosting platform.

Reading a highlight

Every highlight carries a title describing what the video shows. Certain highlights also carry a description.

The source field records where the clip was aggregated from, for example youtube, twitter, reddit or espn. For some sources a channel is present as well, which is the uploading channel's title. Together these let you narrow down which videos you want to show. Where embedUrl is present you can embed the video directly in your own site or app.

Categories

The category field describes what kind of content the clip contains. Categorisation happens automatically when a highlight is aggregated. A clip that cannot be placed confidently is labelled other rather than being forced into a category it does not belong to, so filtering on category in your own code will not return unrelated content.

Category Contains
match-highlights Edited recap of a match, including full game highlights and summaries in any language.
goal-clip A single goal.
pre-match-content Previews, predictions and build up ahead of a match.
post-match-content Reactions, interviews and analysis afterwards.
press-conference Official press conferences and media availability.
behind-the-scenes Training sessions, tunnel cams and inside access content.
live-coverage Raw live streams such as warm ups and watch alongs, as opposed to edited recaps.
discussion-analysis Studio shows, punditry and tactical analysis.
other Clips that do not fit any other category.

An example of highlights rendered in a client application

Plan coverage

On the Free plan, highlights are returned from these leagues only.

Country League
Romania Liga I
Sweden Superettan
Poland I Liga
Slovenia 1. SNL
Kazahstan Premier League
Lithuania A Lyga
Latvia Virsliga
Bulgaria First League
South Africa Premier Soccer League
Singapore Premier League
Uruguay Primera División - Apertura
Chile Primera División
Peru Primera División
Finland Veikkausliiga
Denmark Superliga
England Championship
USA USL Championship
USA USL League One
USA Major League Soccer
Netherland Eredivisie
Turkey Süper Lig
Turkey 1. Lig
Turkey 2. Lig
Turkey Super Cup
Turkey Cup

A Pro plan or higher removes the restriction and returns highlights from every league this API covers.

Querying

At least one primary query parameter must be specified before you can retrieve data. timezone, limit and offset are considered secondary and do not count on their own.

Combine timezone with date to get highlights relevant to your own location rather than UTC.

limit sets how many highlights come back. When the number of matching highlights exceeds it, request the next page by increasing offset. The pagination object in every response tells you the totalCount to page through.

Parameters

Parameter Type Description
countryCodeoptional string Country code specified by the ISO 3166 standard.e.g. TR
countryNameoptional string No description in the spec.e.g. Turkey
leagueNameoptional string No description in the spec.e.g. Süper Lig
leagueIdoptional number No description in the spec.e.g. 173537
dateoptional string Date that follows the YYYY-MM-DD format.e.g. 2023-08-11
timezoneoptional stringdefault Etc/UTC Valid timezone identifier.e.g. Europe/London
seasonoptional number No description in the spec.e.g. 2023
matchIdoptional number No description in the spec.e.g. 914490490
homeTeamIdoptional number No description in the spec.e.g. 850082
awayTeamIdoptional number No description in the spec.e.g. 856039
homeTeamNameoptional string No description in the spec.e.g. Trabzonspor
awayTeamNameoptional string No description in the spec.e.g. Antalyaspor
limitoptional numberdefault 40 No description in the spec.e.g. 40
offsetoptional numberdefault 0 No description in the spec.e.g. 0

Request

curl --request GET \
  --url 'https://soccer.highlightly.net/highlights?countryCode=TR&countryName=Turkey' \
  --header 'x-rapidapi-key: YOUR_API_KEY'
const params = new URLSearchParams({
  countryCode: 'TR',
  countryName: 'Turkey'
})
const response = await fetch(`https://soccer.highlightly.net/highlights?${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://soccer.highlightly.net/highlights',
    params={
        'countryCode': 'TR',
        'countryName': 'Turkey',
    },
    headers={
        'x-rapidapi-key': os.environ['HIGHLIGHTLY_API_KEY'],
    },
    timeout=10,
)

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

Response

dataHighlightResponse[]required39 fields
idnumberrequired
typestringrequired
imgUrlstringPreview picture of the highlight.
titlestringrequired
descriptionstring
urlstringrequiredUrl location of the video highlight.
embedUrlstringUrl of embeddable video highlight.
matchMatchResponserequired28 fields
idnumberrequired
roundstringrequired
datestringrequired
countryCountryResponserequired3 fields
codestringrequiredCountry code specified by the ISO 3166 standard.
namestringrequired
logostringrequired
awayTeamTeamResponserequired4 fields
idnumberrequired
logostring
namestringrequired
typestringclubnational
homeTeamTeamResponserequired4 fields
idnumberrequired
logostring
namestringrequired
typestringclubnational
leagueMatchLeagueResponserequired4 fields
idnumberrequired
seasonnumberrequired
namestringrequired
logostring
stateMatchStateResponserequired5 fields
descriptionstringrequiredState of the match.To be announcedNot startedFirst halfHalf timeSecond halfExtra timeBreak timePenaltiesSuspendedInterruptedFinishedFinished after penaltiesFinished after extra timePostponedCancelledAbandonedAwardedIn progressUnknown
clocknumberCurrent minute of the match.
scoreMatchScoreResponserequired2 fields
currentstringHome - Away score up to penalties.
penaltiesstringHome - Away team score after the penalties phase.
channelstringChannel title of a given highlight.
sourcestringAggregation source from social media and other equivalent platforms.
categorystringAssumed highlight category
paginationPaginationResponserequired3 fields
totalCountnumberrequiredAvailable number of items, relevant to the provided query.
offsetnumberrequired
limitnumberrequired
planPlanResponserequired2 fields
tierstringrequiredYour current API subscription tier.
messagestringrequiredExplanation message regarding your current tier.

Example response

200 application/json
{
  "data": [
    {
      "id": 1,
      "type": "VERIFIED",
      "imgUrl": "https://example.com/images/preview/1.png",
      "title": "Ligue 1: Lyon vs Reims",
      "description": "Game recap of the match.",
      "url": "https://example.com/highlight/29g9urg92387",
      "embedUrl": "https://example.com/embed/213123safas132e",
      "match": {
        "id": 489389,
        "round": "Regular Season - 32",
        "date": "2023-05-20T15:30:00.000Z",
        "country": {
          "code": "FR",
          "name": "France",
          "logo": "https://example.com/logos/country/FR.png"
        },
        "awayTeam": {
          "id": 553,
          "logo": "https://example.com/logos/team/553.png",
          "name": "Montpellier",
          "type": "club"
        },
        "homeTeam": {
          "id": 553,
          "logo": "https://example.com/logos/team/553.png",
          "name": "Montpellier",
          "type": "club"
        },
        "league": {
          "id": 133,
          "season": 2023,
          "name": "Ligue 1",
          "logo": "https://example.com/logos/league/133.png"
        },
        "state": {
          "description": "Second half",
          "clock": 67,
          "score": {
            "current": "3 - 1",
            "penalties": "6 - 4"
          }
        }
      },
      "channel": "Ligue 1 Uber Eats",
      "source": "youtube",
      "category": "match-highlights"
    }
  ],
  "pagination": {
    "totalCount": 490,
    "offset": 20,
    "limit": 100
  },
  "plan": {
    "tier": "BASIC",
    "message": "Some results might be hidden with FREE tier. Check your API coverage for more information: https://rapidapi.com/highlightly-api-highlightly-api-default/api/sport-highlights-api/details"
  }
}

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.