GET Latest Updated Livescores
Returns you all livescores that have received updates within 10 seconds.
https://api.sportmonks.com/v3/football/livescores/latest{
    "data": {
        "id": 19146701,
        "sport_id": 1,
        "league_id": 501,
        "season_id": 23690,
        "stage_id": 77471570,
        "group_id": null,
        "aggregate_id": null,
        "round_id": 340573,
        "state_id": 5,
        "venue_id": 8909,
        "name": "Celtic vs Kilmarnock",
        "starting_at": "2024-08-04 15:30:00",
        "result_info": "Celtic won after full-time.",
        "leg": "1/1",
        "details": null,
        "length": 90,
        "placeholder": false,
        "has_odds": true,
        "has_premium_odds": true,
        "starting_at_timestamp": 1722785400
    },id
Refers the unique id of the fixture
integer
sport_id
Refers to the sport the fixture is played at
integer
league_id
Refers to the league the fixture is played in
integer
season_id
Refers to the seasons the fixture is played in
integer
stage_id
Refers to the stage the fixture is played in
integer
group_id
Refers to the group the fixture is played in
integer / null
aggregate_id
Refers to the aggregate the fixture is played at
integer / null
state_id
Refers to the state the fixture is played at
integer
round_id
Refers to the round the fixture is played at
integer / null
state_id
Refers to the state the fixture is played at
integer
venue_id
Refers to the venue the fixture is played at
integer / null
name
Represents the name of the participants
string / null
starting_at
Datetime object representing the start time
date / null
result_info
Represents the final result info
string / null
leg
Represents the leg of the fixture
string
details
Represents details about the fixture
string / null
length
Length of the fixture (minutes)
integer / null
api_token
YES
Another option is to provide the API token in the header.
Your unique API token. Ex. ?api_token=YOUR_TOKEN
include
NO
Enrich the API response with more data by using includes. Ex. &include=participants;events
filters
NO
Filter the API response on multiple related entities. There are static filters and dynamic filters. Please find the possibilities in the Static and Dynamic Filter tab.
locale
NO
Translate name fields of the API Response in your selected language. Find more information and which languages are available on our translations page.
Static filters are always the same and filter in one specific way without any custom options. Each static filter is listed below and has a description of how it filters. For more information, please look at our Filters page.
ParticipantSearch
Fixture
Filter on the matches of specific participants.
&include=participants&filters=participantSearch:Celtic
TodayDate
Fixture
Filter all fixtures to find only the fixtures of today.
&filters=todayDate
venues
Fixture
Find all fixtures that are played in a specific venue.
&include=venue&filters=venues:venueIDs
&include=venue&filters=venues:10,12
IsDeleted
Fixture
Filter on deleted fixtures only. This filter helps to keep your database in sync.
&filters=IsDeleted
markets
Odds
Filter the odds on a selection of markets separated by a comma.
&include=odds&filters=markets:marketIDs
&include=odds&filters=markets:12,14
bookmakers
Odds
Filter the odds on a selection of bookmakers separated by a comma. (e.g: 2,14).
&include=odds&filters=bookmakers:bookmakerIDs
&include=odds&filters=bookmakers:2,14
WinningOdds
Odds
Filter all winning odds.
&include=odds&filters=WinningOdds
The dynamic filters are based on entities and includes. Each dynamic filter uses an entity to filter on and one entity to apply the filter on. Below are examples with explanations of how filters are set up. For more information, please look at our Filters page.
types
Statistics, Events, Lineup, and way more. Check this endpoint for all possibilities.
Filter the Types on a selection of Fixture statistics separated by a comma. Filter on the specific events you want to show.
&include=statistics&filters=statisticTypes:TypeIDs
&include=statistics&filters=statisticTypes:42,49
&include=events&filters=eventTypes:14
states
Fixtures Check this endpoint for all possibilities.
Filter the states of fixtures separated by a comma.
&include=state&filters=fixtureStates:StateIDs
&include=state&filters=fixtureStates:1
leagues
Fixtures, Seasons, Standings, and way more. Check this endpoint for all possibilities.
Filter the fixtures based on leagues and their rounds.
&filters=fixtureLeagues:leagueIDs
&filters=fixtureLeagues:501,271
groups
Fixtures, Standing, and more. Check this endpoint for all possibilities.
Filter the fixtures based on groups. Get their fixtures and standings.
&include=group&filters=fixtureGroups:groupIDs
&include=group&filters=fixtureGroups:246691
countries
Coaches, Leagues, Players, Teams, and way more. Check this endpoint for all possibilities.
Filter the coaches, leagues, players and more based on countries.
&include=coaches&filters=coachCountries:CountryIDs
&include=coaches&filters=coachCountries:1161
seasons
Statistics (players, team, coaches, referees), Standings, and way more. Check this endpoint for all possibilities.
Filter statistics, standings and topscorers based on seasons.
&include=season.statistics&filters=seasonStatisticTypes:TypeIDs
&include=season.statistics&filters=seasonStatisticTypes:52
Definition of "Latest Updated" 
The Latest Updated endpoint returns all fixtures whose livescore data has changed within the last 10 seconds. Specifically, it tracks changes to these eight fields: state_id, venue_id, name, starting_at, starting_at_timestamp, result_info, leg, and length. The update window is fixed at 10 seconds and cannot be altered.
Changes to each core field mean the following:
State_id – the match phase progressed (for example, from 1 to 2 at kick-off or from 2 to 3 at half-time)
Venue_id – the assigned venue was updated (for example, moved from stadium A to stadium B)
Name – the fixture name text was modified (for example, team abbreviations or formatting changed)
Starting_at – the kick-off time string was rescheduled (for example, “2024-08-04 15:30:00” to “2024-08-04 16:00:00”)
Starting_at_timestamp – the UNIX timestamp for kick-off was rescheduled (for example, 1722785400 to 1722787200)
Result_info – the score summary text was updated (for example, “0-0” to “1-0”)
Leg – the leg designation changed (for example, “1/2” to “2/2”)
Length – the fixture duration changed (for example, 90 to 120 when extra time is added)
Note: Only these eight fields are monitored. Changes in other data (e.g. events, lineups, odds, statistics) do not count toward triggering this endpoint. The 10-second window is fixed and non-configurable.
Update behaviour & edge cases
On each request, the system checks the previous 10 seconds to see which fixtures had one or more of those eight fields changed.
If no fixtures experienced changes during that interval, the response is
200 OKwith"data": [].Because of the short window, updates usually arrive in small batches.
If multiple changes occur to the same fixture within the 10-second span, you may only see the final post-change state, not every intermediate step.
Pay attention to clock skew (between your system and the API’s time) and network jitter, as they may cause missing updates or duplicate detections.
Polling strategy & best practices
Recommended polling interval: 5–8 seconds, as long as rate limits permit.
If you detect many consecutive empty responses, consider backing off (e.g. increasing the interval) to reduce unnecessary calls.
Always dedupe via your cache: ignore fixtures whose tracked fields haven’t changed.
Use exponential backoff or pauses when encountering errors, and safely resume polling without flooding.
Caching & diff logic
Your local cache should store for each fixture the current values of the eight tracked fields.
Polling workflow:
Call
GET /v3/football/livescores/latest?[params]For each fixture in the
dataarray:Compare each of the eight fields with your cached version
If no differences → skip
If any difference → process this as an update and overwrite your cache
If you need more context (events, lineups, odds), fetch via other endpoints (e.g. Fixture by ID, Inplay Livescores)
Separately, maintain cached metadata (teams, leagues, venues) since they rarely change.
Let polling interval = 6 seconds
T = now  
 → GET latest → returns fixtures A, B  
 → Compare with cache → apply updates for changed ones  
 → Update cache  
