curl --request GET \
--url https://padelapi.org/api/pairs/{player1}-{player2}/synergy \
--header 'Authorization: Bearer <token>'import requests
url = "https://padelapi.org/api/pairs/{player1}-{player2}/synergy"
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/pairs/{player1}-{player2}/synergy', 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/pairs/{player1}-{player2}/synergy",
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/pairs/{player1}-{player2}/synergy"
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/pairs/{player1}-{player2}/synergy")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://padelapi.org/api/pairs/{player1}-{player2}/synergy")
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": "<string>",
"self": "<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",
"connections": {
"pair": "<string>"
}
}{
"message": "<string>"
}{
"message": "<string>"
}{
"message": "<string>",
"errors": {}
}Show Pair Synergy
Retrieve whether a pair beats the sum of its parts: the win rate its two players were expected to reach together from their Elo ratings, the one they actually reached, and the gap between both, with its evolution by quarter.
๐ This endpoint requires a Business subscription.
Scoped to every match the pair has played together by default. 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/pairs/{player1}-{player2}/synergy \
--header 'Authorization: Bearer <token>'import requests
url = "https://padelapi.org/api/pairs/{player1}-{player2}/synergy"
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/pairs/{player1}-{player2}/synergy', 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/pairs/{player1}-{player2}/synergy",
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/pairs/{player1}-{player2}/synergy"
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/pairs/{player1}-{player2}/synergy")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://padelapi.org/api/pairs/{player1}-{player2}/synergy")
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": "<string>",
"self": "<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",
"connections": {
"pair": "<string>"
}
}{
"message": "<string>"
}{
"message": "<string>"
}{
"message": "<string>",
"errors": {}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Date after to measure the synergy in YYYY-MM-DD format.
Date before to measure the synergy in YYYY-MM-DD format.
Tournament level(s) to scope the synergy. 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 synergy (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
PairSynergyResource
Identifier of the pair, as the two player ids joined by a hyphen (e.g. 65-66).
Path to this endpoint, relative to https://padelapi.org.
Win rate the pair was expected to reach together, 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 together 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 pair beats the sum of its parts. null when there are too few matches for the gap to mean anything.
Matches together behind the numbers above, qualification included.
The same values by calendar quarter, oldest first, so a partnership can be seen settling in or wearing out. Quarters without matches together 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 Related endpoints for this synergy.
Show child attributes
Show child attributes