curl --request POST \
--url https://padelapi.org/api/matches/simulate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"team_1": [
123
],
"team_2": [
123
],
"played_at": "2023-12-25"
}
'import requests
url = "https://padelapi.org/api/matches/simulate"
payload = {
"team_1": [123],
"team_2": [123],
"played_at": "2023-12-25"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({team_1: [123], team_2: [123], played_at: '2023-12-25'})
};
fetch('https://padelapi.org/api/matches/simulate', 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/matches/simulate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'team_1' => [
123
],
'team_2' => [
123
],
'played_at' => '2023-12-25'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://padelapi.org/api/matches/simulate"
payload := strings.NewReader("{\n \"team_1\": [\n 123\n ],\n \"team_2\": [\n 123\n ],\n \"played_at\": \"2023-12-25\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://padelapi.org/api/matches/simulate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"team_1\": [\n 123\n ],\n \"team_2\": [\n 123\n ],\n \"played_at\": \"2023-12-25\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://padelapi.org/api/matches/simulate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"team_1\": [\n 123\n ],\n \"team_2\": [\n 123\n ],\n \"played_at\": \"2023-12-25\"\n}"
response = http.request(request)
puts response.read_body{
"name": "<string>",
"played_at": "<string>",
"probability": {
"team_1": 123,
"team_2": 123
},
"favorite": "team_1",
"elo_diff": 123,
"players": {
"team_1": [
{
"id": 123,
"self": "<string>",
"name": "<string>",
"short_name": "<string>",
"url": "<string>",
"photo_url": "<string>",
"category": "men",
"nationality": "<string>",
"ranking": "<string>",
"points": 123,
"elo": 123,
"height": 123,
"side": "drive",
"hand": "left",
"birthplace": "<string>",
"birthdate": "<string>",
"age": "<string>",
"links": "<string>",
"updated_at": "<string>",
"connections": {
"matches": "<string>",
"rankings": "<string>",
"pairs": "<string>",
"stats": "<string>"
}
}
],
"team_2": [
{
"id": 123,
"self": "<string>",
"name": "<string>",
"short_name": "<string>",
"url": "<string>",
"photo_url": "<string>",
"category": "men",
"nationality": "<string>",
"ranking": "<string>",
"points": 123,
"elo": 123,
"height": 123,
"side": "drive",
"hand": "left",
"birthplace": "<string>",
"birthdate": "<string>",
"age": "<string>",
"links": "<string>",
"updated_at": "<string>",
"connections": {
"matches": "<string>",
"rankings": "<string>",
"pairs": "<string>",
"stats": "<string>"
}
}
]
}
}{
"message": "<string>"
}{
"message": "<string>",
"errors": {}
}Simulate Match
Endpoint to simulate a match between two teams or individual players. Returns win probabilities calculated from their Elo ratings, either the current ones or the ones in force on played_at. The padel match prediction model is calibrated against the full match history (7,500+ matches): the predicted probability matches the observed win frequency within 1-2 points across all Elo-gap ranges.
๐ This endpoint requires a Pro subscription.
curl --request POST \
--url https://padelapi.org/api/matches/simulate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"team_1": [
123
],
"team_2": [
123
],
"played_at": "2023-12-25"
}
'import requests
url = "https://padelapi.org/api/matches/simulate"
payload = {
"team_1": [123],
"team_2": [123],
"played_at": "2023-12-25"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({team_1: [123], team_2: [123], played_at: '2023-12-25'})
};
fetch('https://padelapi.org/api/matches/simulate', 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/matches/simulate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'team_1' => [
123
],
'team_2' => [
123
],
'played_at' => '2023-12-25'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://padelapi.org/api/matches/simulate"
payload := strings.NewReader("{\n \"team_1\": [\n 123\n ],\n \"team_2\": [\n 123\n ],\n \"played_at\": \"2023-12-25\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://padelapi.org/api/matches/simulate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"team_1\": [\n 123\n ],\n \"team_2\": [\n 123\n ],\n \"played_at\": \"2023-12-25\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://padelapi.org/api/matches/simulate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"team_1\": [\n 123\n ],\n \"team_2\": [\n 123\n ],\n \"played_at\": \"2023-12-25\"\n}"
response = http.request(request)
puts response.read_body{
"name": "<string>",
"played_at": "<string>",
"probability": {
"team_1": 123,
"team_2": 123
},
"favorite": "team_1",
"elo_diff": 123,
"players": {
"team_1": [
{
"id": 123,
"self": "<string>",
"name": "<string>",
"short_name": "<string>",
"url": "<string>",
"photo_url": "<string>",
"category": "men",
"nationality": "<string>",
"ranking": "<string>",
"points": 123,
"elo": 123,
"height": 123,
"side": "drive",
"hand": "left",
"birthplace": "<string>",
"birthdate": "<string>",
"age": "<string>",
"links": "<string>",
"updated_at": "<string>",
"connections": {
"matches": "<string>",
"rankings": "<string>",
"pairs": "<string>",
"stats": "<string>"
}
}
],
"team_2": [
{
"id": 123,
"self": "<string>",
"name": "<string>",
"short_name": "<string>",
"url": "<string>",
"photo_url": "<string>",
"category": "men",
"nationality": "<string>",
"ranking": "<string>",
"points": 123,
"elo": 123,
"height": 123,
"side": "drive",
"hand": "left",
"birthplace": "<string>",
"birthdate": "<string>",
"age": "<string>",
"links": "<string>",
"updated_at": "<string>",
"connections": {
"matches": "<string>",
"rankings": "<string>",
"pairs": "<string>",
"stats": "<string>"
}
}
]
}
}{
"message": "<string>"
}{
"message": "<string>",
"errors": {}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Player IDs on the first team. Pass one player or two.
1 - 2 elementsPlayer IDs on the opposing team. Pass as many as you sent in team_1.
1 - 2 elementsDay the match would be played, as YYYY-MM-DD. Players are rated with the Elo they had entering that day, so you can replay a past match-up with the ratings of the time. Defaults to today.
Response
MatchSimulateResource
Surnames of both teams, in the form Surname/Surname - Surname/Surname. Convenience label for display.
Day the simulated match is played, as YYYY-MM-DD.
Win probability for each team, as a decimal between 0 and 1. The two values always add up to 1.
Show child attributes
Show child attributes
Team favoured to win, or null when both teams are rated identically and the match is a coin flip.
team_1, team_2 Gap between the teams' average Padel API Elo ratings, positive when team_1 is rated higher. The wider the gap, the more lopsided probability gets.
The players making up each side of the simulated match, with their full profiles.
Show child attributes
Show child attributes