API Key
All requests require an API key passed in the x-api-key header. Sign up free at dashboard.predexon.com.
curl -H "x-api-key: YOUR_API_KEY" \
"https://api.predexon.com/v2/polymarket/markets?limit=10"
Plans
| Tier | Rate Limit | Monthly Requests | WebSocket | Price |
|---|
| Free | 1 req/sec | 1,000 | — | $0/month |
| Dev | 20 req/sec | 1,000,000 | 10 subs × 10 items | $49/month |
| Pro | 100 req/sec | 5,000,000 | 100 subs × 500 items + 2 wildcards/channel | $249/month |
| Enterprise | Custom | Unlimited | Custom | $499+/month |
Most data is free. Core market data, historical trades, orderbooks, and pricing endpoints are free and unlimited on all plans. See the full list.
Free tier excludes smart wallet, matching, and WebSocket. Dev and Pro include overage pricing (5/100Kand2.50/100K). See predexon.com/pricing.
Exceeding rate limits returns 429 Too Many Requests. Implement exponential backoff.
Best Practices
Caching
Retry Logic
Connection Pooling
Many endpoints return data that doesn’t change frequently. Implement caching to reduce API calls:import requests, time
BASE_URL = "https://api.predexon.com"
cache = {}
CACHE_TTL = 300 # 5 minutes
def get_market(condition_id: str, api_key: str) -> dict:
cache_key = f"market:{condition_id}"
now = time.time()
if cache_key in cache and cache[cache_key]["expires"] > now:
return cache[cache_key]["data"]
response = requests.get(
f"{BASE_URL}/v2/polymarket/markets",
params={"condition_id": condition_id},
headers={"x-api-key": api_key}
)
data = response.json()
cache[cache_key] = {"data": data, "expires": now + CACHE_TTL}
return data
Implement retries with exponential backoff for transient errors:import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
session = requests.Session()
retries = Retry(
total=3,
backoff_factor=0.5,
status_forcelist=[500, 502, 503, 504]
)
session.mount("https://", HTTPAdapter(max_retries=retries))
Reuse connections for better performance:BASE_URL = "https://api.predexon.com"
session = requests.Session()
session.headers.update({"x-api-key": "your_api_key"})
# Reuse for all requests
response = session.get(f"{BASE_URL}/v2/polymarket/markets")
CORS
The API supports CORS for browser-based applications:
fetch("https://api.predexon.com/v2/polymarket/markets", {
headers: { "x-api-key": "your_api_key" }
})
.then(res => res.json())
.then(data => console.log(data));
Health Check
curl "https://api.predexon.com/health"
# {"status": "healthy"}