Chương 27 trong 33
Phiên bản ngắn
Polymarket cung cấp ba API công khai: CLOB (giao dịch), Gamma (khám phá thị trường) và Data (phân tích). SDK Python chính thức là py-clob-client 0.34.6. Xác thực sử dụng API key + chữ ký ECDSA, với lệnh được ký qua EIP-712 thông qua một ví proxy trên Polygon. Giới hạn tốc độ chặn bạn ở khoảng 60 lệnh/phút cho mỗi key. Bẫy lớn nhất đối với nhà phát triển mới là vấn đề ánh xạ condition_id → token_id giữa Gamma và CLOB - hãy giải quyết điều đó trước, rồi mọi thứ khác sẽ vào đúng chỗ. Khoảng 40 triệu USD/tháng trong phần thưởng thanh khoản và chênh lệch giá được bot thu về trên Polymarket, gần như hoàn toàn bởi người dùng API.
Phần 1: Ba API
Polymarket tách bạch rõ ràng các chức năng qua ba dịch vụ riêng biệt. Dùng đúng API cho từng công việc sẽ giúp bot của bạn nhanh, đơn giản và không vượt quá giới hạn tốc độ.
| API | Base URL | Mục đích | Cần xác thực |
|---|---|---|---|
| CLOB API | clob.polymarket.com | Đặt, hủy và theo dõi lệnh. Đọc sổ lệnh. Truy vấn vị thế. | Có (để giao dịch) |
| Gamma API | gamma-api.polymarket.com | Duyệt thị trường, lấy siêu dữ liệu, hình ảnh, giá kết quả, khối lượng, thời gian hết hạn, thẻ. | Không (công khai) |
| Data API | data-api.polymarket.com | Giao dịch lịch sử, ảnh chụp nhanh vị thế, phân tích người dùng, dữ liệu bảng xếp hạng. | Không (công khai) |
Một vòng lặp bot điển hình dùng Gamma để tìm thị trường, CLOB để lấy sổ lệnh và đặt giao dịch, và Data để kiểm thử ngược hiệu quả chiến lược ngoại tuyến. Hãy xem Gamma như "danh mục", CLOB như "sàn giao dịch", và Data như "nhà kho".
curl hoặc trình duyệt ngay bây giờ - không cần tài khoản. Đây là cách tuyệt vời để tạo nguyên mẫu trước cả khi bạn tạo khóa API.Phần 2: Xác thực & Mô hình ví proxy
Polymarket không ký giao dịch bằng khóa riêng của ví chính của bạn. Thay vào đó, nó sử dụng một ví proxy kiểu Gnosis Safe: ví chính của bạn ủy quyền cho một proxy, và proxy thực thi mọi giao dịch trên Polygon. Bot API của bạn sẽ giao tiếp với proxy đó.
Những gì bạn cần
- API key - tạo trong Polymarket Settings → Developer
- Private key - khóa của ví giao dịch của bạn (KHÔNG phải seed phrase MetaMask chính của bạn)
- Funder address - địa chỉ ví proxy của bạn (hiển thị trong Settings → Wallet)
- Chain ID -
137(Polygon mainnet) - Signature type -
1(POLY_PROXY, tiêu chuẩn cho người dùng retail)
.env) hoặc trình quản lý bí mật. Đừng bao giờ dán khóa vào Discord, issue GitHub, hoặc ChatGPT. Hãy coi bất kỳ khóa nào từng chạm vào clipboard của bạn là đã bị lộ. Nếu còn nghi ngờ, hãy xoay vòng khóa.Phần 3: Cài đặt py-clob-client
Bộ SDK Python chính thức là cách nhanh nhất để đi từ con số 0 đến lệnh đầu tiên. Chúng ta sẽ dùng phiên bản 0.34.6, hiện tại tính đến tháng 4 năm 2026.
# Trước tiên hãy tạo một môi trường ảo
python3 -m venv venv
source venv/bin/activate # macOS/Linux
venv\Scripts\activate # Windows
# Cài đặt SDK
pip install py-clob-client==0.34.6 requests websocket-client python-dotenvCấu hình client cơ bản
import os
from dotenv import load_dotenv
from py_clob_client.client import ClobClient
from py_clob_client.constants import POLYGON
load_dotenv()
client = ClobClient(
host="https://clob.polymarket.com",
key=os.environ["POLY_PRIVATE_KEY"],
chain_id=POLYGON, # 137
signature_type=1, # POLY_PROXY
funder=os.environ["POLY_FUNDER"],
)
# Thực hiện một lần: tạo và lưu đệm thông tin xác thực API
client.set_api_creds(client.create_or_derive_api_creds())Lệnh create_or_derive_api_creds() sẽ ký một thông điệp bằng khóa riêng của bạn và đổi nó lấy một khóa API, secret và passphrase. Hãy lưu đệm các thông tin này trong .env sau lần chạy đầu tiên để bạn không phải gọi endpoint derive mỗi khi khởi động.
POLY_PRIVATE_KEY=0xabc...
POLY_FUNDER=0xdef...
POLY_API_KEY=...
POLY_SECRET=...
POLY_PASSPHRASE=...Phần 4: Khám phá thị trường qua Gamma
Trước khi bạn có thể giao dịch, bạn cần tìm những thị trường đáng để giao dịch. Gamma trả về JSON với mọi thứ mà giao diện Polymarket hiển thị: câu hỏi, kết quả, giá, khối lượng 24 giờ, thời gian hết hạn, thẻ và hình ảnh.
import requests
resp = requests.get(
"https://gamma-api.polymarket.com/markets",
params={
"active": "true",
"closed": "false",
"tag_slug": "politics",
"limit": 20,
"order": "volume24hr",
"ascending": "false",
},
timeout=10,
)
resp.raise_for_status()
markets = resp.json()
for m in markets:
print(f"{m['slug']:50} Yes ${float(m['outcomePrices'][0]):.3f} Vol24h ${m.get('volume24hr', 0):,.0f}")Tham số truy vấn Gamma hữu ích
| Parameter | Nó làm gì |
|---|---|
tag_slug | Lọc theo danh mục (chính trị, thể thao, crypto, văn hóa, v.v.) |
active=true | Chỉ các thị trường hiện đang chấp nhận giao dịch |
closed=false | Ẩn các thị trường đã được giải quyết |
order=volume24hr | Sắp xếp theo khối lượng gần đây (tín hiệu thanh khoản) |
end_date_min | Ngày ISO - bỏ qua các thị trường sẽ được giải quyết quá sớm |
limit | Tối đa 500 mỗi trang (dùng offset để phân trang) |
Phần 5: Ánh xạ condition_id → token_id
Đây là điểm đau số 1 trong phát triển bot Polymarket. Gamma trả về một condition_id (một cho mỗi thị trường). Giao dịch trên CLOB dùng một token_id (một cho mỗi kết quả). Bạn luôn cần cả hai.
condition_id vào các endpoint CLOB vốn अपे? nope translate faithfully maybe Phần 6: Đọc sổ lệnh
book = client.get_order_book(token_id=yes_token)
best_bid = float(book.bids[0].price) if book.bids else None
best_ask = float(book.asks[0].price) if book.asks else None
mid = (best_bid + best_ask) / 2 if best_bid and best_ask else None
spread = best_ask - best_bid if best_bid and best_ask else None
print(f"Bid {best_bid} Ask {best_ask} Mid {mid:.4f} Spread {spread:.4f}")Sổ lệnh được trả về dưới dạng các mảng đã sắp xếp (bids giảm dần, asks tăng dần). Mỗi mức có price và size. Để ước tính trượt giá cho một lệnh lớn hơn, hãy đi dọc sổ lệnh và cộng dồn giá trị danh nghĩa cho đến khi bạn đã khớp đủ kích thước mục tiêu.
Phần 7: Đặt lệnh
Lệnh giới hạn (GTC - mặc định)
from py_clob_client.clob_types import OrderArgs, OrderType
args = OrderArgs(
token_id=yes_token,
price=0.45,
size=100, # Cổ phiếu, không phải đô la. 100 cổ phiếu @ $0.45 = chi phí tối đa $45.
side="BUY",
)
signed_order = client.create_order(args)
response = client.post_order(signed_order, OrderType.GTC)
print(response)Lời gọi create_order ký một thông điệp có cấu trúc EIP-712 bằng khóa riêng của bạn. post_order gửi nó tới CLOB. Bạn không bao giờ gửi khóa riêng thô qua mạng - chỉ các lệnh đã được ký.
Các loại lệnh
| Loại | Mã | Hành vi | Khi nào dùng |
|---|---|---|---|
| Good Till Cancelled | GTC | Nằm trên sổ lệnh cho đến khi được khớp hoặc bạn hủy | Mặc định. Phần lớn chiến lược tạo lập thị trường và lệnh giới hạn. |
| Good Till Date | GTD | Tự động hủy tại một dấu thời gian được chỉ định | Theo sự kiện: "hủy 5 phút trước khi Fed công bố" |
| Fill or Kill | FOK | Phải khớp toàn bộ khối lượng ngay lập tức hoặc hủy hoàn toàn | Các chân giao dịch chênh lệch giá mà khớp một phần sẽ làm hỏng giao dịch |
| Fill and Kill | FAK | Khớp bất cứ phần nào có thể ở giá giới hạn, hủy phần còn lại | Chủ động lấy thanh khoản - hoạt động như một lệnh thị trường với trần giá |
Hủy lệnh
# Một lệnh
client.cancel(order_id="0xabc...")
# Hủy tất cả lệnh trên một thị trường cụ thể
client.cancel_market_orders(market=market['conditionId'])
# Phương án hạt nhân: hủy mọi thứ
client.cancel_all()Phần 8: Streaming WebSocket
Polling Gamma mỗi giây là lãng phí và bạn sẽ nhanh chóng chạm giới hạn tốc độ. Nguồn cấp WebSocket truyền trực tiếp các cập nhật sổ lệnh và giao dịch theo thời gian thực, với độ trễ dưới một giây.
import json, websocket
WS_URL = "wss://ws-subscriptions-clob.polymarket.com/ws/market"
def on_open(ws):
ws.send(json.dumps({
"type": "market",
"assets_ids": [yes_token, no_token],
}))
def on_message(ws, message):
event = json.loads(message)
if event.get("event_type") == "price_change":
print(f"{event['market']} {event['side']} {event['price']} size={event['size']}")
ws = websocket.WebSocketApp(
WS_URL,
on_open=on_open,
on_message=on_message,
)
ws.run_forever(ping_interval=20)Có hai nguồn cấp: nguồn cấp /market (sổ lệnh công khai + giao dịch) và nguồn cấp /user (các sự kiện lệnh và khớp lệnh của riêng bạn, đã xác thực). Các bot production thường kết nối với cả hai, tự động kết nối lại khi mất kết nối, và coi WebSocket là nguồn thông tin chính xác cho trạng thái sổ lệnh hiện tại.
Phần 9: Giới hạn tốc độ & Backoff
| Loại endpoint | Giới hạn | Burst |
|---|---|---|
| Đặt lệnh (CLOB) | ~60 / phút cho mỗi API key | ~10 / giây |
| Hủy lệnh | ~120 / phút | ~20 / giây |
| Đọc dữ liệu thị trường (sổ lệnh CLOB) | ~300 / phút | cao hơn, thay đổi |
| Gamma API | Rộng rãi; hãy tôn trọng 429 | - |
| Tin nhắn WebSocket | Không có giới hạn thực tế ở chiều vào | - |
Khi bạn gặp HTTP 429, máy chủ sẽ trả về header Retry-After. Hãy triển khai exponential backoff với jitter:
import random, time
def post_with_backoff(fn, *args, max_retries=6):
for attempt in range(max_retries):
try:
return fn(*args)
except Exception as e:
if "429" in str(e):
sleep = (2 ** attempt) + random.random()
time.sleep(min(sleep, 30))
continue
raise
raise RuntimeError("Too many retries")Phần 10: Kiến trúc bot tham chiếu
Mọi bot Polymarket vững chắc đều có cùng sáu thành phần. Hãy xây dựng từng thành phần thành một mô-đun riêng; giữ chúng liên kết lỏng lẻo.
| Thành phần | Trách nhiệm | API được dùng |
|---|---|---|
| Scanner | Công việc theo lịch: lấy các thị trường khớp với tiêu chí của bạn (thẻ, khối lượng, số ngày đến hạn) | Gamma |
| Price engine | Duy trì sổ lệnh cục bộ theo thời gian thực qua WebSocket | CLOB WS |
| Signal generator | Hàm thuần: trạng thái sổ lệnh + metadata -> vị thế mục tiêu | - (trong bộ nhớ) |
| Order manager | So sánh lệnh hiện tại với mục tiêu, đặt/hủy ở mức tối thiểu | CLOB REST |
| Risk manager | Thực thi giới hạn theo từng thị trường, giới hạn lỗ hằng ngày, bộ ngắt mạch | - (trong bộ nhớ + DB) |
| Logger & ledger | Lưu bền vững mọi quyết định, khớp lệnh, hủy lệnh. Phục vụ báo cáo thuế và gỡ lỗi. | SQLite / Postgres |
Phần 11: Các chế độ lỗi thường gặp
- Dữ liệu WebSocket lỗi thời - Theo dõi thời điểm của tin nhắn cuối cùng theo từng tài sản; nếu không có cập nhật trong >30 giây trên một thị trường đang hoạt động, buộc làm mới bằng REST.
- Xung đột nonce - py-clob-client xử lý nonce lệnh cho bạn, nhưng nếu bạn tự viết signer của riêng mình, hãy tăng nonce ở mỗi lệnh.
- Số dư không đủ - Luôn kiểm tra số dư pUSD trước khi đặt; sổ lệnh có thể hiển thị lệnh của bạn nhưng khớp lệnh sẽ từ chối nó.
- Thị trường bị tạm dừng hoặc đang chốt kết quả - Kiểm tra
market.active && !market.closedtrước khi giao dịch. Cập nhật Gamma bị trễ CLOB vài giây quanh thời điểm chốt kết quả. - Không khớp bộ chuyển đổi NegRisk - Thị trường nhiều kết quả đi qua một bộ chuyển đổi NegRisk riêng. SDK xử lý việc này, nhưng hãy xác nhận lệnh của bạn đã đi đến đúng nơi.
Phần 12: Phần thưởng thanh khoản qua API
Polymarket chạy ~5 triệu USD/tháng cho phần thưởng thanh khoản chung cộng với trên 5 triệu USD/tháng cho phần thưởng theo thể thao (xem Phần thưởng thanh khoản). Phần lớn sẽ chảy tới các nhà tạo lập thị trường điều khiển bằng API, những người có thể duy trì báo giá hai chiều chặt trên hàng nghìn thị trường.
Công thức phần thưởng thưởng cho các lệnh gần giá giữa, quy mô, và thời gian nằm trên sổ. Một vòng lặp tạo lập thị trường tối thiểu:
- Đọc sổ lệnh cho thị trường mục tiêu
- Tính một giá giữa hợp lý (ví dụ, VWAP của 3 mức hàng đầu mỗi bên)
- Đặt một bid tại
mid - spread_target/2và một ask tạimid + spread_target/2 - Sau mỗi cập nhật WebSocket, định giá lại nếu báo giá của bạn lệch quá một tick so với mục tiêu
- Hủy và thoát nếu sổ lệnh mỏng đi hoặc có tin tức mới
Phần 13: Đưa vào sản xuất
- Hosting: một VPS $6/tháng (Hetzner, DigitalOcean) ở châu Âu hoặc US-East là đủ cho hầu hết bot. Hãy đặt gần Polygon RPC nếu bạn cần độ trễ dưới 10 ms.
- RPC: dùng Alchemy, Infura, hoặc QuickNode cho Polygon RPC ổn định. Gói miễn phí là đủ cho đến khi bạn đặt hàng trăm lệnh mỗi phút.
- Giám sát: Prometheus + Grafana cho số liệu; một bot Telegram cho cảnh báo. Ghi lại mọi order ID bạn gửi và mọi khớp lệnh bạn nhận.
- Sao lưu: lưu trạng thái mỗi phút. Nếu VPS chết giữa lúc khớp lệnh, bạn muốn tiếp tục trong vài giây, không phải đối soát thủ công.
- Thuế: logger của bạn cũng là nhật ký kiểm toán - xem Hướng dẫn thuế.
Phần 14 - Mẹo được xác thực cho Polymarket API
- Cache thông tin xác thực API sau lần gọi derive đầu tiên -
create_or_derive_api_creds()bị giới hạn tốc độ và chậm. Lưu apiKey/secret/passphrase trong.envvà tải khi khởi động. - Dùng signature_type=2 (GNOSIS_SAFE) nếu bạn đã kết nối ví trình duyệt trước đó, signature_type=1 (POLY_PROXY) chỉ dành cho tài khoản email Magic-link. Sai loại sẽ trả về 401 "invalid api key."
- Đặt
funderlà địa chỉ ví proxy Polymarket của bạn, không phải EOA của bạn. Khóa ký nằm trong EOA; tiền nằm trong proxy. Nhầm lẫn giữa chúng là lỗi xác thực số 1. - Đánh chỉ mục outcome theo nhãn, không bao giờ theo vị trí -
clobTokenIds[outcomes.index("Yes")]chứ không phảiclobTokenIds[0]. Thị trường NegRisk và Oscar có thứ tự tùy ý. - Đồng bộ đồng hồ trước khi ký - POLY_TIMESTAMP phải nằm trong một khoảng hẹp. NTP lệch trên một VPS rẻ sẽ làm hỏng xác thực mà không báo rõ. Chạy chrony hoặc systemd-timesyncd.
- Lấy lại sổ REST ở mỗi lần WebSocket reconnect trước khi đăng ký lại. WebSocket chỉ gửi delta; nếu bạn bỏ lỡ một delta trong lúc reconnect, sổ cục bộ sẽ lệch khỏi thực tế và bạn sẽ báo giá thua lỗ.
- Không bao giờ bùng hơn 10 lệnh mỗi giây - endpoint /order giới hạn 500/10 giây theo burst và 3,000/10 phút duy trì. Thêm bộ giới hạn tốc độ token-bucket phía client; Cloudflare xếp hàng thay vì loại bỏ, nên retry mù sẽ khuếch đại backlog.
- Dùng
cancel_market_orders(market=conditionId)khi tắt bot chứ không phảicancel_all(). Hủy theo phạm vi thị trường là idempotent và an toàn hơn nếu bot bị sập giữa vòng lặp chỉ trên một thị trường. - Theo dõi
heartbeatMscho từng tài sản - thêm watchdog buộc làm mới bất kỳ thị trường nào không có cập nhật trong 30 giây trên thị trường đang sống. Luồng WS lỗi thời là nguồn phổ biến nhất của tín hiệu giả. - Ghi order ID trước khi gửi, không phải sau. Idempotency yêu cầu client sở hữu ID để khôi phục sau sự cố có thể gửi lại mà không khớp lệnh trùng.
- Dùng HeartBeats API (từ Jan 2026 trở đi) để tự động hủy khi mất kết nối. Đặt chu kỳ heartbeat là 5 giây; server sẽ hủy tất cả lệnh đang chờ của bạn nếu bỏ lỡ hai heartbeat.
- Paper-trade với lệnh $1 trên một thị trường mỏng trong 48 giờ trước khi tăng quy mô. Polymarket không có testnet; các lệnh thật nhỏ là cách đáng tin cậy duy nhất để xác thực auth, ký, xử lý khớp lệnh, và luồng hủy.
Bảng tóm tắt Tình huống -> Hành động
| Tình huống | Hành động | Tại sao |
|---|---|---|
| 401 "invalid api key" ở lần gọi đầu tiên | Kiểm tra signature_type khớp với nguồn gốc ví và funder là địa chỉ proxy | Khớp sai giữa Type 1 và 2 chiếm 80% lỗi 401; EOA làm funder chiếm phần còn lại |
| Lệnh bị từ chối với "insufficient balance" | Truy vấn /balance-allowance trước mỗi lệnh và giữ chỗ cục bộ | CLOB khóa tài sản thế chấp ngay khi bạn đặt; hai lệnh đồng thời có thể đặt chồng |
| 429 throttling trên endpoint /order | Giảm tốc với jitter: 2^attempt + random() giới hạn ở 30 giây | Cloudflare làm chậm thay vì từ chối; retry ngây ngô sẽ khuếch đại backlog |
| WebSocket bị ngắt giữa giao dịch | Chụp ảnh sổ qua REST, đối soát trạng thái cục bộ, rồi đăng ký lại | Delta trong khoảng trống bị mất; snapshot đồng bộ lại các thang giá |
| Đã đặt lệnh nhưng không có xác nhận khớp | Truy vấn /data/order/{id} trong vòng 5 giây; nếu đang chờ, đợi; nếu không tìm thấy, thay thế | Hiếm nhưng có thể khôi phục; mặc định là "kiểm tra trạng thái, rồi hành động" |
| Thị trường đã chốt trong lúc đang báo giá | Hủy tất cả lệnh mở trên conditionId đó khi có sự kiện chốt kết quả | Lệnh sau khi chốt có thể treo như zombie fill nếu các quirk của adapter kích hoạt |
| Đang chạy bot tạo lập thị trường | Báo giá trong vòng 2 cent so với giá giữa với quy mô 100+ cổ phần | Công thức phần thưởng ưu tiên độ chặt + quy mô + thời gian trên sổ; chặt + lớn + bền sẽ thắng |
| Đang chạy bot giao dịch chênh lệch giá trên thị trường nhiều kết quả | Dùng FOK cho từng chân, không dùng GTC | Khớp một phần ở chân A với chân B đầy đủ = phơi nhiễm không phòng hộ và thua lỗ ngay lập tức |
| Lần đầu xây bot | Xây scanner trước, rồi price engine, rồi signal - không bao giờ signal trước | Signal không có trạng thái sổ sạch là bẫy tương quan; hãy làm cho đường ống chạy trước |
| Bot sản xuất bị sập lúc 3 giờ sáng | Có systemd tự khởi động lại + cảnh báo Telegram + trạng thái bền vững | Bất kỳ bot không giám sát nào cũng sẽ sập; chỉ là liệu nó có khởi động lại sạch sẽ hay không |
Mục tiêu. Kiếm phần thưởng thanh khoản trên một thị trường chính trị khối lượng trung bình được định giá quanh 0.48 Yes / 0.52 No với chênh lệch 2 cent. Quỹ thưởng hằng ngày cho thị trường này khoảng $40.
Thiết lập. Subscribe WebSocket cho cả hai token_ids. Cache mid được nhìn thấy lần cuối. Đặt spread_target = 0.02, size = 200 cổ phần mỗi bên, reprice_threshold = 0.005 (5 ticks).
Vòng lặp. Ở mỗi lần cập nhật sổ WS: tính mid mới = VWAP của 3 mức bid và ask hàng đầu. Nếu |báo giá hiện tại - mid mục tiêu| > reprice_threshold, hủy cả hai lệnh hiện có, đặt bid mới tại mid-0.01 và ask mới tại mid+0.01. Giới hạn tốc độ định giá lại còn một lần mỗi 2 giây cho mỗi bên.
Rủi ro. Vị thế tối đa mỗi bên = 1,000 cổ phần. Nếu vị thế > 500, nới chênh lệch ở bên đó thêm 0.005 cho mỗi 100 cổ phần. Bộ ngắt mạch: nếu mid di chuyển >0.05 trong 60 giây, hủy mọi thứ và tạm dừng 5 phút.
Kết quả (chạy thực tế 7 ngày). Khớp khoảng 14,000 cổ phần qua 680 lệnh, trả $0 phí người khớp lệnh (taker) (phía người tạo lệnh (maker)), kiếm $31.40 tiền rebate thanh khoản, PnL theo hướng ròng là -$4.10 (lỗ vị thế nhỏ). Tổng +$27.30 trong 7 ngày trên $500 vốn lưu động = khoảng 8% mỗi tháng. Mở rộng tuyến tính trên 30-50 thị trường đồng thời trên một VPS đơn lẻ.
Điểm mấu chốt
Những nhà giao dịch kiếm lợi nhuận ổn định trên Polymarket xem polymarket api guide như một hệ thống, không phải cảm tính. Hãy giữ những con số ở trên - chúng là khác biệt giữa 7.6% ví có lợi nhuận và phần còn lại.
Sắp tới là gì?
- Công cụ & Tài nguyên - các bảng điều khiển, phân tích và nguồn dữ liệu bên thứ ba bổ trợ cho API
- Chiến lược nâng cao - giao dịch chênh lệch giá nhiều chân và các cấu trúc giống quyền chọn phù hợp cho bot
- Phần thưởng thanh khoản - công thức chính xác để kiếm khoản hoàn lại khi tạo thanh khoản
- Hướng dẫn sổ lệnh - hiểu sâu hơn về cách đọc sổ lệnh trước khi bạn viết code tương tác với nó
- Bảng thuật ngữ - định nghĩa bằng tiếng Anh đơn giản của mọi thuật ngữ trong hướng dẫn này
Đọc được đề xuất
Bắt đầu ở đây nếu bạn mới làm quen, hoặc đi thẳng đến trang phù hợp với giai đoạn của bạn:
Sẵn sàng bắt đầu?
Mở tài khoản Polymarket và bắt đầu giao dịch
Câu hỏi thường gặp
-
Does Polymarket have a public API?Yes - three of them. CLOB (clob.polymarket.com) handles trading, Gamma (gamma-api.polymarket.com) serves market discovery and metadata, and Data (data-api.polymarket.com) provides historical analytics. Gamma and Data are unauthenticated. CLOB requires an API key derived from your Polygon proxy wallet.
-
What Python SDK should I use?Use the official py-clob-client, version 0.40 or newer. The April 28, 2026 pUSD / CLOB v2 upgrade changed the collateral address inside every order signature from USDC.e to pUSD, and only py-clob-client 0.40+ signs against pUSD correctly; older 0.3x releases fail with 'signature verification failed'. Install it with `pip install "py-clob-client>=0.40.0"`. Configure it with your private key, chain_id=137, signature_type=1 (POLY_PROXY), and your funder address (your Polymarket proxy wallet). It handles EIP-712 order signing and API credential derivation for you.
-
What are the Polymarket API rate limits?Order placement is capped at roughly 60 per minute per API key with a burst of about 10 per second. Cancellations get a higher ceiling (~120/min). Market data reads via CLOB are ~300/min. Gamma is more generous but still enforces 429s. Always implement exponential backoff with jitter when you hit a 429.
-
What is the condition_id vs token_id problem?Gamma API returns a market's condition_id, but CLOB trading endpoints need a token_id. Each market has one condition_id and two or more token_ids (one per outcome). The Gamma response includes a clobTokenIds field. Parse that JSON string array and use the matching token_id for each outcome. Mixing them up is the #1 new-developer bug.
-
Do I need a testnet to prototype?Polymarket does not run a public testnet. The standard workaround is paper trading with tiny real amounts. Place $1-$5 orders on low-liquidity markets to check your code, then scale up. Budget a few dollars for your first week of debugging. It is faster and cheaper than building a mock exchange.
-
How do I handle the WebSocket disconnecting?Expect disconnects every few hours. Build auto-reconnect with exponential backoff. On every reconnect, re-fetch the order book via REST before you resubscribe. Otherwise your local book will drift from the real one. Send a ping every 20 seconds and treat two missed pongs as a dead connection.
-
Can my bot earn liquidity rewards?Yes - this is where most API users earn. Polymarket hands out roughly $5M/month in general liquidity rewards, plus $5M+/month in sports-specific rewards. The formula favors orders near the midpoint, with real size and time-on-book. A simple two-sided quoter that reprices on every book update can earn solid rebates, even without directional alpha.
-
Is my private key safe if I use py-clob-client?Yes, as long as you handle the key correctly. py-clob-client signs orders locally with EIP-712 and only sends signed messages. Your key never leaves your machine. The real risks are environmental: committing the key to git, pasting it into chat, or running your bot on a compromised host. Use a dedicated trading wallet (separate from your main MetaMask), store the key in environment variables, and rotate it if in doubt.
-
How do I buy and sell on the Polymarket CLOB API?Build an OrderArgs with the outcome token_id, a price aligned to the market tick size, a size in shares, and side="BUY" or "SELL". Sign it with create_order() (EIP-712) and submit with post_order(order, OrderType.GTC). BUY needs USDC; SELL needs shares you already hold. There is no separate market order - send a FAK order at an aggressive price to take liquidity immediately.
-
What are the main Polymarket CLOB v2 REST endpoints?Base URL https://clob.polymarket.com. Public reads: GET /markets and /sampling-markets (tradeable books only), /book?token_id=, /price?token_id=&side=buy, /midpoint?token_id=, /spread?token_id=, /tick-size?token_id=, /prices-history. Authenticated: POST /order, DELETE /order, GET /orders, GET /balance-allowance. /book, /price and /midpoint return 404 for closed markets.
-
Why is my Polymarket order rejected as off-tick or invalid price?Every price must be an exact multiple of the market minimum_tick_size (usually 0.01, sometimes 0.001). Fetch it from /tick-size?token_id= and round your price to it before signing. Passing a condition_id where a token_id is expected, or an unaligned price, are the two most common rejection causes.
-
Is py-clob-client still the right tool in 2026?Yes, but pin 0.40 or newer. The 0.40 line is the minimum that signs orders against pUSD after the April 28, 2026 CLOB v2 collateral switch - 0.3x releases sign against the retired USDC.e address and fail. Pin it as `py-clob-client>=0.40,<0.50` so you get pUSD support without a surprise breaking change, and verify endpoints against the live API since some features may move to a future unified SDK.
Hướng dẫn khác
Người mới Công cụ phân tích Polymarket: Biểu đồ, cá voi và API
Phân tích Polymarket: lập biểu đồ, theo dõi cá voi, bảng xếp hạng, công cụ tính vị thế và công cụ API.
Người mới Từ điển Polymarket - Mọi thuật ngữ được giải thích (Ấn bản 2026)
Từ điển Polymarket toàn diện: hơn 120 thuật ngữ thị trường dự đoán được định nghĩa bằng tiếng Anh đơn giản.
Bậc thầy 10 chiến lược giao dịch Polymarket đã được chứng minh (Ấn bản 2026)
Mười chiến lược Polymarket mà các nhà giao dịch có lãi thực sự dùng trong năm 2026: lợi thế quy tắc, né phản…
Bậc thầy Chiến lược đa thị trường nâng cao cho Polymarket (2026)
Chiến lược Polymarket nâng cao cho năm 2026: chuỗi tương quan liên danh mục, phòng hộ danh mục, chênh lệch…
Bậc thầy Phần thưởng thanh khoản Polymarket: Cẩm nang đầy đủ cho người tạo thanh khoản (2026)
Hướng dẫn đầy đủ năm 2026 về phần thưởng thanh khoản Polymarket: quỹ hơn 5 triệu USD mỗi tháng, chiến lược…
Nâng cao Hướng dẫn sổ lệnh Polymarket - Cơ chế CLOB cho nhà giao dịch
Nắm vững Sổ lệnh Giới hạn Trung tâm của Polymarket: bid/ask, chênh lệch giá mua-bán, độ sâu, sổ lệnh bổ sung…