polymarket-portfolio
SKILL.md
Polymarket Portfolio
Position and activity tracking via Data API.
For foundational context, see
polymarket-references.
Get Positions
curl -s "https://data-api.polymarket.com/positions?user=ADDRESS&limit=100&sizeThreshold=0" | jq '.[] | {title, outcome, size, avgPrice, currentValue, cashPnl, percentPnl}'
Get Portfolio Value
curl -s "https://data-api.polymarket.com/value?user=ADDRESS" | jq
Get Closed Positions
curl -s "https://data-api.polymarket.com/v1/closed-positions?user=ADDRESS&limit=20" | jq '.[] | {title, outcome, realizedPnl}'
Get Trade History
curl -s "https://data-api.polymarket.com/trades?user=ADDRESS&limit=50" | jq '.[] | {title, side, size, price, timestamp}'
Get Activity (All Types)
curl -s "https://data-api.polymarket.com/activity?user=ADDRESS&limit=50" | jq
Filter by type: TRADE, SPLIT, MERGE, REDEEM, REWARD
curl -s "https://data-api.polymarket.com/activity?user=ADDRESS&type=TRADE&limit=20" | jq
Get USDC Balance
curl -s -X POST "https://polygon-rpc.com" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_call",
"params": [{
"to": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174",
"data": "0x70a08231000000000000000000000000ADDRESS_WITHOUT_0x"
}, "latest"],
"id": 1
}' | jq -r '.result' | xargs printf "%d\n" | awk '{print $1/1000000 " USDC"}'
PnL Summary
ADDRESS="0x..."
echo "=== Open Positions ==="
curl -s "https://data-api.polymarket.com/positions?user=$ADDRESS&limit=100&sizeThreshold=0" | jq '[.[] | .cashPnl | tonumber] | add as $unrealized | {unrealized_pnl: $unrealized, position_count: length}'
echo "=== Closed Positions ==="
curl -s "https://data-api.polymarket.com/v1/closed-positions?user=$ADDRESS&limit=50" | jq '[.[] | .realizedPnl | tonumber] | add as $realized | {realized_pnl: $realized}'
Python Alternative
import httpx
DATA = "https://data-api.polymarket.com"
def get_positions(address: str):
r = httpx.get(f"{DATA}/positions", params={"user": address, "limit": 100, "sizeThreshold": 0})
return r.json()
def get_portfolio_value(address: str):
r = httpx.get(f"{DATA}/value", params={"user": address})
return r.json()
def get_trades(address: str, limit: int = 50):
r = httpx.get(f"{DATA}/trades", params={"user": address, "limit": limit})
return r.json()
def get_activity(address: str, activity_type: str = None):
params = {"user": address, "limit": 50}
if activity_type:
params["type"] = activity_type
r = httpx.get(f"{DATA}/activity", params=params)
return r.json()
def get_pnl(address: str):
positions = get_positions(address)
unrealized = sum(float(p.get("cashPnl") or 0) for p in positions)
return {"unrealized_pnl": unrealized, "open_positions": len(positions)}
Quick Portfolio Check
ADDRESS="0x..."
echo "Positions:" && curl -s "https://data-api.polymarket.com/positions?user=$ADDRESS&limit=5&sizeThreshold=1" | jq '.[] | "\(.title): \(.size) @ \(.avgPrice) = $\(.currentValue) (\(.percentPnl)%)"'
Weekly Installs
2
Repository
braindead-digit…t-skillsFirst Seen
Feb 19, 2026
Security Audits
Installed on
openclaw2
gemini-cli2
antigravity2
claude-code2
codex2
continue2