curl --request GET \
--url https://padelapi.org/api/matches/{match}/live \
--header 'Authorization: Bearer <token>'import requests
url = "https://padelapi.org/api/matches/{match}/live"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://padelapi.org/api/matches/{match}/live', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://padelapi.org/api/matches/{match}/live",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://padelapi.org/api/matches/{match}/live"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://padelapi.org/api/matches/{match}/live")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://padelapi.org/api/matches/{match}/live")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": 123,
"self": "<string>",
"draw": "main",
"status": "scheduled",
"coverage": "full",
"channel": "<string>",
"sets": [
{
"set_number": 123,
"set_score": "<string>",
"games": [
{
"game_number": 123,
"game_score": "<string>",
"serving": "<string>",
"points": [
"<string>"
]
}
]
}
],
"connections": {
"match": "<string>"
}
}{
"message": "<string>"
}{
"message": "<string>"
}{
"message": "<string>",
"errors": {}
}Show Match Point By Point
Retrieve the full point-by-point reconstruction of a padel match: every set, every game and every point as it was played. It works for live matches (updated within seconds of each point) and for finished matches (the complete historical record), making it the building block for live score widgets, win-probability models, momentum charts and match replays.
π This endpoint requires a Pro subscription.
Live updates: poll or subscribe
You can poll this endpoint, but for real-time apps subscribe to push updates instead.
Every response includes a channel (e.g. matches.123) and a connections.match
link; broadcast events arrive over Pusher. See the
WebSockets guide for the subscription flow.
curl --request GET \
--url https://padelapi.org/api/matches/{match}/live \
--header 'Authorization: Bearer <token>'import requests
url = "https://padelapi.org/api/matches/{match}/live"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://padelapi.org/api/matches/{match}/live', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://padelapi.org/api/matches/{match}/live",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://padelapi.org/api/matches/{match}/live"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://padelapi.org/api/matches/{match}/live")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://padelapi.org/api/matches/{match}/live")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": 123,
"self": "<string>",
"draw": "main",
"status": "scheduled",
"coverage": "full",
"channel": "<string>",
"sets": [
{
"set_number": 123,
"set_score": "<string>",
"games": [
{
"game_number": 123,
"game_score": "<string>",
"serving": "<string>",
"points": [
"<string>"
]
}
]
}
],
"connections": {
"match": "<string>"
}
}{
"message": "<string>"
}{
"message": "<string>"
}{
"message": "<string>",
"errors": {}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
The match ID
Response
MatchLiveResource
Unique identifier of the match. The same id used by the rest of the match endpoints.
Path to this endpoint, relative to https://padelapi.org.
Draw the match belongs to: main for the main draw, qualy for the qualification draw. This endpoint returns both, as it lists whatever is being played right now.
main, qualy Current state of the match. See the statuses reference for the full list.
scheduled, live, ended, finished, retired, walkover, bye How complete the point-by-point tracking is. full means every game was captured and matches the confirmed score. partial means some games are missing because the feed had gaps. tracking means the match is still live and coverage is resolved once it ends. null means there is no point-by-point data. Use full for statistical analysis: it guarantees game-level completeness, though individual points within a game may occasionally be missing.
full, partial, tracking Name of the channel broadcasting updates for this match. It is issued per match and cannot be built from the match id, so always read it from this response. Subscribe to it to receive points as they happen instead of polling, as described in the WebSockets guide.
The match broken down into sets β games β points, in the order they were played. Each set carries a set_number and a set_score (e.g. "6-3", or null while the set is still in progress). Each game carries a game_number, the cumulative game_score at the start of the game (e.g. "3-2"), the serving team ("team_1", "team_2", or null when unknown) and the ordered list of points as "team_1:team_2" strings (["0:0", "15:0", "15:15", β¦], with "A" for advantage).
The point that wins a game is never listed: the score jumps to the next game, so derive it from the following game_score.
Show child attributes
Show child attributes
Related endpoints for this match.
Show child attributes
Show child attributes