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
]
}
'import requests
url = "https://padelapi.org/api/matches/simulate"
payload = {
"team_1": [123],
"team_2": [123]
}
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]})
};
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
]
]),
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}")
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}")
.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}"
response = http.request(request)
puts response.read_body{
"name": "<string>",
"probability": {
"team_1": 123,
"team_2": 123
},
"elo_diff": 123,
"players": {
"team_1": [
{
"id": 123,
"self": "<string>",
"name": "<string>",
"short_name": "<string>",
"url": "<string>",
"photo_url": "<string>",
"nationality": "<string>",
"ranking": "<string>",
"points": 123,
"elo": 123,
"height": 123,
"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>",
"nationality": "<string>",
"ranking": "<string>",
"points": 123,
"elo": 123,
"height": 123,
"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 current Elo ratings. 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.
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
]
}
'import requests
url = "https://padelapi.org/api/matches/simulate"
payload = {
"team_1": [123],
"team_2": [123]
}
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]})
};
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
]
]),
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}")
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}")
.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}"
response = http.request(request)
puts response.read_body{
"name": "<string>",
"probability": {
"team_1": 123,
"team_2": 123
},
"elo_diff": 123,
"players": {
"team_1": [
{
"id": 123,
"self": "<string>",
"name": "<string>",
"short_name": "<string>",
"url": "<string>",
"photo_url": "<string>",
"nationality": "<string>",
"ranking": "<string>",
"points": 123,
"elo": 123,
"height": 123,
"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>",
"nationality": "<string>",
"ranking": "<string>",
"points": 123,
"elo": 123,
"height": 123,
"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
Response
MatchSimulateResource
Surnames of both teams, in the form Surname/Surname - Surname/Surname. Convenience label for display.
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 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