Skip to main content

Overview

Padel API provides real-time match tracking through two mechanisms:
  1. REST endpoint — Poll /api/matches/{match}/live for point-by-point data
  2. 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"
  }
}
FieldDescription
statusMatch status: live, finished, scheduled, etc.
channelThe Pusher channel name to subscribe for real-time updates
setsArray of sets, each containing an array of games
sets[].set_numberSet number (1, 2, or 3)
sets[].set_scoreFinal set score (e.g. "6-2") when the set is complete, null while in progress
sets[].games[].game_numberGame number within the set
sets[].games[].game_scoreCumulative set score before this game started (e.g. "3 - 1")
sets[].games[].pointsArray 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

ParameterValue
ProviderPusher
App Key0ffbefeb945e4e466065
Clustereu
Channel formatmatches.{matchId} (public, no auth required)
Event nameApp\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:
npm install pusher-js
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:
pip install pysher
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.
  1. Find live matchesGET /api/live
  2. Get initial stateGET /api/matches/{id}/live
  3. Subscribe to updates — Connect to Pusher channel matches.{id}
  4. 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?