PadelMaps x402 API

Version 1.0.0 | LLM Format
Not connected

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

x402 Protocol

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

How to Use

1 Make a POST request to any endpoint with JSON body (will return 402 Payment Required)
2 Payment client reads the 402 response with payment requirements
3 User signs a gasless USDC transfer (ERC-3009)
4 Client retries request with X-PAYMENT header containing the signature
5 API validates payment and returns data

Testing Tools

API Endpoints

All endpoints use POST with JSON body parameters.

Get Countries

POST /api/x402/countries
$0.01

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 Clubs in City

POST /api/x402/clubs
$0.01

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 Club Details

POST /api/x402/club
$0.01

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 Club Photos

POST /api/x402/club/photos
$0.01

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

POST /api/x402/matches
$0.01

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"
  }]
}

Residential Proxy

Fetch any URL through a residential IP. Bypasses datacenter IP blocks, Cloudflare challenges, and geo-restrictions. Fresh IP every request, 3 automatic retries.

Fetch URL (Random IP)

POST /api/x402-proxy/fetch
$0.01

Parameters: url (required), method, headers, body, country (2-letter ISO), session_id (1-8 alphanumeric)

Fetch URL (Geo-Targeted)

POST /api/x402-proxy/fetch/geo
$0.01

Parameters: url (required), country (required, 2-letter ISO)

Proxy Usage Stats

POST /api/x402-proxy/stats
$0.01

All Refundable Escrow Endpoints (x402r)

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)

Crypto (13 endpoints)

PathPrice
/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

Audio — Temporarily Disabled

ElevenLabs API credits exhausted. Will be re-enabled when credits are refilled.

Uncensored AI (4 endpoints)

PathPrice
/api/x402r-uncensored/chat$0.04
/api/x402r-uncensored/reasoning$0.10
/api/x402r-uncensored/code$0.09
/api/x402r-uncensored/image$0.04

Agent Tools (14 endpoints)

PathPrice
/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

x402r Escrow Code Examples

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

Data Coverage

Rate Limits

No artificial rate limiting - pay $0.01 USDC per request. Use as much or as little as you need.