API · 참고 자료

data-api.polymarket.com에 있는 Data API는 폴리마켓의 읽기 전용 "창고"입니다. 모든 지갑의 포지션, 전체 거래 기록, 실시간 포트폴리오 가치를 PnL 내장으로 제공합니다. 완전히 공개형이라 키도, 서명도, 계정도 필요 없습니다. 그래서 시작하기 가장 쉬운 곳입니다. 개인 키를 전혀 만지지 않고도 분석용 봇이나 카피 트레이딩 봇을 통째로 만들 수 있습니다. 아래의 모든 예시는 이 페이지의 샌드박스에서 실제로 실행할 수 있는 호출입니다.

한눈에 보기
  • Base URL: https://data-api.polymarket.com · 인증 불필요.
  • 전달할 주소: 트레이더의 프록시 지갑(온체인 폴리마켓 주소), 서명 키가 아님.
  • 요청 한도: 약 10초당 1,000건(/trades 200, /positions 150) - 거부가 아닌 스로틀링.
  • 일반 JSON 배열을 반환합니다. Gamma(탐색)와 CLOB(거래)와 함께 쓰세요.

/positions - 지갑이 보유한 것 (PnL 포함)

핵심 엔드포인트입니다. 지갑을 전달하면 모든 미체결 포지션을 얻으며, 각 포지션은 이미 취득 원가와 손익으로 보강되어 있습니다. 그래서 이것은 PnL 엔드포인트 역할도 합니다(서브그래프 계산이 필요 없습니다).

import requests
r = requests.get("https://data-api.polymarket.com/positions",
                 params={"user": PROXY_ADDRESS})
for p in r.json():
    print(p["title"], p["outcome"], p["size"],
          "avg", p["avgPrice"], "pnl", p["cashPnl"])
curl -s "https://data-api.polymarket.com/positions?user=$PROXY_ADDRESS"

실제 응답 (포지션 하나, 축약):

[
  {
    "proxyWallet": "0xbfd068…a0c8",
    "asset":       "30114730…931285",   // the token_id (CLOB-tradeable)
    "conditionId": "0x4589bb…b3005c",
    "size":         100,                 // shares held
    "avgPrice":     0.01,                // your cost basis
    "curPrice":     0.00,                // current mark
    "currentValue": 0.00,
    "cashPnl":     -1.00,                // $ profit/loss
    "percentPnl":  -100,
    "realizedPnl":  0,
    "redeemable":   true,                // market resolved → can redeem
    "title":   "Bitcoin Up or Down - June 14, 8:00-8:05AM ET",
    "outcome": "Down", "outcomeIndex": 1
  }
]
필드의미
assettoken_id - CLOB에 바로 넣어 호가창을 읽거나 거래합니다.
size / avgPrice보유 지분과 평균 진입 가격(취득 원가).
cashPnl / percentPnl / realizedPnl미실현 $, 미실현 %, 실현 $ - 직접 계산해야 했을 PnL.
redeemable시장이 정산되어 포지션을 현금화할 수 있게 되면 true.

/trades - 거래 기록

모든 체결을 최신순으로 제공합니다. user=(한 지갑의 기록)와/또는 market=로 필터링하거나, limit=으로 전체를 끌어옵니다. 이것이 백테스트와 카피 트레이딩의 데이터 소스입니다.

curl -s "https://data-api.polymarket.com/trades?user=$PROXY_ADDRESS&limit=100"

실제 응답 (거래 하나, 축약):

[
  {
    "proxyWallet": "0xad05d2…3a3d",
    "side":        "BUY",
    "asset":       "54898429…124028",   // token_id traded
    "conditionId": "0x0e6eb3…a83290",
    "size":         10,
    "price":        0.10,
    "timestamp":    1781469243,          // unix seconds
    "title":  "Bitcoin Up or Down - June 14, 4:30-4:35PM ET",
    "outcome": "Down", "outcomeIndex": 1,
    "transactionHash": "0x4c0e78…38064d" // verify on PolygonScan
  }
]

각 거래는 그 뒤의 proxyWallet을 담고 있습니다. 따라서 /trades는 따라갈 지갑을 발견하는 방법이기도 합니다. 어떤 시장의 최근 체결을 끌어온 뒤, 각 지갑의 /positions를 끌어오면 됩니다.

/value - 포트폴리오 가치 한 숫자로

가장 빠른 상태 점검입니다. 지갑의 현재 총 가치를 알려줍니다:

v = requests.get("https://data-api.polymarket.com/value",
                 params={"user": PROXY_ADDRESS}).json()[0]["value"]
print(f"${v:,.2f}")
curl -s "https://data-api.polymarket.com/value?user=$PROXY_ADDRESS"

실제 응답:

[ { "user": "0xbfd068…a0c8", "value": 2.3236 } ]

/activity - 전체 온체인 활동 로그 (거래만이 아님)

대부분의 봇이 놓치는 엔드포인트입니다. /activity는 체결만이 아니라 지갑이 온체인에서 한 모든 것을 반환합니다. type = TRADE, SPLIT, MERGE, REDEEM, REWARD, CONVERSION과 start / end(unix 초)로 필터링합니다. 지갑이 pUSD를 Yes+No로 split하고, 다시 merge하고, 정산된 포지션을 redeem하거나 메이커 rewards를 받는 것을 지켜보는 방법입니다 - 호가창은 절대 보여주지 않는 CTF 기본 동작들입니다.

curl -s "https://data-api.polymarket.com/activity?user=$PROXY_ADDRESS&type=SPLIT,MERGE,REDEEM&limit=50"

CTF 기본 동작과 함께 쓰세요. /activity는 split / merge / redeem의 읽기 측이므로, 세트를 발행하거나 상환하는 전략은 노드를 만지지 않고도 자신의 온체인 기록을 대조할 수 있습니다.

/holders - 시장을 누가 보유하는가

시장의 아웃컴별 상위 보유자입니다 - 집중도 점검과 고래 발견에 유용합니다:

curl -s "https://data-api.polymarket.com/holders?market=$CONDITION_ID&limit=20"

예제: 20줄짜리 지갑 트래커

거래 기록에서 활발한 지갑을 발견한 뒤, 그 지갑의 보유 내역을 PnL과 함께 출력합니다 - 모두 키 없이:

import requests
D = "https://data-api.polymarket.com"

# 1) who just traded BTC?
who = requests.get(f"{D}/trades", params={"limit": 1}).json()[0]["proxyWallet"]

# 2) their open book + live PnL
for p in requests.get(f"{D}/positions", params={"user": who}).json():
    print(f"{p['title'][:40]:40} {p['outcome']:4} {p['size']:>6} sh  "
          f"PnL ${p['cashPnl']:+.2f} ({p['percentPnl']:+.0f}%)")

# 3) their total value
print("total $", requests.get(f"{D}/value", params={"user": who}).json()[0]["value"])
프록시 지갑을 전달하세요. 트레이더의 폴리마켓 프록시 주소(자금을 보유하고 리더보드에 표시되는 주소)를 사용하고, 서명/EOA 키를 쓰지 마세요. 그리고 타임스탬프는 unix 초임을 기억하세요.

다음: CLOB API (호가창 읽기, 거래) · Gamma API (시장 찾기) · 카피 트레이딩 봇 만들기.