curl --request GET \
--url https://padelapi.org/api/players/{player}/form \
--header 'Authorization: Bearer <token>'import requests
url = "https://padelapi.org/api/players/{player}/form"
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/players/{player}/form', 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/players/{player}/form",
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/players/{player}/form"
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/players/{player}/form")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://padelapi.org/api/players/{player}/form")
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>",
"from": "<string>",
"to": "<string>",
"expected_win_rate": 123,
"actual_win_rate": 123,
"delta": 123,
"matches_played": 123,
"by_period": [
{
"from": "<string>",
"to": "<string>",
"expected_win_rate": 123,
"actual_win_rate": 123,
"delta": 123,
"matches_played": 123
}
],
"trend": "rising",
"windows": {
"last_7_days": {
"expected_win_rate": 123,
"actual_win_rate": 123,
"delta": 123,
"matches_played": 123
},
"last_30_days": {
"expected_win_rate": 123,
"actual_win_rate": 123,
"delta": 123,
"matches_played": 123
},
"last_90_days": {
"expected_win_rate": 123,
"actual_win_rate": 123,
"delta": 123,
"matches_played": 123
}
},
"same_period_last_year": {
"expected_win_rate": 123,
"actual_win_rate": 123,
"delta": 123,
"matches_played": 123
},
"streak": {
"result": "won",
"matches": 123
},
"third_sets": {
"won": 123,
"lost": 123
},
"tiebreaks": {
"won": 123,
"lost": 123
},
"connections": {
"player": "<string>"
}
}{
"message": "<string>"
}{
"message": "<string>"
}{
"message": "<string>",
"errors": {}
}Show Player Form
Retrieve how a professional padel player is performing lately against what their Elo rating predicted: the win rate they were expected to reach, the one they actually reached, and the gap between both, with its evolution by month.
๐ This endpoint requires a Business subscription.
Scoped to a recent window by default. Rolling windows of 7, 30 and 90 days, the same window one year earlier, the current streak and the record in third sets and tiebreaks come alongside. Qualification matches count, since the expectation already accounts for the level of the opponents. The form and synergy guide explains how to read every field.
curl --request GET \
--url https://padelapi.org/api/players/{player}/form \
--header 'Authorization: Bearer <token>'import requests
url = "https://padelapi.org/api/players/{player}/form"
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/players/{player}/form', 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/players/{player}/form",
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/players/{player}/form"
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/players/{player}/form")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://padelapi.org/api/players/{player}/form")
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>",
"from": "<string>",
"to": "<string>",
"expected_win_rate": 123,
"actual_win_rate": 123,
"delta": 123,
"matches_played": 123,
"by_period": [
{
"from": "<string>",
"to": "<string>",
"expected_win_rate": 123,
"actual_win_rate": 123,
"delta": 123,
"matches_played": 123
}
],
"trend": "rising",
"windows": {
"last_7_days": {
"expected_win_rate": 123,
"actual_win_rate": 123,
"delta": 123,
"matches_played": 123
},
"last_30_days": {
"expected_win_rate": 123,
"actual_win_rate": 123,
"delta": 123,
"matches_played": 123
},
"last_90_days": {
"expected_win_rate": 123,
"actual_win_rate": 123,
"delta": 123,
"matches_played": 123
}
},
"same_period_last_year": {
"expected_win_rate": 123,
"actual_win_rate": 123,
"delta": 123,
"matches_played": 123
},
"streak": {
"result": "won",
"matches": 123
},
"third_sets": {
"won": 123,
"lost": 123
},
"tiebreaks": {
"won": 123,
"lost": 123
},
"connections": {
"player": "<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 player ID
Query Parameters
Date after to measure the form in YYYY-MM-DD format. Defaults to 180 days before before_date.
Date before to measure the form in YYYY-MM-DD format. Defaults to today.
Tournament level(s) to scope the form. Accepts one or multiple comma-separated values (e.g. major,p1,p2 for all Premier Padel matches) or repeated parameters (e.g. level[]=major&level[]=p1).
Round of the match to measure the form (1 = Final, 2 = Semifinal, 4 = Quarterfinal, 8 = Round of 16, 16 = Round of 32, 32 = Round of 64)
1, 2, 4, 8, 16, 32 Response
PlayerFormResource
Unique identifier of the player this form belongs to.
Path to this endpoint, relative to https://padelapi.org.
First day of the window the form is measured over, as YYYY-MM-DD. Set by after_date, or a recent window by default.
Last day of the window, as YYYY-MM-DD. Set by before_date, or today by default. windows end on this day.
Win rate the player's pairs were expected to reach over the window, as a percentage rounded to two decimals, from the Elo ratings of all four players at the time of each match. null when no matches are counted.
Win rate actually achieved over the same matches, as a percentage rounded to two decimals. null when no matches are counted.
actual_win_rate minus expected_win_rate, in percentage points. Positive means the player is over-performing. null when there are too few matches for the gap to mean anything.
Matches behind the numbers above, qualification included.
The same values by calendar month within the window, oldest first. Months without matches are left out.
Show child attributes
Show child attributes
Direction of delta across by_period. null when too few periods have a delta to tell.
rising, stable, declining Overlapping windows of 7, 30 and 90 days ending on to, each with the same values. They ignore after_date, so they are available whatever the window.
Show child attributes
Show child attributes
The same values over the window shifted one year back, to compare the player against themselves.
Show child attributes
Show child attributes
Current run of consecutive results up to to. result is won or lost (null when there are no matches) and matches its length.
Show child attributes
Show child attributes
Deciding sets won and lost within the window. Retirements are left out, since the third set was not completed.
Show child attributes
Show child attributes
Sets settled 7-6 won and lost within the window.
Show child attributes
Show child attributes
Related endpoints for this form.
Show child attributes
Show child attributes