Overview
Padel API provides real-time match tracking through two mechanisms:
- REST endpoint — Poll
/api/matches/{match}/live for point-by-point data
- WebSockets — Subscribe to Pusher channels for instant updates
Live Match Endpoint
The live endpoint returns point-by-point data for an ongoing match:
curl -X GET \
'https://padelapi.org/api/matches/7243/live' \
-H 'Authorization: Bearer YOUR_API_TOKEN'
Response Structure
{
"id": 7243,
"self": "/api/matches/7243/live",
"status": "live",
"channel": "matches.7243",
"sets": [
{
"set_number": 1,
"set_score": "6-2",
"games": [
{
"game_number": 1,
"game_score": "0 - 0",
"points": ["15:0", "30:0", "40:15"]
},
{
"game_number": 2,
"game_score": "1 - 0",
"points": ["0:0", "15:0", "30:0", "40:0", "40:15"]
}
]
},
{
"set_number": 2,
"set_score": null,
"games": [
{
"game_number": 1,
"game_score": "0 - 0",
"points": ["0:0", "15:0", "30:0"]
}
]
}
],
"connections": {
"match": "/api/matches/7243"
}
}
| Field | Description |
|---|
status | Match status: live, finished, scheduled, etc. |
channel | The Pusher channel name to subscribe for real-time updates |
sets | Array of sets, each containing an array of games |
sets[].set_number | Set number (1, 2, or 3) |
sets[].set_score | Final set score (e.g. "6-2") when the set is complete, null while in progress |
sets[].games[].game_number | Game number within the set |
sets[].games[].game_score | Cumulative set score before this game started (e.g. "3 - 1") |
sets[].games[].points | Array of point scores during the game (format "team1:team2") |
Finding Live Matches
To find matches currently being played, use the live endpoint:
curl -X GET \
'https://padelapi.org/api/live' \
-H 'Authorization: Bearer YOUR_API_TOKEN'
WebSockets (Pusher)
For real-time updates without polling, subscribe to Pusher WebSocket channels. Each live match broadcasts updates on a dedicated channel.
Connection Details
| Parameter | Value |
|---|
| Provider | Pusher |
| App Key | 0ffbefeb945e4e466065 |
| Cluster | eu |
| Channel format | matches.{matchId} (public, no auth required) |
| Event name | App\PadelApi\Events\MatchLiveUpdated |
Channels are public — no authentication handshake is required to subscribe. You only need the Pusher app key and cluster.
JavaScript Example
Install the Pusher client library:
Subscribe to a live match channel:
import Pusher from 'pusher-js';
const pusher = new Pusher('0ffbefeb945e4e466065', {
cluster: 'eu'
});
// Subscribe using the "channel" field from the live endpoint
const channel = pusher.subscribe('matches.7243');
channel.bind('App\\PadelApi\\Events\\MatchLiveUpdated', (data) => {
console.log('Sets:', data.sets);
// data has the same structure as the /live endpoint response
});
Python Example
Install the Pusher client library:
import pysher
def on_event(data):
print('Live update:', data)
pusher = pysher.Pusher(key='0ffbefeb945e4e466065', cluster='eu')
pusher.connection.bind('pusher:connection_established', lambda _: None)
pusher.connect()
channel = pusher.subscribe('matches.7243')
channel.bind('App\\PadelApi\\Events\\MatchLiveUpdated', on_event)
Event Payload
The WebSocket event payload has the same structure as the /api/matches/{match}/live REST response — id, self, status, channel, sets, and connections.
Recommended Workflow
- Find live matches —
GET /api/live
- Get initial state —
GET /api/matches/{id}/live
- Subscribe to updates — Connect to Pusher channel
matches.{id}
- Detect match end — When
status changes to finished, unsubscribe from the channel
Use the channel field from the live endpoint response directly as your Pusher channel name — no need to construct it manually.
Need Help?