T + 6s  
 → GET latest → returns fixtures B, C  
 → Process B (if changed), process C  
 → Update cache  
T + 12s  
 → GET latest → returns []  
 → No changes, skip processing  
 → Optional: if many empties, slow poll rate  Filters
More information on how to use filters can be found in our tutorials on how to filter. If you want more information on which filters to use, you can check out the following endpoint:
Pagination
NO
Include depth
You can use a total of 3 nested includes on this endpoint
Include options
sport round stage group aggregate league seasoncoaches tvStations venue state  weatherReport lineups events timeline comments trends statistics periods participants  oddspremiumOdds inplayOdds prematchNews metadata sidelinedpredictions referees formations ballCoordinates scoresxGFixture expectedLineups 
Related Entities:
Get an overview and explanation of all the fields returned in the API response. The related entities for the livescores endpoints are:
Postman
We also offer detailed postman documentation with examples and a complete up-to-date version of all our endpoints. Below is a button that lets your fork the collection or import it.
Code Example
require "uri"
require "net/http"
url = URI("https://api.sportmonks.com/v3/football/livescores/latest?api_token=YOUR_TOKEN")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Get.new(url)
response = https.request(request)
puts response.read_body
import http.client
conn = http.client.HTTPSConnection("api.sportmonks.com")
payload = ''
headers = {}
conn.request("GET", "/v3/football/livescores/latest?api_token=YOUR_TOKEN", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.sportmonks.com/v3/football/livescores/latest?api_token=YOUR_TOKEN',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
));
$response = curl_exec($curl);
curl_close($curl);
echo $responsOkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://api.sportmonks.com/v3/football/livescores/latest?api_token=YOUR_TOKEN")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();var unirest = require('unirest');
var req = unirest('GET', 'https://api.sportmonks.com/v3/football/livescores/latest?api_token=YOUR_TOKEN')
  .end(function (res) { 
    if (res.error) throw new Error(res.error); 
    console.log(res.raw_body);
  });package main
import (
  "fmt"
  "net/http"
  "io/ioutil"
)
func main() {
  url := "https://api.sportmonks.com/v3/football/livescores/latest?api_token=YOUR_TOKEN"
  method := "GET"
  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, nil)
  if err != nil {
    fmt.Println(err)
    return
  }
  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()
  body, err := ioutil.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}Last updated
Was this helpful?