polymarket-api

安装量: 607
排名: #1862

安装

npx skills add https://github.com/agentmc15/polymarket-trader --skill polymarket-api

Polymarket API Integration Skill Overview

This skill provides comprehensive guidance for integrating with Polymarket's APIs and smart contracts.

API Endpoints CLOB API (Central Limit Order Book)

Base URL: https://clob.polymarket.com

Authentication Levels Level 0 (Public): Market data, orderbooks, prices Level 1 (Signer): Create/derive API keys Level 2 (Authenticated): Trading, orders, positions Key Endpoints GET /markets # List all markets GET /markets/{token_id} # Get specific market GET /price?token_id=X # Get current price GET /midpoint?token_id=X # Get midpoint price GET /book?token_id=X # Get orderbook GET /trades # Get user trades POST /order # Place order DELETE /order/{id} # Cancel order GET /positions # Get positions

Gamma API (Market Metadata)

Base URL: https://gamma-api.polymarket.com

GET /events # List events GET /events/{slug} # Get event details GET /markets # List markets GET /markets/{id} # Get market details

Python Implementation Patterns Initialize Client from py_clob_client.client import ClobClient from py_clob_client.clob_types import OrderArgs, OrderType import os

class PolymarketService: def init(self): self.client = ClobClient( host="https://clob.polymarket.com", key=os.getenv("POLYMARKET_PRIVATE_KEY"), chain_id=137, signature_type=1, funder=os.getenv("POLYMARKET_FUNDER_ADDRESS") ) self.client.set_api_creds( self.client.create_or_derive_api_creds() )

async def get_market_data(self, token_id: str) -> dict:
    """Fetch comprehensive market data."""
    return {
        "price": self.client.get_price(token_id, "BUY"),
        "midpoint": self.client.get_midpoint(token_id),
        "book": self.client.get_order_book(token_id),
        "spread": self.client.get_spread(token_id),
    }

async def place_order(
    self,
    token_id: str,
    side: str,
    price: float,
    size: float,
    order_type: str = "GTC"
) -> dict:
    """Place a limit order."""
    order = self.client.create_order(
        OrderArgs(
            token_id=token_id,
            price=price,
            size=size,
            side=side,
        )
    )
    return self.client.post_order(order, order_type)

WebSocket Subscription import asyncio import websockets import json

async def subscribe_market_updates(token_ids: list[str]): """Subscribe to real-time market updates.""" uri = "wss://ws-subscriptions-clob.polymarket.com/ws/market"

async with websockets.connect(uri) as ws:
    await ws.send(json.dumps({
        "type": "subscribe",
        "markets": token_ids
    }))

    async for message in ws:
        data = json.loads(message)
        yield data

Gamma API Client import httpx

class GammaClient: BASE_URL = "https://gamma-api.polymarket.com"

def __init__(self):
    self.client = httpx.AsyncClient(base_url=self.BASE_URL)

async def get_active_markets(self) -> list[dict]:
    """Fetch all active markets."""
    response = await self.client.get("/markets", params={"active": True})
    return response.json()

async def get_event(self, slug: str) -> dict:
    """Fetch event with all markets."""
    response = await self.client.get(f"/events/{slug}")
    return response.json()

Order Types GTC (Good Till Cancelled): Stays until filled or cancelled GTD (Good Till Date): Expires at specified time FOK (Fill or Kill): Must fill entirely or cancel IOC (Immediate or Cancel): Fill what's available, cancel rest Price Calculations def calculate_implied_probability(price: float) -> float: """Convert price to implied probability.""" return price # Prices ARE probabilities (0-1)

def calculate_cost(price: float, shares: float) -> float: """Calculate cost to buy shares.""" return price * shares

def calculate_pnl( entry_price: float, current_price: float, shares: float, side: str ) -> float: """Calculate unrealized P&L.""" if side == "BUY": return (current_price - entry_price) * shares return (entry_price - current_price) * shares

Error Handling from py_clob_client.exceptions import PolymarketException

try: result = client.post_order(order) except PolymarketException as e: if "INSUFFICIENT_BALANCE" in str(e): # Handle insufficient funds pass elif "INVALID_PRICE" in str(e): # Handle price out of range pass raise

Rate Limits Public endpoints: ~100 requests/minute Authenticated endpoints: ~1000 requests/minute WebSocket: Varies by subscription type

Always implement exponential backoff and request queuing.

Key Contract Addresses (Polygon) CONTRACTS = { "CTF_EXCHANGE": "0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E", "NEG_RISK_CTF_EXCHANGE": "0xC5d563A36AE78145C45a50134d48A1215220f80a", "CONDITIONAL_TOKENS": "0x4D97DCd97eC945f40cF65F87097ACe5EA0476045", "USDC": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", }

返回排行榜