Skip to main content

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

TierRate LimitMonthly RequestsWebSocketPrice
Free1 req/sec1,000$0/month
Dev20 req/sec1,000,00010 subs × 10 items$49/month
Pro100 req/sec5,000,000100 subs × 500 items + 2 wildcards/channel$249/month
EnterpriseCustomUnlimitedCustom$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/100Kand5/100K and 2.50/100K). See predexon.com/pricing.
Exceeding rate limits returns 429 Too Many Requests. Implement exponential backoff.

Best Practices

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

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