API Integration
PolyMarks integrates with multiple external APIs.
Polymarket Gamma API (Markets)
Endpoint: https://gamma-api.polymarket.com/markets
Used For: Fetching market data (questions, odds, volume, liquidity)
Parameters:
limit- Number of markets to fetch (default: 100, max: 500)closed- Filter closed markets (default: false)active- Filter active markets (default: true)
Sample Request:
GET https://gamma-api.polymarket.com/markets?limit=100&closed=false&active=trueResponse Format:
{
"data": [
{
"id": "...",
"question": "Will Trump win 2024?",
"description": "...",
"outcomes": ["Yes", "No"],
"volume": 1234567.89,
"liquidity": 98765.43,
"end_date": "2024-11-05T00:00:00Z",
"slug": "trump-wins-2024",
...
}
]
}Our Proxy: /api/markets
Polymarket Data API (Trades)
Endpoint: https://data-api.polymarket.com/trades
Used For: Fetching whale trades
Parameters:
limit- Number of trades (default: 50, max: 200)offset- Pagination offsetfilterType- Filter by type (CASH)filterAmount- Minimum trade size (USD)eventId- Filter by market slug
Sample Request:
GET https://data-api.polymarket.com/trades?limit=50&filterType=CASH&filterAmount=1000Response Format:
[
{
"proxyWallet": "0x1ff26...",
"name": "WhaleKing",
"side": "BUY",
"size": 10000,
"price": 0.65,
"totalValue": 6500,
"title": "Trump wins 2024?",
"slug": "trump-wins-2024",
"eventSlug": "trump-wins-2024",
"transactionHash": "0xabc123...",
"timestamp": 1699564800,
...
}
]Our Proxy: /api/trades
Helius RPC (Solana)
Endpoint: https://mainnet.helius-rpc.com/?api-key=YOUR_KEY
Used For: Future Solana wallet tracking features
Sample Request:
POST https://mainnet.helius-rpc.com/?api-key=YOUR_KEY
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 1,
"method": "getBalance",
"params": ["wallet_address"]
}Currently: Not actively used, prepared for future features
CORS & Proxying
All external API calls go through Next.js API routes to avoid CORS:
Before (CORS Error):
// ❌ Browser → External API (blocked by CORS)
fetch('https://gamma-api.polymarket.com/markets')After (Proxy):
// ✅ Browser → Next.js API Route → External API
fetch('/api/markets')Rate Limiting
Polymarket APIs:
No official rate limit published
We observed 429 errors when fetching whale data for 100+ markets simultaneously
Solution: Disabled parallel market-whale fetching, only fetch on detail pages
Best Practices:
Cache responses (60s for markets, 30s for trades)
Batch requests when possible
Use pagination (limit + offset)
Error Handling
try {
const response = await fetch('/api/markets?limit=100')
if (!response.ok) {
throw new Error(`API error: ${response.status}`)
}
const data = await response.json()
return transformMarkets(data)
} catch (error) {
console.error('Error fetching markets:', error)
return [] // Graceful fallback
}Always return empty arrays/null instead of throwing to prevent UI crashes.
Last updated