Webhooks let your server react to changes in the Padel API the moment they happen — no polling required. Register a public HTTPS endpoint, pick the events you care about, and we’ll POST a signed JSON payload to your URL each time one of them fires.Documentation Index
Fetch the complete documentation index at: https://padelapi.org/docs/llms.txt
Use this file to discover all available pages before exploring further.
Push, not poll
Get notified within seconds of a tournament, match, or player change.
Signed & retried
Every payload is HMAC-SHA256 signed and retried up to 3 times on failure.
Prerequisites
Before you begin, make sure you have:- A Padel API account (sign up here)
- An API token from your API Tokens page
- A Business subscription (upgrade here) — required to register new webhooks
- A public HTTPS endpoint that accepts
POSTrequests with a JSON body
Step 1: Register a Webhook
Create a webhook subscription withPOST /api/webhooks, sending the URL you control and the list of events you want to receive:
Response
Step 2: Receive Events
Each time a subscribed event fires, we send aPOST request to your URL with this body:
Payload reference
| Field | Description |
|---|---|
event | The event name that triggered the call (e.g. match.updated). See Available events. |
occurred_at | ISO 8601 UTC timestamp of when the change was detected. |
data | The full resource representation — identical to the response of the corresponding GET /api/{resource}/{id} endpoint. |
Request headers
| Header | Description |
|---|---|
Content-Type | Always application/json. |
Signature | HMAC-SHA256 hex digest of the raw request body, signed with your webhook secret. See Step 3. |
Step 3: Verify the Signature
Always verify theSignature header before trusting a payload — it confirms the request came from the Padel API and was not tampered with in transit.
The signature is calculated as:
Step 4: Manage Retries and Failures
If your endpoint returns a non-2xx response or doesn’t reply within 3 seconds, we retry the delivery automatically.
| Behavior | Value |
|---|---|
| Maximum attempts | 3 |
| Backoff | Exponential — increasing delay between retries |
| Timeout per attempt | 3 seconds |
| TLS verification | Enforced — the destination must serve a valid certificate |
Step 5: Update or Pause a Webhook
Change the URL or the list of subscribed events without recreating the webhook (and without losing the secret) usingPATCH /api/webhooks/{id}:
events array to pause delivery without deleting the webhook:
DELETE /api/webhooks/{id}:
GET /api/webhooks, or fetch one by id with GET /api/webhooks/{id}.
Available Events
| Event | Fires when |
|---|---|
tournament.created | A new tournament is added to the calendar. |
tournament.updated | Any field of a tournament changes (dates, venue, status, name…). |
tournament.deleted | A tournament is removed from the calendar. |
match.created | A new match is scheduled (typically when a draw is published). |
match.updated | A match changes — score, status, court, schedule, players, or any other field. |
match.deleted | A match is removed (cancellations, walkovers, draw corrections). |
player.created | A new player profile is added. |
player.updated | A player’s profile changes — ranking, country, image, name, etc. |
player.deleted | A player profile is removed (typically merge of duplicates). |
data field of each event contains the same shape as the corresponding REST resource — see the API Reference for the exact schema of each one.
Tips
Webhooks vs WebSockets — when to use which
Webhooks vs WebSockets — when to use which
Use WebSockets for point-by-point live scoreboards where every second matters and your client is a browser or mobile app. Use Webhooks for backend integrations: syncing your own database, triggering notifications, updating CRMs — anything where a server-to-server push is more natural than a persistent connection. See WebSockets for the live alternative.
Use ngrok or similar to test locally
Use ngrok or similar to test locally
Webhooks require a public HTTPS endpoint, but you don’t need to deploy. Tools like ngrok, Cloudflare Tunnel or Tailscale Funnel expose your local server with a temporary HTTPS URL — register that URL as your webhook target during development, then update it to your real endpoint when you go live.
What about backfills?
What about backfills?
Webhooks only fire for changes that happen after the subscription is created. To bootstrap your local copy, do an initial fetch with the REST endpoints (e.g.
GET /api/tournaments?per_page=100) and then let webhooks keep you in sync. See the Data Synchronization guide for the full pattern.Live match updates
Live match updates
Webhooks for
match.updated only fire at significant transitions — typically when a match starts and when it ends. Point-by-point and score updates while the match is in progress are not delivered as webhooks; subscribe to the WebSocket channel for real-time live data instead.Lost or compromised secret
Lost or compromised secret
Secrets are non-recoverable. If yours leaks or you forget it, delete the webhook and create a new one — your URL stays the same, just rotate the
PADEL_WEBHOOK_SECRET env var on your server.Next steps
WebSockets
Real-time point-by-point updates for live matches
Data Synchronization
Bootstrap and keep your local data in sync
API Reference
Full endpoint documentation with parameters and responses