Pay-per-request API for global padel club data and open matches.
Access detailed information about 15,000+ padel clubs across 89+ countries, including photos, amenities, pricing, and open match listings from Playtomic and Raketo platforms.
Other x402 APIs:
Uncensored AI API - Uncensored chat, reasoning, code & image generation via Venice AI - $0.03-$0.08/request
Audio API - Text-to-speech and speech-to-text - $0.05-$0.10/request
Agent Tools API - General utility endpoints for AI agents (weather, geocoding, Wikipedia, news, etc.) - $0.01/request
Crypto API - Blockchain & DeFi data (token metadata, security analysis, risk scoring) - $0.02+/request
Residential Proxy API - Fetch URLs through residential IPs to bypass datacenter IP blocks - $0.01/request
x402scan.com - Web interface to test any x402 API with your wallet
Payment Token: USDC on Base Mainnet (Chain ID: 8453)
Price: $0.01 USD per request
Receiving Address: 0xd8bA61a0b0974db0EC8E325C7628470526558E9B
Facilitator: PayAI Network
Features: Gasless transactions, 0% fees, ERC-3009 transferWithAuthorization
All endpoints use POST with JSON body parameters.
Get list of countries with padel clubs and club counts.
Body: {} (no parameters required)
Example Response:
{
"count": 89,
"countries": [
{"country_slug": "spain", "club_count": 4852},
{"country_slug": "italy", "club_count": 1375}
]
}
Refundable variant: POST /api/x402r/countries ($0.01, escrow scheme with 10-minute refund window)
Get all clubs in a city with basic information.
Example Response:
{
"city": "barcelona",
"count": 87,
"clubs": [{
"id": 123,
"name": "Padel Barcelona",
"address": "Carrer de Provença, 123, Barcelona",
"latitude": 41.3851,
"longitude": 2.1734,
"google_rating": 4.5,
"slug": "/spain/barcelona/padel-barcelona"
}]
}
Get detailed club information including courts, pricing, amenities, and match counts.
Example Response:
{
"id": 1238,
"name": "TEMPO Padel & Pickleball Club",
"address": "123 Court Street",
"latitude": 54.5169954,
"longitude": -1.3182519,
"google_rating": 4.8,
"website": "https://tempo-padel.com",
"phone": "+44 1234 567890",
"photo_count": 14,
"total_matches_count": 200,
"open_matches_count": 62,
"indoor_courts": 3,
"outdoor_courts": 2,
"peak_hour_price": "38.0",
"currency": "GBP",
"has_parking": true,
"has_restaurant": true
}
Get all photos for a club with URLs and metadata.
Example Response:
{
"club_id": 8624,
"club_name": "AC PADEL LUGO",
"photo_count": 14,
"photos": [{
"id": 82807,
"url": "https://padelmaps.org/uploads/club_photos/8624/photo.jpg",
"photo_type": "google",
"width": 1600,
"height": 1200,
"is_primary": true
}]
}
Get open matches in a city (all platforms: Playtomic, Raketo, etc.).
Example Response:
{
"city": "barcelona",
"count": 157,
"playtomic_count": 142,
"raketo_count": 15,
"matches": [{
"id": "abc123",
"platform": "playtomic",
"club_name": "Padel Barcelona",
"start_time": "2025-11-23T10:00:00Z",
"end_time": "2025-11-23T11:30:00Z",
"available_spots": 2,
"price": "19.00",
"currency": "EUR",
"min_level": 2.5,
"max_level": 4.0,
"booking_url": "https://playtomic.io/match/abc123"
}]
}
Fetch any URL through a residential IP. Bypasses datacenter IP blocks, Cloudflare challenges, and geo-restrictions. Fresh IP every request, 3 automatic retries.
Parameters: url (required), method, headers, body, country (2-letter ISO), session_id (1-8 alphanumeric)
Parameters: url (required), country (required, 2-letter ISO)
Every external-API endpoint has a refundable escrow variant at 1.25x the regular price (same price for $0.01 endpoints). Payments are held in escrow with a 10-minute refund window. If the API call fails, your payment is automatically refunded.
URL pattern: replace x402- with x402r- (e.g., /api/x402r-crypto/token-metadata)
| Path | Price |
|---|---|
/api/x402r-crypto/token-metadata | $0.03 |
/api/x402r-crypto/site-trust | $0.05 |
/api/x402r-crypto/contract-decoder | $0.03 |
/api/x402r-crypto/wallet-identity | $0.06 |
/api/x402r-crypto/wallet-identity-crosschain | $0.12 |
/api/x402r-crypto/gas-oracle | $0.01 |
/api/x402r-crypto/price-feed | $0.03 |
/api/x402r-crypto/nft-metadata | $0.03 |
/api/x402r-crypto/token-holders | $0.03 |
/api/x402r-crypto/approval-checker | $0.05 |
/api/x402r-crypto/transaction-decoder | $0.06 |
/api/x402r-crypto/defi-positions | $0.10 |
/api/x402r-crypto/ens-expiry | $0.01 |
ElevenLabs API credits exhausted. Will be re-enabled when credits are refilled.
| Path | Price |
|---|---|
/api/x402r-uncensored/chat | $0.04 |
/api/x402r-uncensored/reasoning | $0.10 |
/api/x402r-uncensored/code | $0.09 |
/api/x402r-uncensored/image | $0.04 |
| Path | Price |
|---|---|
/api/x402r-tools/crypto/price | $0.01 |
/api/x402r-tools/crypto/prices | $0.01 |
/api/x402r-tools/weather/current | $0.01 |
/api/x402r-tools/geocode | $0.01 |
/api/x402r-tools/reverse-geocode | $0.01 |
/api/x402r-tools/wiki/search | $0.01 |
/api/x402r-tools/wiki/summary | $0.01 |
/api/x402r-tools/news/search | $0.01 |
/api/x402r-tools/stocks/quote | $0.01 |
/api/x402r-tools/countries/info | $0.01 |
/api/x402r-tools/books/search | $0.01 |
/api/x402r-tools/hackernews/top | $0.01 |
/api/x402r-tools/github/repo | $0.01 |
/api/x402r-tools/currency/convert | $0.01 |
The x402r escrow flow works like standard x402, but payments are held in an on-chain escrow contract and automatically refunded if the API call fails. Here's how to make an escrow payment in three languages:
# Step 1: Make initial request (returns 402 with escrow details)
curl -s -X POST https://padelmaps.org/api/x402r-crypto/token-metadata \
-H "Content-Type: application/json" \
-d '{"chain": "ethereum", "contract_address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"}'
# Response (402 Payment Required):
# {
# "x402Version": 2,
# "accepts": [{
# "scheme": "commerce",
# "network": "eip155:8453",
# "maxAmountRequired": "40000", // $0.04 USDC (6 decimals)
# "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC on Base
# "payTo": "0x1A602eEC594BD9A50D8FD06BCC13D35c18FE68A8",
# "extra": {
# "escrowAddress": "0xb9488351E48b23D798f24e8174514F28B741Eb4f",
# "tokenCollector": "0x48ADf6E37F9b31dC2AAD0462C5862B5422C736B8",
# "operatorAddress": "0x1A602eEC594BD9A50D8FD06BCC13D35c18FE68A8",
# "name": "USD Coin", "version": "2"
# }
# }]
# }
# Steps 2-4 require EIP-712 signing (ReceiveWithAuthorization).
# Use the Python or TypeScript examples below for the full flow,
# or use the interactive "Try It" buttons above.
import requests, json, base64, time, os
from eth_account import Account
from eth_account.messages import encode_typed_data
PRIVATE_KEY = os.environ["PRIVATE_KEY"]
account = Account.from_key(PRIVATE_KEY)
URL = "https://padelmaps.org/api/x402r-crypto/token-metadata"
BODY = {"chain": "ethereum", "contract_address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"}
# Step 1: Get 402 with escrow requirements
resp = requests.post(URL, json=BODY)
data = resp.json()
req = data["accepts"][0]
extra = req["extra"]
amount = req["maxAmountRequired"]
# Step 2: Build paymentInfo and compute escrow nonce
from web3 import Web3
salt = "0x" + os.urandom(32).hex()
MAX_UINT48 = 281474976710655
payment_info = {
"operator": extra["operatorAddress"],
"receiver": req["payTo"],
"token": req["asset"],
"maxAmount": int(amount),
"preApprovalExpiry": MAX_UINT48,
"authorizationExpiry": MAX_UINT48,
"refundExpiry": MAX_UINT48,
"minFeeBps": extra.get("minFeeBps", 0),
"maxFeeBps": extra.get("maxFeeBps", 0),
"feeReceiver": extra["operatorAddress"],
"salt": salt,
}
# Step 3: Sign EIP-712 ReceiveWithAuthorization
domain = {
"name": extra["name"], "version": extra["version"],
"chainId": 8453, "verifyingContract": req["asset"],
}
message = {
"from": account.address,
"to": extra["tokenCollector"],
"value": int(amount),
"validAfter": 0,
"validBefore": MAX_UINT48,
"nonce": nonce, # computed from paymentInfo hash
}
# (See full nonce computation in the x402r SDK or JS example on this page)
sig = account.sign_typed_data(domain, {"ReceiveWithAuthorization": [...]}, message)
# Step 4: Retry with X-PAYMENT header
payload = {
"x402Version": 2, "scheme": "commerce", "network": "eip155:8453",
"payload": {
"authorization": {
"from": account.address, "to": extra["tokenCollector"],
"value": amount, "validAfter": "0",
"validBefore": str(MAX_UINT48), "nonce": nonce,
},
"signature": sig.signature.hex(),
"paymentInfo": payment_info,
},
}
x_payment = base64.b64encode(json.dumps(payload).encode()).decode()
resp2 = requests.post(URL, json=BODY, headers={"X-PAYMENT": x_payment})
print(resp2.json()) # API result (funds held in escrow, auto-refunded on failure)
import { wrapFetchWithPayment } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { registerEscrowScheme } from "@x402r/evm/escrow/client";
import { privateKeyToAccount } from "viem/accounts";
// Setup: create signer and register escrow scheme
const signer = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`);
const client = new x402Client();
registerEscrowScheme(client, { signer, networks: "eip155:8453" });
// Wrap fetch — handles 402 → sign → retry automatically
const fetchWithPayment = wrapFetchWithPayment(fetch, client);
// Make request (payment is handled transparently)
const response = await fetchWithPayment(
"https://padelmaps.org/api/x402r-crypto/token-metadata",
{
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
chain: "ethereum",
contract_address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
}),
}
);
const data = await response.json();
console.log(data); // API result
// npm install @x402/fetch @x402/core @x402r/evm viem
No artificial rate limiting - pay $0.01 USDC per request. Use as much or as little as you need.